[gtk/curve-ops: 2/3] path: support conic->curve in foreach




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

    path: support conic->curve in foreach

 gsk/gskpath.c | 35 ++++++++++++++++++++++++++---------
 1 file changed, 26 insertions(+), 9 deletions(-)
---
diff --git a/gsk/gskpath.c b/gsk/gskpath.c
index ce49298473..9b01626938 100644
--- a/gsk/gskpath.c
+++ b/gsk/gskpath.c
@@ -460,6 +460,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,
@@ -482,9 +491,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);
@@ -492,17 +501,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]