jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=62f0ea1d3415c161178d6b0e852777328f8bccd9

commit 62f0ea1d3415c161178d6b0e852777328f8bccd9
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Wed Feb 12 12:42:47 2014 +0900

    Evas filters: Improve displace flags in scripts
    
    These flags were a dumb integer instead of being a human
    readable string.
    
    They define how to handle cases were a pixel is read from
    out of boundaries.
---
 src/lib/evas/filters/evas_filter_parser.c | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/lib/evas/filters/evas_filter_parser.c 
b/src/lib/evas/filters/evas_filter_parser.c
index d9e3f7b..2954652 100644
--- a/src/lib/evas/filters/evas_filter_parser.c
+++ b/src/lib/evas/filters/evas_filter_parser.c
@@ -962,7 +962,7 @@ _displace_instruction_prepare(Evas_Filter_Instruction 
*instr)
    instr->pad.update = _displace_padding_update;
    _instruction_param_seq_add(instr, "map", VT_BUFFER, NULL);
    _instruction_param_seq_add(instr, "intensity", VT_INT, 10);
-   _instruction_param_seq_add(instr, "flags", VT_INT, 0x0); // FIXME
+   _instruction_param_seq_add(instr, "flags", VT_STRING, "default");
    _instruction_param_name_add(instr, "src", VT_BUFFER, "input");
    _instruction_param_name_add(instr, "dst", VT_BUFFER, "output");
    _instruction_param_name_add(instr, "fillmode", VT_STRING, "repeat");
@@ -1554,19 +1554,33 @@ static int
 _instr2cmd_displace(Evas_Filter_Context *ctx, Evas_Filter_Program *pgm,
                     Evas_Filter_Instruction *instr, void *dc)
 {
-   //Evas_Filter_Displacement_Flags flags = EVAS_FILTER_DISPLACE_RG;
    Evas_Filter_Fill_Mode fillmode;
-   const char *src, *dst, *map;
+   Evas_Filter_Displacement_Flags flags =
+         EVAS_FILTER_DISPLACE_STRETCH | EVAS_FILTER_DISPLACE_LINEAR;
+   const char *src, *dst, *map, *flagsstr;
    Buffer *in, *out, *mask;
-   int cmdid, intensity, flags;
+   int cmdid, intensity;
+   Eina_Bool isset = EINA_FALSE;
 
    src = _instruction_param_gets(instr, "src", NULL);
    dst = _instruction_param_gets(instr, "dst", NULL);
    map = _instruction_param_gets(instr, "map", NULL);
    intensity = _instruction_param_geti(instr, "intensity", NULL);
-   flags = _instruction_param_geti(instr, "flags", NULL);
+   flagsstr = _instruction_param_gets(instr, "flags", &isset);
    fillmode = _fill_mode_get(instr);
 
+   if (!flagsstr) flagsstr = "default";
+   if (!strcasecmp(flagsstr, "nearest"))
+     flags = EVAS_FILTER_DISPLACE_NEAREST;
+   else if (!strcasecmp(flagsstr, "smooth"))
+     flags = EVAS_FILTER_DISPLACE_LINEAR;
+   else if (!strcasecmp(flagsstr, "nearest_stretch"))
+     flags = EVAS_FILTER_DISPLACE_NEAREST | EVAS_FILTER_DISPLACE_STRETCH;
+   else if (!strcasecmp(flagsstr, "default") || !strcasecmp(flagsstr, 
"smooth_stretch"))
+     flags = EVAS_FILTER_DISPLACE_STRETCH | EVAS_FILTER_DISPLACE_LINEAR;
+   else if (isset)
+     WRN("Invalid flags '%s' in displace operation. Using default instead", 
flagsstr);
+
    in = _buffer_get(pgm, src);
    out = _buffer_get(pgm, dst);
    mask = _buffer_get(pgm, map);

-- 


Reply via email to