path: support conic->curve in foreach

This commit is contained in:
Matthias Clasen
2020-12-09 19:07:37 -05:00
parent a9c36f8ba9
commit fcf43c4012

View File

@@ -465,6 +465,15 @@ gsk_path_foreach_trampoline_add_line (const graphene_point_t *from,
trampoline->user_data);
}
static gboolean
gsk_path_foreach_trampoline_add_curve (const graphene_point_t points[4],
gpointer data)
{
GskPathForeachTrampoline *trampoline = data;
return trampoline->func (GSK_PATH_CURVE, points, 4, 0.0f, trampoline->user_data);
}
static gboolean
gsk_path_foreach_trampoline (GskPathOperation op,
const graphene_point_t *pts,
@@ -497,17 +506,25 @@ gsk_path_foreach_trampoline (GskPathOperation op,
case GSK_PATH_CONIC:
{
GskCurve curve;
GskCurve curve;
if (trampoline->flags & GSK_PATH_FOREACH_ALLOW_CONIC)
return trampoline->func (op, pts, n_pts, weight, trampoline->user_data);
else
{
gsk_curve_init (&curve, gsk_pathop_encode (GSK_PATH_CONIC, (graphene_point_t[4]) { pts[0], pts[1], { weight, }, pts[2] } ));
/* XXX: decompose into curves if allowed */
gsk_curve_init (&curve, gsk_pathop_encode (GSK_PATH_CONIC, (graphene_point_t[4]) { pts[0], pts[1], { weight, }, pts[2] } ));
return gsk_curve_decompose (&curve,
trampoline->tolerance,
gsk_path_foreach_trampoline_add_line,
trampoline);
if (trampoline->flags & GSK_PATH_FOREACH_ALLOW_CURVE)
return gsk_curve_decompose_curve (&curve,
trampoline->tolerance,
gsk_path_foreach_trampoline_add_curve,
trampoline);
else
return gsk_curve_decompose (&curve,
trampoline->tolerance,
gsk_path_foreach_trampoline_add_line,
trampoline);
}
}