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:
Carsten Haitzler 2005-01-31 15:03:38 +00:00
parent 100c9a3479
commit ed98ed1746
4 changed files with 80 additions and 73 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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);

View File

@ -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;