path: support conic->curve in foreach
This commit is contained in:
@@ -463,6 +463,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,
|
||||
@@ -485,9 +494,9 @@ gsk_path_foreach_trampoline (GskPathOperation op,
|
||||
|
||||
if (trampoline->flags & GSK_PATH_FOREACH_ALLOW_CURVE)
|
||||
return trampoline->func (op, pts, n_pts, weight, trampoline->user_data);
|
||||
|
||||
|
||||
gsk_curve_init (&curve, gsk_pathop_encode (GSK_PATH_CURVE, pts));
|
||||
return gsk_curve_decompose (&curve,
|
||||
return gsk_curve_decompose (&curve,
|
||||
trampoline->tolerance,
|
||||
gsk_path_foreach_trampoline_add_line,
|
||||
trampoline);
|
||||
@@ -495,17 +504,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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user