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).
This commit is contained in:
Jean-Philippe Andre 2015-01-07 20:21:16 +09:00
parent 61d76136de
commit 267b8a5ead
1 changed files with 2 additions and 0 deletions

View File

@ -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)