Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/etk/src/lib Modified Files: etk_image.c etk_image.h Log Message: [Etk_Image] add etk_image_new_from_evas_object / set_from_evas_object. =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_image.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- etk_image.c 6 Oct 2006 17:04:14 -0000 1.25 +++ etk_image.c 25 Dec 2006 14:04:53 -0000 1.26 @@ -19,6 +19,7 @@ ETK_IMAGE_FILE_PROPERTY, ETK_IMAGE_EDJE_FILE_PROPERTY, ETK_IMAGE_EDJE_GROUP_PROPERTY, + ETK_IMAGE_EVAS_OBJECT_PROPERTY, ETK_IMAGE_KEEP_ASPECT_PROPERTY, ETK_IMAGE_USE_EDJE_PROPERTY, ETK_IMAGE_STOCK_ID_PROPERTY, @@ -61,6 +62,8 @@ ETK_PROPERTY_STRING, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_string(NULL)); etk_type_property_add(image_type, "edje_group", ETK_IMAGE_EDJE_GROUP_PROPERTY, ETK_PROPERTY_STRING, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_string(NULL)); + etk_type_property_add(image_type, "evas_object", ETK_IMAGE_EVAS_OBJECT_PROPERTY, + ETK_PROPERTY_POINTER, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_pointer(NULL)); etk_type_property_add(image_type, "keep_aspect", ETK_IMAGE_KEEP_ASPECT_PROPERTY, ETK_PROPERTY_BOOL, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_bool(ETK_TRUE)); etk_type_property_add(image_type, "use_edje", ETK_IMAGE_USE_EDJE_PROPERTY, @@ -108,6 +111,16 @@ } /** + * @brief Creates a new image from the given evas object + * @param evas_object the evas object to use for the image + * @return Returns the new image widget + */ +Etk_Widget *etk_image_new_from_evas_object(Evas_Object *evas_object) +{ + return etk_widget_new(ETK_IMAGE_TYPE, "evas_object", evas_object, NULL); +} + +/** * @brief Creates a new image and loads the image corresponding to the stock id * @param stock_id the stock id corresponding to the image * @param stock_size the size of the image to load @@ -248,6 +261,78 @@ } /** + * @brief Loads the image from an evas object + * @param image an image + * @param evas_object the evas object to use + */ +void etk_image_set_from_evas_object(Etk_Image *image, Evas_Object *evas_object) +{ + Etk_Widget *widget; + + if (!(widget = ETK_WIDGET(image)) || !evas_object) + return; + + if (image->image_object != evas_object) + { + if (image->image_object && (image->filename || image->use_edje)) + evas_object_del(image->image_object); + image->image_object = evas_object; + etk_object_notify(ETK_OBJECT(image), "evas_object"); + } + + if (image->edje_group) + { + free(image->edje_group); + image->edje_group = NULL; + etk_object_notify(ETK_OBJECT(image), "edje_group"); + } + if (image->edje_filename) + { + free(image->edje_filename); + image->edje_filename = NULL; + etk_object_notify(ETK_OBJECT(image), "edje_file"); + } + if (image->use_edje) + { + image->use_edje = ETK_FALSE; + image->object_type_changed = ETK_TRUE; + etk_object_notify(ETK_OBJECT(image), "use_edje"); + } + if (image->filename) + { + free(image->filename); + image->filename = NULL; + etk_object_notify(ETK_OBJECT(image), "image_file"); + } + + if (!image->use_object) + { + image->use_object = ETK_TRUE; + image->object_type_changed = ETK_TRUE; + etk_object_notify(ETK_OBJECT(image), "use_object"); + } + if (image->stock_id != ETK_STOCK_NO_STOCK) + { + image->stock_id = ETK_STOCK_NO_STOCK; + etk_object_notify(ETK_OBJECT(image), "stock_id"); + } + + _etk_image_load(image); +} + +/** + * @brief Gets the evas object of the image + * @param image an image + * @return Returns the evas object of the image + */ +Evas_Object *etk_image_evas_object_get(Etk_Image *image) +{ + if (!image) + return NULL; + return image->image_object; +} + +/** * @brief Loads the image corresponding to the stock id * @param image an image * @param stock_id the stock id corresponding to the image @@ -303,10 +388,12 @@ } else { - if (!image->use_edje) - evas_object_image_size_get(image->image_object, width, height); + if (image->use_object) + evas_object_geometry_get(image->image_object, NULL, NULL, width, height); + else if (image->use_edje) + edje_object_size_min_get(image->image_object, width, height); else - edje_object_size_min_get(image->image_object, width, height); + evas_object_image_size_get(image->image_object, width, height); } } @@ -386,6 +473,7 @@ image->stock_size = ETK_STOCK_SMALL; image->keep_aspect = ETK_TRUE; image->use_edje = ETK_FALSE; + image->use_object = ETK_FALSE; image->object_type_changed = ETK_FALSE; widget->size_request = _etk_image_size_request; @@ -425,6 +513,9 @@ case ETK_IMAGE_EDJE_GROUP_PROPERTY: etk_image_set_from_edje(image, image->edje_filename, etk_property_value_string_get(value)); break; + case ETK_IMAGE_EVAS_OBJECT_PROPERTY: + etk_image_set_from_evas_object(image, etk_property_value_pointer_get(value)); + break; case ETK_IMAGE_KEEP_ASPECT_PROPERTY: etk_image_keep_aspect_set(image, etk_property_value_bool_get(value)); break; @@ -458,6 +549,9 @@ case ETK_IMAGE_EDJE_GROUP_PROPERTY: etk_property_value_string_set(value, image->edje_group); break; + case ETK_IMAGE_EVAS_OBJECT_PROPERTY: + etk_property_value_pointer_set(value, image->image_object); + break; case ETK_IMAGE_KEEP_ASPECT_PROPERTY: etk_property_value_bool_set(value, image->keep_aspect); break; @@ -485,7 +579,9 @@ if (image->image_object) { - if (image->use_edje) + if (image->use_object) + evas_object_geometry_get(image->image_object, NULL, NULL, &size->w, &size->h); + else if (image->use_edje) { Evas_Coord min_x, min_y, calc_x, calc_y; @@ -521,7 +617,9 @@ int image_w, image_h; int new_size; - if (image->use_edje) + if (image->use_object) + evas_object_geometry_get(image->image_object, NULL, NULL, &image_w, &image_h); + else if (image->use_edje) edje_object_size_min_get(image->image_object, &image_w, &image_h); else evas_object_image_size_get(image->image_object, &image_w, &image_h); @@ -546,7 +644,7 @@ } } - if (!image->use_edje) + if (!image->use_edje && !image->use_object) evas_object_image_fill_set(image->image_object, 0, 0, geometry.w, geometry.h); evas_object_move(image->image_object, geometry.x, geometry.y); @@ -595,9 +693,12 @@ if (image->image_object && image->object_type_changed) { - etk_widget_member_object_del(widget, image->image_object); - evas_object_del(image->image_object); - image->image_object = NULL; + if (!image->use_object) + { + etk_widget_member_object_del(widget, image->image_object); + evas_object_del(image->image_object); + image->image_object = NULL; + } image->object_type_changed = ETK_FALSE; } if (image->filename) @@ -655,7 +756,12 @@ else evas_object_show(image->image_object); } - } + } + } + else if (image->image_object && image->use_object) + { + etk_widget_member_object_add(widget, image->image_object); + evas_object_show(image->image_object); } etk_widget_size_recalc_queue(widget); =================================================================== RCS file: /cvs/e/e17/proto/etk/src/lib/etk_image.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- etk_image.h 6 Oct 2006 17:04:14 -0000 1.10 +++ etk_image.h 25 Dec 2006 14:04:53 -0000 1.11 @@ -43,6 +43,7 @@ Etk_Bool keep_aspect; Etk_Bool use_edje; + Etk_Bool use_object; Etk_Bool object_type_changed; }; @@ -50,6 +51,7 @@ Etk_Widget *etk_image_new(); Etk_Widget *etk_image_new_from_file(const char *filename); Etk_Widget *etk_image_new_from_edje(const char *edje_filename, const char *edje_group); +Etk_Widget *etk_image_new_from_evas_object(Evas_Object *evas_object); Etk_Widget *etk_image_new_from_stock(Etk_Stock_Id stock_id, Etk_Stock_Size stock_size); void etk_image_set_from_file(Etk_Image *image, const char *filename); @@ -57,6 +59,9 @@ void etk_image_set_from_edje(Etk_Image *image, const char *edje_filename, const char *edje_group); void etk_image_edje_get(Etk_Image *image, char **edje_filename, char **edje_group); + +void etk_image_set_from_evas_object(Etk_Image *image, Evas_Object *evas_object); +Evas_Object *etk_image_evas_object_get(Etk_Image *image); void etk_image_set_from_stock(Etk_Image *image, Etk_Stock_Id stock_id, Etk_Stock_Size stock_size); void etk_image_stock_get(Etk_Image *image, Etk_Stock_Id *stock_id, Etk_Stock_Size *stock_size); ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs