diff options
Diffstat (limited to 'src/lib/elementary/elm_transit.c')
-rw-r--r-- | src/lib/elementary/elm_transit.c | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/src/lib/elementary/elm_transit.c b/src/lib/elementary/elm_transit.c index 13f6d78f67..8ae0d87255 100644 --- a/src/lib/elementary/elm_transit.c +++ b/src/lib/elementary/elm_transit.c @@ -479,6 +479,9 @@ _recover_image_uv(Evas_Object *obj, Evas_Map *map, Eina_Bool revert, Eina_Bool b //Since the map is not proper for all types of objects, //Need to handle uvs only for image objects int iw, ih; + int x, y, w, h; + int fill_x, fill_y, fill_w, fill_h; + const char *type = evas_object_type_get(obj); if ((!type) || (strcmp(type, "image"))) return EINA_FALSE; if (evas_object_image_source_get(obj)) return EINA_FALSE; @@ -494,10 +497,34 @@ _recover_image_uv(Evas_Object *obj, Evas_Map *map, Eina_Bool revert, Eina_Bool b } else { - evas_map_point_image_uv_set(map, 0, 0, 0); - evas_map_point_image_uv_set(map, 1, iw, 0); - evas_map_point_image_uv_set(map, 2, iw, ih); - evas_map_point_image_uv_set(map, 3, 0, ih); + if (evas_object_image_filled_get(obj)) + { + x = 0; + y = 0; + w = iw; + h = ih; + } + //Zooming image fill area. + else + { + efl_gfx_fill_get(obj, &fill_x, &fill_y, &fill_w, &fill_h); + efl_gfx_geometry_get(obj, NULL, NULL, &w, &h); + + double rate_x = (double) w / (double) fill_w; + double rate_y = (double) h / (double) fill_h; + double rate_x2 = (double) iw / (double) fill_w; + double rate_y2 = (double) ih / (double) fill_h; + + x = -(int)((double) fill_x * rate_x2); + y = -(int)((double) fill_y * rate_y2); + w = (int)(((double) iw) * rate_x) + x; + h = (int)(((double) ih) * rate_y) + y; + } + + evas_map_point_image_uv_set(map, 0, x, y); + evas_map_point_image_uv_set(map, 1, w, y); + evas_map_point_image_uv_set(map, 2, w, h); + evas_map_point_image_uv_set(map, 3, x, h); } return EINA_TRUE; } |