visible && !is_visual) \
{ \
if (evas_common_font_query_kerning(fi, index, prev_index, &kern)) \
- pen_x += kern; \
+ _pen_x += kern; \
} \
else \
{ \
if (evas_common_font_query_kerning(fi, prev_index, index, &kern)) \
- pen_x += kern; \
+ _pen_x += kern; \
} \
} \
while (0)
{ \
(void) is_visual; \
if (evas_common_font_query_kerning(fi, prev_index, index, &kern)) \
- pen_x += kern; \
+ _pen_x += kern; \
} \
while (0)
#endif
#define EVAS_FONT_WALK_DEFAULT_Y_OFF (0)
#define EVAS_FONT_WALK_DEFAULT_X_BEAR (fg->glyph_out->left)
#define EVAS_FONT_WALK_DEFAULT_Y_BEAR (fg->glyph_out->top)
-#define EVAS_FONT_WALK_DEFAULT_X_ADV (fg->glyph->advance.x >> 16)
+#define _EVAS_FONT_WALK_DEFAULT_X_ADV (fg->glyph->advance.x >> 10)
+#define EVAS_FONT_WALK_DEFAULT_X_ADV \
+ (EVAS_FONT_ROUND_26_6_TO_INT(_EVAS_FONT_WALK_DEFAULT_X_ADV))
#define EVAS_FONT_WALK_DEFAULT_Y_ADV (0)
#define EVAS_FONT_WALK_DEFAULT_WIDTH (fg->glyph_out->bitmap.width)
#define EVAS_FONT_WALK_DEFAULT_POS (char_index)
#define EVAS_FONT_WALK_DEFAULT_TEXT_END() \
if (visible) \
{ \
- pen_x += EVAS_FONT_WALK_DEFAULT_X_ADV; \
+ _pen_x += _EVAS_FONT_WALK_DEFAULT_X_ADV; \
} \
prev_index = index; \
} \
}
- pen_x = x;
- pen_y = y;
+ /*FIXME: Handle it sanely */
+ _pen_y = y;
im = dst->image.data;
#ifdef OT_SUPPORT
if (evas_common_font_ot_is_enabled() && intl_props->ot_data)
fg->ext_dat_free = dc->font_ext.func.gl_free;
}
- chr_x = (pen_x) + EVAS_FONT_WALK_OT_X_OFF + EVAS_FONT_WALK_OT_X_BEAR;
- chr_y = (pen_y) + EVAS_FONT_WALK_OT_Y_OFF + EVAS_FONT_WALK_OT_Y_BEAR;
+ chr_x = x + EVAS_FONT_WALK_PEN_X + EVAS_FONT_WALK_OT_X_OFF + EVAS_FONT_WALK_OT_X_BEAR;
+ chr_y = (_pen_y) + EVAS_FONT_WALK_OT_Y_OFF + EVAS_FONT_WALK_OT_Y_BEAR;
chr_w = EVAS_FONT_WALK_OT_WIDTH;
if (chr_x < (ext_x + ext_w))
fg->ext_dat_free = dc->font_ext.func.gl_free;
}
- chr_x = (pen_x) + EVAS_FONT_WALK_DEFAULT_X_OFF + EVAS_FONT_WALK_DEFAULT_X_BEAR;
- chr_y = (pen_y) + EVAS_FONT_WALK_DEFAULT_Y_OFF + EVAS_FONT_WALK_DEFAULT_Y_BEAR;
+ chr_x = x + EVAS_FONT_WALK_PEN_X + EVAS_FONT_WALK_DEFAULT_X_OFF + EVAS_FONT_WALK_DEFAULT_X_BEAR;
+ chr_y = (_pen_y) + EVAS_FONT_WALK_DEFAULT_Y_OFF + EVAS_FONT_WALK_DEFAULT_Y_BEAR;
chr_w = EVAS_FONT_WALK_DEFAULT_WIDTH;
if (chr_x < (ext_x + ext_w))
ci->fg->glyph->advance.x >> 16 > 0)
{
if (evas_common_font_query_kerning(fi, ci->index, prev_index, &kern))
- pen_x += kern;
+ pen_x += EVAS_FONT_ROUND_26_6_TO_INT(kern);
}
else
{
if (evas_common_font_query_kerning(fi, prev_index, ci->index, &kern))
- pen_x += kern;
+ pen_x += EVAS_FONT_ROUND_26_6_TO_INT(kern);
}
# else
if (evas_common_font_query_kerning(fi, prev_index, ci->index, &kern))
- pen_x += kern;
+ pen_x += EVAS_FONT_ROUND_26_6_TO_INT(kern);
# endif
}
int *push;
FTUNLOCK();
- *kerning = delta.x >> 6;
+ *kerning = delta.x;
push = malloc(sizeof (int) * 3);
if (!push) return 1;
/* Keep the width because we'll need it for the last char */
keep_width = EVAS_FONT_WALK_OT_WIDTH + EVAS_FONT_WALK_OT_X_OFF +
EVAS_FONT_WALK_OT_X_BEAR;
- /* Keep the previous pen_x, before it's advanced in TEXT_END */
- prev_pen_x = pen_x;
+ /* Keep the previous EVAS_FONT_WALK_PEN_X, before it's advanced in TEXT_END */
+ prev_pen_x = EVAS_FONT_WALK_PEN_X;
}
EVAS_FONT_WALK_OT_TEXT_END();
}
keep_width = EVAS_FONT_WALK_DEFAULT_WIDTH +
EVAS_FONT_WALK_DEFAULT_X_OFF +
EVAS_FONT_WALK_DEFAULT_X_BEAR;
- /* Keep the previous pen_x, before it's advanced in TEXT_END */
- prev_pen_x = pen_x;
+ /* Keep the previous EVAS_FONT_WALK_PEN_X, before it's advanced in TEXT_END */
+ prev_pen_x = EVAS_FONT_WALK_PEN_X;
}
EVAS_FONT_WALK_DEFAULT_TEXT_END();
}
}
if (v_adv) *v_adv = evas_common_font_get_line_advance(fn);
- if (h_adv) *h_adv = pen_x;
+ if (h_adv) *h_adv = EVAS_FONT_WALK_PEN_X;
evas_common_font_int_use_trim();
}
}
else
{
- cluster_start = (pen_x) + EVAS_FONT_WALK_OT_X_OFF +
+ cluster_start = EVAS_FONT_WALK_PEN_X +
+ EVAS_FONT_WALK_OT_X_OFF +
EVAS_FONT_WALK_OT_X_BEAR;
}
}
last_is_visible = visible;
- last_end = pen_x + EVAS_FONT_WALK_OT_X_OFF +
+ last_end = EVAS_FONT_WALK_PEN_X + EVAS_FONT_WALK_OT_X_OFF +
EVAS_FONT_WALK_OT_X_BEAR + EVAS_FONT_WALK_OT_WIDTH;
/* we need to see if the char at the visual position is the char wanted */
if ((intl_props->bidi.dir == EVAS_BIDI_DIRECTION_LTR) &&
EVAS_FONT_WALK_DEFAULT_TEXT_WORK(EINA_TRUE);
if (visible)
{
- chr_x = (pen_x) + EVAS_FONT_WALK_DEFAULT_X_OFF +
+ chr_x = (EVAS_FONT_WALK_PEN_X) + EVAS_FONT_WALK_DEFAULT_X_OFF +
EVAS_FONT_WALK_DEFAULT_X_BEAR;
chr_w = EVAS_FONT_WALK_DEFAULT_WIDTH;
}
else
{
- chr_x = pen_x;
+ chr_x = EVAS_FONT_WALK_PEN_X;
chr_w = 0;
}
/* we need to see if the char at the visual position is the char wanted */
}
else
{
- cluster_start = pen_x;
+ cluster_start = EVAS_FONT_WALK_PEN_X;
}
}
last_is_visible = visible;
if (found)
{
Evas_Coord cluster_adv;
- cluster_adv = pen_x - cluster_start;
+ cluster_adv = EVAS_FONT_WALK_PEN_X - cluster_start;
if (cy) *cy = -asc;
if (ch) *ch = asc + desc;
if (last_is_visible)
}
else
{
- if (cpen_x) *cpen_x = pen_x;
+ if (cpen_x) *cpen_x = EVAS_FONT_WALK_PEN_X;
if (cadv) *cadv = 0;
}
ret_val = 1;
{
if (EVAS_FONT_WALK_DEFAULT_X_ADV > 0)
{
- if (cpen_x) *cpen_x = pen_x;
+ if (cpen_x) *cpen_x = EVAS_FONT_WALK_PEN_X;
if (cadv) *cadv = EVAS_FONT_WALK_DEFAULT_X_ADV;
}
else
{
- if (cpen_x) *cpen_x = pen_x +
+ if (cpen_x) *cpen_x = EVAS_FONT_WALK_PEN_X +
EVAS_FONT_WALK_DEFAULT_X_OFF +
EVAS_FONT_WALK_DEFAULT_X_BEAR;
if (cadv) *cadv = EVAS_FONT_WALK_DEFAULT_WIDTH;
}
else
{
- if (cpen_x) *cpen_x = pen_x;
+ if (cpen_x) *cpen_x = EVAS_FONT_WALK_PEN_X;
if (cadv) *cadv = 0;
}
ret_val = 1;
}
else
{
- cluster_start = pen_x;
+ cluster_start = EVAS_FONT_WALK_PEN_X;
}
}
/* we need to see if the char at the visual position is the char,
* we check that by checking if it's before the current pen
* position and the next */
- if ((x >= pen_x) && (x <= (pen_x + EVAS_FONT_WALK_OT_X_ADV)) &&
+ if ((x >= EVAS_FONT_WALK_PEN_X) && (x <= (EVAS_FONT_WALK_PEN_X + EVAS_FONT_WALK_OT_X_ADV)) &&
(y >= -asc) && (y <= desc))
{
items = evas_common_font_ot_cluster_size_get(intl_props,
{
int item_pos;
Evas_Coord cluster_adv;
- cluster_adv = pen_x - cluster_start;
+ cluster_adv = EVAS_FONT_WALK_PEN_X - cluster_start;
if (intl_props->bidi.dir == EVAS_BIDI_DIRECTION_LTR)
{
part = cluster_adv / items;
item_pos = items - ((int) ((x - cluster_start) / part)) - 1;
}
- if (cx) *cx = pen_x +
+ if (cx) *cx = EVAS_FONT_WALK_PEN_X +
((cluster_adv / items) * (item_pos - 1));
if (cy) *cy = -asc;
if (cw) *cw = (cluster_adv / items);
/* we need to see if the char at the visual position is the char,
* we check that by checking if it's before the current pen position
* and the next */
- if ((x >= pen_x) && (x <= (pen_x + EVAS_FONT_WALK_DEFAULT_X_ADV))
+ if ((x >= EVAS_FONT_WALK_PEN_X) && (x <= (EVAS_FONT_WALK_PEN_X + EVAS_FONT_WALK_DEFAULT_X_ADV))
&& (y >= -asc) && (y <= desc))
{
- if (cx) *cx = pen_x + EVAS_FONT_WALK_DEFAULT_X_OFF +
+ if (cx) *cx = EVAS_FONT_WALK_PEN_X + EVAS_FONT_WALK_DEFAULT_X_OFF +
EVAS_FONT_WALK_DEFAULT_X_BEAR +
EVAS_FONT_WALK_DEFAULT_X_ADV;
if (cy) *cy = -asc;
EVAS_FONT_WALK_OT_TEXT_WORK(EINA_FALSE);
if (!visible) continue;
- if ((x >= pen_x) && (x <= (pen_x + EVAS_FONT_WALK_OT_X_ADV)) &&
+ if ((x >= EVAS_FONT_WALK_PEN_X) && (x <= (EVAS_FONT_WALK_PEN_X + EVAS_FONT_WALK_OT_X_ADV)) &&
(y >= -asc) && (y <= desc))
{
ret = EVAS_FONT_WALK_OT_POS;
EVAS_FONT_WALK_DEFAULT_TEXT_WORK(EINA_FALSE);
if (!visible) continue;
- if ((x >= pen_x) &&
- (x <= (pen_x + EVAS_FONT_WALK_DEFAULT_X_ADV)) &&
+ if ((x >= EVAS_FONT_WALK_PEN_X) &&
+ (x <= (EVAS_FONT_WALK_PEN_X + EVAS_FONT_WALK_DEFAULT_X_ADV)) &&
(y >= -asc) && (y <= desc))
{
ret = char_index;