Evas font-engine: Cache fi when using Harfbuzz.

Soon I will also do it for all cases, but it's not possible at the
moment because we depend on harfbuzz for querying unicode properties.

SVN revision: 58924
This commit is contained in:
Tom Hacohen 2011-04-26 09:14:02 +00:00
parent 4af57920a8
commit f0e18f58ff
3 changed files with 24 additions and 37 deletions

View File

@ -420,6 +420,12 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
in_text;
#else
const Eina_Unicode *text = in_text;
/* Not relevant in the Harfbuzz case, and will soon will not be relevant
* at all */
(void) text;
/* Should be marked as unused? or should I do something fancy about it to
* make sure the given fi is relevant? */
(void) fn;
#endif
DATA32 *im;
FT_Face pface = NULL;
@ -515,21 +521,8 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
#endif
im = dst->image.data;
/* Load the glyph according to the first letter of the script, preety
* bad, but will have to do */
{
/* Skip common chars */
const Eina_Unicode *tmp;
for (tmp = text ;
((size_t) (tmp - text) < text_props->text_len) &&
evas_common_language_char_script_get(*tmp) ==
EVAS_SCRIPT_COMMON ;
tmp++)
;
if (((size_t) (tmp - text) == text_props->text_len) && (tmp > text))
tmp--;
evas_common_font_glyph_search(fn, &fi, *tmp);
}
fi = text_props->font_instance;
evas_common_font_int_reload(fi);
if (fi->src->current_size != fi->size)
{
@ -843,20 +836,8 @@ evas_font_word_prerender(RGBA_Draw_Context *dc, const Eina_Unicode *in_text, con
gl = dc->font_ext.func.gl_new ? 1: 0;
above = 0; below = 0; baseline = 0; height = 0; descent = 0;
/* Load the glyph according to the first letter of the script, preety
* bad, but will have to do */
{
/* Skip common chars */
const Eina_Unicode *tmp;
for (tmp = text ;
((tmp - text) < len) &&
evas_common_language_char_script_get(*tmp) ==
EVAS_SCRIPT_COMMON ;
tmp++)
;
if (((tmp - text) == len) && (tmp > text)) tmp--;
evas_common_font_glyph_search(fn, &fi, *tmp);
}
fi = text_props->font_instance;
evas_common_font_int_reload(fi);
if (fi->src->current_size != fi->size)
{

View File

@ -201,15 +201,9 @@ evas_common_text_props_content_create(void *_fn, const Eina_Unicode *text,
}
#ifdef OT_SUPPORT
size_t char_index;
Evas_Font_Glyph_Info *gl_itr;
/* FIXME: as soon as we start caching fi for non-harfbuzz as well, move
* this (until text_props->fi = fi outside the ifdef */
const Eina_Unicode *base_char;
Evas_Coord pen_x = 0, adjust_x = 0;
(void) par_props;
(void) par_pos;
evas_common_font_ot_populate_text_props(fn, text, text_props, len);
/* Load the glyph according to the first letter of the script, preety
* bad, but will have to do */
{
@ -224,6 +218,17 @@ evas_common_text_props_content_create(void *_fn, const Eina_Unicode *text,
evas_common_font_glyph_search(fn, &fi, *base_char);
}
text_props->font_instance = fi;
size_t char_index;
Evas_Font_Glyph_Info *gl_itr;
Evas_Coord pen_x = 0, adjust_x = 0;
(void) par_props;
(void) par_pos;
evas_common_font_ot_populate_text_props(fn, text, text_props, len);
gl_itr = text_props->info->glyph;
for (char_index = 0 ; char_index < text_props->len ; char_index++)
{

View File

@ -23,6 +23,7 @@ struct _Evas_Text_Props
Evas_BiDi_Props bidi;
Evas_Script_Type script;
Evas_Text_Props_Info *info;
void *font_instance;
/* FIXME: just a hack in the meanwhile, remove when I can finally cache
* fi and split to scripts without harfbuzz */