diff --git a/doc/index.html b/doc/index.html
index d151866..2ec4735 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -1468,10 +1468,9 @@ and vertically)
This function will load a truetype font from the first directory
in the font path that contains that font. The font name format is "font_name/size".
-For example: if there is a font file called blum.ttf somewhere in the font
-path you might use "blum/20" to load a 20 pixel sized font of blum;
-or "blum/20, vera/20, mono/20" to load one or all fonts of the comma
-separated list. If the font cannot be found NULL is returned.
+For example. If there is a font file called blum.ttf somewhere in the font
+path you might use "blum/20" to load a 20 pixel sized font of blum. If
+the font cannot be found NULL is returned.
void imlib_free_font(void);
diff --git a/src/lib/api.c b/src/lib/api.c
index 96923af..186a56e 100644
--- a/src/lib/api.c
+++ b/src/lib/api.c
@@ -3078,21 +3078,16 @@ imlib_image_tile(void)
* @return NULL if no font found.
*
* Loads a truetype font from the first directory in the font path that
- * contains that font. The font name @p font_name format is "font_name/size"
- * or a comma separated list of "font_name/size" elements.
- * For example: if there is a font file called blum.ttf somewhere in the
+ * contains that font. The font name @p font_name format is "font_name/size". For
+ * example. If there is a font file called blum.ttf somewhere in the
* font path you might use "blum/20" to load a 20 pixel sized font of
- * blum; or "blum/20, vera/20, mono/20" to load one or all fonts
- * of the comma separated list. If the font cannot be found NULL is returned.
+ * blum. If the font cannot be found NULL is returned.
*
**/
EAPI Imlib_Font
imlib_load_font(const char *font_name)
{
- if(strchr(font_name, ',') != NULL)
- return imlib_font_load_fontset(font_name);
- else
- return imlib_font_load_joined(font_name);
+ return imlib_font_load_joined(font_name);
}
/**
@@ -3101,20 +3096,11 @@ imlib_load_font(const char *font_name)
EAPI void
imlib_free_font(void)
{
- ImlibFont *fn;
-
if (!ctx)
ctx = imlib_context_new();
CHECK_PARAM_POINTER("imlib_free_font", "font", ctx->font);
-
- fn = (ImlibFont*)ctx->font; ctx->font = NULL;
-
- if(fn->next_in_set == NULL)
- {
- imlib_font_free(fn);
- return;
- }
- imlib_font_free_fontset(fn);
+ imlib_font_free(ctx->font);
+ ctx->font = NULL;
}
/**
diff --git a/src/lib/color_helpers.c b/src/lib/color_helpers.c
index c08a362..85d73a1 100644
--- a/src/lib/color_helpers.c
+++ b/src/lib/color_helpers.c
@@ -1,4 +1,3 @@
-#include
#include "color_helpers.h"
/*
* Color space conversion helper routines
diff --git a/src/lib/font.h b/src/lib/font.h
index 9ff274e..526acb3 100644
--- a/src/lib/font.h
+++ b/src/lib/font.h
@@ -50,7 +50,6 @@ struct _Imlib_Font
int references;
- struct _Imlib_Font *next_in_set;
};
struct _Imlib_Font_Glyph
@@ -84,12 +83,6 @@ void imlib_font_modify_cache_by(ImlibFont * fn, int dir);
void imlib_font_modify_cache_by(ImlibFont * fn, int dir);
void imlib_font_flush_last(void);
ImlibFont *imlib_font_find(const char *name, int size);
-ImlibFont *imlib_font_load_fontset(const char *font_name);
-void imlib_font_free_fontset(ImlibFont *fn_list);
-ImlibFont *imlib_font_find_face_in_fontset(ImlibFont *fn,
- ImlibFont *fn_list, unsigned long uni_id,
- int encoding_id, int force_missing_glyph,
- FT_UInt *out_glyph_id, int *out_missing);
void imlib_font_query_size(ImlibFont * fn, const char *text,
int *w, int *h);
diff --git a/src/lib/font_draw.c b/src/lib/font_draw.c
index 371bd79..1255d98 100644
--- a/src/lib/font_draw.c
+++ b/src/lib/font_draw.c
@@ -67,7 +67,7 @@ imlib_font_cache_glyph_get(ImlibFont * fn, FT_UInt index)
}
void
-imlib_render_str(ImlibImage * im, ImlibFont *fn_list, int drx, int dry,
+imlib_render_str(ImlibImage * im, ImlibFont * fn, int drx, int dry,
const char *text, DATA8 r, DATA8 g, DATA8 b, DATA8 a,
char dir, double angle, int *retw, int *reth, int blur,
int *nextx, int *nexty, ImlibOp op, int clx, int cly,
@@ -78,9 +78,8 @@ imlib_render_str(ImlibImage * im, ImlibFont *fn_list, int drx, int dry,
DATA32 *data, col;
int nx, ny;
- imlib_font_query_advance(fn_list, text, &w, NULL);
- h = imlib_font_max_ascent_get(fn_list)
- - imlib_font_max_descent_get(fn_list);
+ imlib_font_query_advance(fn, text, &w, NULL);
+ h = imlib_font_max_ascent_get(fn) - imlib_font_max_descent_get(fn);
data = malloc(w * h * sizeof(DATA32));
if (!data)
@@ -98,10 +97,10 @@ imlib_render_str(ImlibImage * im, ImlibFont *fn_list, int drx, int dry,
/* TODO check for endianess */
col = (a << 24) | (r << 16) | (g << 8) | b;
- ascent = imlib_font_max_ascent_get(fn_list);
+ ascent = imlib_font_max_ascent_get(fn);
+
+ imlib_font_draw(im2, col, fn, 0, ascent, text, &nx, &ny, 0, 0, w, h);
- imlib_font_draw(im2, col, fn_list, 0, ascent, text, &nx, &ny, clx, cly,
- clw, clh);
/* OK, now we have small ImlibImage with text rendered,
* have to blend it on im */
@@ -247,13 +246,13 @@ imlib_render_str(ImlibImage * im, ImlibFont *fn_list, int drx, int dry,
}
void
-imlib_font_draw(ImlibImage * dst, DATA32 col, ImlibFont *fn_list, int x, int y,
+imlib_font_draw(ImlibImage * dst, DATA32 col, ImlibFont * fn, int x, int y,
const char *text, int *nextx, int *nexty, int clx, int cly,
int clw, int clh)
{
- ImlibFont *fn;
+ int use_kerning;
int pen_x, pen_y;
- int chr, missing_glyph;
+ int chr;
FT_UInt prev_index;
int ext_x, ext_y, ext_w, ext_h;
DATA32 *im;
@@ -305,8 +304,8 @@ imlib_font_draw(ImlibImage * dst, DATA32 col, ImlibFont *fn_list, int x, int y,
pen_x = x << 8;
pen_y = y << 8;
- prev_index = 0; fn = NULL; missing_glyph = 1;
-
+ use_kerning = FT_HAS_KERNING(fn->ft.face);
+ prev_index = 0;
for (chr = 0; text[chr];)
{
FT_UInt index;
@@ -317,24 +316,18 @@ imlib_font_draw(ImlibImage * dst, DATA32 col, ImlibFont *fn_list, int x, int y,
gl = imlib_font_utf8_get_next((unsigned char *)text, &chr);
if (gl == 0)
break;
- if(missing_glyph)
- fn = fn_list;
- fn =
- imlib_font_find_face_in_fontset(fn, fn_list, gl,
- FT_ENCODING_UNICODE, 0, &index, &missing_glyph);
-
- if(FT_HAS_KERNING(fn->ft.face) && (prev_index) && (index))
+ index = FT_Get_Char_Index(fn->ft.face, gl);
+ if ((use_kerning) && (prev_index) && (index))
{
- FT_Vector delta;
+ FT_Vector delta;
- FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default,
- &delta);
- pen_x += delta.x << 2;
+ FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default,
+ &delta);
+ pen_x += delta.x << 2;
}
-
fg = imlib_font_cache_glyph_get(fn, index);
- if(!fg)
- continue;
+ if (!fg)
+ continue;
chr_x = (pen_x + (fg->glyph_out->left << 8)) >> 8;
chr_y = (pen_y + (fg->glyph_out->top << 8)) >> 8;
@@ -425,5 +418,5 @@ imlib_font_draw(ImlibImage * dst, DATA32 col, ImlibFont *fn_list, int x, int y,
if (nextx)
*nextx = (pen_x >> 8) - x;
if (nexty)
- *nexty = imlib_font_get_line_advance(fn_list);
+ *nexty = imlib_font_get_line_advance(fn);
}
diff --git a/src/lib/font_load.c b/src/lib/font_load.c
index 2fc665c..c86f3c3 100644
--- a/src/lib/font_load.c
+++ b/src/lib/font_load.c
@@ -30,13 +30,13 @@ static int font_flush_free_glyph_cb(Imlib_Hash * hash, const char *key,
/* FIXME now! listdir() from evas_object_text.c */
-/* separate fontname and size, find font file
-*/
-static char*
-imlib_font_find_file(const char *fontname, int *out_size)
+/* separate fontname and size, find font file, start imlib_font_load() then */
+ImlibFont *
+imlib_font_load_joined(const char *fontname)
{
int j, size;
char *name = NULL, *file = NULL, *tmp = NULL;
+ ImlibFont *fn;
/* split font name (in format name/size) */
for (j = strlen(fontname) - 1; (j >= 0) && (fontname[j] != '/'); j--);
@@ -103,20 +103,7 @@ imlib_font_find_file(const char *fontname, int *out_size)
free(tmp);
}
}
- free(name); *out_size = size;
- return file;
-}
-
-/* find font file, start imlib_font_load() */
-ImlibFont *
-imlib_font_load_joined(const char *fontname)
-{
- char *file;
- ImlibFont *fn;
- int size;
-
- file = imlib_font_find_file(fontname, &size);
-
+ free(name);
/* didnt find a file? abort */
if (!file)
return NULL;
@@ -125,13 +112,17 @@ imlib_font_load_joined(const char *fontname)
return fn;
}
-static ImlibFont *
-imlib_font_create_font_struct(const char *name, int size)
+ImlibFont *
+imlib_font_load(const char *name, int size)
{
int error;
ImlibFont *fn;
char *file;
+ fn = imlib_font_find(name, size);
+ if (fn)
+ return fn;
+
imlib_font_init();
fn = malloc(sizeof(ImlibFont));
@@ -189,193 +180,15 @@ imlib_font_create_font_struct(const char *name, int size)
fn->size = size;
fn->glyphs = NULL;
- fn->next_in_set = NULL;
+
fn->usage = 0;
fn->references = 1;
+ fonts = imlib_object_list_prepend(fonts, fn);
return fn;
}
-ImlibFont *
-imlib_font_load(const char *name, int size)
-{
- ImlibFont *fn;
-
- fn = imlib_font_find(name, size);
- if (fn)
- return fn;
-
- if((fn = imlib_font_create_font_struct(name, size)) != NULL)
- fonts = imlib_object_list_prepend(fonts, fn);
-
- return fn;
-}
-
-#define MAX_FONTNAMES 31
-
-static char *skip_white(char *s)
-{
- while(isspace(*s)) ++s;
- return s;
-}
-
-/* Skip duplicates */
-static void collect_fontnames(const char *fon_s, char *names[])
-{
- char *s, *comma, *buf, *last, *name;
- int i, j;
-
- buf = strdup(fon_s);
- i = 0;
- s = skip_white(buf);
- while(*s)
- {
- names[i] = NULL;
- if((comma = strchr(s, ',')))
- *comma = 0;
- last = s + strlen(s) - 1;
- while(last > s && isspace(*last)) --last; *++last = 0;
- j = 0;
- while((name = names[j]) != NULL)
- {
- if(strcmp(name, s) == 0)
- break;
- ++j;
- }
- if(name == NULL)
- {
- names[i] = strdup(s);
- if(++i > MAX_FONTNAMES)
- break;
- }
- if(comma == NULL)
- break;
- s = skip_white(comma + 1);
- }
- names[i] = NULL; free(buf);
-}
-
-/* font_name contains a comma separated list of "name/size" elements.
- * sets must be disjoint: if two sets begin with the same font,
- * the existing set's chain would be destroyed.
-*/
-ImlibFont *
-imlib_font_load_fontset(const char *font_name)
-{
- ImlibFont *head, *tail, *fn;
- char *name, *file;
- int i, size;
- char *names[MAX_FONTNAMES + 1];
-
- collect_fontnames(font_name, names);
-
- if(names[0] == NULL)
- return NULL;
- head = tail = NULL; i = 0;
-
- while((name = names[i]))
- {
- if((file = imlib_font_find_file(name, &size)) != NULL)
- {
- if((fn = imlib_font_create_font_struct(file, size)) != NULL)
- {
- if(tail)
- tail->next_in_set = fn;
- else
- head = fn;
- tail = fn;
- }
- free(file);
- }
- free(name); ++i;
- }
- return head;
-}
-
-ImlibFont *
-imlib_font_find_face_in_fontset(ImlibFont *fn, ImlibFont *fn_list,
- unsigned long uni_id, int encoding_id,
- int force_missing_glyph, FT_UInt *out_glyph_id,
- int *out_missing)
-{
- FT_Face face;
- FT_UInt glyph_id;
- ImlibFont *first_invalid;
-
- if(!fn)
- fn = fn_list;
- if(out_missing)
- *out_missing = 0;
- if(fn->ft.face == NULL)
- {
- FT_New_Face(ft_lib, fn->file, 0, &face);
- fn->ft.face = face;
- }
- first_invalid = NULL;
-repeat_upto_invalid:
- while(fn)
- {
- if(fn == first_invalid)
- {
- first_invalid = NULL;
- break;
- }
- face = fn->ft.face;
-
- if(face->charmap != NULL
- || FT_Select_Charmap(face, encoding_id) == 0
- )
- {
- FT_Set_Char_Size(face, 0, fn->size * 64, 96, 96);
-
- if(force_missing_glyph)
- glyph_id = 0;
- else
- glyph_id = FT_Get_Char_Index(face, uni_id);
-
- if(glyph_id || force_missing_glyph)
- {
- *out_glyph_id = glyph_id;
- return fn;
- }
- if(first_invalid == NULL)
- first_invalid = fn;
- }
- fn = fn->next_in_set;
- }/* while(fn) */
- if(first_invalid)
- {
- fn = fn_list;
- goto repeat_upto_invalid;
- }
- if(out_missing)
- *out_missing = 1;
- return
- imlib_font_find_face_in_fontset(NULL, fn_list, 0, encoding_id, 1,
- out_glyph_id, NULL);
-}
-
-void
-imlib_font_free_fontset(ImlibFont *fn_list)
-{
- ImlibFont *fn;
-
- while((fn = fn_list))
- {
- fn_list = fn_list->next_in_set;
-/* imlib_font_free(fn); */
- imlib_hash_free(fn->glyphs);
-
- if (fn->file)
- free(fn->file);
- if (fn->name)
- free(fn->name);
- FT_Done_Face(fn->ft.face);
- free(fn);
- }
-}
-
void
imlib_font_free(ImlibFont * fn)
{
diff --git a/src/lib/font_main.c b/src/lib/font_main.c
index 7afb5fb..5ec01ce 100644
--- a/src/lib/font_main.c
+++ b/src/lib/font_main.c
@@ -38,130 +38,78 @@ imlib_font_init(void)
}
int
-imlib_font_ascent_get(ImlibFont *fn_list)
+imlib_font_ascent_get(ImlibFont * fn)
{
- ImlibFont *fn;
- int val;
- int ret, maxret;
+ int val;
+ int ret;
- maxret = 0; fn = fn_list;
-
- while(fn)
- {
val = (int)fn->ft.face->ascender;
- fn->ft.face->units_per_EM = 2048; /* nasty hack - need to have correct
+ 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);
- if(ret > maxret)
- maxret = ret;
- fn = fn->next_in_set;
- }
- return maxret;
+ return ret;
}
int
-imlib_font_descent_get(ImlibFont *fn_list)
+imlib_font_descent_get(ImlibFont * fn)
{
- ImlibFont *fn;
- int val;
- int ret, maxret;
+ int val;
+ int ret;
- maxret = 0; fn = fn_list;
-
- while(fn)
- {
val = -(int)fn->ft.face->descender;
- fn->ft.face->units_per_EM = 2048; /* nasty hack - need to have correct
+ 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);
-/* NOTE by szukw000: as long as the descent value is positive:
- * 'ret > maxret'; otherwise 'ret < maxret'.
-*/
- if(ret > maxret)
- maxret = ret;
- fn = fn->next_in_set;
- }
- return maxret;
+ return ret;
}
int
-imlib_font_max_ascent_get(ImlibFont *fn_list)
+imlib_font_max_ascent_get(ImlibFont * fn)
{
- ImlibFont *fn;
- int val;
- int ret, maxret;
+ int val;
+ int ret;
- maxret = 0; fn = fn_list;
-
- while(fn)
- {
val = (int)fn->ft.face->bbox.yMax;
- fn->ft.face->units_per_EM = 2048; /* nasty hack - need to have correct
+ 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);
- if(ret > maxret)
- maxret = ret;
- fn = fn->next_in_set;
- }
- return maxret;
+ return ret;
}
int
-imlib_font_max_descent_get(ImlibFont *fn_list)
+imlib_font_max_descent_get(ImlibFont * fn)
{
- ImlibFont *fn;
- int val;
- int ret, maxret;
+ int val;
+ int ret;
- maxret = 0; fn = fn_list;
-
- while(fn)
- {
val = (int)fn->ft.face->bbox.yMin;
- fn->ft.face->units_per_EM = 2048; /* nasty hack - need to have correct
+ 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);
-/* NOTE by szukw000: as long as the max_descent value is negative:
- * 'ret < maxret'; otherwise: 'ret > maxret'.
-*/
- if(ret < maxret)
- maxret = ret;
- fn = fn->next_in_set;
- }
- return maxret;
+ return ret;
}
int
-imlib_font_get_line_advance(ImlibFont * fn_list)
+imlib_font_get_line_advance(ImlibFont * fn)
{
- ImlibFont *fn;
- int val, maxret, ret;
+ int val;
+ int ret;
- maxret = 0;
- fn = fn_list;
- while(fn)
- {
- val = (int)fn->ft.face->height;
-/* nasty hack - need to have correct val */
- fn->ft.face->units_per_EM = 2048;
-
- ret =
- (val * fn->ft.face->size->metrics.y_scale) /
- (fn->ft.face->units_per_EM * fn->ft.face->units_per_EM);
-
- if(ret > maxret)
- maxret = ret;
- fn = fn->next_in_set;
- }
- return maxret;
+ 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);
+ return ret;
}
int
diff --git a/src/lib/font_query.c b/src/lib/font_query.c
index cc062ac..b7cf837 100644
--- a/src/lib/font_query.c
+++ b/src/lib/font_query.c
@@ -19,20 +19,20 @@ extern FT_Library ft_lib;
/* string extents */
void
-imlib_font_query_size(ImlibFont *fn_list, const char *text, int *w, int *h)
+imlib_font_query_size(ImlibFont * fn, const char *text, int *w, int *h)
{
- ImlibFont *fn;
+ int use_kerning;
int pen_x, pen_y;
int start_x, end_x;
- int chr, missing_glyph;
+ int chr;
FT_UInt prev_index;
start_x = 0;
end_x = 0;
pen_x = 0;
pen_y = 0;
- prev_index = 0; fn = NULL; missing_glyph = 1;
-
+ use_kerning = FT_HAS_KERNING(fn->ft.face);
+ prev_index = 0;
for (chr = 0; text[chr];)
{
FT_UInt index;
@@ -43,13 +43,8 @@ imlib_font_query_size(ImlibFont *fn_list, const char *text, int *w, int *h)
gl = imlib_font_utf8_get_next((unsigned char *)text, &chr);
if (gl == 0)
break;
- if(missing_glyph)
- fn = fn_list;
- fn =
- imlib_font_find_face_in_fontset(fn, fn_list, gl,
- FT_ENCODING_UNICODE, 0, &index, &missing_glyph);
-
- if(FT_HAS_KERNING(fn->ft.face) && (prev_index) && (index))
+ index = FT_Get_Char_Index(fn->ft.face, gl);
+ if ((use_kerning) && (prev_index) && (index))
{
FT_Vector delta;
@@ -76,18 +71,16 @@ imlib_font_query_size(ImlibFont *fn_list, const char *text, int *w, int *h)
if (w)
*w = (pen_x >> 8) - start_x;
if (h)
- *h = imlib_font_max_ascent_get(fn_list)
- - imlib_font_max_descent_get(fn_list);
+ *h = imlib_font_max_ascent_get(fn) - imlib_font_max_descent_get(fn);
}
/* text x inset */
int
-imlib_font_query_inset(ImlibFont *fn_list, const char *text)
+imlib_font_query_inset(ImlibFont * fn, const char *text)
{
- ImlibFont *fn;
FT_UInt index;
Imlib_Font_Glyph *fg;
- int chr, missing_glyph;
+ int chr;
int gl;
chr = 0;
@@ -96,11 +89,7 @@ imlib_font_query_inset(ImlibFont *fn_list, const char *text)
gl = imlib_font_utf8_get_next((unsigned char *)text, &chr);
if (gl == 0)
return 0;
- missing_glyph = 1;
- fn =
- imlib_font_find_face_in_fontset(fn_list, fn_list, gl,
- FT_ENCODING_UNICODE, 0, &index, &missing_glyph);
-
+ index = FT_Get_Char_Index(fn->ft.face, gl);
fg = imlib_font_cache_glyph_get(fn, index);
if (!fg)
return 0;
@@ -108,82 +97,76 @@ imlib_font_query_inset(ImlibFont *fn_list, const char *text)
}
/* h & v advance */
-void imlib_font_query_advance(ImlibFont *fn_list, const char *text,
- int *h_adv, int *v_adv)
+void
+imlib_font_query_advance(ImlibFont * fn, const char *text, int *h_adv,
+ int *v_adv)
{
- ImlibFont *fn;
- int pen_x, pen_y;
- int start_x;
- int chr, missing_glyph;
- FT_UInt prev_index;
+ int use_kerning;
+ int pen_x, pen_y;
+ int start_x;
+ int chr;
+ FT_UInt prev_index;
- start_x = 0;
- pen_x = 0;
- pen_y = 0;
+ start_x = 0;
+ pen_x = 0;
+ pen_y = 0;
+ use_kerning = FT_HAS_KERNING(fn->ft.face);
+ prev_index = 0;
+ for (chr = 0; text[chr];)
+ {
+ FT_UInt index;
+ Imlib_Font_Glyph *fg;
+ int chr_x, chr_y, chr_w;
+ int gl;
- prev_index = 0; fn = NULL; missing_glyph = 1;
+ gl = imlib_font_utf8_get_next((unsigned char *)text, &chr);
+ if (gl == 0)
+ break;
+ index = FT_Get_Char_Index(fn->ft.face, gl);
+ if ((use_kerning) && (prev_index) && (index))
+ {
+ FT_Vector delta;
- for (chr = 0; text[chr];)
- {
- FT_UInt index;
- Imlib_Font_Glyph *fg;
- int chr_x, chr_y, chr_w;
- int gl;
+ FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default,
+ &delta);
+ pen_x += delta.x << 2;
+ }
+ fg = imlib_font_cache_glyph_get(fn, index);
+ if (!fg)
+ continue;
- gl = imlib_font_utf8_get_next((unsigned char *)text, &chr);
- if (gl == 0)
- break;
- if(missing_glyph)
- fn = fn_list;
- fn =
- imlib_font_find_face_in_fontset(fn, fn_list, gl,
- FT_ENCODING_UNICODE, 0, &index, &missing_glyph);
+ chr_x = (pen_x >> 8) + fg->glyph_out->left;
+ chr_y = (pen_y >> 8) + fg->glyph_out->top;
+ chr_w = fg->glyph_out->bitmap.width;
- if(FT_HAS_KERNING(fn->ft.face) && (prev_index) && (index))
- {
- FT_Vector delta;
-
- FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default,
- &delta);
- pen_x += delta.x << 2;
- }
- fg = imlib_font_cache_glyph_get(fn, index);
- if (!fg)
- continue;
-
- chr_x = (pen_x >> 8) + fg->glyph_out->left;
- chr_y = (pen_y >> 8) + fg->glyph_out->top;
- chr_w = fg->glyph_out->bitmap.width;
-
- pen_x += fg->glyph->advance.x >> 8;
- prev_index = index;
- }
- if (v_adv)
- *v_adv = imlib_font_get_line_advance(fn_list);
- if (h_adv)
+ pen_x += fg->glyph->advance.x >> 8;
+ prev_index = index;
+ }
+ if (v_adv)
+ *v_adv = imlib_font_get_line_advance(fn);
+ if (h_adv)
*h_adv = (pen_x >> 8) - start_x;
}
/* x y w h for char at char pos */
int
-imlib_font_query_char_coords(ImlibFont *fn_list, const char *text, int pos,
+imlib_font_query_char_coords(ImlibFont * fn, const char *text, int pos,
int *cx, int *cy, int *cw, int *ch)
{
- ImlibFont *fn;
+ int use_kerning;
int pen_x, pen_y;
int prev_chr_end;
- int chr, missing_glyph;
+ int chr;
int asc, desc;
FT_UInt prev_index;
pen_x = 0;
pen_y = 0;
-
- prev_index = 0; fn = NULL; missing_glyph = 1;
+ use_kerning = FT_HAS_KERNING(fn->ft.face);
+ prev_index = 0;
prev_chr_end = 0;
- asc = imlib_font_max_ascent_get(fn_list);
- desc = imlib_font_max_descent_get(fn_list);
-
+ asc = imlib_font_max_ascent_get(fn);
+ desc = imlib_font_max_descent_get(fn);
for (chr = 0; text[chr];)
{
int pchr;
@@ -197,14 +180,9 @@ imlib_font_query_char_coords(ImlibFont *fn_list, const char *text, int pos,
gl = imlib_font_utf8_get_next((unsigned char *)text, &chr);
if (gl == 0)
break;
- if(missing_glyph)
- fn = fn_list;
- fn =
- imlib_font_find_face_in_fontset(fn, fn_list, gl,
- FT_ENCODING_UNICODE, 0, &index, &missing_glyph);
-
+ index = FT_Get_Char_Index(fn->ft.face, gl);
kern = 0;
- if(FT_HAS_KERNING(fn->ft.face) && (prev_index) && (index))
+ if ((use_kerning) && (prev_index) && (index))
{
FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default,
&delta);
@@ -254,24 +232,23 @@ imlib_font_query_char_coords(ImlibFont *fn_list, const char *text, int pos,
/* char pos of text at xy pos */
int
-imlib_font_query_text_at_pos(ImlibFont *fn_list, const char *text, int x, int y,
+imlib_font_query_text_at_pos(ImlibFont * fn, const char *text, int x, int y,
int *cx, int *cy, int *cw, int *ch)
{
- ImlibFont *fn;
+ int use_kerning;
int pen_x, pen_y;
int prev_chr_end;
- int chr, missing_glyph;
+ int chr;
int asc, desc;
FT_UInt prev_index;
pen_x = 0;
pen_y = 0;
-
- prev_index = 0; fn = NULL; missing_glyph = 1;
+ use_kerning = FT_HAS_KERNING(fn->ft.face);
+ prev_index = 0;
prev_chr_end = 0;
- asc = imlib_font_max_ascent_get(fn_list);
- desc = imlib_font_max_descent_get(fn_list);
-
+ asc = imlib_font_max_ascent_get(fn);
+ desc = imlib_font_max_descent_get(fn);
for (chr = 0; text[chr];)
{
int pchr;
@@ -285,14 +262,9 @@ imlib_font_query_text_at_pos(ImlibFont *fn_list, const char *text, int x, int y,
gl = imlib_font_utf8_get_next((unsigned char *)text, &chr);
if (gl == 0)
break;
- if(missing_glyph)
- fn = fn_list;
- fn =
- imlib_font_find_face_in_fontset(fn, fn_list, gl,
- FT_ENCODING_UNICODE, 0, &index, &missing_glyph);
-
+ index = FT_Get_Char_Index(fn->ft.face, gl);
kern = 0;
- if(FT_HAS_KERNING(fn->ft.face) && (prev_index) && (index))
+ if ((use_kerning) && (prev_index) && (index))
{
FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default,
&delta);
diff --git a/src/lib/polygon.c b/src/lib/polygon.c
index 1019b44..1cb6644 100644
--- a/src/lib/polygon.c
+++ b/src/lib/polygon.c
@@ -536,7 +536,7 @@ __imlib_Polygon_DrawToData(ImlibPoly poly, char close, DATA32 color,
while (j < nactive_edges)
{
int lx, rx;
- int e_lx = 0, e_rx = 0;
+ int e_lx, e_rx;
PolyEdge *e;
e = edge + j;
@@ -760,7 +760,7 @@ __imlib_Polygon_DrawToData_AA(ImlibPoly poly, char close, DATA32 color,
while (j < nactive_edges)
{
int lx, rx;
- int e_lx = 0, e_rx = 0;
+ int e_lx, e_rx;
PolyEdge *e;
e = edge + j;
@@ -1107,8 +1107,8 @@ __imlib_Polygon_FillToData(ImlibPoly poly, DATA32 color,
while (j < nactive_edges)
{
int lx, rx;
- int le_lx = 0, le_rx = 0;
- int re_lx = 0, re_rx = 0;
+ int le_lx, le_rx;
+ int re_lx, re_rx;
PolyEdge *le, *re;
if (j < (nactive_edges - 1))
@@ -1395,8 +1395,8 @@ __imlib_Polygon_FillToData_AA(ImlibPoly poly, DATA32 color,
while (j < nactive_edges)
{
int lx, rx;
- int le_lx = 0, le_rx = 0;
- int re_lx = 0, re_rx = 0;
+ int le_lx, le_rx;
+ int re_lx, re_rx;
PolyEdge *le, *re;
if (j < (nactive_edges - 1))