diff --git a/ChangeLog b/ChangeLog index 2dc8a14f01..1cebaa0e3d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-06-19 Cedric Bail + + * Evas: optimized path for when map use the same color for all corner. + 2013-06-18 Cedric Bail * Evas: Use Eo array of callbacks to reduce edje memory foot print of Evas_Object_Box and Evas_Object_Table. diff --git a/NEWS b/NEWS index c8c27587f0..6386316ffd 100644 --- a/NEWS +++ b/NEWS @@ -190,6 +190,7 @@ Improvements: * Partial rendering support in evas for several gl drivers. * edje: use eo array of callbacks to reduce callbacks memory footprint. * evas: use eo array of callbacks to reduce callbacks memory footprint of Evas_Object_Box and Evas_Object_Table. + * evas: optimized path for when map use the same color for all corner. Fixes: * Fix a memory leak in ecore_con_dns when using ecore_con_server_connect diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index b13943e24f..4281112a4f 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -1474,16 +1474,20 @@ _draw_thread_map_draw(void *data) (m->pts[2 + offset].v == (int)(im->cache_entry.h << FP)) && (m->pts[3 + offset].u == 0) && (m->pts[3 + offset].v == (int)(im->cache_entry.h << FP)) && - (m->pts[0 + offset].col == 0xffffffff) && - (m->pts[1 + offset].col == 0xffffffff) && - (m->pts[2 + offset].col == 0xffffffff) && - (m->pts[3 + offset].col == 0xffffffff)) + (m->pts[0].col == m->pts[1].col) && + (m->pts[1].col == m->pts[2].col) && + (m->pts[2].col == m->pts[3].col)) { + DATA32 col; + dx = m->pts[0 + offset].x >> FP; dy = m->pts[0 + offset].y >> FP; dw = (m->pts[2 + offset].x >> FP) - dx; dh = (m->pts[2 + offset].y >> FP) - dy; + col = map->image_ctx.col.col; + map->image_ctx.col.col = MUL4_SYM(col, m->pts[0].col); + if (map->smooth) evas_common_scale_rgba_in_to_out_clip_cb (im, map->surface, &map->image_ctx, @@ -1494,6 +1498,8 @@ _draw_thread_map_draw(void *data) (im, map->surface, &map->image_ctx, 0, 0, im->cache_entry.w, im->cache_entry.h, dx, dy, dw, dh, _map_image_sample_draw); + + map->image_ctx.col.col = col; } else { @@ -1587,13 +1593,18 @@ evas_software_image_map_draw(void *data, void *context, RGBA_Image *surface, RGB (m->pts[2 + offset].v == (int)(im->cache_entry.h << FP)) && (m->pts[3 + offset].u == 0) && (m->pts[3 + offset].v == (int)(im->cache_entry.h << FP)) && - (m->pts[0 + offset].col == 0xffffffff) && - (m->pts[1 + offset].col == 0xffffffff) && - (m->pts[2 + offset].col == 0xffffffff) && - (m->pts[3 + offset].col == 0xffffffff)) + (m->pts[0 + offset].col == m->pts[1 + offset].col) && + (m->pts[1 + offset].col == m->pts[2 + offset].col) && + (m->pts[2 + offset].col == m->pts[3 + offset].col)) { + DATA32 col; + int a, r, g, b; int dx, dy, dw, dh; + eng_context_color_get(data, context, &r, &g, &b, &a); + col = MUL4_256(a, r, g, b, m->pts[0 + offset].col); + eng_context_color_set(data, context, R_VAL(col), G_VAL(col), B_VAL(col), A_VAL(col)); + dx = m->pts[0 + offset].x >> FP; dy = m->pts[0 + offset].y >> FP; dw = (m->pts[2 + offset].x >> FP) - dx; @@ -1603,6 +1614,8 @@ evas_software_image_map_draw(void *data, void *context, RGBA_Image *surface, RGB 0, 0, im->cache_entry.w, im->cache_entry.h, dx, dy, dw, dh, smooth, EINA_FALSE); + + eng_context_color_set(data, context, r, g, b, a); } else {