Part of https://github.com/harfbuzz/harfbuzz/issues/1801
1000, /* x_scale */
1000, /* y_scale */
+ 1<<16, /* x_mult */
+ 1<<16, /* y_mult */
0, /* x_ppem */
0, /* y_ppem */
font->klass = hb_font_funcs_get_empty ();
font->data.init0 (font);
font->x_scale = font->y_scale = hb_face_get_upem (face);
+ font->x_mult = font->y_mult = 1 << 16;
return font;
}
hb_face_make_immutable (face);
font->face = hb_face_reference (face);
+ font->mults_changed ();
hb_face_destroy (old);
}
font->x_scale = x_scale;
font->y_scale = y_scale;
+ font->mults_changed ();
}
/**
hb_font_t *parent;
hb_face_t *face;
- int x_scale;
- int y_scale;
+ int32_t x_scale;
+ int32_t y_scale;
+ int64_t x_mult;
+ int64_t y_mult;
unsigned int x_ppem;
unsigned int y_ppem;
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)
{
signed upem = face->get_upem ();