aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/canvas/evas_object_image.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/evas/src/lib/canvas/evas_object_image.c')
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_image.c40
1 files changed, 35 insertions, 5 deletions
diff --git a/libraries/evas/src/lib/canvas/evas_object_image.c b/libraries/evas/src/lib/canvas/evas_object_image.c
index d9f6378..4ebea08 100644
--- a/libraries/evas/src/lib/canvas/evas_object_image.c
+++ b/libraries/evas/src/lib/canvas/evas_object_image.c
@@ -2908,11 +2908,31 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
2908 { 2908 {
2909 Evas_Coord idw, idh, idx, idy; 2909 Evas_Coord idw, idh, idx, idy;
2910 int ix, iy, iw, ih; 2910 int ix, iy, iw, ih;
2911 int img_set = 0;
2911 2912
2912 if (o->dirty_pixels) 2913 if (o->dirty_pixels)
2913 { 2914 {
2914 if (o->func.get_pixels) 2915 if (o->func.get_pixels)
2915 { 2916 {
2917 // Set img object for direct rendering optimization
2918 // Check for image w/h against image geometry w/h
2919 // Check for image color r,g,b,a = {255,255,255,255}
2920 // Check and make sure that there are no maps.
2921 if ( (obj->cur.geometry.w == o->cur.image.w) &&
2922 (obj->cur.geometry.h == o->cur.image.h) &&
2923 (obj->cur.color.r == 255) &&
2924 (obj->cur.color.g == 255) &&
2925 (obj->cur.color.b == 255) &&
2926 (obj->cur.color.a == 255) &&
2927 (!obj->cur.map) )
2928 {
2929 if (obj->layer->evas->engine.func->gl_img_obj_set)
2930 {
2931 obj->layer->evas->engine.func->gl_img_obj_set(output, obj, o->cur.has_alpha);
2932 img_set = 1;
2933 }
2934 }
2935
2916 o->func.get_pixels(o->func.get_pixels_data, obj); 2936 o->func.get_pixels(o->func.get_pixels_data, obj);
2917 if (o->engine_data != pixels) 2937 if (o->engine_data != pixels)
2918 pixels = o->engine_data; 2938 pixels = o->engine_data;
@@ -3152,7 +3172,17 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
3152 idy = ydy; 3172 idy = ydy;
3153 if (dobreak_w) break; 3173 if (dobreak_w) break;
3154 } 3174 }
3155 } 3175 }
3176
3177 // Unset img object
3178 if (img_set)
3179 {
3180 if (obj->layer->evas->engine.func->gl_img_obj_set)
3181 {
3182 obj->layer->evas->engine.func->gl_img_obj_set(output, NULL, 0);
3183 img_set = 0;
3184 }
3185 }
3156 } 3186 }
3157} 3187}
3158 3188
@@ -3371,10 +3401,10 @@ evas_object_image_render_pre(Evas_Object *obj)
3371 y = idy; 3401 y = idy;
3372 h = ((int)(idy + idh)) - y; 3402 h = ((int)(idy + idh)) - y;
3373 3403
3374 r.x = ((rr->x - 1) * w) / o->cur.image.w; 3404 r.x = (rr->x * w) / o->cur.image.w;
3375 r.y = ((rr->y - 1) * h) / o->cur.image.h; 3405 r.y = (rr->y * h) / o->cur.image.h;
3376 r.w = ((rr->w + 2) * w) / o->cur.image.w; 3406 r.w = ((rr->w * w) + (o->cur.image.w * 2) - 1) / o->cur.image.w;
3377 r.h = ((rr->h + 2) * h) / o->cur.image.h; 3407 r.h = ((rr->h * h) + (o->cur.image.h * 2) - 1) / o->cur.image.h;
3378 r.x += obj->cur.geometry.x + x; 3408 r.x += obj->cur.geometry.x + x;
3379 r.y += obj->cur.geometry.y + y; 3409 r.y += obj->cur.geometry.y + y;
3380 RECTS_CLIP_TO_RECT(r.x, r.y, r.w, r.h, 3410 RECTS_CLIP_TO_RECT(r.x, r.y, r.w, r.h,