{ "transparent", 0x00000000 }
};
+static struct
+{
+ const char *name;
+ Evas_Filter_Fill_Mode value;
+} fill_modes[] =
+{
+ { "none", EVAS_FILTER_FILL_MODE_NONE },
+ { "stretch_x", EVAS_FILTER_FILL_MODE_STRETCH_X },
+ { "stretch_y", EVAS_FILTER_FILL_MODE_STRETCH_Y },
+ { "repeat_x", EVAS_FILTER_FILL_MODE_REPEAT_X },
+ { "repeat_y", EVAS_FILTER_FILL_MODE_REPEAT_Y },
+ { "repeat_x_stretch_y", EVAS_FILTER_FILL_MODE_REPEAT_X_STRETCH_Y },
+ { "repeat_y_stretch_x", EVAS_FILTER_FILL_MODE_REPEAT_Y_STRETCH_X },
+ { "repeat", EVAS_FILTER_FILL_MODE_REPEAT_XY }, // alias
+ { "repeat_xy", EVAS_FILTER_FILL_MODE_REPEAT_XY },
+ { "stretch", EVAS_FILTER_FILL_MODE_STRETCH_XY }, // alias
+ { "stretch_xy", EVAS_FILTER_FILL_MODE_STRETCH_XY }
+};
+
typedef enum
{
VT_NONE,
_instruction_param_seq_add(instr, "ox", VT_INT, 0);
_instruction_param_seq_add(instr, "oy", VT_INT, 0);
_instruction_param_name_add(instr, "color", VT_COLOR, 0xFFFFFFFF);
+ _instruction_param_name_add(instr, "fill", VT_STRING, "none");
return EINA_TRUE;
}
_instruction_param_name_add(instr, "dst", VT_BUFFER, "output");
_instruction_param_name_add(instr, "black", VT_COLOR, 0xFF000000);
_instruction_param_name_add(instr, "white", VT_COLOR, 0xFFFFFFFF);
+ _instruction_param_name_add(instr, "fill", VT_STRING, "repeat");
return EINA_TRUE;
}
_instruction_param_seq_add(instr, "flags", VT_INT, 0x0); // FIXME
_instruction_param_name_add(instr, "src", VT_BUFFER, "input");
_instruction_param_name_add(instr, "dst", VT_BUFFER, "output");
+ _instruction_param_name_add(instr, "fill", VT_STRING, "repeat");
return EINA_TRUE;
}
_instruction_param_seq_add(instr, "src", VT_BUFFER, "input");
_instruction_param_seq_add(instr, "dst", VT_BUFFER, "output");
_instruction_param_name_add(instr, "color", VT_COLOR, 0xFFFFFFFF);
+ _instruction_param_name_add(instr, "fill", VT_STRING, "none");
return EINA_TRUE;
}
#define RESETCOLOR() do { ENFN->context_color_set(ENDT, dc, R, G, B, A); } while (0)
int A, R, G, B;
+static Evas_Filter_Fill_Mode
+_fill_mode_get(Evas_Filter_Instruction *instr)
+{
+ const char *fill;
+ unsigned k;
+
+ if (!instr) return EVAS_FILTER_FILL_MODE_NONE;
+ fill = _instruction_param_gets(instr, "fill", NULL);
+
+ for (k = 0; k < sizeof(fill_modes) / sizeof(fill_modes[0]); k++)
+ {
+ if (!strcasecmp(fill_modes[k].name, fill))
+ return fill_modes[k].value;
+ }
+
+ return EVAS_FILTER_FILL_MODE_NONE;
+}
+
static int
_instr2cmd_blend(Evas_Filter_Context *ctx, Evas_Filter_Program *pgm,
Evas_Filter_Instruction *instr, void *dc)
const char *src, *dst;
DATA32 color;
Buffer *in, *out;
+ Evas_Filter_Fill_Mode fillmode;
int cmdid, ox, oy;
src = _instruction_param_gets(instr, "src", NULL);
ox = _instruction_param_geti(instr, "ox", NULL);
oy = _instruction_param_geti(instr, "oy", NULL);
color = _instruction_param_getc(instr, "color", &isset);
+ fillmode = _fill_mode_get(instr);
in = _buffer_get(pgm, src);
out = _buffer_get(pgm, dst);
Evas_Filter_Instruction *instr, void *dc)
{
Evas_Filter_Bump_Flags flags = EVAS_FILTER_BUMP_NORMAL;
+ Evas_Filter_Fill_Mode fillmode;
const char *src, *dst, *map;
DATA32 color, black, white;
Buffer *in, *out, *bump;
depth = _instruction_param_getd(instr, "depth", NULL);
specular = _instruction_param_getd(instr, "specular", NULL);
compensate = _instruction_param_geti(instr, "compensate", NULL);
+ fillmode = _fill_mode_get(instr);
if (compensate) flags |= EVAS_FILTER_BUMP_COMPENSATE;
in = _buffer_get(pgm, src);
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;
Buffer *in, *out, *mask;
int cmdid, intensity, flags;
map = _instruction_param_gets(instr, "map", NULL);
intensity = _instruction_param_geti(instr, "intensity", NULL);
flags = _instruction_param_geti(instr, "flags", NULL);
+ fillmode = _fill_mode_get(instr);
in = _buffer_get(pgm, src);
out = _buffer_get(pgm, dst);
_instr2cmd_mask(Evas_Filter_Context *ctx, Evas_Filter_Program *pgm,
Evas_Filter_Instruction *instr, void *dc)
{
+ Evas_Filter_Fill_Mode fillmode;
const char *src, *dst, *msk;
Buffer *in, *out, *mask;
DATA32 color;
dst = _instruction_param_gets(instr, "dst", NULL);
msk = _instruction_param_gets(instr, "mask", NULL);
color = _instruction_param_getc(instr, "color", NULL);
+ fillmode = _fill_mode_get(instr);
in = _buffer_get(pgm, src);
out = _buffer_get(pgm, dst);
typedef enum _Evas_Filter_Channel Evas_Filter_Channel;
typedef enum _Evas_Filter_Displacement_Flags Evas_Filter_Displacement_Flags;
typedef enum _Evas_Filter_Bump_Flags Evas_Filter_Bump_Flags;
+typedef enum _Evas_Filter_Fill_Mode Evas_Filter_Fill_Mode;
typedef Eina_Bool (* Evas_Filter_Apply_Func) (Evas_Filter_Command *cmd);
typedef void (* Evas_Filter_Cb) (Evas_Filter_Context *ctx, void *data);
EVAS_FILTER_BUMP_COMPENSATE = 0x1 /**< Compensate for darkening (diffuse light) or brightening (specular light) of zero gradient surfaces */
};
+enum _Evas_Filter_Fill_Mode
+{
+ EVAS_FILTER_FILL_MODE_NONE = 0x0,
+ EVAS_FILTER_FILL_MODE_STRETCH_X = 0x1,
+ EVAS_FILTER_FILL_MODE_STRETCH_Y = 0x2,
+ EVAS_FILTER_FILL_MODE_REPEAT_X = 0x4,
+ EVAS_FILTER_FILL_MODE_REPEAT_Y = 0x8,
+ EVAS_FILTER_FILL_MODE_REPEAT_X_STRETCH_Y = EVAS_FILTER_FILL_MODE_REPEAT_X | EVAS_FILTER_FILL_MODE_STRETCH_Y,
+ EVAS_FILTER_FILL_MODE_REPEAT_Y_STRETCH_X = EVAS_FILTER_FILL_MODE_REPEAT_Y | EVAS_FILTER_FILL_MODE_STRETCH_X,
+ EVAS_FILTER_FILL_MODE_REPEAT_XY = EVAS_FILTER_FILL_MODE_REPEAT_X | EVAS_FILTER_FILL_MODE_REPEAT_Y,
+ EVAS_FILTER_FILL_MODE_STRETCH_XY = EVAS_FILTER_FILL_MODE_STRETCH_X | EVAS_FILTER_FILL_MODE_STRETCH_Y
+};
+
/* Parser stuff (high level API) */
Evas_Filter_Program *evas_filter_program_new(const char *name);
Eina_Bool evas_filter_program_parse(Evas_Filter_Program *pgm, const char *str);