only clear and re-apply gradients when the spectrum actually changes

SVN revision: 30065
This commit is contained in:
rephorm 2007-05-24 04:34:41 +00:00 committed by rephorm
parent 65ec1b5633
commit 8a17d1986e
3 changed files with 6 additions and 2 deletions

View File

@ -1339,7 +1339,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
if (p3.gradient.type && p3.gradient.type[0])
evas_object_gradient_type_set(ep->object, p3.gradient.type, NULL);
if (ed->file->spectrum_dir && ed->file->spectrum_dir->entries)
if (ed->file->spectrum_dir && ed->file->spectrum_dir->entries && p3.gradient.id != ep->gradient_id)
{
Edje_Spectrum_Directory_Entry *se;
Evas_List *l;
@ -1347,7 +1347,6 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
se = evas_list_nth(ed->file->spectrum_dir->entries, p3.gradient.id);
if (se)
{
// XXX only do this if we NEED to (e.g. gradient changed)
evas_object_gradient_clear(ep->object);
for (l = se->color_list; l; l = l->next)
{
@ -1358,6 +1357,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
evas_object_gradient_alpha_stop_add(ep->object,
sc->a, sc->d);
}
ep->gradient_id = p3.gradient.id;
}
}
}

View File

@ -145,6 +145,7 @@ edje_object_file_set(Evas_Object *obj, const char *file, const char *part)
}
rp->drag.step.x = ep->dragable.step_x;
rp->drag.step.y = ep->dragable.step_y;
rp->gradient_id = -1;
}
if (n > 0)
{

View File

@ -674,6 +674,9 @@ struct _Edje_Real_Part
Edje_Real_Part *source;
Edje_Real_Part *text_source;
} text;
int gradient_id;
double description_pos;
Edje_Part_Description *chosen_description;
struct {