cspace = obj->layer->evas->engine.func->image_colorspace_get(obj->layer->evas->engine.data.output,
o->engine_data);
- if (cspace != o->cur->cspace)
+ if (!o->cur->filter || (cspace != o->cur->cspace))
{
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
state_write->cspace = cspace;
+ if (!state_write->filter)
+ state_write->filter = eina_cow_alloc(evas_object_filter_cow);
EINA_COW_IMAGE_STATE_WRITE_END(o, state_write);
}
}
if (!redraw && o->cur->filter->output)
{
- if (o->cur->filter->sources && o->cur->filter->sources_count > 0)
+ if (eina_hash_population(o->cur->filter->sources) > 0)
{
Evas_Filter_Proxy_Binding *pb;
Evas_Object_Protected_Data *prxsource;
evas_object_render_pre_prev_cur_add(&e->clip_changes, eo_obj, obj);
if (!o->pixels->pixel_updates) goto done;
}
- if (o->cur->filter && o->cur->filter->changed)
+ if (o->cur->filter->changed)
{
evas_object_render_pre_prev_cur_add(&e->clip_changes, eo_obj, obj);
if (!o->pixels->pixel_updates) goto done;
Evas_Filter_Program *pgm = NULL;
if (!o) return;
- if (o->cur->filter)
- {
- if (o->cur->filter->code == arg) return;
- if (o->cur->filter->code && arg && !strcmp(arg, o->cur->filter->code)) return;
- }
+ if (o->cur->filter->code == arg) return;
+ if (o->cur->filter->code && arg && !strcmp(arg, o->cur->filter->code)) return;
EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
EINA_COW_IMAGE_FILTER_WRITE_BEGIN(state_write, fcow)
if (o && proxy)
{
- EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, state_write)
- EINA_COW_IMAGE_FILTER_WRITE_BEGIN(state_write, fcow)
- fcow->sources_count--;
- EINA_COW_IMAGE_FILTER_WRITE_END(state_write, fcow)
- EINA_COW_IMAGE_STATE_WRITE_END(o, state_write)
-
- if (!o->cur->filter->sources_count)
+ if (!eina_hash_population(o->cur->filter->sources))
{
EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, proxy->proxy,
Evas_Object_Proxy_Data, proxy_write)
Evas_Text_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
/* free filter output */
- if (o->cur.filter)
- {
- EINA_COW_WRITE_BEGIN(evas_object_filter_cow, o->cur.filter, Evas_Object_Filter_Data, fcow)
- {
- if (fcow->output)
- ENFN->image_free(ENDT, fcow->output);
- eina_hash_free(fcow->sources);
- evas_filter_program_del(fcow->chain);
- eina_stringshare_del(fcow->code);
- fcow->output = NULL;
- fcow->chain = NULL;
- fcow->sources = NULL;
- fcow->code = NULL;
- fcow->sources_count = 0;
- }
- EINA_COW_WRITE_END(evas_object_filter_cow, o->cur.filter, fcow);
- }
+ EINA_COW_WRITE_BEGIN(evas_object_filter_cow, o->cur.filter, Evas_Object_Filter_Data, fcow)
+ if (fcow->output)
+ ENFN->image_free(ENDT, fcow->output);
+ eina_hash_free(fcow->sources);
+ evas_filter_program_del(fcow->chain);
+ eina_stringshare_del(fcow->code);
+ fcow->output = NULL;
+ fcow->chain = NULL;
+ fcow->sources = NULL;
+ fcow->code = NULL;
+ EINA_COW_WRITE_END(evas_object_filter_cow, o->cur.filter, fcow);
/* free obj */
_evas_object_text_items_clear(o);
int shad_dst = 0, shad_sz = 0, dx = 0, dy = 0, haveshad = 0;
/* render object to surface with context, and offxet by x,y */
- if (!o->cur.filter || !o->cur.filter->chain)
+ if (!o->cur.filter->chain)
evas_text_style_pad_get(o->cur.style, &sl, NULL, &st, NULL);
else
evas_filter_program_padding_get(o->cur.filter->chain, &sl, NULL, &st, NULL);
* remotely similar to its final form. You've been warned :)
*/
- if (o->cur.filter &&
- (!o->cur.filter->invalid && (o->cur.filter->chain || o->cur.filter->code)))
+ if (!o->cur.filter->invalid && (o->cur.filter->chain || o->cur.filter->code))
{
int X, Y, W, H;
Evas_Filter_Context *filter;
w = _evas_object_text_horiz_advance_without_ellipsis_get(o);
h = _evas_object_text_vert_advance_get(eo_obj, o);
- if (!o->cur.filter || !o->cur.filter->chain)
+ if (!o->cur.filter->chain)
evas_text_style_pad_get(o->cur.style, &l, &r, &t, &b);
else
evas_filter_program_padding_get(o->cur.filter->chain, &l, &r, &t, &b);
{
int t = 0, b = 0, l = 0, r = 0;
- if (!o->cur.filter || !o->cur.filter->chain)
+ if (!o->cur.filter->chain)
evas_text_style_pad_get(o->cur.style, &l, &r, &t, &b);
else
evas_filter_program_padding_get(o->cur.filter->chain, &l, &r, &t, &b);
Evas_Filter_Program *pgm = NULL;
if (!o) return;
- if (o->cur.filter)
- {
- if (o->cur.filter->code == arg) return;
- if (o->cur.filter->code && arg && !strcmp(arg, o->cur.filter->code)) return;
- }
+ if (o->cur.filter->code == arg) return;
+ if (o->cur.filter->code && arg && !strcmp(arg, o->cur.filter->code)) return;
EINA_COW_WRITE_BEGIN(evas_object_filter_cow, o->cur.filter, Evas_Object_Filter_Data, fcow)
{
if (o && proxy)
{
- EINA_COW_WRITE_BEGIN(evas_object_filter_cow, o->cur.filter, Evas_Object_Filter_Data, fcow)
- fcow->sources_count--;
- EINA_COW_WRITE_END(evas_object_filter_cow, o->cur.filter, fcow);
-
- if (!o->cur.filter->sources_count)
+ if (!eina_hash_population(o->cur.filter->sources))
{
EINA_COW_WRITE_BEGIN(evas_object_proxy_cow, proxy->proxy,
Evas_Object_Proxy_Data, proxy_write)
if (!name)
{
- if (!eo_source || !o->cur.filter || !o->cur.filter->sources) return;
+ if (!eo_source || !o->cur.filter->sources) return;
if (eina_hash_del_by_data(o->cur.filter->sources, eo_source))
goto update;
return;
}
- if (!source && (!o->cur.filter || !o->cur.filter->sources))
+ if (!source && !o->cur.filter->sources)
return;
fcow = eina_cow_write(evas_object_filter_cow, (const Eina_Cow_Data**)&o->cur.filter);
EINA_COW_WRITE_END(evas_object_proxy_cow, obj->proxy, proxy_write)
eina_hash_add(fcow->sources, pb->name, pb);
- fcow->sources_count++;
-
evas_filter_program_source_set_all(fcow->chain, fcow->sources);
// Update object