edje - calce - really respect max image size for img sets

when you have an image set for an image it wouldnt actually respect
image max size and not select something bigger than it.. now it will

@fix
This commit is contained in:
Carsten Haitzler 2020-08-13 17:41:36 +01:00
parent 990c46c94d
commit 672d1de730
1 changed files with 28 additions and 33 deletions

View File

@ -490,6 +490,25 @@ _edje_part_description_find(Edje *ed, Edje_Real_Part *rp, const char *state_name
return ret;
}
static int
_edje_image_set_fill(Edje_Real_Part_Set **eps,
Edje_Image_Directory_Set_Entry *entry,
Edje_Image_Directory_Set *set,
int id)
{
if (eps)
{
if (!*eps) *eps = calloc(1, sizeof(Edje_Real_Part_Set));
if (*eps)
{
(*eps)->entry = entry;
(*eps)->set = set;
(*eps)->id = id;
}
}
return entry->id;
}
static int
_edje_image_find(Evas_Object *obj, Edje *ed, Edje_Real_Part_Set **eps,
Edje_Part_Description_Image *st, Edje_Part_Image_Id *imid)
@ -517,9 +536,7 @@ _edje_image_find(Evas_Object *obj, Edje *ed, Edje_Real_Part_Set **eps,
{
if (((*eps)->entry->size.min.h <= h) &&
(h <= (*eps)->entry->size.max.h))
{
return (*eps)->entry->id;
}
return (*eps)->entry->id;
}
}
}
@ -530,46 +547,24 @@ _edje_image_find(Evas_Object *obj, Edje *ed, Edje_Real_Part_Set **eps,
evas_image_max_size_get(evas_object_evas_get(obj), &maxw, &maxh);
EINA_LIST_FOREACH(set->entries, l, entry)
{
// skip images b
if ((entry->size.w > 0) && (entry->size.h > 0) &&
((w > entry->size.w) || (h > entry->size.h)))
continue;
// skip images that exceed max size
if ((maxw > 0) && (maxh > 0) &&
(entry->size.w > 0) && (entry->size.h > 0) &&
((w > entry->size.w) || (h > entry->size.h)))
((entry->size.w > maxw) || (entry->size.h > maxh)))
continue;
if ((entry->size.min.w <= w) && (w <= entry->size.max.w))
{
if ((entry->size.min.h <= h) && (h <= entry->size.max.h))
{
if (eps)
{
if (!*eps) *eps = calloc(1, sizeof(Edje_Real_Part_Set));
if (*eps)
{
(*eps)->entry = entry;
(*eps)->set = set;
(*eps)->id = id;
}
}
return entry->id;
}
return _edje_image_set_fill(eps, entry, set, id);
}
}
// nothing found so pick first - which shouldbe smallest
entry = eina_list_data_get(set->entries);
if (entry)
{
if (eps)
{
if (!*eps)
*eps = calloc(1, sizeof (Edje_Real_Part_Set));
if (*eps)
{
(*eps)->entry = entry;
(*eps)->set = set;
(*eps)->id = id;
}
}
return entry->id;
}
return _edje_image_set_fill(eps, entry, set, id);
return -1;
}