forked from enlightenment/efl
massive speedup in textblock... maaaaaaaaaaasive.
SVN revision: 13151
This commit is contained in:
parent
1eac84f967
commit
100c9a3479
|
@ -99,7 +99,7 @@ struct _Evas_Object_Textblock
|
|||
unsigned char dirty : 1;
|
||||
Evas_Coord w, h;
|
||||
} native;
|
||||
|
||||
Evas_List *font_hold;
|
||||
void *engine_data;
|
||||
};
|
||||
|
||||
|
@ -233,6 +233,7 @@ evas_object_textblock_layout_format_apply(Layout *layout, char *key, char *data)
|
|||
g = (g << 4) | g;
|
||||
b = evas_object_textblock_hex_string_get(data[3]);
|
||||
b = (b << 4) | b;
|
||||
a = 0xff;
|
||||
}
|
||||
else if (strlen(data) == 5) /* #RGBA */
|
||||
{
|
||||
|
@ -360,6 +361,41 @@ evas_object_textblock_layout_clear(Evas_Object *obj, Layout *layout)
|
|||
memset(layout, 0, sizeof(Layout));
|
||||
}
|
||||
|
||||
static void
|
||||
evas_object_textblock_layout_fonts_hold(Evas_Object *obj)
|
||||
{
|
||||
Evas_Object_Textblock *o;
|
||||
Evas_Object_List *l;
|
||||
|
||||
o = (Evas_Object_Textblock *)(obj->object_data);
|
||||
for (l = (Evas_Object_List *)o->layout_nodes; l; l = l->next)
|
||||
{
|
||||
Layout_Node *lnode;
|
||||
|
||||
lnode = (Layout_Node *)l;
|
||||
if (lnode->layout.font.font)
|
||||
{
|
||||
o->font_hold = evas_list_append(o->font_hold,
|
||||
lnode->layout.font.font);
|
||||
lnode->layout.font.font = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
evas_object_textblock_layout_fonts_hold_clean(Evas_Object *obj)
|
||||
{
|
||||
Evas_Object_Textblock *o;
|
||||
|
||||
o = (Evas_Object_Textblock *)(obj->object_data);
|
||||
|
||||
while (o->font_hold)
|
||||
{
|
||||
ENFN->font_free(ENDT, o->font_hold->data);
|
||||
o->font_hold = evas_list_remove_list(o->font_hold, o->font_hold);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
evas_object_textblock_layout_clean(Evas_Object *obj)
|
||||
{
|
||||
|
@ -1137,8 +1173,10 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
|
|||
context);
|
||||
if (o->changed)
|
||||
{
|
||||
evas_object_textblock_layout_fonts_hold(obj);
|
||||
evas_object_textblock_layout_clean(obj);
|
||||
evas_object_textblock_layout(obj);
|
||||
evas_object_textblock_layout_fonts_hold_clean(obj);
|
||||
o->changed = 0;
|
||||
}
|
||||
/*
|
||||
|
@ -1153,6 +1191,7 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
|
|||
obj->cur.cache.geometry.w,
|
||||
obj->cur.cache.geometry.h);
|
||||
*/
|
||||
#if 1
|
||||
for (l = (Evas_Object_List *)o->layout_nodes; l; l = l->next)
|
||||
{
|
||||
Layout_Node *lnode;
|
||||
|
@ -1199,6 +1238,7 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
|
|||
lnode->text);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
if (o->engine_data)
|
||||
{
|
||||
|
@ -1269,8 +1309,10 @@ evas_object_textblock_render_pre(Evas_Object *obj)
|
|||
updates = evas_list_append(updates, r);
|
||||
*/
|
||||
updates = evas_object_render_pre_prev_cur_add(updates, obj);
|
||||
evas_object_textblock_layout_fonts_hold(obj);
|
||||
evas_object_textblock_layout_clean(obj);
|
||||
evas_object_textblock_layout(obj);
|
||||
evas_object_textblock_layout_fonts_hold_clean(obj);
|
||||
o->changed = 0;
|
||||
}
|
||||
done:
|
||||
|
|
|
@ -208,9 +208,15 @@ evas_common_font_load(const char *name, int size)
|
|||
|
||||
fn = calloc(1, sizeof(RGBA_Font));
|
||||
if (!fn) return NULL;
|
||||
|
||||
|
||||
fn->src = evas_common_font_source_find(name);
|
||||
if (!fn->src) fn->src = evas_common_font_source_load(name);
|
||||
if (!fn->src)
|
||||
{
|
||||
/* printf("REAL LOAD FILE %s %i\n", name, size);*/
|
||||
fn->src = evas_common_font_source_load(name);
|
||||
}
|
||||
/* else*/
|
||||
/* printf("REAL LOAD SIZE %s %i\n", name, size);*/
|
||||
|
||||
if (!fn->src)
|
||||
{
|
||||
|
@ -386,11 +392,13 @@ evas_common_font_find(const char *name, int size)
|
|||
{
|
||||
Evas_Object_List *l;
|
||||
|
||||
// printf("SEARCH!\n");
|
||||
for (l = fonts; l; l = l->next)
|
||||
{
|
||||
RGBA_Font *fn;
|
||||
|
||||
fn = (RGBA_Font *)l;
|
||||
// printf("%s == %s, %i == %i\n", name, fn->src->name, size, fn->size);
|
||||
if ((fn->size == size) && (!strcmp(name, fn->src->name)))
|
||||
{
|
||||
if (fn->references == 0) evas_common_font_modify_cache_by(fn, -1);
|
||||
|
|
Loading…
Reference in New Issue