forked from enlightenment/efl
and in one foul swoop i merged font loading code betwene text block and text
objects... wherd! SVN revision: 13152
This commit is contained in:
parent
100c9a3479
commit
ed98ed1746
|
@ -46,6 +46,70 @@ evas_font_dir_cache_find(char *dir, char *font)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_font_load(Evas *evas, char *name, char *source, int size)
|
||||
{
|
||||
void *font = NULL;
|
||||
|
||||
#ifdef BUILD_FONT_LOADER_EET
|
||||
if (source)
|
||||
{
|
||||
Eet_File *ef;
|
||||
char *fake_name;
|
||||
|
||||
fake_name = evas_file_path_join(source, name);
|
||||
if (fake_name)
|
||||
{
|
||||
font = evas->engine.func->font_load(evas->engine.data.output, fake_name, size);
|
||||
if (!font)
|
||||
{
|
||||
/* read original!!! */
|
||||
ef = eet_open(source, EET_FILE_MODE_READ);
|
||||
if (ef)
|
||||
{
|
||||
void *fdata;
|
||||
int fsize = 0;
|
||||
|
||||
fdata = eet_read(ef, name, &fsize);
|
||||
if ((fdata) && (fsize > 0))
|
||||
{
|
||||
font = evas->engine.func->font_memory_load(evas->engine.data.output, fake_name, size, fdata, fsize);
|
||||
free(fdata);
|
||||
}
|
||||
eet_close(ef);
|
||||
}
|
||||
}
|
||||
free(fake_name);
|
||||
}
|
||||
}
|
||||
if (!font)
|
||||
{
|
||||
#endif
|
||||
if (evas_file_path_is_full_path((char *)name))
|
||||
font = evas->engine.func->font_load(evas->engine.data.output, (char *)name, size);
|
||||
else
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
for (l = evas->font_path; l; l = l->next)
|
||||
{
|
||||
char *f_file;
|
||||
|
||||
f_file = evas_font_dir_cache_find(l->data, (char *)name);
|
||||
if (f_file)
|
||||
{
|
||||
font = evas->engine.func->font_load(evas->engine.data.output, f_file, size);
|
||||
if (font) break;
|
||||
}
|
||||
}
|
||||
#ifdef BUILD_FONT_LOADER_EET
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return font;
|
||||
}
|
||||
|
||||
|
||||
/* private stuff */
|
||||
static Evas_Bool
|
||||
font_cache_dir_free(Evas_Hash *hash, const char *key, void *data, void *fdata)
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
#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";
|
||||
|
@ -67,7 +64,7 @@ static Evas_Object_Func object_func =
|
|||
*
|
||||
* FIXME: To be fixed.
|
||||
*
|
||||
evas_font_load.c */
|
||||
*/
|
||||
Evas_Object *
|
||||
evas_object_text_add(Evas *e)
|
||||
{
|
||||
|
@ -167,69 +164,7 @@ evas_object_text_font_set(Evas_Object *obj, const char *font, Evas_Font_Size siz
|
|||
o->engine_data);
|
||||
o->engine_data = NULL;
|
||||
}
|
||||
#ifdef BUILD_FONT_LOADER_EET
|
||||
if (o->cur.source)
|
||||
{
|
||||
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, 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
|
||||
if (evas_file_path_is_full_path((char *)font))
|
||||
o->engine_data = obj->layer->evas->engine.func->font_load(obj->layer->evas->engine.data.output,
|
||||
(char *)font, size);
|
||||
else
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
for (l = obj->layer->evas->font_path; l; l = l->next)
|
||||
{
|
||||
char *f_file;
|
||||
|
||||
f_file = evas_font_dir_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
|
||||
}
|
||||
o->engine_data = evas_font_load(obj->layer->evas, font, o->cur.source, size);
|
||||
if (!same_font)
|
||||
{
|
||||
if (o->cur.font) free(o->cur.font);
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
*
|
||||
* things to add:
|
||||
*
|
||||
* * font path support
|
||||
* * font sources support
|
||||
* * word wrap
|
||||
* * underline support
|
||||
* * double underline support
|
||||
|
@ -162,8 +160,17 @@ evas_object_textblock_layout_format_apply(Layout *layout, char *key, char *data)
|
|||
}
|
||||
else if (!strcmp(key, "font_source"))
|
||||
{
|
||||
if (layout->font.source) free(layout->font.source);
|
||||
layout->font.source = strdup(data);
|
||||
if (layout->font.source)
|
||||
{
|
||||
free(layout->font.source);
|
||||
layout->font.source = NULL;
|
||||
}
|
||||
if (!((data[0] == 0) ||
|
||||
(!strcmp(data, "0")) ||
|
||||
(!strcmp(data, "NULL")) ||
|
||||
(!strcmp(data, "null")) ||
|
||||
(!strcmp(data, "(null)"))))
|
||||
layout->font.source = strdup(data);
|
||||
}
|
||||
else if (!strcmp(key, "size"))
|
||||
{
|
||||
|
@ -487,7 +494,7 @@ evas_object_textblock_layout(Evas_Object *obj)
|
|||
lnode = calloc(1, sizeof(Layout_Node));
|
||||
evas_object_textblock_layout_copy(&layout, &(lnode->layout));
|
||||
if (lnode->layout.font.name)
|
||||
font = ENFN->font_load(ENDT, lnode->layout.font.name, lnode->layout.font.size);
|
||||
font = evas_font_load(obj->layer->evas, lnode->layout.font.name, lnode->layout.font.source, lnode->layout.font.size);
|
||||
lnode->layout.font.font = font;
|
||||
if (font) ascent = ENFN->font_max_ascent_get(ENDT, font);
|
||||
if (font) descent = ENFN->font_max_descent_get(ENDT, font);
|
||||
|
|
|
@ -687,7 +687,8 @@ void evas_object_grabs_cleanup(Evas_Object *obj);
|
|||
void evas_key_grab_free(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers);
|
||||
void evas_font_dir_cache_free(void);
|
||||
char *evas_font_dir_cache_find(char *dir, char *font);
|
||||
|
||||
void *evas_font_load(Evas *evas, char *name, char *source, int size);
|
||||
|
||||
extern int _evas_alloc_error;
|
||||
|
||||
typedef struct _Evas_Imaging_Image Evas_Imaging_Image;
|
||||
|
|
Loading…
Reference in New Issue