From 267b8a5ead1eab0a8262af421eeed5ad3db6ee2a Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Wed, 7 Jan 2015 20:21:16 +0900 Subject: [PATCH] Evas map: Fix AA with opaque images Well... actually this is not exactly a fix. It just restores the previous behaviour, and allows AA to work. As in, it won't draw ugly black lines but properly blend to transparent. But there is still a problem: The image map render function changes the alpha flag on the source image if AA is enabled or if the map has an alpha color. This is actually wrong as images forcefully set to not have any alpha (with evas_object_image_alpha_set(0)) will then not be opaque anymore. Right now I can't think of a solution (also I don't quite follow the entire pipeline in evas map...). Changing the flag will make some opaque areas transparent. Not changing the flag will produce ugly artifacts where AA blending should happen. Fix one bug and the other appears, and vice versa. This can be tested with the example evas-map-aa and adding an alpha channel to cube1.png (with gimp for instance) but manually setting alpha to 0 in the code. Weird stuff will happen (try playing with the map and pressing I to switch to/from image mode). --- src/lib/evas/common/evas_map_image_internal.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/evas/common/evas_map_image_internal.c b/src/lib/evas/common/evas_map_image_internal.c index e7ca8e5c32..bc2457481a 100644 --- a/src/lib/evas/common/evas_map_image_internal.c +++ b/src/lib/evas/common/evas_map_image_internal.c @@ -116,6 +116,7 @@ FUNC_NAME(RGBA_Image *src, RGBA_Image *dst, if (mul_col != 0xffffffff) func2 = evas_common_gfx_func_composite_pixel_color_span_get(sa, ssa, mul_col, da, cw, render_op); } + if (sa || anti_alias) src->cache_entry.flags.alpha = EINA_TRUE; } if (havecol == 0) { @@ -197,6 +198,7 @@ FUNC_NAME_DO(RGBA_Image *src, RGBA_Image *dst, if (mul_col != 0xffffffff) func2 = evas_common_gfx_func_composite_pixel_color_span_get(sa, ssa, dc->mul.col, da, cw, dc->render_op); } + if (sa || anti_alias) src->cache_entry.flags.alpha = EINA_TRUE; } if (havecol == 0)