[draw] Do quadratic-to-cubic conversion in nil quadratic implementation

This commit is contained in:
Behdad Esfahbod 2022-02-03 14:42:56 -06:00
parent c681331c3f
commit a357e5d889
2 changed files with 14 additions and 20 deletions

View File

@ -41,11 +41,19 @@ hb_draw_line_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSE
void *user_data HB_UNUSED) {} void *user_data HB_UNUSED) {}
static void static void
hb_draw_quadratic_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED, hb_draw_quadratic_to_nil (hb_draw_funcs_t *dfuncs, void *draw_data,
hb_draw_state_t *st HB_UNUSED, hb_draw_state_t *st,
float control_x HB_UNUSED, float control_y HB_UNUSED, float control_x, float control_y,
float to_x HB_UNUSED, float to_y HB_UNUSED, float to_x, float to_y,
void *user_data HB_UNUSED) {} void *user_data)
{
dfuncs->emit_cubic_to (draw_data, *st,
(st->current_x + 2.f * control_x) / 3.f,
(st->current_y + 2.f * control_y) / 3.f,
(to_x + 2.f * control_x) / 3.f,
(to_y + 2.f * control_y) / 3.f,
to_x, to_y);
}
static void static void
hb_draw_cubic_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED, hb_draw_cubic_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED,
@ -174,10 +182,6 @@ DEFINE_NULL_INSTANCE (hb_draw_funcs_t) =
} }
}; };
/* XXX Remove. */
bool
hb_draw_funcs_t::quadratic_to_is_set () { return func.quadratic_to != hb_draw_quadratic_to_nil; }
/** /**
* hb_draw_funcs_reference: * hb_draw_funcs_reference:

View File

@ -92,8 +92,6 @@ struct hb_draw_funcs_t
{ func.close_path (this, draw_data, &st, { func.close_path (this, draw_data, &st,
user_data.close_path); } user_data.close_path); }
/* XXX Remove */
HB_INTERNAL bool quadratic_to_is_set ();
void move_to (void *draw_data, hb_draw_state_t &st, void move_to (void *draw_data, hb_draw_state_t &st,
float to_x, float to_y) float to_x, float to_y)
@ -118,15 +116,7 @@ struct hb_draw_funcs_t
float to_x, float to_y) float to_x, float to_y)
{ {
if (!st.path_open) start_path (draw_data, st); if (!st.path_open) start_path (draw_data, st);
if (quadratic_to_is_set ())
emit_quadratic_to (draw_data, st, control_x, control_y, to_x, to_y); emit_quadratic_to (draw_data, st, control_x, control_y, to_x, to_y);
else
emit_cubic_to (draw_data, st,
(st.current_x + 2.f * control_x) / 3.f,
(st.current_y + 2.f * control_y) / 3.f,
(to_x + 2.f * control_x) / 3.f,
(to_y + 2.f * control_y) / 3.f,
to_x, to_y);
st.current_x = to_x; st.current_x = to_x;
st.current_y = to_y; st.current_y = to_y;
} }