evas_object_color_set(o, 255, 255, 255, 255);
evas_object_show(o);
- eo_do(o, efl_gfx_filter_program_set(filter));
+ eo_do(o, efl_gfx_filter_program_set(filter, wpd.file));
ecore_evas_manual_render(wpd.ee);
evas_object_geometry_get(o, NULL, NULL, &w, &h);
}
static inline const char *
-_edje_filter_get(Edje *ed, Edje_Part_Description_Spec_Filter *filter)
+_edje_filter_get(Edje *ed, Edje_Real_Part *ep, Edje_Part_Description_Spec_Filter *filter)
{
if (!filter->code) return NULL;
if (EINA_UNLIKELY(!filter->checked_data))
st = eina_hash_find(ed->file->data, filter->code);
if (st)
{
- eina_stringshare_del(filter->code);
+ filter->name = filter->code;
filter->code = st->str;
filter->no_free = 1;
}
+ else
+ filter->name = eina_stringshare_add(ep->part->name);
}
return filter->code;
}
}
/* common code below */
- code = _edje_filter_get(ed, filter);
+ code = _edje_filter_get(ed, ep, filter);
if (!code)
{
- eo_do(obj, efl_gfx_filter_program_set(NULL));
+ eo_do(obj, efl_gfx_filter_program_set(NULL, NULL));
return;
}
eo_do(obj,
- efl_gfx_filter_program_set(code);
+ efl_gfx_filter_program_set(code, filter->name);
if (prev_sources != filter_sources)
{
/* remove sources that are not there anymore
eina_stringshare_del(rp->typedata.text->cache.out_str);
if (!rp->typedata.text->filter.no_free)
eina_stringshare_del(rp->typedata.text->filter.code);
+ eina_stringshare_del(rp->typedata.text->filter.name);
free(rp->typedata.text);
}
else if ((rp->type == EDJE_RP_TYPE_SWALLOW) &&
eina_stringshare_del(text->text.font.str);
if (!text->text.filter.no_free)
eina_stringshare_del(text->text.filter.code);
+ eina_stringshare_del(text->text.filter.name);
}
break;
}
struct _Edje_Part_Description_Spec_Filter
{
const char *code;
+ const char *name;
Eina_List *sources; /* "part" or "buffer:part" */
Eina_Bool checked_data : 1; // checked whether this is a data item or embedded string
Eina_Bool no_free : 1;
}
values {
code: const(char)*; [[filter program source code]]
+ name: const(char)*(0); [[filter name (optional)]]
}
}
@property state {
if (!fcow->chain)
{
Evas_Filter_Program *pgm;
- pgm = evas_filter_program_new(obj->name ? obj->name : obj->type, alpha);
+ pgm = evas_filter_program_new(fcow->name, alpha);
evas_filter_program_source_set_all(pgm, fcow->sources);
evas_filter_program_state_set(pgm, eo_obj, obj,
fcow->state.cur.name, fcow->state.cur.value,
EOLIAN void
_evas_filter_efl_gfx_filter_program_set(Eo *eo_obj, Evas_Filter_Data *pd,
- const char *code)
+ const char *code, const char *name)
{
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS);
Evas_Filter_Program *pgm = NULL;
Eina_Bool alpha;
if (!pd) return;
- if (pd->data->code == code) return;
- if (pd->data->code && code && !strcmp(code, pd->data->code)) return;
+ if ((pd->data->code == code) && (!name || (pd->data->name == name))) return;
+ if (pd->data->code && code && !strcmp(code, pd->data->code) &&
+ pd->data->name && name && !strcmp(name, pd->data->name)) return;
evas_object_async_block(obj);
EINA_COW_WRITE_BEGIN(evas_object_filter_cow, pd->data, Evas_Object_Filter_Data, fcow)
{
// Parse filter program
evas_filter_program_del(fcow->chain);
+ eina_stringshare_replace(&fcow->name, name);
if (code)
{
alpha = eo_do_ret(eo_obj, alpha, evas_filter_input_alpha());
- pgm = evas_filter_program_new("Evas.Filter", alpha);
+ pgm = evas_filter_program_new(fcow->name, alpha);
evas_filter_program_source_set_all(pgm, fcow->sources);
evas_filter_program_state_set(pgm, eo_obj, obj,
fcow->state.cur.name, fcow->state.cur.value,
evas_object_inform_call_resize(eo_obj);
}
-EOLIAN const char *
-_evas_filter_efl_gfx_filter_program_get(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd)
+EOLIAN void
+_evas_filter_efl_gfx_filter_program_get(Eo *eo_obj EINA_UNUSED, Evas_Filter_Data *pd, const char **code, const char **name)
{
- return pd->data->code;
+ if (code) *code = pd->data->code;
+ if (name) *name = pd->data->name;
}
EOLIAN void
}
EOLIAN void
-_evas_image_efl_gfx_filter_program_set(Eo *obj, Evas_Image_Data *pd EINA_UNUSED, const char *code)
+_evas_image_efl_gfx_filter_program_set(Eo *obj, Evas_Image_Data *pd EINA_UNUSED, const char *code, const char *name)
{
pd->has_filter = (code != NULL);
- eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_set(code));
+ eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_set(code, name));
}
-EOLIAN const char *
-_evas_image_efl_gfx_filter_program_get(Eo *obj, Evas_Image_Data *pd EINA_UNUSED)
+EOLIAN void
+_evas_image_efl_gfx_filter_program_get(Eo *obj, Evas_Image_Data *pd EINA_UNUSED, const char **code, const char **name)
{
- const char *code;
- return eo_do_super_ret(obj, MY_CLASS, code, efl_gfx_filter_program_get());
+ eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_get(code, name));
}
EOLIAN void
1.0, 0, EVAS_RENDER_BLEND, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE, EINA_FALSE
};
static const Evas_Object_Filter_Data default_filter = {
- NULL, NULL, NULL, NULL, { { "default", 0.0 }, { "default", 0.0 }, 0.0 }, EINA_FALSE, EINA_FALSE
+ NULL, NULL, NULL, NULL, NULL, { { "default", 0.0 }, { "default", 0.0 }, 0.0 }, EINA_FALSE, EINA_FALSE
};
const void * const evas_object_filter_cow_default = &default_filter;
static const Evas_Object_Mask_Data default_mask = {
}
EOLIAN void
-_evas_text_efl_gfx_filter_program_set(Eo *obj, Evas_Text_Data *pd EINA_UNUSED, const char *code)
+_evas_text_efl_gfx_filter_program_set(Eo *obj, Evas_Text_Data *pd EINA_UNUSED, const char *code, const char *name)
{
pd->has_filter = (code != NULL);
- eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_set(code));
+ eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_set(code, name));
}
-EOLIAN const char *
-_evas_text_efl_gfx_filter_program_get(Eo *obj, Evas_Text_Data *pd EINA_UNUSED)
+EOLIAN void
+_evas_text_efl_gfx_filter_program_get(Eo *obj, Evas_Text_Data *pd EINA_UNUSED, const char **code, const char **name)
{
- const char *code;
- return eo_do_super_ret(obj, MY_CLASS, code, efl_gfx_filter_program_get());
+ eo_do_super(obj, MY_CLASS, efl_gfx_filter_program_get(code, name));
}
EOLIAN void
struct _Evas_Object_Filter_Data
{
+ Eina_Stringshare *name;
Eina_Stringshare *code;
Evas_Filter_Program *chain;
Eina_Hash *sources; // Evas_Filter_Proxy_Binding
// Don't test proxy cases here.
if (tc->source) continue;
- eo_do(to, efl_gfx_filter_program_set(tc->code));
+ eo_do(to, efl_gfx_filter_program_set(tc->code, "evas_test_filter"));
evas_object_text_style_pad_get(to, &l, &r, &t, &b);
evas_object_geometry_get(to, NULL, NULL, &W, &H);
//fprintf(stderr, "Case %d: %dx%d for padding %d,%d,%d,%d\n", k, W, H, l, r, t, b);
eo_do(to,
efl_gfx_color_set(255, 255, 255, 255),
efl_gfx_filter_source_set(tc->source, o),
- efl_gfx_filter_program_set(tc->code));
+ efl_gfx_filter_program_set(tc->code, , "evas_test_filter"));
}
else
{
eo_do(to,
efl_gfx_color_set(255, 255, 255, 255),
- efl_gfx_filter_program_set(tc->code));
+ efl_gfx_filter_program_set(tc->code, , "evas_test_filter"));
}
evas_object_geometry_get(to, NULL, NULL, &w, &h);