[gtk/path-work-rebased: 1018/1045] path: support conic->curve in foreach




commit 393e3afbaf87989ccc27fd69d84899abe6bf5ce3
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Dec 9 19:07:37 2020 -0500

    path: support conic->curve in foreach

 gsk/gskpath.c | 31 ++++++++++++++++++++++++-------
 1 file changed, 24 insertions(+), 7 deletions(-)
---
diff --git a/gsk/gskpath.c b/gsk/gskpath.c
index 2f2abc502c..d15fbfcb2f 100644
--- a/gsk/gskpath.c
+++ b/gsk/gskpath.c
@@ -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);
+          }
       }
 
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]