jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=267b8a5ead1eab0a8262af421eeed5ad3db6ee2a

commit 267b8a5ead1eab0a8262af421eeed5ad3db6ee2a
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Wed Jan 7 20:21:16 2015 +0900

    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 e7ca8e5..bc24574 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)

-- 


Reply via email to