[GPOS] Apply font synthetic slant
Part of fixing https://github.com/harfbuzz/harfbuzz/issues/3196
This commit is contained in:
parent
810f5d71c7
commit
ff697debd8
|
@ -1478,6 +1478,7 @@ DEFINE_NULL_INSTANCE (hb_font_t) =
|
||||||
1000, /* x_scale */
|
1000, /* x_scale */
|
||||||
1000, /* y_scale */
|
1000, /* y_scale */
|
||||||
0., /* slant */
|
0., /* slant */
|
||||||
|
0., /* slant_xy; */
|
||||||
1<<16, /* x_mult */
|
1<<16, /* x_mult */
|
||||||
1<<16, /* y_mult */
|
1<<16, /* y_mult */
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,7 @@ struct hb_font_t
|
||||||
int32_t x_scale;
|
int32_t x_scale;
|
||||||
int32_t y_scale;
|
int32_t y_scale;
|
||||||
float slant;
|
float slant;
|
||||||
|
float slant_xy;
|
||||||
int64_t x_mult;
|
int64_t x_mult;
|
||||||
int64_t y_mult;
|
int64_t y_mult;
|
||||||
|
|
||||||
|
@ -618,6 +619,7 @@ struct hb_font_t
|
||||||
signed upem = face->get_upem ();
|
signed upem = face->get_upem ();
|
||||||
x_mult = ((int64_t) x_scale << 16) / upem;
|
x_mult = ((int64_t) x_scale << 16) / upem;
|
||||||
y_mult = ((int64_t) y_scale << 16) / upem;
|
y_mult = ((int64_t) y_scale << 16) / upem;
|
||||||
|
slant_xy = y_scale ? slant * x_scale / y_scale : 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
hb_position_t em_mult (int16_t v, int64_t mult)
|
hb_position_t em_mult (int16_t v, int64_t mult)
|
||||||
|
|
|
@ -2951,7 +2951,7 @@ GPOS::position_finish_advances (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer H
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GPOS::position_finish_offsets (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
|
GPOS::position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
_hb_buffer_assert_gsubgpos_vars (buffer);
|
_hb_buffer_assert_gsubgpos_vars (buffer);
|
||||||
|
|
||||||
|
@ -2961,8 +2961,15 @@ GPOS::position_finish_offsets (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
|
||||||
|
|
||||||
/* Handle attachments */
|
/* Handle attachments */
|
||||||
if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT)
|
if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT)
|
||||||
for (unsigned int i = 0; i < len; i++)
|
for (unsigned i = 0; i < len; i++)
|
||||||
propagate_attachment_offsets (pos, len, i, direction);
|
propagate_attachment_offsets (pos, len, i, direction);
|
||||||
|
|
||||||
|
if (unlikely (font->slant))
|
||||||
|
{
|
||||||
|
for (unsigned i = 0; i < len; i++)
|
||||||
|
if (unlikely (pos[i].y_offset))
|
||||||
|
pos[i].x_offset += _hb_roundf (font->slant_xy * pos[i].y_offset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue