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.
|
This change adds Eo support to Evas while keeping the old API intact.
|
||||||
For more information, go to Eo.
|
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 evas_object_image_alpha_set when image data not loaded yet.
|
||||||
* Fix map surface leak.
|
* Fix map surface leak.
|
||||||
* Fix native surface set to null crash bug in gl engine.
|
* 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:
|
Removal:
|
||||||
* No more support s3c6410.
|
* 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)
|
if (fi->src->ft.face->units_per_EM != 0)
|
||||||
{
|
{
|
||||||
dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
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
|
else
|
||||||
{
|
{
|
||||||
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||||
(fi->src->ft.face->bbox.yMin == 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
|
else
|
||||||
ret = val;
|
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)
|
if (fi->src->ft.face->units_per_EM != 0)
|
||||||
{
|
{
|
||||||
dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
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
|
else
|
||||||
{
|
{
|
||||||
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||||
(fi->src->ft.face->bbox.yMin == 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
|
else
|
||||||
ret = val;
|
ret = val;
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,7 @@ evas_common_font_ascent_get(RGBA_Font *fn)
|
||||||
WRN("NOT SCALABLE!");
|
WRN("NOT SCALABLE!");
|
||||||
}
|
}
|
||||||
val = (int)fi->src->ft.face->size->metrics.ascender;
|
val = (int)fi->src->ft.face->size->metrics.ascender;
|
||||||
return val >> 6;
|
return FONT_METRIC_ROUNDUP(val);
|
||||||
// printf("%i | %i\n", val, val >> 6);
|
// printf("%i | %i\n", val, val >> 6);
|
||||||
// if (fi->src->ft.face->units_per_EM == 0)
|
// if (fi->src->ft.face->units_per_EM == 0)
|
||||||
// return val;
|
// return val;
|
||||||
|
@ -138,7 +138,7 @@ evas_common_font_descent_get(RGBA_Font *fn)
|
||||||
fi->src->current_size = fi->size;
|
fi->src->current_size = fi->size;
|
||||||
}
|
}
|
||||||
val = -(int)fi->src->ft.face->size->metrics.descender;
|
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)
|
// if (fi->src->ft.face->units_per_EM == 0)
|
||||||
// return val;
|
// return val;
|
||||||
// dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
// 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) &&
|
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||||
(fi->src->ft.face->bbox.yMin == 0) &&
|
(fi->src->ft.face->bbox.yMin == 0) &&
|
||||||
(fi->src->ft.face->units_per_EM == 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
|
else
|
||||||
val = (int)fi->src->ft.face->bbox.yMax;
|
val = (int)fi->src->ft.face->bbox.yMax;
|
||||||
if (fi->src->ft.face->units_per_EM == 0)
|
if (fi->src->ft.face->units_per_EM == 0)
|
||||||
return val;
|
return val;
|
||||||
dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,13 +196,13 @@ evas_common_font_max_descent_get(RGBA_Font *fn)
|
||||||
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||||
(fi->src->ft.face->bbox.yMin == 0) &&
|
(fi->src->ft.face->bbox.yMin == 0) &&
|
||||||
(fi->src->ft.face->units_per_EM == 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
|
else
|
||||||
val = -(int)fi->src->ft.face->bbox.yMin;
|
val = -(int)fi->src->ft.face->bbox.yMin;
|
||||||
if (fi->src->ft.face->units_per_EM == 0)
|
if (fi->src->ft.face->units_per_EM == 0)
|
||||||
return val;
|
return val;
|
||||||
dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,10 +226,10 @@ evas_common_font_get_line_advance(RGBA_Font *fn)
|
||||||
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
if ((fi->src->ft.face->bbox.yMax == 0) &&
|
||||||
(fi->src->ft.face->bbox.yMin == 0) &&
|
(fi->src->ft.face->bbox.yMin == 0) &&
|
||||||
(fi->src->ft.face->units_per_EM == 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)
|
else if (fi->src->ft.face->units_per_EM == 0)
|
||||||
return val;
|
return val;
|
||||||
return val >> 6;
|
return FONT_METRIC_ROUNDUP(val);
|
||||||
// dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM;
|
// 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 = (val * fi->src->ft.face->size->metrics.y_scale) / (dv * dv);
|
||||||
// return ret;
|
// return ret;
|
||||||
|
|
|
@ -46,5 +46,20 @@ void evas_common_font_int_reload(RGBA_Font_Int *fi);
|
||||||
((0x202A <= (x)) && ((x) <= 0x202E)) /* BIDI stuff */ \
|
((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"
|
# include "evas_font_default_walk.x"
|
||||||
#endif /* !_EVAS_FONT_PRIVATE_H */
|
#endif /* !_EVAS_FONT_PRIVATE_H */
|
||||||
|
|
Loading…
Reference in New Issue