jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=96d5944235f5838f98702141ce7c1502dcf2c3c7

commit 96d5944235f5838f98702141ce7c1502dcf2c3c7
Author: Jean-Philippe Andre <[email protected]>
Date:   Mon Feb 10 16:26:29 2014 +0900

    Evas filters: Fix comments and fail more often in blend
    
    Some features are not supported (mainly because alpha scaling
    has not been implemented yet) in the blend API. So, instead of
    rendering the wrong effect, fail with an error message.
    
    Also rename col into color for code clarity (we have cols for columns).
---
 src/lib/evas/filters/evas_filter_blend.c | 42 ++++++++++++--------------------
 1 file changed, 16 insertions(+), 26 deletions(-)

diff --git a/src/lib/evas/filters/evas_filter_blend.c 
b/src/lib/evas/filters/evas_filter_blend.c
index 09b0d1f..d553671 100644
--- a/src/lib/evas/filters/evas_filter_blend.c
+++ b/src/lib/evas/filters/evas_filter_blend.c
@@ -37,15 +37,13 @@ _filter_blend_cpu_alpha(Evas_Filter_Command *cmd)
     * yet, because we don't have any scaling functions for alpha buffers.
     * Also, I'm not going to implement it by converting to RGBA either.
     */
-   if (cmd->draw.fillmode & EVAS_FILTER_FILL_MODE_STRETCH_XY)
-     {
-        CRI("Alpha to alpha blending does not support stretch");
-        return EINA_FALSE;
-     }
 
    // TODO: Call _mapped_blend_cpu to implement repeat fill mode.
    if (cmd->draw.fillmode != EVAS_FILTER_FILL_MODE_NONE)
-     ERR("Fill modes are not implemented for Alpha --> RGBA");
+     {
+        ERR("Fill modes are not implemented for Alpha --> Alpha blending");
+        return EINA_FALSE;
+     }
 
    func = evas_common_alpha_func_get(cmd->draw.render_op);
    if (!func)
@@ -69,7 +67,6 @@ _filter_blend_cpu_alpha(Evas_Filter_Command *cmd)
      }
 
    _clip_to_target(&sx, &sy, sw, sh, ox, oy, dw, dh, &dx, &dy, &rows, &cols);
-   // FIXME/TODO: Clip to context clip
 
    if (cols <= 0 || rows <= 0)
      return EINA_TRUE;
@@ -315,14 +312,18 @@ _filter_blend_cpu_mask_rgba(Evas_Filter_Command *cmd)
 {
    RGBA_Image *in, *out;
    RGBA_Gfx_Func func;
-   DATA32 col;
+   DATA32 color;
    DATA32 *dstdata;
    DATA8 *maskdata;
    int sw, sh, dw, dh, ox, oy, sx = 0, sy = 0, dx = 0, dy = 0, rows, cols, y;
 
    // TODO: Call _mapped_blend_cpu to implement repeat fill mode.
+   // Also, alpha scaling is not implemented yet.
    if (cmd->draw.fillmode != EVAS_FILTER_FILL_MODE_NONE)
-     ERR("Fill modes are not implemented for Alpha --> RGBA");
+     {
+        ERR("Fill modes are not implemented for Alpha --> RGBA blending");
+        return EINA_FALSE;
+     }
 
    in = cmd->input->backing;
    out = cmd->output->backing;
@@ -334,35 +335,24 @@ _filter_blend_cpu_mask_rgba(Evas_Filter_Command *cmd)
    oy = cmd->draw.oy;
    dstdata = out->image.data;
    maskdata = in->mask.data;
-   col = ARGB_JOIN(cmd->draw.A, cmd->draw.R, cmd->draw.G, cmd->draw.B);
-
-   // TODO: Fix this crash. Change proxy image and OUTPUT data is NULL. Why?
+   color = ARGB_JOIN(cmd->draw.A, cmd->draw.R, cmd->draw.G, cmd->draw.B);
 
-   if (!dstdata)
-     {
-        ERR("Empty destination from buffer #%d %dx%d %p", cmd->output->id, dw, 
dh, out);
-        //abort();
-        return EINA_FALSE;
-     }
-   if (!maskdata)
-     abort();
-   //EINA_SAFETY_ON_NULL_RETURN_VAL(dstdata, EINA_FALSE);
-   //EINA_SAFETY_ON_NULL_RETURN_VAL(maskdata, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(dstdata, EINA_FALSE);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(maskdata, EINA_FALSE);
 
    func = evas_common_gfx_func_composite_mask_color_span_get
-     (col, out, 1, cmd->draw.render_op);
+     (color, out, 1, cmd->draw.render_op);
 
    if (!func)
      return EINA_FALSE;
 
    if (!ox && !oy && (dw == sw) && (dh == sh))
      {
-        func(NULL, maskdata, col, dstdata, sw * sh);
+        func(NULL, maskdata, color, dstdata, sw * sh);
         return EINA_TRUE;
      }
 
    _clip_to_target(&sx, &sy, sw, sh, ox, oy, dw, dh, &dx, &dy, &rows, &cols);
-   // FIXME/TODO: Clip to context clip
 
    if (cols <= 0 || rows <= 0)
      return EINA_TRUE;
@@ -371,7 +361,7 @@ _filter_blend_cpu_mask_rgba(Evas_Filter_Command *cmd)
    dstdata += dy * dw;
    for (y = rows; y; y--)
      {
-        func(NULL, maskdata + sx, col, dstdata + dx, cols);
+        func(NULL, maskdata + sx, color, dstdata + dx, cols);
         maskdata += sw;
         dstdata += dw;
      }

-- 


Reply via email to