forked from enlightenment/efl
edje now correctly supports text.source and text.text_source for swallowed parts
fix T1186
This commit is contained in:
parent
d498f6f723
commit
5f376fde36
|
@ -170,6 +170,8 @@ void data_write(void);
|
|||
void data_queue_face_group_lookup(const char *name);
|
||||
void data_queue_group_lookup(const char *name, Edje_Part *part);
|
||||
void data_queue_part_lookup(Edje_Part_Collection *pc, const char *name, int *dest);
|
||||
void data_queue_part_nest_lookup(Edje_Part_Collection *pc, const char *name, int *dest, char **dest2);
|
||||
void data_queue_copied_part_nest_lookup(Edje_Part_Collection *pc, int *src, int *dest, char **dest2);
|
||||
void data_queue_part_reallocated_lookup(Edje_Part_Collection *pc, const char *name,
|
||||
unsigned char **base, int offset);
|
||||
void data_queue_copied_part_lookup(Edje_Part_Collection *pc, int *src, int *dest);
|
||||
|
|
|
@ -6273,8 +6273,8 @@ st_collections_group_parts_part_description_inherit(void)
|
|||
ted->text.font.str = STRDUP(ted->text.font.str);
|
||||
ted->text.filter.str = STRDUP(ted->text.filter.str);
|
||||
|
||||
data_queue_copied_part_lookup(pc, &(tparent->text.id_source), &(ted->text.id_source));
|
||||
data_queue_copied_part_lookup(pc, &(tparent->text.id_text_source), &(ted->text.id_text_source));
|
||||
data_queue_copied_part_nest_lookup(pc, &(tparent->text.id_source), &(ted->text.id_source), &ted->text.id_source_part);
|
||||
data_queue_copied_part_nest_lookup(pc, &(tparent->text.id_text_source), &(ted->text.id_text_source), &ted->text.id_text_source_part);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -8312,7 +8312,7 @@ st_collections_group_parts_part_description_text_source(void)
|
|||
char *name;
|
||||
|
||||
name = parse_str(0);
|
||||
data_queue_part_lookup(pc, name, &(ed->text.id_source));
|
||||
data_queue_part_nest_lookup(pc, name, &(ed->text.id_source), &ed->text.id_source_part);
|
||||
free(name);
|
||||
}
|
||||
}
|
||||
|
@ -8353,7 +8353,7 @@ st_collections_group_parts_part_description_text_text_source(void)
|
|||
char *name;
|
||||
|
||||
name = parse_str(0);
|
||||
data_queue_part_lookup(pc, name, &(ed->text.id_text_source));
|
||||
data_queue_part_nest_lookup(pc, name, &(ed->text.id_text_source), &ed->text.id_text_source_part);
|
||||
free(name);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ struct _Part_Lookup_Key
|
|||
int offset;
|
||||
} reallocated;
|
||||
} mem;
|
||||
char **dest2;
|
||||
|
||||
Eina_Bool stable : 1;
|
||||
};
|
||||
|
@ -2163,6 +2164,12 @@ data_queue_face_group_lookup(const char *name)
|
|||
|
||||
void
|
||||
data_queue_part_lookup(Edje_Part_Collection *pc, const char *name, int *dest)
|
||||
{
|
||||
data_queue_part_nest_lookup(pc, name, dest, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
data_queue_part_nest_lookup(Edje_Part_Collection *pc, const char *name, int *dest, char **dest2)
|
||||
{
|
||||
Part_Lookup_Key key;
|
||||
Part_Lookup *pl = NULL;
|
||||
|
@ -2195,6 +2202,7 @@ data_queue_part_lookup(Edje_Part_Collection *pc, const char *name, int *dest)
|
|||
pl->name = mem_strdup(name);
|
||||
pl->key.pc = pc;
|
||||
pl->key.mem.dest = dest;
|
||||
pl->key.dest2 = dest2;
|
||||
pl->key.stable = EINA_TRUE;
|
||||
|
||||
eina_hash_add(part_pc_dest_lookup, &key, pl);
|
||||
|
@ -2252,6 +2260,12 @@ data_queue_part_reallocated_lookup(Edje_Part_Collection *pc, const char *name,
|
|||
|
||||
void
|
||||
data_queue_copied_part_lookup(Edje_Part_Collection *pc, int *src, int *dest)
|
||||
{
|
||||
data_queue_copied_part_nest_lookup(pc, src, dest, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
data_queue_copied_part_nest_lookup(Edje_Part_Collection *pc, int *src, int *dest, char **dest2)
|
||||
{
|
||||
Eina_List *list;
|
||||
Eina_List *l;
|
||||
|
@ -2265,7 +2279,7 @@ data_queue_copied_part_lookup(Edje_Part_Collection *pc, int *src, int *dest)
|
|||
list = eina_hash_find(part_dest_lookup, &key);
|
||||
EINA_LIST_FOREACH(list, l, pl)
|
||||
if (pl->key.stable)
|
||||
data_queue_part_lookup(pc, pl->name, dest);
|
||||
data_queue_part_nest_lookup(pc, pl->name, dest, dest2);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -2454,18 +2468,20 @@ data_queue_copied_image_lookup(int *src, int *dest, Eina_Bool *set)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
static Eina_Bool
|
||||
data_process_part_set(Part_Lookup *target, int value)
|
||||
{
|
||||
if (target->key.stable)
|
||||
{
|
||||
*(target->key.mem.dest) = value;
|
||||
if (target->key.dest2) return EINA_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
*((int*)(*target->key.mem.reallocated.base +
|
||||
target->key.mem.reallocated.offset)) = value;
|
||||
}
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2621,17 +2637,30 @@ data_process_lookups(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
char *alias;
|
||||
char *alias, *ap;
|
||||
|
||||
alias = eina_hash_find(part->key.pc->alias, part->name);
|
||||
if (!alias)
|
||||
alias = part->name;
|
||||
ap = strchr(alias, EDJE_PART_PATH_SEPARATOR);
|
||||
if (ap)
|
||||
{
|
||||
char *tmp;
|
||||
|
||||
tmp = alloca(strlen(alias) + 1);
|
||||
memcpy(tmp, alias, ap - alias);
|
||||
tmp[ap - alias] = 0;
|
||||
ap += 1;
|
||||
alias = tmp;
|
||||
}
|
||||
for (i = 0; i < part->key.pc->parts_count; ++i)
|
||||
{
|
||||
ep = part->key.pc->parts[i];
|
||||
|
||||
if ((ep->name) && (!strcmp(ep->name, alias)))
|
||||
{
|
||||
data_process_part_set(part, ep->id);
|
||||
if (data_process_part_set(part, ep->id))
|
||||
*part->key.dest2 = ap;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1225,9 +1225,12 @@ _edje_part_recalc_single_textblock(FLOAT_T sc,
|
|||
|
||||
if (chosen_desc->text.id_source >= 0)
|
||||
{
|
||||
Edje_Part_Description_Text *et;
|
||||
|
||||
ep->typedata.text->source = ed->table_parts[chosen_desc->text.id_source % ed->table_parts_size];
|
||||
|
||||
tmp = edje_string_get(&((Edje_Part_Description_Text *)ep->typedata.text->source->chosen_description)->text.style);
|
||||
et = _edje_real_part_text_source_description_get(ep, NULL);
|
||||
tmp = edje_string_get(&et->text.style);
|
||||
if (tmp) style = tmp;
|
||||
}
|
||||
else
|
||||
|
@ -1240,10 +1243,15 @@ _edje_part_recalc_single_textblock(FLOAT_T sc,
|
|||
|
||||
if (chosen_desc->text.id_text_source >= 0)
|
||||
{
|
||||
ep->typedata.text->text_source = ed->table_parts[chosen_desc->text.id_text_source % ed->table_parts_size];
|
||||
text = edje_string_get(&((Edje_Part_Description_Text*)ep->typedata.text->text_source->chosen_description)->text.text);
|
||||
Edje_Part_Description_Text *et;
|
||||
Edje_Real_Part *rp;
|
||||
|
||||
if (ep->typedata.text->text_source->typedata.text->text) text = ep->typedata.text->text_source->typedata.text->text;
|
||||
ep->typedata.text->text_source = ed->table_parts[chosen_desc->text.id_text_source % ed->table_parts_size];
|
||||
|
||||
et = _edje_real_part_text_text_source_description_get(ep, &rp);
|
||||
text = edje_string_get(&et->text.text);
|
||||
|
||||
if (rp->typedata.text->text) text = rp->typedata.text->text;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1519,44 +1527,45 @@ _edje_part_recalc_single_text(FLOAT_T sc EINA_UNUSED,
|
|||
const char *font;
|
||||
Evas_Coord tw, th;
|
||||
int inlined_font = 0;
|
||||
Edje_Real_Part *source, *text_source;
|
||||
|
||||
/* Update a object_text part */
|
||||
|
||||
if (chosen_desc->text.id_source >= 0)
|
||||
ep->text.source = ed->table_parts[chosen_desc->text.id_source % ed->table_parts_size];
|
||||
else
|
||||
ep->text.source = NULL;
|
||||
source = ep->text.source = NULL;
|
||||
|
||||
if (chosen_desc->text.id_text_source >= 0)
|
||||
ep->text.text_source = ed->table_parts[chosen_desc->text.id_text_source % ed->table_parts_size];
|
||||
else
|
||||
ep->text.text_source = NULL;
|
||||
text_source = ep->text.text_source = NULL;
|
||||
|
||||
if (ep->text.text_source)
|
||||
text = edje_string_get(&(((Edje_Part_Description_Text*)ep->text.text_source->chosen_description)->text.text));
|
||||
text = edje_string_get(&_edje_real_part_text_text_source_description_get(ep, &text_source)->text.text));
|
||||
else
|
||||
text = edje_string_get(&chosen_desc->text.text);
|
||||
|
||||
if (ep->text.source)
|
||||
font = _edje_text_class_font_get(ed, ((Edje_Part_Description_Text*)ep->text.source->chosen_description), &size, &sfont);
|
||||
font = _edje_text_class_font_get(ed, _edje_real_part_text_source_description_get(ep, &source)), &size, &sfont);
|
||||
else
|
||||
font = _edje_text_class_font_get(ed, chosen_desc, &size, &sfont);
|
||||
|
||||
if (!font) font = "";
|
||||
|
||||
if (ep->text.text_source)
|
||||
if (text_source)
|
||||
{
|
||||
if (ep->text.text_source->text.text) text = ep->text.text_source->text.text;
|
||||
if (text_source->text.text) text = text_source->text.text;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ep->text.text) text = ep->text.text;
|
||||
}
|
||||
|
||||
if (ep->text.source)
|
||||
if (source)
|
||||
{
|
||||
if (ep->text.source->text.font) font = ep->text.source->text.font;
|
||||
if (ep->text.source->text.size > 0) size = ep->text.source->text.size;
|
||||
if (source->text.font) font = source->text.font;
|
||||
if (source->text.size > 0) size = source->text.size;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -825,7 +825,9 @@ _edje_edd_init(void)
|
|||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_text, Edje_Part_Description_Text, "text.align.x", text.align.x, EDJE_T_FLOAT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_text, Edje_Part_Description_Text, "text.align.y", text.align.y, EDJE_T_FLOAT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_text, Edje_Part_Description_Text, "text.id_source", text.id_source, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_text, Edje_Part_Description_Text, "text.id_source_part", text.id_source_part, EET_T_STRING);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_text, Edje_Part_Description_Text, "text.id_text_source", text.id_text_source, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_text, Edje_Part_Description_Text, "text.id_text_source_part", text.id_text_source_part, EET_T_STRING);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_text, Edje_Part_Description_Text, "text.elipsis", text.elipsis, EET_T_DOUBLE);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_text, Edje_Part_Description_Text, "text.filter", text.filter, EET_T_STRING);
|
||||
EET_DATA_DESCRIPTOR_ADD_LIST_STRING(_edje_edd_edje_part_description_text, Edje_Part_Description_Text, "text.filter_sources", text.filter_sources);
|
||||
|
@ -857,7 +859,9 @@ _edje_edd_init(void)
|
|||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_textblock, Edje_Part_Description_Text, "text.align.x", text.align.x, EDJE_T_FLOAT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_textblock, Edje_Part_Description_Text, "text.align.y", text.align.y, EDJE_T_FLOAT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_textblock, Edje_Part_Description_Text, "text.id_source", text.id_source, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_textblock, Edje_Part_Description_Text, "text.id_source_part", text.id_source_part, EET_T_STRING);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_textblock, Edje_Part_Description_Text, "text.id_text_source", text.id_text_source, EET_T_INT);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_textblock, Edje_Part_Description_Text, "text.id_text_source_part", text.id_text_source_part, EET_T_STRING);
|
||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description_textblock, Edje_Part_Description_Text, "text.elipsis", text.elipsis, EET_T_DOUBLE);
|
||||
|
||||
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Part_Description_Box);
|
||||
|
|
|
@ -1205,7 +1205,9 @@ struct _Edje_Part_Description_Spec_Text
|
|||
double elipsis; /* 0.0 - 1.0 defining where the elipsis align */
|
||||
int size; /* 0 = use user set size */
|
||||
int id_source; /* -1 if none */
|
||||
char *id_source_part;
|
||||
int id_text_source; /* -1 if none */
|
||||
char *id_text_source_part;
|
||||
|
||||
unsigned char fit_x; /* resize font size down to fit in x dir */
|
||||
unsigned char fit_y; /* resize font size down to fit in y dir */
|
||||
|
@ -2100,6 +2102,8 @@ void _edje_box_layout_remove_child(Edje_Real_Part *rp, Evas_Object
|
|||
Edje_Part_Box_Animation * _edje_box_layout_anim_new(Evas_Object *box);
|
||||
void _edje_box_layout_free_data(void *data);
|
||||
|
||||
Edje_Part_Description_Text *_edje_real_part_text_source_description_get(Edje_Real_Part *ep, Edje_Real_Part **rp2);
|
||||
Edje_Part_Description_Text *_edje_real_part_text_text_source_description_get(Edje_Real_Part *ep, Edje_Real_Part **rp2);
|
||||
Eina_Bool _edje_real_part_box_append(Edje *ed, Edje_Real_Part *rp, Evas_Object *child_obj);
|
||||
Eina_Bool _edje_real_part_box_prepend(Edje *ed, Edje_Real_Part *rp, Evas_Object *child_obj);
|
||||
Eina_Bool _edje_real_part_box_insert_before(Edje *ed, Edje_Real_Part *rp, Evas_Object *child_obj, const Evas_Object *ref);
|
||||
|
|
|
@ -198,15 +198,23 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
|
|||
|
||||
if (ep->typedata.text->text_source)
|
||||
{
|
||||
text = edje_string_get(&(((Edje_Part_Description_Text *)ep->typedata.text->text_source->chosen_description)->text.text));
|
||||
if (ep->typedata.text->text_source->typedata.text->text) text = ep->typedata.text->text_source->typedata.text->text;
|
||||
Edje_Part_Description_Text *et;
|
||||
Edje_Real_Part *rp2;
|
||||
|
||||
et = _edje_real_part_text_text_source_description_get(ep, &rp2);
|
||||
text = edje_string_get(&(et->text.text));
|
||||
if (rp2->typedata.text->text) text = rp2->typedata.text->text;
|
||||
}
|
||||
if (ep->typedata.text->source)
|
||||
{
|
||||
font = edje_string_get(&(((Edje_Part_Description_Text *)ep->typedata.text->source->chosen_description)->text.font));
|
||||
size = ((Edje_Part_Description_Text *)ep->typedata.text->source->chosen_description)->text.size;
|
||||
if (ep->typedata.text->source->typedata.text->font) font = ep->typedata.text->source->typedata.text->font;
|
||||
if (ep->typedata.text->source->typedata.text->size > 0) size = ep->typedata.text->source->typedata.text->size;
|
||||
Edje_Part_Description_Text *et;
|
||||
Edje_Real_Part *rp2;
|
||||
|
||||
et = _edje_real_part_text_source_description_get(ep, &rp2);
|
||||
font = edje_string_get(&(et->text.font));
|
||||
size = et->text.size;
|
||||
if (rp2->typedata.text->font) font = rp2->typedata.text->font;
|
||||
if (rp2->typedata.text->size > 0) size = rp2->typedata.text->size;
|
||||
}
|
||||
|
||||
if (!text) text = "";
|
||||
|
|
|
@ -4467,6 +4467,46 @@ _edje_real_part_table_clear(Edje *ed, Edje_Real_Part *rp, Eina_Bool clear)
|
|||
}
|
||||
}
|
||||
|
||||
Edje_Part_Description_Text *
|
||||
_edje_real_part_text_source_description_get(Edje_Real_Part *ep, Edje_Real_Part **rp2)
|
||||
{
|
||||
Edje_Part_Description_Text *et;
|
||||
Edje_Real_Part *rp = ep->typedata.text->source;
|
||||
if (ep->typedata.text->source->type == EDJE_RP_TYPE_SWALLOW)
|
||||
{
|
||||
Edje *ed2;
|
||||
|
||||
et = (Edje_Part_Description_Text *)ep->param1.description;
|
||||
ed2 = _edje_fetch(ep->typedata.text->source->typedata.swallow->swallowed_object);
|
||||
rp = _edje_real_part_recursive_get(&ed2, et->text.id_source_part);
|
||||
et = (Edje_Part_Description_Text *)rp->chosen_description;
|
||||
}
|
||||
else
|
||||
et = (Edje_Part_Description_Text *)ep->typedata.text->source->chosen_description;
|
||||
if (rp2) *rp2 = rp;
|
||||
return et;
|
||||
}
|
||||
|
||||
Edje_Part_Description_Text *
|
||||
_edje_real_part_text_text_source_description_get(Edje_Real_Part *ep, Edje_Real_Part **rp2)
|
||||
{
|
||||
Edje_Part_Description_Text *et;
|
||||
Edje_Real_Part *rp = ep->typedata.text->text_source;
|
||||
if (ep->typedata.text->text_source->type == EDJE_RP_TYPE_SWALLOW)
|
||||
{
|
||||
Edje *ed2;
|
||||
|
||||
et = (Edje_Part_Description_Text *)ep->param1.description;
|
||||
ed2 = _edje_fetch(ep->typedata.text->text_source->typedata.swallow->swallowed_object);
|
||||
rp = _edje_real_part_recursive_get(&ed2, et->text.id_text_source_part);
|
||||
et = (Edje_Part_Description_Text *)rp->chosen_description;
|
||||
}
|
||||
else
|
||||
et = (Edje_Part_Description_Text *)ep->typedata.text->text_source->chosen_description;
|
||||
if (rp2) *rp2 = rp;
|
||||
return et;
|
||||
}
|
||||
|
||||
Edje_Real_Part *
|
||||
_edje_real_part_recursive_get(Edje **ed, const char *part)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue