missed a size_use() call that would have screwed up some font queries... and

i've disabled font face (font source) instance sharing - it will load one per
size again due to performance reasons. i need to tackle this with the ft2
guys and see if theres an acceptible solution.

i COULD shadow all the glyph and font metric data i use myself per size -
thats fine... EXCEPT for kerning - thats the thing i can't sanely (figure
out how to) shadow myself... if someone figures that out for me! be my guest!
:) let me know!


SVN revision: 8634
This commit is contained in:
Carsten Haitzler 2004-01-23 11:03:07 +00:00
parent 329fcd6494
commit 9f24ecb043
4 changed files with 21 additions and 9 deletions

View File

@ -2046,10 +2046,10 @@ setup(void)
int iw, ih;
evas_font_path_prepend(evas, FN);
// evas_image_cache_set(evas, 1024 * 1024);
// evas_font_cache_set(evas, 256 * 1024);
evas_image_cache_set(evas, 0);
evas_font_cache_set(evas, 0);
evas_image_cache_set(evas, 2048 * 1024);
evas_font_cache_set(evas, 1024 * 1024);
// evas_image_cache_set(evas, 0);
// evas_font_cache_set(evas, 0);
ob = evas_object_image_add(evas);
evas_object_image_file_set(ob, IM "backdrop.png", NULL);

View File

@ -104,6 +104,9 @@ evas_common_font_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font *fn, int
gl = evas_common_font_utf8_get_next((unsigned char *)text, &chr);
if (gl == 0) break;
index = FT_Get_Char_Index(fn->src->ft.face, gl);
/* hmmm kerning means i can't sanely do my own cached metric tables! */
/* grrr - this means font face sharing is kinda... not an option if */
/* you want performance */
if ((use_kerning) && (prev_index) && (index))
{
FT_Vector delta;

View File

@ -77,7 +77,14 @@ RGBA_Font_Source *
evas_common_font_source_find(const char *name)
{
Evas_Object_List *l;
#if 1
/* this effectively disables sharing out loaded outlines between */
/* multiple sizes of the same font. because FT_Set_Char_Size() needs */
/* to be called to update the fonts size output and caluclations */
/* for a different face size, but this can be SLOOOW */
return NULL;
#endif
if (!name) return NULL;
for (l = fonts_src; l; l = l->next)
{
@ -113,6 +120,7 @@ void
evas_common_font_size_use(RGBA_Font *fn)
{
if (fn->src->current_size == fn->real_size) return;
/* This call is evil and SLOW! */
FT_Set_Char_Size(fn->src->ft.face, 0, fn->real_size, 96, 96);
fn->src->current_size = fn->real_size;
}
@ -173,11 +181,11 @@ evas_common_font_load_init(RGBA_Font *fn)
int error;
fn->real_size = fn->size * 64;
error = FT_Set_Char_Size(fn->src->ft.face, 0, (fn->size * 64), 96, 96);
error = FT_Set_Char_Size(fn->src->ft.face, 0, fn->real_size, 96, 96);
if (error)
{
error = FT_Set_Pixel_Sizes(fn->src->ft.face, 0, fn->size);
fn->real_size = fn->size;
error = FT_Set_Pixel_Sizes(fn->src->ft.face, 0, fn->real_size);
}
if (error)
{
@ -202,12 +210,12 @@ evas_common_font_load_init(RGBA_Font *fn)
}
if (d == 0) break;
}
error = FT_Set_Pixel_Sizes(fn->src->ft.face, chosen_width, chosen_size);
fn->real_size = chosen_size;
error = FT_Set_Pixel_Sizes(fn->src->ft.face, chosen_width, fn->real_size);
if (error)
{
/* couldn't choose the size anyway... what now? */
}
fn->real_size = chosen_size;
}
fn->src->current_size = fn->real_size;

View File

@ -34,6 +34,7 @@ evas_common_font_ascent_get(RGBA_Font *fn)
int val;
int ret;
evas_common_font_size_use(fn);
val = (int)fn->src->ft.face->ascender;
fn->src->ft.face->units_per_EM = 2048; /* nasy hack - need to have correct val */
ret = (val * fn->src->ft.face->size->metrics.y_scale) / (fn->src->ft.face->units_per_EM * fn->src->ft.face->units_per_EM);