forked from enlightenment/efl
Evas font-engine: Cache fi for all cases (even without harfbuzz).
This is now possible, because we have a script querying function. SVN revision: 59109
This commit is contained in:
parent
af53b3d4a9
commit
9d23367627
|
@ -518,12 +518,13 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
(void) text;
|
||||||
|
(void) fn;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
im = dst->image.data;
|
im = dst->image.data;
|
||||||
#ifdef OT_SUPPORT
|
|
||||||
/* FIXME-tom: Should be applied to non-ot as well once we are capable of
|
|
||||||
* doing it */
|
|
||||||
fi = text_props->font_instance;
|
fi = text_props->font_instance;
|
||||||
if (fi)
|
if (fi)
|
||||||
{
|
{
|
||||||
|
@ -537,7 +538,6 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
|
||||||
fi->src->current_size = fi->size;
|
fi->src->current_size = fi->size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
EVAS_FONT_WALK_TEXT_START()
|
EVAS_FONT_WALK_TEXT_START()
|
||||||
{
|
{
|
||||||
|
@ -546,31 +546,8 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
|
||||||
int chr_x, chr_y, chr_w;
|
int chr_x, chr_y, chr_w;
|
||||||
if (!EVAS_FONT_WALK_IS_VISIBLE) continue;
|
if (!EVAS_FONT_WALK_IS_VISIBLE) continue;
|
||||||
|
|
||||||
#ifdef OT_SUPPORT
|
|
||||||
index = EVAS_FONT_WALK_INDEX;
|
index = EVAS_FONT_WALK_INDEX;
|
||||||
#else
|
|
||||||
/* FIXME: Should be removed once we split according to script without
|
|
||||||
* the use of harfbuzz */
|
|
||||||
if (text_props->repch)
|
|
||||||
index =
|
|
||||||
evas_common_font_glyph_search(fn, &fi, text_props->repch);
|
|
||||||
else
|
|
||||||
index =
|
|
||||||
evas_common_font_glyph_search(fn, &fi, text[EVAS_FONT_WALK_POS]);
|
|
||||||
|
|
||||||
if (index == 0)
|
|
||||||
{
|
|
||||||
index = evas_common_font_glyph_search(fn, &fi, REPLACEMENT_CHAR);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fi->src->current_size != fi->size)
|
|
||||||
{
|
|
||||||
FTLOCK();
|
|
||||||
FT_Activate_Size(fi->ft.size);
|
|
||||||
FTUNLOCK();
|
|
||||||
fi->src->current_size = fi->size;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
LKL(fi->ft_mutex);
|
LKL(fi->ft_mutex);
|
||||||
fg = evas_common_font_int_cache_glyph_get(fi, index);
|
fg = evas_common_font_int_cache_glyph_get(fi, index);
|
||||||
if (!fg)
|
if (!fg)
|
||||||
|
@ -843,9 +820,6 @@ evas_font_word_prerender(RGBA_Draw_Context *dc, const Eina_Unicode *in_text, con
|
||||||
gl = dc->font_ext.func.gl_new ? 1: 0;
|
gl = dc->font_ext.func.gl_new ? 1: 0;
|
||||||
|
|
||||||
above = 0; below = 0; baseline = 0; height = 0; descent = 0;
|
above = 0; below = 0; baseline = 0; height = 0; descent = 0;
|
||||||
#ifdef OT_SUPPORT
|
|
||||||
/* FIXME-tom: Should be applied to non-ot as well once we are capable of
|
|
||||||
* doing it */
|
|
||||||
fi = text_props->font_instance;
|
fi = text_props->font_instance;
|
||||||
if (fi)
|
if (fi)
|
||||||
{
|
{
|
||||||
|
@ -859,7 +833,6 @@ evas_font_word_prerender(RGBA_Draw_Context *dc, const Eina_Unicode *in_text, con
|
||||||
fi->src->current_size = fi->size;
|
fi->src->current_size = fi->size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* First pass: Work out how big and populate */
|
/* First pass: Work out how big and populate */
|
||||||
/* It's a bit hackish to use index and fg here as they are internal,
|
/* It's a bit hackish to use index and fg here as they are internal,
|
||||||
|
@ -871,26 +844,7 @@ evas_font_word_prerender(RGBA_Draw_Context *dc, const Eina_Unicode *in_text, con
|
||||||
{
|
{
|
||||||
FT_UInt index;
|
FT_UInt index;
|
||||||
RGBA_Font_Glyph *fg;
|
RGBA_Font_Glyph *fg;
|
||||||
#ifdef OT_SUPPORT
|
|
||||||
index = EVAS_FONT_WALK_INDEX;
|
index = EVAS_FONT_WALK_INDEX;
|
||||||
#else
|
|
||||||
/* FIXME: Should be removed once we split according to script without
|
|
||||||
* the use of harfbuzz */
|
|
||||||
if (text_props->repch)
|
|
||||||
index =
|
|
||||||
evas_common_font_glyph_search(fn, &fi, text_props->repch);
|
|
||||||
else
|
|
||||||
index =
|
|
||||||
evas_common_font_glyph_search(fn, &fi, text[EVAS_FONT_WALK_POS]);
|
|
||||||
|
|
||||||
if (fi->src->current_size != fi->size)
|
|
||||||
{
|
|
||||||
FTLOCK();
|
|
||||||
FT_Activate_Size(fi->ft.size);
|
|
||||||
FTUNLOCK();
|
|
||||||
fi->src->current_size = fi->size;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
LKL(fi->ft_mutex);
|
LKL(fi->ft_mutex);
|
||||||
fg = evas_common_font_int_cache_glyph_get(fi, index);
|
fg = evas_common_font_int_cache_glyph_get(fi, index);
|
||||||
if (!fg)
|
if (!fg)
|
||||||
|
|
|
@ -202,18 +202,15 @@ evas_common_text_props_content_create(void *_fn, const Eina_Unicode *text,
|
||||||
fi->src->current_size = fi->size;
|
fi->src->current_size = fi->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OT_SUPPORT
|
/* Load the glyph according to the first letter of the script, pretty
|
||||||
/* FIXME: as soon as we start caching fi for non-harfbuzz as well, move
|
|
||||||
* this (until text_props->fi = fi outside the ifdef */
|
|
||||||
/* Load the glyph according to the first letter of the script, preety
|
|
||||||
* bad, but will have to do */
|
* bad, but will have to do */
|
||||||
{
|
{
|
||||||
const Eina_Unicode *base_char;
|
const Eina_Unicode *base_char;
|
||||||
/* Skip common chars */
|
/* Skip common chars */
|
||||||
for (base_char = text ;
|
for (base_char = text ;
|
||||||
*base_char &&
|
*base_char &&
|
||||||
evas_common_language_char_script_get(*base_char) ==
|
(evas_common_language_char_script_get(*base_char) !=
|
||||||
EVAS_SCRIPT_COMMON ;
|
text_props->script) ;
|
||||||
base_char++)
|
base_char++)
|
||||||
;
|
;
|
||||||
if (!*base_char && (base_char > text)) base_char--;
|
if (!*base_char && (base_char > text)) base_char--;
|
||||||
|
@ -222,7 +219,7 @@ evas_common_text_props_content_create(void *_fn, const Eina_Unicode *text,
|
||||||
|
|
||||||
text_props->font_instance = fi;
|
text_props->font_instance = fi;
|
||||||
|
|
||||||
|
#ifdef OT_SUPPORT
|
||||||
size_t char_index;
|
size_t char_index;
|
||||||
Evas_Font_Glyph_Info *gl_itr;
|
Evas_Font_Glyph_Info *gl_itr;
|
||||||
Evas_Coord pen_x = 0, adjust_x = 0;
|
Evas_Coord pen_x = 0, adjust_x = 0;
|
||||||
|
@ -290,9 +287,6 @@ evas_common_text_props_content_create(void *_fn, const Eina_Unicode *text,
|
||||||
gl_itr++;
|
gl_itr++;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* FIXME: Move outside when we can (read comment above). */
|
|
||||||
text_props->font_instance = NULL;
|
|
||||||
|
|
||||||
/* We are walking the string in visual ordering */
|
/* We are walking the string in visual ordering */
|
||||||
Evas_Font_Glyph_Info *gl_itr;
|
Evas_Font_Glyph_Info *gl_itr;
|
||||||
Eina_Bool use_kerning;
|
Eina_Bool use_kerning;
|
||||||
|
|
Loading…
Reference in New Issue