diff --git a/legacy/evas/src/lib/engines/common/evas_font_ot_walk.x b/legacy/evas/src/lib/engines/common/evas_font_ot_walk.x index 5daec807f1..fed81f7022 100644 --- a/legacy/evas/src/lib/engines/common/evas_font_ot_walk.x +++ b/legacy/evas/src/lib/engines/common/evas_font_ot_walk.x @@ -90,16 +90,19 @@ /*FIXME: doc */ #define EVAS_FONT_WALK_OT_X_OFF \ - (EVAS_FONT_OT_X_OFF_GET( \ - intl_props->ot_data->items[char_index]) >> 6) + (EVAS_FONT_ROUND_26_6_TO_INT( \ + EVAS_FONT_OT_X_OFF_GET( \ + intl_props->ot_data->items[char_index]))) #define EVAS_FONT_WALK_OT_Y_OFF \ - (EVAS_FONT_OT_Y_OFF_GET( \ - intl_props->ot_data->items[char_index]) >> 6) + (EVAS_FONT_ROUND_26_6_TO_INT( \ + EVAS_FONT_OT_Y_OFF_GET( \ + intl_props->ot_data->items[char_index]))) #define EVAS_FONT_WALK_OT_X_BEAR (fg->glyph_out->left) #define EVAS_FONT_WALK_OT_Y_BEAR (fg->glyph_out->top) #define EVAS_FONT_WALK_OT_X_ADV \ - (EVAS_FONT_OT_X_ADV_GET( \ - intl_props->ot_data->items[char_index]) >> 6) + (EVAS_FONT_ROUND_26_6_TO_INT( \ + EVAS_FONT_OT_X_ADV_GET( \ + intl_props->ot_data->items[char_index]))) #define EVAS_FONT_WALK_OT_WIDTH (fg->glyph_out->bitmap.width) #define EVAS_FONT_WALK_OT_POS \ (EVAS_FONT_OT_POS_GET( \ diff --git a/legacy/evas/src/lib/engines/common/evas_font_private.h b/legacy/evas/src/lib/engines/common/evas_font_private.h index d3336d1d5c..3eb2465d3b 100644 --- a/legacy/evas/src/lib/engines/common/evas_font_private.h +++ b/legacy/evas/src/lib/engines/common/evas_font_private.h @@ -37,6 +37,9 @@ void evas_common_font_int_reload(RGBA_Font_Int *fi); # define OTUNLOCK() # endif +# define EVAS_FONT_ROUND_26_6_TO_INT(x) \ + (((0x3F & x) > 31) ? ((x >> 6) + 1) : (x >> 6)) + # define EVAS_FONT_CHARACTER_IS_INVISIBLE(x) ( \ ((0x200C <= (x)) && ((x) <= 0x200D)) || /* ZWNJ..ZWH */ \ ((0x200E <= (x)) && ((x) <= 0x200F)) || /* BIDI stuff */ \