evas: make image_size_get() return the actual image size
authorMike Blumenkrantz <zmike@osg.samsung.com>
Thu, 28 May 2015 02:11:56 +0000 (22:11 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Thu, 28 May 2015 02:16:22 +0000 (22:16 -0400)
proxy/3d/etc images would previously return 0x0, breaking size calcs

@fix

@jpeg

src/lib/evas/canvas/evas_object_image.c

index b3d6fb6..b3e067c 100644 (file)
@@ -1158,12 +1158,47 @@ evas_object_image_size_get(const Evas_Image *obj, int *w, int *h)
 }
 
 EOLIAN static void
-_evas_image_efl_gfx_view_size_get(Eo *eo_obj EINA_UNUSED,
+_evas_image_efl_gfx_view_size_get(Eo *eo_obj,
                                   Evas_Image_Data *o,
                                   int *w, int *h)
 {
-   if (w) *w = o->cur->image.w;
-   if (h) *h = o->cur->image.h;
+   int uvw, uvh;
+   Evas_Object_Protected_Data *source = NULL;
+   Evas_Object_Protected_Data *obj;
+
+   obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
+   if (o->cur->source)
+     source = eo_data_scope_get(o->cur->source, EVAS_OBJECT_CLASS);
+
+   if (o->cur->scene)
+     {
+        uvw = obj->data_3d->w;
+        uvh = obj->data_3d->h;
+     }
+   else if (!o->cur->source)
+     {
+        uvw = o->cur->image.w;
+        uvh = o->cur->image.h;
+     }
+   else if (source->proxy->surface && !source->proxy->redraw)
+     {
+        uvw = source->proxy->w;
+        uvh = source->proxy->h;
+     }
+   else if (source->type == o_type &&
+            ((Evas_Image_Data *)eo_data_scope_get(o->cur->source, MY_CLASS))->engine_data)
+     {
+        uvw = source->cur->geometry.w;
+        uvh = source->cur->geometry.h;
+     }
+   else
+     {
+        uvw = source->proxy->w;
+        uvh = source->proxy->h;
+     }
+
+   if (w) *w = uvw;
+   if (h) *h = uvh;
 }
 
 EOLIAN static int