forked from enlightenment/efl
Cleanup edje calc and fixes textblock "visible" use.
Patch by Cedric BAIL, with minor formating/style fixes. SVN revision: 33803
This commit is contained in:
parent
fc81ca730c
commit
e618b1d188
|
@ -1166,6 +1166,125 @@ _edje_part_recalc_single(Edje *ed,
|
||||||
params->gradient.type = desc->gradient.type;
|
params->gradient.type = desc->gradient.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_edje_gradient_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edje_Part_Description *chosen_desc)
|
||||||
|
{
|
||||||
|
evas_object_gradient_fill_angle_set(ep->object, p3->fill.angle);
|
||||||
|
evas_object_gradient_fill_spread_set(ep->object, p3->fill.spread);
|
||||||
|
evas_object_gradient_fill_set(ep->object, p3->fill.x, p3->fill.y,
|
||||||
|
p3->fill.w, p3->fill.h);
|
||||||
|
|
||||||
|
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 &&
|
||||||
|
p3->gradient.id != ep->gradient_id)
|
||||||
|
{
|
||||||
|
Edje_Spectrum_Directory_Entry *se;
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
|
se = evas_list_nth(ed->file->spectrum_dir->entries, p3->gradient.id);
|
||||||
|
if (se)
|
||||||
|
{
|
||||||
|
evas_object_gradient_clear(ep->object);
|
||||||
|
for (l = se->color_list; l; l = l->next)
|
||||||
|
{
|
||||||
|
Edje_Spectrum_Color *sc = l->data;
|
||||||
|
evas_object_gradient_color_stop_add(ep->object, sc->r,
|
||||||
|
sc->g, sc->b, 255,
|
||||||
|
sc->d);
|
||||||
|
evas_object_gradient_alpha_stop_add(ep->object,
|
||||||
|
sc->a, sc->d);
|
||||||
|
}
|
||||||
|
ep->gradient_id = p3->gradient.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_edje_image_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edje_Part_Description *chosen_desc, double pos)
|
||||||
|
{
|
||||||
|
char buf[4096];
|
||||||
|
int image_id;
|
||||||
|
int image_count, image_num;
|
||||||
|
|
||||||
|
evas_object_image_fill_set(ep->object, p3->fill.x, p3->fill.y,
|
||||||
|
p3->fill.w, p3->fill.h);
|
||||||
|
evas_object_image_smooth_scale_set(ep->object, p3->smooth);
|
||||||
|
|
||||||
|
evas_object_image_border_set(ep->object, p3->border.l, p3->border.r,
|
||||||
|
p3->border.t, p3->border.b);
|
||||||
|
evas_object_image_border_center_fill_set(ep->object,
|
||||||
|
!(chosen_desc->border.no_fill));
|
||||||
|
image_id = ep->param1.description->image.id;
|
||||||
|
if (image_id < 0)
|
||||||
|
{
|
||||||
|
Edje_Image_Directory_Entry *ie;
|
||||||
|
|
||||||
|
if (!ed->file->image_dir) ie = NULL;
|
||||||
|
else ie = evas_list_nth(ed->file->image_dir->entries, (-image_id) - 1);
|
||||||
|
if ((ie) &&
|
||||||
|
(ie->source_type == EDJE_IMAGE_SOURCE_TYPE_EXTERNAL) &&
|
||||||
|
(ie->entry))
|
||||||
|
{
|
||||||
|
evas_object_image_file_set(ep->object, ie->entry, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
image_count = 2;
|
||||||
|
if (ep->param2.description)
|
||||||
|
image_count += evas_list_count(ep->param2.description->image.tween_list);
|
||||||
|
image_num = (pos * ((double)image_count - 0.5));
|
||||||
|
if (image_num > (image_count - 1))
|
||||||
|
image_num = image_count - 1;
|
||||||
|
if (image_num == 0)
|
||||||
|
image_id = ep->param1.description->image.id;
|
||||||
|
else if (image_num == (image_count - 1))
|
||||||
|
image_id = ep->param2.description->image.id;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Edje_Part_Image_Id *imid;
|
||||||
|
|
||||||
|
imid = evas_list_nth(ep->param2.description->image.tween_list,
|
||||||
|
image_num - 1);
|
||||||
|
if (imid) image_id = imid->id;
|
||||||
|
}
|
||||||
|
if (image_id < 0)
|
||||||
|
{
|
||||||
|
printf("EDJE ERROR: part \"%s\" has description, "
|
||||||
|
"\"%s\" %3.3f with a missing image id!!!\n",
|
||||||
|
ep->part->name,
|
||||||
|
ep->param1.description->state.name,
|
||||||
|
ep->param1.description->state.value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf(buf, sizeof(buf), "images/%i", image_id);
|
||||||
|
evas_object_image_file_set(ep->object, ed->file->path, buf);
|
||||||
|
if (evas_object_image_load_error_get(ep->object) != EVAS_LOAD_ERROR_NONE)
|
||||||
|
{
|
||||||
|
printf("EDJE: Error loading image collection \"%s\" from "
|
||||||
|
"file \"%s\". Missing EET Evas loader module?\n",
|
||||||
|
buf, ed->file->path);
|
||||||
|
if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_GENERIC)
|
||||||
|
printf("Error type: EVAS_LOAD_ERROR_GENERIC\n");
|
||||||
|
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_DOES_NOT_EXIST)
|
||||||
|
printf("Error type: EVAS_LOAD_ERROR_DOES_NOT_EXIST\n");
|
||||||
|
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_PERMISSION_DENIED)
|
||||||
|
printf("Error type: EVAS_LOAD_ERROR_PERMISSION_DENIED\n");
|
||||||
|
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED)
|
||||||
|
printf("Error type: EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED\n");
|
||||||
|
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_CORRUPT_FILE)
|
||||||
|
printf("Error type: EVAS_LOAD_ERROR_CORRUPT_FILE\n");
|
||||||
|
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_UNKNOWN_FORMAT)
|
||||||
|
printf("Error type: EVAS_LOAD_ERROR_UNKNOWN_FORMAT\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
_edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
{
|
{
|
||||||
|
@ -1328,158 +1447,50 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
|
||||||
}
|
}
|
||||||
if (!ed->calc_only)
|
if (!ed->calc_only)
|
||||||
{
|
{
|
||||||
if (ep->part->type == EDJE_PART_TYPE_RECTANGLE)
|
/* Common move, resize and color_set for all part. */
|
||||||
|
switch (ep->part->type)
|
||||||
{
|
{
|
||||||
evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
|
case EDJE_PART_TYPE_RECTANGLE:
|
||||||
evas_object_resize(ep->object, p3.w, p3.h);
|
case EDJE_PART_TYPE_IMAGE:
|
||||||
evas_object_color_set(ep->object,
|
case EDJE_PART_TYPE_TEXTBLOCK:
|
||||||
(p3.color.r * p3.color.a) / 255,
|
case EDJE_PART_TYPE_GRADIENT:
|
||||||
(p3.color.g * p3.color.a) / 255,
|
evas_object_color_set(ep->object,
|
||||||
(p3.color.b * p3.color.a) / 255,
|
(p3.color.r * p3.color.a) / 255,
|
||||||
p3.color.a);
|
(p3.color.g * p3.color.a) / 255,
|
||||||
if (p3.visible) evas_object_show(ep->object);
|
(p3.color.b * p3.color.a) / 255,
|
||||||
else evas_object_hide(ep->object);
|
p3.color.a);
|
||||||
|
if (p3.visible) evas_object_show(ep->object);
|
||||||
|
else evas_object_hide(ep->object);
|
||||||
|
/* move and resize are needed for all previous object => no break here. */
|
||||||
|
case EDJE_PART_TYPE_SWALLOW:
|
||||||
|
case EDJE_PART_TYPE_GROUP:
|
||||||
|
/* visibility and color have no meaning on SWALLOW and GROUP part. */
|
||||||
|
evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
|
||||||
|
evas_object_resize(ep->object, p3.w, p3.h);
|
||||||
|
break;
|
||||||
|
case EDJE_PART_TYPE_TEXT:
|
||||||
|
/* This is correctly handle in _edje_text_recalc_apply at the moment. */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else if (ep->part->type == EDJE_PART_TYPE_TEXT)
|
|
||||||
|
/* Some object need special recalc. */
|
||||||
|
switch (ep->part->type)
|
||||||
{
|
{
|
||||||
_edje_text_recalc_apply(ed, ep, &p3, chosen_desc);
|
case EDJE_PART_TYPE_TEXT:
|
||||||
}
|
_edje_text_recalc_apply(ed, ep, &p3, chosen_desc);
|
||||||
else if (ep->part->type == EDJE_PART_TYPE_IMAGE)
|
break;
|
||||||
{
|
case EDJE_PART_TYPE_IMAGE:
|
||||||
char buf[4096];
|
_edje_image_recalc_apply(ed, ep, &p3, chosen_desc, pos);
|
||||||
int image_id;
|
break;
|
||||||
int image_count, image_num;
|
case EDJE_PART_TYPE_GRADIENT:
|
||||||
|
_edje_gradient_recalc_apply(ed, ep, &p3, chosen_desc);
|
||||||
evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
|
break;
|
||||||
evas_object_resize(ep->object, p3.w, p3.h);
|
case EDJE_PART_TYPE_RECTANGLE:
|
||||||
evas_object_image_fill_set(ep->object, p3.fill.x, p3.fill.y, p3.fill.w, p3.fill.h);
|
case EDJE_PART_TYPE_SWALLOW:
|
||||||
evas_object_image_smooth_scale_set(ep->object, p3.smooth);
|
case EDJE_PART_TYPE_GROUP:
|
||||||
|
case EDJE_PART_TYPE_TEXTBLOCK:
|
||||||
evas_object_image_border_set(ep->object, p3.border.l, p3.border.r, p3.border.t, p3.border.b);
|
/* Nothing special to do for this type of object. */
|
||||||
evas_object_image_border_center_fill_set(ep->object, !(chosen_desc->border.no_fill));
|
break;
|
||||||
image_id = ep->param1.description->image.id;
|
|
||||||
if (image_id < 0)
|
|
||||||
{
|
|
||||||
Edje_Image_Directory_Entry *ie;
|
|
||||||
|
|
||||||
if (!ed->file->image_dir) ie = NULL;
|
|
||||||
else ie = evas_list_nth(ed->file->image_dir->entries, (-image_id) - 1);
|
|
||||||
if ((ie) &&
|
|
||||||
(ie->source_type == EDJE_IMAGE_SOURCE_TYPE_EXTERNAL) &&
|
|
||||||
(ie->entry))
|
|
||||||
{
|
|
||||||
evas_object_image_file_set(ep->object, ie->entry, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
image_count = 2;
|
|
||||||
if (ep->param2.description)
|
|
||||||
image_count += evas_list_count(ep->param2.description->image.tween_list);
|
|
||||||
image_num = (pos * ((double)image_count - 0.5));
|
|
||||||
if (image_num > (image_count - 1))
|
|
||||||
image_num = image_count - 1;
|
|
||||||
if (image_num == 0)
|
|
||||||
image_id = ep->param1.description->image.id;
|
|
||||||
else if (image_num == (image_count - 1))
|
|
||||||
image_id = ep->param2.description->image.id;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Edje_Part_Image_Id *imid;
|
|
||||||
|
|
||||||
imid = evas_list_nth(ep->param2.description->image.tween_list, image_num - 1);
|
|
||||||
if (imid) image_id = imid->id;
|
|
||||||
}
|
|
||||||
if (image_id < 0)
|
|
||||||
{
|
|
||||||
printf("EDJE ERROR: part \"%s\" has description, \"%s\" %3.3f with a missing image id!!!\n",
|
|
||||||
ep->part->name,
|
|
||||||
ep->param1.description->state.name,
|
|
||||||
ep->param1.description->state.value
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
snprintf(buf, sizeof(buf), "images/%i", image_id);
|
|
||||||
evas_object_image_file_set(ep->object, ed->file->path, buf);
|
|
||||||
if (evas_object_image_load_error_get(ep->object) != EVAS_LOAD_ERROR_NONE)
|
|
||||||
{
|
|
||||||
printf("EDJE: Error loading image collection \"%s\" from file \"%s\". Missing EET Evas loader module?\n",
|
|
||||||
buf, ed->file->path);
|
|
||||||
if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_GENERIC)
|
|
||||||
printf("Error type: EVAS_LOAD_ERROR_GENERIC\n");
|
|
||||||
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_DOES_NOT_EXIST)
|
|
||||||
printf("Error type: EVAS_LOAD_ERROR_DOES_NOT_EXIST\n");
|
|
||||||
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_PERMISSION_DENIED)
|
|
||||||
printf("Error type: EVAS_LOAD_ERROR_PERMISSION_DENIED\n");
|
|
||||||
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED)
|
|
||||||
printf("Error type: EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED\n");
|
|
||||||
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_CORRUPT_FILE)
|
|
||||||
printf("Error type: EVAS_LOAD_ERROR_CORRUPT_FILE\n");
|
|
||||||
else if (evas_object_image_load_error_get(ep->object) == EVAS_LOAD_ERROR_UNKNOWN_FORMAT)
|
|
||||||
printf("Error type: EVAS_LOAD_ERROR_UNKNOWN_FORMAT\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
evas_object_color_set(ep->object,
|
|
||||||
(p3.color.r * p3.color.a) / 255,
|
|
||||||
(p3.color.g * p3.color.a) / 255,
|
|
||||||
(p3.color.b * p3.color.a) / 255,
|
|
||||||
p3.color.a);
|
|
||||||
if (p3.visible) evas_object_show(ep->object);
|
|
||||||
else evas_object_hide(ep->object);
|
|
||||||
}
|
|
||||||
else if ((ep->part->type == EDJE_PART_TYPE_SWALLOW) ||
|
|
||||||
(ep->part->type == EDJE_PART_TYPE_GROUP))
|
|
||||||
{
|
|
||||||
evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
|
|
||||||
evas_object_resize(ep->object, p3.w, p3.h);
|
|
||||||
}
|
|
||||||
else if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK)
|
|
||||||
{
|
|
||||||
evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
|
|
||||||
evas_object_resize(ep->object, p3.w, p3.h);
|
|
||||||
}
|
|
||||||
else if (ep->part->type == EDJE_PART_TYPE_GRADIENT)
|
|
||||||
{
|
|
||||||
evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
|
|
||||||
evas_object_resize(ep->object, p3.w, p3.h);
|
|
||||||
evas_object_color_set(ep->object,
|
|
||||||
(p3.color.r * p3.color.a) / 255,
|
|
||||||
(p3.color.g * p3.color.a) / 255,
|
|
||||||
(p3.color.b * p3.color.a) / 255,
|
|
||||||
p3.color.a);
|
|
||||||
if (p3.visible) evas_object_show(ep->object);
|
|
||||||
else evas_object_hide(ep->object);
|
|
||||||
|
|
||||||
evas_object_gradient_fill_angle_set(ep->object, p3.fill.angle);
|
|
||||||
evas_object_gradient_fill_spread_set(ep->object, p3.fill.spread);
|
|
||||||
evas_object_gradient_fill_set(ep->object, p3.fill.x, p3.fill.y, p3.fill.w, p3.fill.h);
|
|
||||||
|
|
||||||
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 && p3.gradient.id != ep->gradient_id)
|
|
||||||
{
|
|
||||||
Edje_Spectrum_Directory_Entry *se;
|
|
||||||
Evas_List *l;
|
|
||||||
|
|
||||||
se = evas_list_nth(ed->file->spectrum_dir->entries, p3.gradient.id);
|
|
||||||
if (se)
|
|
||||||
{
|
|
||||||
evas_object_gradient_clear(ep->object);
|
|
||||||
for (l = se->color_list; l; l = l->next)
|
|
||||||
{
|
|
||||||
Edje_Spectrum_Color *sc = l->data;
|
|
||||||
evas_object_gradient_color_stop_add(ep->object, sc->r,
|
|
||||||
sc->g, sc->b, 255,
|
|
||||||
sc->d);
|
|
||||||
evas_object_gradient_alpha_stop_add(ep->object,
|
|
||||||
sc->a, sc->d);
|
|
||||||
}
|
|
||||||
ep->gradient_id = p3.gradient.id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ep->swallowed_object)
|
if (ep->swallowed_object)
|
||||||
|
|
Loading…
Reference in New Issue