forked from enlightenment/efl
fix font rounding in evas to round and not floor - fixes some rare
font sizing issues. SVN revision: 77688
This commit is contained in:
parent
f91826870d
commit
aad2041e55
|
@ -1086,3 +1086,8 @@
|
|||
This change adds Eo support to Evas while keeping the old API intact.
|
||||
For more information, go to Eo.
|
||||
|
||||
2012-10-10 Carsten Haitzler (The Rasterman)
|
||||
|
||||
* Fix font sizing issues when size scaling happens to down down
|
||||
when it should round up. happens in rare sizing situations and fonts.
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ Fixes:
|
|||
* Fix evas_object_image_alpha_set when image data not loaded yet.
|
||||
* Fix map surface leak.
|
||||
* Fix native surface set to null crash bug in gl engine.
|
||||
* Fix font sizing issue with some rare sizes and fonts when rounding wrong.
|
||||
|
||||
Removal:
|
||||
* No more support s3c6410.
|
||||
|
|
|
@ -455,13 +455,13 @@ evas_common_font_int_load_complete(RGBA_Font_Int *fi)
|
|||
if (fi->src->ft.face->units_per_EM != 0)
|
||||
{
|
||||
dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
||||
ret = (val * fi->src->ft.face->size->metrics.y_scale) / (dv * dv);
|
||||
ret = FONT_MERTIC_CONV(val, dv, fi->src->ft.face->size->metrics.y_scale);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||
(fi->src->ft.face->bbox.yMin == 0))
|
||||
ret = (int)fi->ft.size->metrics.ascender / 64;
|
||||
ret = FONT_METRIC_ROUNDUP((int)fi->ft.size->metrics.ascender);
|
||||
else
|
||||
ret = val;
|
||||
}
|
||||
|
@ -470,13 +470,13 @@ evas_common_font_int_load_complete(RGBA_Font_Int *fi)
|
|||
if (fi->src->ft.face->units_per_EM != 0)
|
||||
{
|
||||
dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
||||
ret = (val * fi->src->ft.face->size->metrics.y_scale) / (dv * dv);
|
||||
ret = FONT_MERTIC_CONV(val, dv, fi->src->ft.face->size->metrics.y_scale);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||
(fi->src->ft.face->bbox.yMin == 0))
|
||||
ret = -(int)fi->ft.size->metrics.descender / 64;
|
||||
ret = FONT_METRIC_ROUNDUP(-(int)fi->ft.size->metrics.descender);
|
||||
else
|
||||
ret = val;
|
||||
}
|
||||
|
|
|
@ -112,7 +112,7 @@ evas_common_font_ascent_get(RGBA_Font *fn)
|
|||
WRN("NOT SCALABLE!");
|
||||
}
|
||||
val = (int)fi->src->ft.face->size->metrics.ascender;
|
||||
return val >> 6;
|
||||
return FONT_METRIC_ROUNDUP(val);
|
||||
// printf("%i | %i\n", val, val >> 6);
|
||||
// if (fi->src->ft.face->units_per_EM == 0)
|
||||
// return val;
|
||||
|
@ -138,7 +138,7 @@ evas_common_font_descent_get(RGBA_Font *fn)
|
|||
fi->src->current_size = fi->size;
|
||||
}
|
||||
val = -(int)fi->src->ft.face->size->metrics.descender;
|
||||
return val >> 6;
|
||||
return FONT_METRIC_ROUNDUP(val);
|
||||
// if (fi->src->ft.face->units_per_EM == 0)
|
||||
// return val;
|
||||
// dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
||||
|
@ -166,13 +166,13 @@ evas_common_font_max_ascent_get(RGBA_Font *fn)
|
|||
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||
(fi->src->ft.face->bbox.yMin == 0) &&
|
||||
(fi->src->ft.face->units_per_EM == 0))
|
||||
val = (int)fi->src->ft.face->size->metrics.ascender / 64;
|
||||
val = FONT_METRIC_ROUNDUP((int)fi->src->ft.face->size->metrics.ascender);
|
||||
else
|
||||
val = (int)fi->src->ft.face->bbox.yMax;
|
||||
if (fi->src->ft.face->units_per_EM == 0)
|
||||
return val;
|
||||
dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
||||
ret = (val * fi->src->ft.face->size->metrics.y_scale) / (dv * dv);
|
||||
ret = FONT_MERTIC_CONV(val, dv, fi->src->ft.face->size->metrics.y_scale);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -196,13 +196,13 @@ evas_common_font_max_descent_get(RGBA_Font *fn)
|
|||
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||
(fi->src->ft.face->bbox.yMin == 0) &&
|
||||
(fi->src->ft.face->units_per_EM == 0))
|
||||
val = -(int)fi->src->ft.face->size->metrics.descender / 64;
|
||||
val = FONT_METRIC_ROUNDUP(-(int)fi->src->ft.face->size->metrics.descender);
|
||||
else
|
||||
val = -(int)fi->src->ft.face->bbox.yMin;
|
||||
if (fi->src->ft.face->units_per_EM == 0)
|
||||
return val;
|
||||
dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
||||
ret = (val * fi->src->ft.face->size->metrics.y_scale) / (dv * dv);
|
||||
ret = FONT_MERTIC_CONV(val, dv, fi->src->ft.face->size->metrics.y_scale);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -226,10 +226,10 @@ evas_common_font_get_line_advance(RGBA_Font *fn)
|
|||
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||
(fi->src->ft.face->bbox.yMin == 0) &&
|
||||
(fi->src->ft.face->units_per_EM == 0))
|
||||
return val >> 6;
|
||||
return FONT_METRIC_ROUNDUP(val);
|
||||
else if (fi->src->ft.face->units_per_EM == 0)
|
||||
return val;
|
||||
return val >> 6;
|
||||
return FONT_METRIC_ROUNDUP(val);
|
||||
// dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
||||
// ret = (val * fi->src->ft.face->size->metrics.y_scale) / (dv * dv);
|
||||
// return ret;
|
||||
|
|
|
@ -46,5 +46,20 @@ void evas_common_font_int_reload(RGBA_Font_Int *fi);
|
|||
((0x202A <= (x)) && ((x) <= 0x202E)) /* BIDI stuff */ \
|
||||
)
|
||||
|
||||
# if 1
|
||||
// do proper round (up or down like 1.4 -> 1 and 1.6 -> 2 etc
|
||||
# define FONT_MERTIC_CONV(val, dv, scale) \
|
||||
(((long long)((val) * (scale)) + (long long)((dv) * (dv) / 2LL)) \
|
||||
/ (long long)((dv) * (dv)))
|
||||
# define FONT_METRIC_ROUNDUP(val) \
|
||||
(((val) + 31) >> 6)
|
||||
# else
|
||||
// truncate/round down
|
||||
# define FONT_MERTIC_CONV(val, dv, scale) \
|
||||
(((val) * (scale)) / ((dv) * (dv)))
|
||||
# define FONT_METRIC_ROUNDUP(val) \
|
||||
((val) >> 6)
|
||||
# endif
|
||||
|
||||
# include "evas_font_default_walk.x"
|
||||
#endif /* !_EVAS_FONT_PRIVATE_H */
|
||||
|
|
Loading…
Reference in New Issue