[font] Respect subfont slant setting in hb-draw
Fixes https://github.com/harfbuzz/harfbuzz/issues/3890
This commit is contained in:
parent
2e9b270a49
commit
060ecac949
|
@ -518,6 +518,7 @@ typedef struct hb_font_get_glyph_shape_default_adaptor_t {
|
||||||
void *draw_data;
|
void *draw_data;
|
||||||
float x_scale;
|
float x_scale;
|
||||||
float y_scale;
|
float y_scale;
|
||||||
|
float slant;
|
||||||
} hb_font_get_glyph_shape_default_adaptor_t;
|
} hb_font_get_glyph_shape_default_adaptor_t;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -530,9 +531,10 @@ hb_draw_move_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED,
|
||||||
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
||||||
float x_scale = adaptor->x_scale;
|
float x_scale = adaptor->x_scale;
|
||||||
float y_scale = adaptor->y_scale;
|
float y_scale = adaptor->y_scale;
|
||||||
|
float slant = adaptor->slant;
|
||||||
|
|
||||||
adaptor->draw_funcs->emit_move_to (adaptor->draw_data, *st,
|
adaptor->draw_funcs->emit_move_to (adaptor->draw_data, *st,
|
||||||
x_scale * to_x, y_scale * to_y);
|
x_scale * to_x + slant * to_y, y_scale * to_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -544,12 +546,13 @@ hb_draw_line_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
|
||||||
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
||||||
float x_scale = adaptor->x_scale;
|
float x_scale = adaptor->x_scale;
|
||||||
float y_scale = adaptor->y_scale;
|
float y_scale = adaptor->y_scale;
|
||||||
|
float slant = adaptor->slant;
|
||||||
|
|
||||||
st->current_x *= x_scale;
|
st->current_x = st->current_x * x_scale + st->current_y * slant;
|
||||||
st->current_y *= y_scale;
|
st->current_y = st->current_y * y_scale;
|
||||||
|
|
||||||
adaptor->draw_funcs->emit_line_to (adaptor->draw_data, *st,
|
adaptor->draw_funcs->emit_line_to (adaptor->draw_data, *st,
|
||||||
x_scale * to_x, y_scale * to_y);
|
x_scale * to_x + slant * to_y, y_scale * to_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -562,13 +565,14 @@ hb_draw_quadratic_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data
|
||||||
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
||||||
float x_scale = adaptor->x_scale;
|
float x_scale = adaptor->x_scale;
|
||||||
float y_scale = adaptor->y_scale;
|
float y_scale = adaptor->y_scale;
|
||||||
|
float slant = adaptor->slant;
|
||||||
|
|
||||||
st->current_x *= x_scale;
|
st->current_x = st->current_x * x_scale + st->current_y * slant;
|
||||||
st->current_y *= y_scale;
|
st->current_y = st->current_y * y_scale;
|
||||||
|
|
||||||
adaptor->draw_funcs->emit_quadratic_to (adaptor->draw_data, *st,
|
adaptor->draw_funcs->emit_quadratic_to (adaptor->draw_data, *st,
|
||||||
x_scale * control_x, y_scale * control_y,
|
x_scale * control_x + slant * control_y, y_scale * control_y,
|
||||||
x_scale * to_x, y_scale * to_y);
|
x_scale * to_x + slant * to_y, y_scale * to_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -582,14 +586,15 @@ hb_draw_cubic_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
|
||||||
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
|
||||||
float x_scale = adaptor->x_scale;
|
float x_scale = adaptor->x_scale;
|
||||||
float y_scale = adaptor->y_scale;
|
float y_scale = adaptor->y_scale;
|
||||||
|
float slant = adaptor->slant;
|
||||||
|
|
||||||
st->current_x *= x_scale;
|
st->current_x = st->current_x * x_scale + st->current_y * slant;
|
||||||
st->current_y *= y_scale;
|
st->current_y = st->current_y * y_scale;
|
||||||
|
|
||||||
adaptor->draw_funcs->emit_cubic_to (adaptor->draw_data, *st,
|
adaptor->draw_funcs->emit_cubic_to (adaptor->draw_data, *st,
|
||||||
x_scale * control1_x, y_scale * control1_y,
|
x_scale * control1_x + slant * control1_y, y_scale * control1_y,
|
||||||
x_scale * control2_x, y_scale * control2_y,
|
x_scale * control2_x + slant * control2_y, y_scale * control2_y,
|
||||||
x_scale * to_x, y_scale * to_y);
|
x_scale * to_x + slant * to_y, y_scale * to_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -624,7 +629,8 @@ hb_font_get_glyph_shape_default (hb_font_t *font,
|
||||||
draw_funcs,
|
draw_funcs,
|
||||||
draw_data,
|
draw_data,
|
||||||
(float) font->x_scale / (float) font->parent->x_scale,
|
(float) font->x_scale / (float) font->parent->x_scale,
|
||||||
(float) font->y_scale / (float) font->parent->y_scale
|
(float) font->y_scale / (float) font->parent->y_scale,
|
||||||
|
(font->slant - font->parent->slant) * (float) font->x_scale / (float) font->parent->y_scale
|
||||||
};
|
};
|
||||||
|
|
||||||
font->parent->get_glyph_shape (glyph,
|
font->parent->get_glyph_shape (glyph,
|
||||||
|
|
Loading…
Reference in New Issue