forked from enlightenment/efl
added in loading froms from memory buffers at the engine level, and now an
api to set a font "source" (blank is normal filing system) but the source can be a device or file etc. in this case it currently supports eet files as the source and then the font name is used as a key in th eet file as to where to find the font - edb support would be trivial to add. :) if the font is not found in the "source" it falls back to the font path etc. SVN revision: 8625
This commit is contained in:
parent
a9cfdc0688
commit
8523421b7c
|
@ -95,7 +95,7 @@ suggested configure options for evas for a P2/AMD/P3/P4 desktop X display:
|
|||
|
||||
make CFLAGS="-O9 -mpentiumpro -march=pentiumpro -mcpu=pentiumpro"
|
||||
|
||||
for those that want eet and edb image loading ability:
|
||||
for those that want eet and edb image loading ability and eet font loading:
|
||||
|
||||
./configure \
|
||||
--enable-software-x11 \
|
||||
|
@ -103,6 +103,7 @@ for those that want eet and edb image loading ability:
|
|||
--enable-image-loader-jpeg \
|
||||
--enable-image-loader-eet \
|
||||
--enable-image-loader-edb \
|
||||
--enable-font-loader-eet \
|
||||
--enable-cpu-p2-only \
|
||||
--enable-cpu-mmx \
|
||||
--enable-cpu-sse \
|
||||
|
|
|
@ -9,6 +9,7 @@ rm config.cache
|
|||
--enable-image-loader-jpeg \
|
||||
--enable-image-loader-eet \
|
||||
--enable-image-loader-edb \
|
||||
--enable-font-loader-eet \
|
||||
--enable-cpu-mmx \
|
||||
--enable-cpu-sse \
|
||||
--enable-cpu-c \
|
||||
|
|
|
@ -405,6 +405,34 @@ if test "x$have_jpeg" = "xyes"; then
|
|||
)
|
||||
fi
|
||||
|
||||
have_eet_fonts="";
|
||||
|
||||
AC_MSG_CHECKING(whether to enable eet font loader)
|
||||
|
||||
AC_ARG_ENABLE(font-loader-eet,
|
||||
[ --enable-font-loader-eet enable eet font loader], [
|
||||
if [ test "$enableval" = "yes" ]; then
|
||||
AC_MSG_RESULT(yes)
|
||||
have_eet_fonts="yes"
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
], [
|
||||
AC_MSG_RESULT(yes)
|
||||
have_eet_fonts="yes"
|
||||
]
|
||||
)
|
||||
|
||||
if test "x$have_eet_fonts" = "xyes"; then
|
||||
AC_CHECK_LIB(eet, eet_open,
|
||||
[
|
||||
AC_DEFINE(BUILD_FONT_LOADER_EET, 1, [EET Font Loader Support])
|
||||
eet_cflags=`eet-config --cflags`
|
||||
eet_libs=`eet-config --libs`
|
||||
]
|
||||
)
|
||||
fi
|
||||
|
||||
have_eet="";
|
||||
|
||||
AC_MSG_CHECKING(whether to enable eet image loader)
|
||||
|
|
|
@ -248,7 +248,8 @@ Suggested configure options for evas for a P2/AMD/P3/P4 desktop X display:
|
|||
make CFLAGS="-O9 -mpentiumpro -march=pentiumpro -mcpu=pentiumpro"
|
||||
@endverbatim
|
||||
|
||||
For those that want eet and edb image loading ability:
|
||||
For those that want eet and edb image loading ability and eet font loading
|
||||
ability:
|
||||
|
||||
@verbatim
|
||||
./configure \
|
||||
|
@ -257,6 +258,7 @@ For those that want eet and edb image loading ability:
|
|||
--enable-image-loader-jpeg \
|
||||
--enable-image-loader-eet \
|
||||
--enable-image-loader-edb \
|
||||
--enable-font-loader-eet \
|
||||
--enable-cpu-p2-only \
|
||||
--enable-cpu-mmx \
|
||||
--enable-cpu-sse \
|
||||
|
|
|
@ -359,6 +359,8 @@ extern "C" {
|
|||
int evas_image_cache_get (Evas *e);
|
||||
|
||||
Evas_Object *evas_object_text_add (Evas *e);
|
||||
void evas_object_text_font_source_set (Evas_Object *obj, const char *font);
|
||||
const char *evas_object_text_font_source_get (Evas_Object *obj);
|
||||
void evas_object_text_font_set (Evas_Object *obj, const char *font, Evas_Font_Size size);
|
||||
void evas_object_text_font_get (Evas_Object *obj, char **font, Evas_Font_Size *size);
|
||||
void evas_object_text_text_set (Evas_Object *obj, const char *text);
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#include "evas_common.h"
|
||||
#include "evas_private.h"
|
||||
#include "Evas.h"
|
||||
#ifdef BUILD_FONT_LOADER_EET
|
||||
#include <Eet.h>
|
||||
#endif
|
||||
|
||||
/* private magic number for text objects */
|
||||
static const char o_type[] = "text";
|
||||
|
@ -15,6 +18,7 @@ struct _Evas_Object_Text
|
|||
struct {
|
||||
char *text;
|
||||
char *font;
|
||||
char *source;
|
||||
Evas_Font_Size size;
|
||||
} cur, prev;
|
||||
char changed : 1;
|
||||
|
@ -500,6 +504,53 @@ evas_object_text_add(Evas *e)
|
|||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* To be documented.
|
||||
*
|
||||
* FIXME: To be fixed.
|
||||
*
|
||||
*/
|
||||
void
|
||||
evas_object_text_font_source_set(Evas_Object *obj, const char *font_source)
|
||||
{
|
||||
Evas_Object_Text *o;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
o = (Evas_Object_Text *)(obj->object_data);
|
||||
MAGIC_CHECK(o, Evas_Object_Text, MAGIC_OBJ_TEXT);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if ((o->cur.source) && (font_source) &&
|
||||
(!strcmp(o->cur.source, font_source)))
|
||||
return;
|
||||
if (o->cur.source) free(o->cur.source);
|
||||
if (font_source) o->cur.source = strdup(font_source);
|
||||
else o->cur.source = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* To be documented.
|
||||
*
|
||||
* FIXME: To be fixed.
|
||||
*
|
||||
*/
|
||||
const char *
|
||||
evas_object_text_font_source_get(Evas_Object *obj)
|
||||
{
|
||||
Evas_Object_Text *o;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
o = (Evas_Object_Text *)(obj->object_data);
|
||||
MAGIC_CHECK(o, Evas_Object_Text, MAGIC_OBJ_TEXT);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
return o->cur.source;
|
||||
}
|
||||
|
||||
/**
|
||||
* To be documented.
|
||||
*
|
||||
|
@ -542,18 +593,61 @@ evas_object_text_font_set(Evas_Object *obj, const char *font, Evas_Font_Size siz
|
|||
{
|
||||
Evas_List *l;
|
||||
|
||||
for (l = obj->layer->evas->font_path; l; l = l->next)
|
||||
#ifdef BUILD_FONT_LOADER_EET
|
||||
if (o->cur.source)
|
||||
{
|
||||
char *f_file;
|
||||
|
||||
f_file = object_text_font_cache_find(l->data, (char *)font);
|
||||
if (f_file)
|
||||
Eet_File *ef;
|
||||
char *fake_name;
|
||||
|
||||
fake_name = evas_file_path_join(o->cur.source, font);
|
||||
if (fake_name)
|
||||
{
|
||||
o->engine_data = obj->layer->evas->engine.func->font_load(obj->layer->evas->engine.data.output,
|
||||
f_file, size);
|
||||
if (o->engine_data) break;
|
||||
o->engine_data =
|
||||
obj->layer->evas->engine.func->font_load
|
||||
(obj->layer->evas->engine.data.output, fake_name,
|
||||
size);
|
||||
if (!o->engine_data)
|
||||
{
|
||||
/* read original!!! */
|
||||
ef = eet_open(o->cur.source, EET_FILE_MODE_READ);
|
||||
if (ef)
|
||||
{
|
||||
void *fdata;
|
||||
int fsize = 0;
|
||||
|
||||
fdata = eet_read(ef, font, &fsize);
|
||||
if ((fdata) && (fsize > 0))
|
||||
{
|
||||
o->engine_data =
|
||||
obj->layer->evas->engine.func->font_memory_load
|
||||
(obj->layer->evas->engine.data.output,
|
||||
fake_name, size, fdata, fsize);
|
||||
free(fdata);
|
||||
}
|
||||
eet_close(ef);
|
||||
}
|
||||
}
|
||||
free(fake_name);
|
||||
}
|
||||
}
|
||||
if (!o->engine_data)
|
||||
{
|
||||
#endif
|
||||
for (l = obj->layer->evas->font_path; l; l = l->next)
|
||||
{
|
||||
char *f_file;
|
||||
|
||||
f_file = object_text_font_cache_find(l->data, (char *)font);
|
||||
if (f_file)
|
||||
{
|
||||
o->engine_data = obj->layer->evas->engine.func->font_load(obj->layer->evas->engine.data.output,
|
||||
f_file, size);
|
||||
if (o->engine_data) break;
|
||||
}
|
||||
}
|
||||
#ifdef BUILD_FONT_LOADER_EET
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (o->cur.font) free(o->cur.font);
|
||||
if (font) o->cur.font = strdup(font);
|
||||
|
@ -1206,6 +1300,7 @@ evas_object_text_free(Evas_Object *obj)
|
|||
/* free obj */
|
||||
if (o->cur.text) free(o->cur.text);
|
||||
if (o->cur.font) free(o->cur.font);
|
||||
if (o->cur.source) free(o->cur.source);
|
||||
if (o->engine_data)
|
||||
obj->layer->evas->engine.func->font_free(obj->layer->evas->engine.data.output,
|
||||
o->engine_data);
|
||||
|
|
|
@ -69,6 +69,7 @@ static void evas_engine_buffer_image_cache_flush(void *data);
|
|||
static void evas_engine_buffer_image_cache_set(void *data, int bytes);
|
||||
static int evas_engine_buffer_image_cache_get(void *data);
|
||||
static void *evas_engine_buffer_font_load(void *data, char *name, int size);
|
||||
static void *evas_engine_buffer_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size);
|
||||
static void evas_engine_buffer_font_free(void *data, void *font);
|
||||
static int evas_engine_buffer_font_ascent_get(void *data, void *font);
|
||||
static int evas_engine_buffer_font_descent_get(void *data, void *font);
|
||||
|
@ -154,6 +155,7 @@ Evas_Func evas_engine_buffer_func =
|
|||
evas_engine_buffer_image_cache_get,
|
||||
/* font draw functions */
|
||||
evas_engine_buffer_font_load,
|
||||
evas_engine_buffer_font_memory_load,
|
||||
evas_engine_buffer_font_free,
|
||||
evas_engine_buffer_font_ascent_get,
|
||||
evas_engine_buffer_font_descent_get,
|
||||
|
@ -925,6 +927,15 @@ evas_engine_buffer_font_load(void *data, char *name, int size)
|
|||
return evas_common_font_load(name, size);
|
||||
}
|
||||
|
||||
static void *
|
||||
evas_engine_buffer_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size)
|
||||
{
|
||||
Render_Engine *re;
|
||||
|
||||
re = (Render_Engine *)data;
|
||||
return evas_common_font_memory_load(name, size, fdata, fdata_size);
|
||||
}
|
||||
|
||||
static void
|
||||
evas_engine_buffer_font_free(void *data, void *font)
|
||||
{
|
||||
|
|
|
@ -17,14 +17,14 @@ evas_common_font_cache_glyph_get(RGBA_Font *fn, FT_UInt index)
|
|||
fg = evas_hash_find(fn->glyphs, key);
|
||||
if (fg) return fg;
|
||||
|
||||
error = FT_Load_Glyph(fn->ft.face, index, FT_LOAD_NO_BITMAP);
|
||||
error = FT_Load_Glyph(fn->src->ft.face, index, FT_LOAD_NO_BITMAP);
|
||||
if (error) return NULL;
|
||||
|
||||
fg = malloc(sizeof(struct _RGBA_Font_Glyph));
|
||||
if (!fg) return NULL;
|
||||
memset(fg, 0, (sizeof(struct _RGBA_Font_Glyph)));
|
||||
|
||||
error = FT_Get_Glyph(fn->ft.face->glyph, &(fg->glyph));
|
||||
error = FT_Get_Glyph(fn->src->ft.face->glyph, &(fg->glyph));
|
||||
if (error)
|
||||
{
|
||||
free(fg);
|
||||
|
@ -90,7 +90,8 @@ evas_common_font_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font *fn, int
|
|||
|
||||
pen_x = x << 8;
|
||||
pen_y = y << 8;
|
||||
use_kerning = FT_HAS_KERNING(fn->ft.face);
|
||||
evas_common_font_size_use(fn);
|
||||
use_kerning = FT_HAS_KERNING(fn->src->ft.face);
|
||||
prev_index = 0;
|
||||
func = evas_common_draw_func_blend_alpha_get(dst);
|
||||
for (c = 0, chr = 0; text[chr];)
|
||||
|
@ -102,12 +103,12 @@ 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->ft.face, gl);
|
||||
index = FT_Get_Char_Index(fn->src->ft.face, gl);
|
||||
if ((use_kerning) && (prev_index) && (index))
|
||||
{
|
||||
FT_Vector delta;
|
||||
|
||||
FT_Get_Kerning(fn->ft.face, prev_index, index,
|
||||
FT_Get_Kerning(fn->src->ft.face, prev_index, index,
|
||||
ft_kerning_default, &delta);
|
||||
pen_x += delta.x << 2;
|
||||
}
|
||||
|
|
|
@ -4,94 +4,236 @@ extern FT_Library evas_ft_lib;
|
|||
|
||||
static int font_cache_usage = 0;
|
||||
static int font_cache = 0;
|
||||
static Evas_Object_List * fonts_src = NULL;
|
||||
static Evas_Object_List * fonts = NULL;
|
||||
|
||||
static int font_modify_cache_cb(Evas_Hash *hash, const char *key, void *data, void *fdata);
|
||||
static int font_flush_free_glyph_cb(Evas_Hash *hash, const char *key, void *data, void *fdata);
|
||||
|
||||
/* FIXME: */
|
||||
/* we should share face handles and have different ft sizes from the same */
|
||||
/* face (if applicable) */
|
||||
|
||||
RGBA_Font *
|
||||
evas_common_font_load(const char *name, int size)
|
||||
RGBA_Font_Source *
|
||||
evas_common_font_source_memory_load(const char *name, const void *data, int data_size)
|
||||
{
|
||||
int error;
|
||||
RGBA_Font_Source *fs;
|
||||
|
||||
fs = malloc(sizeof(RGBA_Font_Source));
|
||||
if (!fs) return NULL;
|
||||
fs->name = strdup(name);
|
||||
fs->file = NULL;
|
||||
fs->data = malloc(data_size);
|
||||
if (!fs->data)
|
||||
{
|
||||
if (fs->name) free(fs->name);
|
||||
free(fs);
|
||||
return NULL;
|
||||
}
|
||||
memcpy(fs->data, data, data_size);
|
||||
fs->data_size = data_size;
|
||||
error = FT_New_Memory_Face(evas_ft_lib, fs->data, fs->data_size, 0, &(fs->ft.face));
|
||||
if (error)
|
||||
{
|
||||
if (fs->name) free(fs->name);
|
||||
if (fs->data) free(fs->data);
|
||||
free(fs);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fs->references = 1;
|
||||
|
||||
fonts_src = evas_object_list_prepend(fonts_src, fs);
|
||||
return fs;
|
||||
}
|
||||
|
||||
RGBA_Font_Source *
|
||||
evas_common_font_source_load(const char *name)
|
||||
{
|
||||
int error;
|
||||
RGBA_Font_Source *fs;
|
||||
|
||||
fs = malloc(sizeof(RGBA_Font_Source));
|
||||
if (!fs) return NULL;
|
||||
fs->name = strdup(name);
|
||||
fs->file = strdup(name);
|
||||
error = FT_New_Face(evas_ft_lib, fs->file, 0, &(fs->ft.face));
|
||||
if (error)
|
||||
{
|
||||
if (fs->name) free(fs->name);
|
||||
if (fs->file) free(fs->file);
|
||||
free(fs);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fs->references = 1;
|
||||
|
||||
fonts_src = evas_object_list_prepend(fonts_src, fs);
|
||||
return fs;
|
||||
}
|
||||
|
||||
RGBA_Font_Source *
|
||||
evas_common_font_source_find(const char *name)
|
||||
{
|
||||
Evas_Object_List *l;
|
||||
|
||||
if (!name) return NULL;
|
||||
for (l = fonts_src; l; l = l->next)
|
||||
{
|
||||
RGBA_Font_Source *fs;
|
||||
|
||||
fs = (RGBA_Font_Source *)l;
|
||||
if ((fs->name) && (!strcmp(name, fs->name)))
|
||||
{
|
||||
fs->references++;
|
||||
fonts_src = evas_object_list_remove(fonts_src, fs);
|
||||
fonts_src = evas_object_list_prepend(fonts_src, fs);
|
||||
return fs;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
evas_common_font_source_free(RGBA_Font_Source *fs)
|
||||
{
|
||||
fs->references--;
|
||||
if (fs->references > 0) return;
|
||||
|
||||
fonts_src = evas_object_list_remove(fonts_src, fs);
|
||||
if (fs->name) free(fs->name);
|
||||
if (fs->file) free(fs->file);
|
||||
if (fs->data) free(fs->data);
|
||||
FT_Done_Face(fs->ft.face);
|
||||
free(fs);
|
||||
}
|
||||
|
||||
void
|
||||
evas_common_font_size_use(RGBA_Font *fn)
|
||||
{
|
||||
if (fn->src->current_size == fn->real_size) return;
|
||||
FT_Set_Char_Size(fn->src->ft.face, 0, fn->real_size, 96, 96);
|
||||
fn->src->current_size = fn->real_size;
|
||||
}
|
||||
|
||||
RGBA_Font *
|
||||
evas_common_font_memory_load(const char *name, int size, const void *data, int data_size)
|
||||
{
|
||||
RGBA_Font *fn;
|
||||
char *file;
|
||||
|
||||
fn = evas_common_font_find(name, size);
|
||||
if (fn) return fn;
|
||||
|
||||
fn = malloc(sizeof(RGBA_Font));
|
||||
file = (char *)name;
|
||||
if (!fn) return NULL;
|
||||
|
||||
error = FT_New_Face(evas_ft_lib, file, 0, &(fn->ft.face));
|
||||
if (error)
|
||||
fn->src = evas_common_font_source_find(name);
|
||||
if (!fn->src) fn->src = evas_common_font_source_memory_load(name, data, data_size);
|
||||
|
||||
if (!fn->src)
|
||||
{
|
||||
free(fn);
|
||||
return NULL;
|
||||
}
|
||||
error = FT_Set_Char_Size(fn->ft.face, 0, (size * 64), 96, 96);
|
||||
|
||||
fn->size = size;
|
||||
|
||||
return evas_common_font_load_init(fn);
|
||||
}
|
||||
|
||||
RGBA_Font *
|
||||
evas_common_font_load(const char *name, int size)
|
||||
{
|
||||
RGBA_Font *fn;
|
||||
|
||||
fn = evas_common_font_find(name, size);
|
||||
if (fn) return fn;
|
||||
|
||||
fn = malloc(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)
|
||||
{
|
||||
free(fn);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fn->size = size;
|
||||
|
||||
return evas_common_font_load_init(fn);
|
||||
}
|
||||
|
||||
RGBA_Font *
|
||||
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);
|
||||
if (error)
|
||||
error = FT_Set_Pixel_Sizes(fn->ft.face, 0, size);
|
||||
{
|
||||
error = FT_Set_Pixel_Sizes(fn->src->ft.face, 0, fn->size);
|
||||
fn->real_size = fn->size;
|
||||
}
|
||||
if (error)
|
||||
{
|
||||
int i;
|
||||
int chosen_size = 0;
|
||||
int chosen_width = 0;
|
||||
|
||||
for (i = 0; i < fn->ft.face->num_fixed_sizes; i++)
|
||||
for (i = 0; i < fn->src->ft.face->num_fixed_sizes; i++)
|
||||
{
|
||||
int s;
|
||||
int d, cd;
|
||||
|
||||
s = fn->ft.face->available_sizes[i].height;
|
||||
cd = chosen_size - size;
|
||||
s = fn->src->ft.face->available_sizes[i].height;
|
||||
cd = chosen_size - fn->size;
|
||||
if (cd < 0) cd = -cd;
|
||||
d = s - size;
|
||||
d = s - fn->size;
|
||||
if (d < 0) d = -d;
|
||||
if (d < cd)
|
||||
{
|
||||
chosen_width = fn->ft.face->available_sizes[i].width;
|
||||
chosen_width = fn->src->ft.face->available_sizes[i].width;
|
||||
chosen_size = s;
|
||||
}
|
||||
if (d == 0) break;
|
||||
}
|
||||
error = FT_Set_Pixel_Sizes(fn->ft.face, chosen_width, chosen_size);
|
||||
error = FT_Set_Pixel_Sizes(fn->src->ft.face, chosen_width, chosen_size);
|
||||
if (error)
|
||||
{
|
||||
/* couldn't choose the size anyway... what now? */
|
||||
}
|
||||
fn->real_size = chosen_size;
|
||||
}
|
||||
fn->src->current_size = fn->real_size;
|
||||
|
||||
#if 0 /* debugging to look at charmaps in a ttf */
|
||||
printf("%i\n", fn->ft.face->num_charmaps);
|
||||
printf("%i\n", fn->src->ft.face->num_charmaps);
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < fn->ft.face->num_charmaps; i++)
|
||||
for (i = 0; i < fn->src->ft.face->num_charmaps; i++)
|
||||
{
|
||||
printf("%i: %x, %c\n",
|
||||
i, fn->ft.face->charmaps[i]->encoding,
|
||||
fn->ft.face->charmaps[i]->encoding);
|
||||
i, fn->src->ft.face->charmaps[i]->encoding,
|
||||
fn->src->ft.face->charmaps[i]->encoding);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
error = FT_Select_Charmap(fn->ft.face, ft_encoding_unicode);
|
||||
error = FT_Select_Charmap(fn->src->ft.face, ft_encoding_unicode);
|
||||
if (error)
|
||||
{
|
||||
/* disable this for now...
|
||||
error = FT_Select_Charmap(fn->ft.face, ft_encoding_latin_2);
|
||||
error = FT_Select_Charmap(fn->src->ft.face, ft_encoding_latin_2);
|
||||
if (error)
|
||||
{
|
||||
error = FT_Select_Charmap(fn->ft.face, ft_encoding_sjis);
|
||||
error = FT_Select_Charmap(fn->src->ft.face, ft_encoding_sjis);
|
||||
if (error)
|
||||
{
|
||||
error = FT_Select_Charmap(fn->ft.face, ft_encoding_gb2312);
|
||||
error = FT_Select_Charmap(fn->src->ft.face, ft_encoding_gb2312);
|
||||
if (error)
|
||||
{
|
||||
error = FT_Select_Charmap(fn->ft.face, ft_encoding_big5);
|
||||
error = FT_Select_Charmap(fn->src->ft.face, ft_encoding_big5);
|
||||
if (error)
|
||||
{
|
||||
}
|
||||
|
@ -101,16 +243,9 @@ evas_common_font_load(const char *name, int size)
|
|||
*/
|
||||
}
|
||||
|
||||
fn->file = strdup(file);
|
||||
fn->name = strdup(file);
|
||||
fn->size = size;
|
||||
|
||||
fn->glyphs = NULL;
|
||||
|
||||
fn->usage = 0;
|
||||
|
||||
fn->references = 1;
|
||||
|
||||
fonts = evas_object_list_prepend(fonts, fn);
|
||||
return fn;
|
||||
}
|
||||
|
@ -145,13 +280,11 @@ font_modify_cache_cb(Evas_Hash *hash, const char *key, void *data, void *fdata)
|
|||
void
|
||||
evas_common_font_modify_cache_by(RGBA_Font *fn, int dir)
|
||||
{
|
||||
int sz_name = 0, sz_file = 0, sz_hash = 0;
|
||||
int sz_hash = 0;
|
||||
|
||||
if (fn->name) sz_name = strlen(fn->name);
|
||||
if (fn->file) sz_file = strlen(fn->file);
|
||||
if (fn->glyphs) sz_hash = sizeof(Evas_Hash);
|
||||
evas_hash_foreach(fn->glyphs, font_modify_cache_cb, &dir);
|
||||
font_cache_usage += dir * (sizeof(RGBA_Font) + sz_name + sz_file + sz_hash +
|
||||
font_cache_usage += dir * (sizeof(RGBA_Font) + sz_hash +
|
||||
sizeof(FT_FaceRec) + 16384); /* fudge values */
|
||||
}
|
||||
|
||||
|
@ -212,9 +345,8 @@ evas_common_font_flush_last(void)
|
|||
evas_hash_foreach(fn->glyphs, font_flush_free_glyph_cb, NULL);
|
||||
evas_hash_free(fn->glyphs);
|
||||
|
||||
if (fn->file) free(fn->file);
|
||||
if (fn->name) free(fn->name);
|
||||
FT_Done_Face(fn->ft.face);
|
||||
evas_common_font_source_free(fn->src);
|
||||
|
||||
free(fn);
|
||||
}
|
||||
|
||||
|
@ -228,7 +360,7 @@ evas_common_font_find(const char *name, int size)
|
|||
RGBA_Font *fn;
|
||||
|
||||
fn = (RGBA_Font *)l;
|
||||
if ((fn->size == size) && (!strcmp(name, fn->name)))
|
||||
if ((fn->size == size) && (!strcmp(name, fn->src->name)))
|
||||
{
|
||||
if (fn->references == 0) evas_common_font_modify_cache_by(fn, -1);
|
||||
fn->references++;
|
||||
|
|
|
@ -34,9 +34,9 @@ evas_common_font_ascent_get(RGBA_Font *fn)
|
|||
int val;
|
||||
int ret;
|
||||
|
||||
val = (int)fn->ft.face->ascender;
|
||||
fn->ft.face->units_per_EM = 2048; /* nasy hack - need to have correct val */
|
||||
ret = (val * fn->ft.face->size->metrics.y_scale) / (fn->ft.face->units_per_EM * fn->ft.face->units_per_EM);
|
||||
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);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -46,9 +46,10 @@ evas_common_font_descent_get(RGBA_Font *fn)
|
|||
int val;
|
||||
int ret;
|
||||
|
||||
val = -(int)fn->ft.face->descender;
|
||||
fn->ft.face->units_per_EM = 2048; /* nasy hack - need to have correct val */
|
||||
ret = (val * fn->ft.face->size->metrics.y_scale) / (fn->ft.face->units_per_EM * fn->ft.face->units_per_EM);
|
||||
evas_common_font_size_use(fn);
|
||||
val = -(int)fn->src->ft.face->descender;
|
||||
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);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -58,9 +59,10 @@ evas_common_font_max_ascent_get(RGBA_Font *fn)
|
|||
int val;
|
||||
int ret;
|
||||
|
||||
val = (int)fn->ft.face->bbox.yMax;
|
||||
fn->ft.face->units_per_EM = 2048; /* nasy hack - need to have correct val */
|
||||
ret = (val * fn->ft.face->size->metrics.y_scale) / (fn->ft.face->units_per_EM * fn->ft.face->units_per_EM);
|
||||
evas_common_font_size_use(fn);
|
||||
val = (int)fn->src->ft.face->bbox.yMax;
|
||||
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);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -70,9 +72,10 @@ evas_common_font_max_descent_get(RGBA_Font *fn)
|
|||
int val;
|
||||
int ret;
|
||||
|
||||
val = -(int)fn->ft.face->bbox.yMin;
|
||||
fn->ft.face->units_per_EM = 2048; /* nasy hack - need to have correct val */
|
||||
ret = (val * fn->ft.face->size->metrics.y_scale) / (fn->ft.face->units_per_EM * fn->ft.face->units_per_EM);
|
||||
evas_common_font_size_use(fn);
|
||||
val = -(int)fn->src->ft.face->bbox.yMin;
|
||||
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);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -82,9 +85,10 @@ evas_common_font_get_line_advance(RGBA_Font *fn)
|
|||
int val;
|
||||
int ret;
|
||||
|
||||
val = (int)fn->ft.face->height;
|
||||
fn->ft.face->units_per_EM = 2048; /* nasy hack - need to have correct val */
|
||||
ret = (val * fn->ft.face->size->metrics.y_scale) / (fn->ft.face->units_per_EM * fn->ft.face->units_per_EM);
|
||||
evas_common_font_size_use(fn);
|
||||
val = (int)fn->src->ft.face->height;
|
||||
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);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,8 @@ evas_common_font_query_size(RGBA_Font *fn, const char *text, int *w, int *h)
|
|||
end_x = 0;
|
||||
pen_x = 0;
|
||||
pen_y = 0;
|
||||
use_kerning = FT_HAS_KERNING(fn->ft.face);
|
||||
evas_common_font_size_use(fn);
|
||||
use_kerning = FT_HAS_KERNING(fn->src->ft.face);
|
||||
prev_index = 0;
|
||||
for (chr = 0; text[chr];)
|
||||
{
|
||||
|
@ -25,12 +26,12 @@ evas_common_font_query_size(RGBA_Font *fn, const char *text, int *w, int *h)
|
|||
|
||||
gl = evas_common_font_utf8_get_next((unsigned char *)text, &chr);
|
||||
if (gl == 0) break;
|
||||
index = FT_Get_Char_Index(fn->ft.face, gl);
|
||||
index = FT_Get_Char_Index(fn->src->ft.face, gl);
|
||||
if ((use_kerning) && (prev_index) && (index))
|
||||
{
|
||||
FT_Vector delta;
|
||||
|
||||
FT_Get_Kerning(fn->ft.face, prev_index, index,
|
||||
FT_Get_Kerning(fn->src->ft.face, prev_index, index,
|
||||
ft_kerning_default, &delta);
|
||||
pen_x += delta.x << 2;
|
||||
}
|
||||
|
@ -64,7 +65,8 @@ evas_common_font_query_inset(RGBA_Font *fn, const char *text)
|
|||
if (!text[0]) return 0;
|
||||
gl = evas_common_font_utf8_get_next((unsigned char *)text, &chr);
|
||||
if (gl == 0) return 0;
|
||||
index = FT_Get_Char_Index(fn->ft.face, gl);
|
||||
evas_common_font_size_use(fn);
|
||||
index = FT_Get_Char_Index(fn->src->ft.face, gl);
|
||||
fg = evas_common_font_cache_glyph_get(fn, index);
|
||||
if (!fg) return 0;
|
||||
return fg->glyph_out->left;
|
||||
|
@ -83,7 +85,8 @@ evas_common_font_query_advance(RGBA_Font *fn, const char *text, int *h_adv, int
|
|||
start_x = 0;
|
||||
pen_x = 0;
|
||||
pen_y = 0;
|
||||
use_kerning = FT_HAS_KERNING(fn->ft.face);
|
||||
evas_common_font_size_use(fn);
|
||||
use_kerning = FT_HAS_KERNING(fn->src->ft.face);
|
||||
prev_index = 0;
|
||||
for (chr = 0; text[chr];)
|
||||
{
|
||||
|
@ -94,12 +97,12 @@ evas_common_font_query_advance(RGBA_Font *fn, const char *text, int *h_adv, int
|
|||
|
||||
gl = evas_common_font_utf8_get_next((unsigned char *)text, &chr);
|
||||
if (gl == 0) break;
|
||||
index = FT_Get_Char_Index(fn->ft.face, gl);
|
||||
index = FT_Get_Char_Index(fn->src->ft.face, gl);
|
||||
if ((use_kerning) && (prev_index) && (index))
|
||||
{
|
||||
FT_Vector delta;
|
||||
|
||||
FT_Get_Kerning(fn->ft.face, prev_index, index,
|
||||
FT_Get_Kerning(fn->src->ft.face, prev_index, index,
|
||||
ft_kerning_default, &delta);
|
||||
pen_x += delta.x << 2;
|
||||
}
|
||||
|
@ -130,7 +133,8 @@ evas_common_font_query_char_coords(RGBA_Font *fn, const char *text, int pos, int
|
|||
|
||||
pen_x = 0;
|
||||
pen_y = 0;
|
||||
use_kerning = FT_HAS_KERNING(fn->ft.face);
|
||||
evas_common_font_size_use(fn);
|
||||
use_kerning = FT_HAS_KERNING(fn->src->ft.face);
|
||||
prev_index = 0;
|
||||
prev_chr_end = 0;
|
||||
asc = evas_common_font_max_ascent_get(fn);
|
||||
|
@ -147,11 +151,11 @@ evas_common_font_query_char_coords(RGBA_Font *fn, const char *text, int pos, int
|
|||
pchr = chr;
|
||||
gl = evas_common_font_utf8_get_next((unsigned char *)text, &chr);
|
||||
if (gl == 0) break;
|
||||
index = FT_Get_Char_Index(fn->ft.face, gl);
|
||||
index = FT_Get_Char_Index(fn->src->ft.face, gl);
|
||||
kern = 0;
|
||||
if ((use_kerning) && (prev_index) && (index))
|
||||
{
|
||||
FT_Get_Kerning(fn->ft.face, prev_index, index,
|
||||
FT_Get_Kerning(fn->src->ft.face, prev_index, index,
|
||||
ft_kerning_default, &delta);
|
||||
kern = delta.x << 2;
|
||||
pen_x += kern;
|
||||
|
@ -203,7 +207,8 @@ evas_common_font_query_text_at_pos(RGBA_Font *fn, const char *text, int x, int y
|
|||
|
||||
pen_x = 0;
|
||||
pen_y = 0;
|
||||
use_kerning = FT_HAS_KERNING(fn->ft.face);
|
||||
evas_common_font_size_use(fn);
|
||||
use_kerning = FT_HAS_KERNING(fn->src->ft.face);
|
||||
prev_index = 0;
|
||||
prev_chr_end = 0;
|
||||
asc = evas_common_font_max_ascent_get(fn);
|
||||
|
@ -220,11 +225,11 @@ evas_common_font_query_text_at_pos(RGBA_Font *fn, const char *text, int x, int y
|
|||
pchr = chr;
|
||||
gl = evas_common_font_utf8_get_next((unsigned char *)text, &chr);
|
||||
if (gl == 0) break;
|
||||
index = FT_Get_Char_Index(fn->ft.face, gl);
|
||||
index = FT_Get_Char_Index(fn->src->ft.face, gl);
|
||||
kern = 0;
|
||||
if ((use_kerning) && (prev_index) && (index))
|
||||
{
|
||||
FT_Get_Kerning(fn->ft.face, prev_index, index,
|
||||
FT_Get_Kerning(fn->src->ft.face, prev_index, index,
|
||||
ft_kerning_default, &delta);
|
||||
kern = delta.x << 2;
|
||||
pen_x += kern;
|
||||
|
|
|
@ -62,6 +62,7 @@ Evas_Func evas_engine_directfb_func = {
|
|||
evas_engine_directfb_image_cache_get,
|
||||
/* more to come */
|
||||
evas_engine_directfb_font_load,
|
||||
evas_engine_directfb_font_memory_load,
|
||||
evas_engine_directfb_font_free,
|
||||
evas_engine_directfb_font_ascent_get,
|
||||
evas_engine_directfb_font_descent_get,
|
||||
|
@ -759,6 +760,15 @@ evas_engine_directfb_font_load(void *data, char *name, int size)
|
|||
return evas_common_font_load(name, size);
|
||||
}
|
||||
|
||||
void *
|
||||
evas_engine_directfb_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size)
|
||||
{
|
||||
Render_Engine *re;
|
||||
|
||||
re = (Render_Engine *) data;
|
||||
return evas_common_font_memory_load(name, size, fdata, fdata_size);
|
||||
}
|
||||
|
||||
void
|
||||
evas_engine_directfb_font_free(void *data, void *font)
|
||||
{
|
||||
|
|
|
@ -133,6 +133,11 @@ void evas_engine_directfb_gradient_draw(void *data,
|
|||
double angle);
|
||||
void *evas_engine_directfb_font_load(void *data, char *name,
|
||||
int size);
|
||||
void *evas_engine_directfb_font_memory_load(void *data,
|
||||
char *name,
|
||||
int size,
|
||||
const void *fdata,
|
||||
int fdata_size);
|
||||
void evas_engine_directfb_font_free(void *data, void *font);
|
||||
int evas_engine_directfb_font_ascent_get(void *data,
|
||||
void *font);
|
||||
|
|
|
@ -57,6 +57,7 @@ static void evas_engine_fb_image_cache_flush(void *data);
|
|||
static void evas_engine_fb_image_cache_set(void *data, int bytes);
|
||||
static int evas_engine_fb_image_cache_get(void *data);
|
||||
static void *evas_engine_fb_font_load(void *data, char *name, int size);
|
||||
static void *evas_engine_fb_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size);
|
||||
static void evas_engine_fb_font_free(void *data, void *font);
|
||||
static int evas_engine_fb_font_ascent_get(void *data, void *font);
|
||||
static int evas_engine_fb_font_descent_get(void *data, void *font);
|
||||
|
@ -142,6 +143,7 @@ Evas_Func evas_engine_fb_func =
|
|||
evas_engine_fb_image_cache_get,
|
||||
/* font draw functions */
|
||||
evas_engine_fb_font_load,
|
||||
evas_engine_fb_font_memory_load,
|
||||
evas_engine_fb_font_free,
|
||||
evas_engine_fb_font_ascent_get,
|
||||
evas_engine_fb_font_descent_get,
|
||||
|
@ -844,6 +846,15 @@ evas_engine_fb_font_load(void *data, char *name, int size)
|
|||
return evas_common_font_load(name, size);
|
||||
}
|
||||
|
||||
static void *
|
||||
evas_engine_fb_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size)
|
||||
{
|
||||
Render_Engine *re;
|
||||
|
||||
re = (Render_Engine *)data;
|
||||
return evas_common_font_memory_load(name, size, fdata, fdata_size);
|
||||
}
|
||||
|
||||
static void
|
||||
evas_engine_fb_font_free(void *data, void *font)
|
||||
{
|
||||
|
|
|
@ -58,6 +58,7 @@ static void evas_engine_gl_x11_image_cache_flush(void *data);
|
|||
static void evas_engine_gl_x11_image_cache_set(void *data, int bytes);
|
||||
static int evas_engine_gl_x11_image_cache_get(void *data);
|
||||
static void *evas_engine_gl_x11_font_load(void *data, char *name, int size);
|
||||
static void *evas_engine_gl_x11_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size);
|
||||
static void evas_engine_gl_x11_font_free(void *data, void *font);
|
||||
static int evas_engine_gl_x11_font_ascent_get(void *data, void *font);
|
||||
static int evas_engine_gl_x11_font_descent_get(void *data, void *font);
|
||||
|
@ -148,6 +149,7 @@ Evas_Func evas_engine_gl_x11_func =
|
|||
evas_engine_gl_x11_image_cache_get,
|
||||
/* font draw functions */
|
||||
evas_engine_gl_x11_font_load,
|
||||
evas_engine_gl_x11_font_memory_load,
|
||||
evas_engine_gl_x11_font_free,
|
||||
evas_engine_gl_x11_font_ascent_get,
|
||||
evas_engine_gl_x11_font_descent_get,
|
||||
|
@ -851,6 +853,15 @@ evas_engine_gl_x11_font_load(void *data, char *name, int size)
|
|||
return evas_common_font_load(name, size);
|
||||
}
|
||||
|
||||
static void *
|
||||
evas_engine_gl_x11_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size)
|
||||
{
|
||||
Render_Engine *re;
|
||||
|
||||
re = (Render_Engine *)data;
|
||||
return evas_common_font_memory_load(name, size, fdata, fdata_size);
|
||||
}
|
||||
|
||||
static void
|
||||
evas_engine_gl_x11_font_free(void *data, void *font)
|
||||
{
|
||||
|
|
|
@ -57,6 +57,7 @@ static void evas_engine_software_qtopia_image_cache_flush(void *data);
|
|||
static void evas_engine_software_qtopia_image_cache_set(void *data, int bytes);
|
||||
static int evas_engine_software_qtopia_image_cache_get(void *data);
|
||||
static void *evas_engine_software_qtopia_font_load(void *data, char *name, int size);
|
||||
static void *evas_engine_software_qtopia_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size);
|
||||
static void evas_engine_software_qtopia_font_free(void *data, void *font);
|
||||
static int evas_engine_software_qtopia_font_ascent_get(void *data, void *font);
|
||||
static int evas_engine_software_qtopia_font_descent_get(void *data, void *font);
|
||||
|
@ -145,6 +146,7 @@ Evas_Func evas_engine_software_qtopia_func =
|
|||
evas_engine_software_qtopia_image_cache_get,
|
||||
/* font draw functions */
|
||||
evas_engine_software_qtopia_font_load,
|
||||
evas_engine_software_qtopia_font_memory_load,
|
||||
evas_engine_software_qtopia_font_free,
|
||||
evas_engine_software_qtopia_font_ascent_get,
|
||||
evas_engine_software_qtopia_font_descent_get,
|
||||
|
@ -867,6 +869,15 @@ evas_engine_software_qtopia_font_load(void *data, char *name, int size)
|
|||
return evas_common_font_load(name, size);
|
||||
}
|
||||
|
||||
static void *
|
||||
evas_engine_software_qtopia_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size)
|
||||
{
|
||||
Render_Engine *re;
|
||||
|
||||
re = (Render_Engine *)data;
|
||||
return evas_common_font_load(name, size, fdata, fdata_size);
|
||||
}
|
||||
|
||||
static void
|
||||
evas_engine_software_qtopia_font_free(void *data, void *font)
|
||||
{
|
||||
|
|
|
@ -57,6 +57,7 @@ static void evas_engine_software_x11_image_cache_flush(void *data);
|
|||
static void evas_engine_software_x11_image_cache_set(void *data, int bytes);
|
||||
static int evas_engine_software_x11_image_cache_get(void *data);
|
||||
static void *evas_engine_software_x11_font_load(void *data, char *name, int size);
|
||||
static void *evas_engine_software_x11_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size);
|
||||
static void evas_engine_software_x11_font_free(void *data, void *font);
|
||||
static int evas_engine_software_x11_font_ascent_get(void *data, void *font);
|
||||
static int evas_engine_software_x11_font_descent_get(void *data, void *font);
|
||||
|
@ -157,6 +158,7 @@ Evas_Func evas_engine_software_x11_func =
|
|||
evas_engine_software_x11_image_cache_get,
|
||||
/* font draw functions */
|
||||
evas_engine_software_x11_font_load,
|
||||
evas_engine_software_x11_font_memory_load,
|
||||
evas_engine_software_x11_font_free,
|
||||
evas_engine_software_x11_font_ascent_get,
|
||||
evas_engine_software_x11_font_descent_get,
|
||||
|
@ -911,6 +913,15 @@ evas_engine_software_x11_font_load(void *data, char *name, int size)
|
|||
return evas_common_font_load(name, size);
|
||||
}
|
||||
|
||||
static void *
|
||||
evas_engine_software_x11_font_memory_load(void *data, char *name, int size, const void *fdata, int fdata_size)
|
||||
{
|
||||
Render_Engine *re;
|
||||
|
||||
re = (Render_Engine *)data;
|
||||
return evas_common_font_memory_load(name, size, fdata, fdata_size);
|
||||
}
|
||||
|
||||
static void
|
||||
evas_engine_software_x11_font_free(void *data, void *font)
|
||||
{
|
||||
|
|
|
@ -165,6 +165,7 @@ typedef struct _RGBA_Gradient RGBA_Gradient;
|
|||
typedef struct _RGBA_Gradient_Color RGBA_Gradient_Color;
|
||||
typedef struct _RGBA_Polygon_Point RGBA_Polygon_Point;
|
||||
typedef struct _RGBA_Font RGBA_Font;
|
||||
typedef struct _RGBA_Font_Source RGBA_Font_Source;
|
||||
typedef struct _RGBA_Font_Glyph RGBA_Font_Glyph;
|
||||
|
||||
typedef struct _Cutout_Rect Cutout_Rect;
|
||||
|
@ -332,13 +333,11 @@ struct _RGBA_Polygon_Point
|
|||
struct _RGBA_Font
|
||||
{
|
||||
Evas_Object_List _list_data;
|
||||
char *name;
|
||||
char *file;
|
||||
int size;
|
||||
|
||||
struct {
|
||||
FT_Face face;
|
||||
} ft;
|
||||
RGBA_Font_Source *src;
|
||||
|
||||
int size;
|
||||
int real_size;
|
||||
|
||||
Evas_Hash *glyphs;
|
||||
|
||||
|
@ -347,6 +346,25 @@ struct _RGBA_Font
|
|||
int references;
|
||||
};
|
||||
|
||||
struct _RGBA_Font_Source
|
||||
{
|
||||
Evas_Object_List _list_data;
|
||||
|
||||
char *name;
|
||||
char *file;
|
||||
|
||||
void *data;
|
||||
int data_size;
|
||||
|
||||
int current_size;
|
||||
|
||||
struct {
|
||||
FT_Face face;
|
||||
} ft;
|
||||
|
||||
int references;
|
||||
};
|
||||
|
||||
struct _RGBA_Font_Glyph
|
||||
{
|
||||
FT_Glyph glyph;
|
||||
|
@ -805,8 +823,14 @@ void evas_common_blit_rectangle (RGBA_Image *src, RGBA_Image *
|
|||
/****/
|
||||
void evas_common_font_init (void);
|
||||
void evas_common_font_shutdown (void);
|
||||
|
||||
RGBA_Font_Source *evas_common_font_source_memory_load(const char *name, const void *data, int data_size);
|
||||
RGBA_Font_Source *evas_common_font_source_load (const char *name);
|
||||
RGBA_Font_Source *evas_common_font_source_find (const char *name);
|
||||
void evas_common_font_source_free (RGBA_Font_Source *fs);
|
||||
void evas_common_font_size_use (RGBA_Font *fn);
|
||||
RGBA_Font *evas_common_font_memory_load (const char *name, int size, const void *data, int data_size);
|
||||
RGBA_Font *evas_common_font_load (const char *name, int size);
|
||||
RGBA_Font *evas_common_font_load_init (RGBA_Font *fn);
|
||||
void evas_common_font_free (RGBA_Font *fn);
|
||||
void evas_common_font_modify_cache_by (RGBA_Font *fn, int dir);
|
||||
int evas_common_font_cache_get (void);
|
||||
|
|
|
@ -524,6 +524,7 @@ struct _Evas_Func
|
|||
int (*image_cache_get) (void *data);
|
||||
|
||||
void *(*font_load) (void *data, char *name, int size);
|
||||
void *(*font_memory_load) (void *data, char *name, int size, const void *fdata, int fdata_size);
|
||||
void (*font_free) (void *data, void *font);
|
||||
int (*font_ascent_get) (void *data, void *font);
|
||||
int (*font_descent_get) (void *data, void *font);
|
||||
|
|
Loading…
Reference in New Issue