提交 b8477692 编写于 作者: B Behdad Esfahbod

[font] Keep font-space to user-space multiplier

Part of https://github.com/harfbuzz/harfbuzz/issues/1801
上级 df6edcd4
...@@ -1300,6 +1300,8 @@ DEFINE_NULL_INSTANCE (hb_font_t) = ...@@ -1300,6 +1300,8 @@ DEFINE_NULL_INSTANCE (hb_font_t) =
1000, /* x_scale */ 1000, /* x_scale */
1000, /* y_scale */ 1000, /* y_scale */
1<<16, /* x_mult */
1<<16, /* y_mult */
0, /* x_ppem */ 0, /* x_ppem */
0, /* y_ppem */ 0, /* y_ppem */
...@@ -1330,6 +1332,7 @@ _hb_font_create (hb_face_t *face) ...@@ -1330,6 +1332,7 @@ _hb_font_create (hb_face_t *face)
font->klass = hb_font_funcs_get_empty (); font->klass = hb_font_funcs_get_empty ();
font->data.init0 (font); font->data.init0 (font);
font->x_scale = font->y_scale = hb_face_get_upem (face); font->x_scale = font->y_scale = hb_face_get_upem (face);
font->x_mult = font->y_mult = 1 << 16;
return font; return font;
} }
...@@ -1603,6 +1606,7 @@ hb_font_set_face (hb_font_t *font, ...@@ -1603,6 +1606,7 @@ hb_font_set_face (hb_font_t *font,
hb_face_make_immutable (face); hb_face_make_immutable (face);
font->face = hb_face_reference (face); font->face = hb_face_reference (face);
font->mults_changed ();
hb_face_destroy (old); hb_face_destroy (old);
} }
...@@ -1712,6 +1716,7 @@ hb_font_set_scale (hb_font_t *font, ...@@ -1712,6 +1716,7 @@ hb_font_set_scale (hb_font_t *font,
font->x_scale = x_scale; font->x_scale = x_scale;
font->y_scale = y_scale; font->y_scale = y_scale;
font->mults_changed ();
} }
/** /**
......
...@@ -107,8 +107,10 @@ struct hb_font_t ...@@ -107,8 +107,10 @@ struct hb_font_t
hb_font_t *parent; hb_font_t *parent;
hb_face_t *face; hb_face_t *face;
int x_scale; int32_t x_scale;
int y_scale; int32_t y_scale;
int64_t x_mult;
int64_t y_mult;
unsigned int x_ppem; unsigned int x_ppem;
unsigned int y_ppem; unsigned int y_ppem;
...@@ -607,6 +609,13 @@ struct hb_font_t ...@@ -607,6 +609,13 @@ struct hb_font_t
return false; return false;
} }
void mults_changed ()
{
signed upem = face->get_upem ();
x_mult = ((int64_t) x_scale << 16) / upem;
y_mult = ((int64_t) y_scale << 16) / upem;
}
hb_position_t em_scale (int16_t v, int scale) hb_position_t em_scale (int16_t v, int scale)
{ {
signed upem = face->get_upem (); signed upem = face->get_upem ();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册