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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs