[gtk/matthiasc/lottie: 3/7] Add more api




commit 01abd68455a0a39f325207de303345ea76e08b3d
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Nov 20 21:51:25 2020 -0500

    Add more api
    
    Add curve_editor_get_path.

 tests/curve-editor.c | 73 +++++++++++++++++++++++++++++++++-------------------
 tests/curve-editor.h |  2 ++
 2 files changed, 49 insertions(+), 26 deletions(-)
---
diff --git a/tests/curve-editor.c b/tests/curve-editor.c
index 5b278bdff8..cc0040152e 100644
--- a/tests/curve-editor.c
+++ b/tests/curve-editor.c
@@ -608,9 +608,42 @@ curve_editor_init (CurveEditor *self)
   gtk_widget_set_parent (self->menu, GTK_WIDGET (self));
 }
 
+static void
+curve_editor_add_path (CurveEditor    *self,
+                       GskPathBuilder *builder)
+{
+  int i;
+
+  gsk_path_builder_move_to (builder, self->points[0].x, self->points[0].y);
+  for (i = 1; i < self->n_points; i += 3)
+    {
+      switch (self->point_data[i / 3].op)
+        {
+        case MOVE:
+          gsk_path_builder_move_to (builder,
+                                    self->points[(i + 2) % self->n_points].x, self->points[(i + 2) % 
self->n_points].y);
+          break;
+
+        case LINE:
+          gsk_path_builder_line_to (builder,
+                                    self->points[(i + 2) % self->n_points].x, self->points[(i + 2) % 
self->n_points].y);
+          break;
+
+        case CURVE:
+          gsk_path_builder_curve_to (builder,
+                                     self->points[i].x, self->points[i].y,
+                                     self->points[(i + 1) % self->n_points].x, self->points[(i + 1) % 
self->n_points].y,
+                                     self->points[(i + 2) % self->n_points].x, self->points[(i + 2) % 
self->n_points].y);
+          break;
+        default:
+          g_assert_not_reached ();
+        }
+    }
+}
+
 static void
 curve_editor_snapshot (GtkWidget   *widget,
-                      GtkSnapshot *snapshot)
+                       GtkSnapshot *snapshot)
 {
   CurveEditor *self = (CurveEditor *)widget;
   GskPathBuilder *builder;
@@ -662,31 +695,7 @@ curve_editor_snapshot (GtkWidget   *widget,
 
   /* Add the curve itself */
 
-  gsk_path_builder_move_to (builder, self->points[0].x, self->points[0].y);
-  for (i = 1; i < self->n_points; i += 3)
-    {
-      switch (self->point_data[i / 3].op)
-        {
-        case MOVE:
-          gsk_path_builder_move_to (builder,
-                                    self->points[(i + 2) % self->n_points].x, self->points[(i + 2) % 
self->n_points].y);
-          break;
-
-        case LINE:
-          gsk_path_builder_line_to (builder,
-                                    self->points[(i + 2) % self->n_points].x, self->points[(i + 2) % 
self->n_points].y);
-          break;
-
-        case CURVE:
-          gsk_path_builder_curve_to (builder,
-                                     self->points[i].x, self->points[i].y,
-                                     self->points[(i + 1) % self->n_points].x, self->points[(i + 1) % 
self->n_points].y,
-                                     self->points[(i + 2) % self->n_points].x, self->points[(i + 2) % 
self->n_points].y);
-          break;
-        default:
-          g_assert_not_reached ();
-        }
-    }
+  curve_editor_add_path (self, builder);
 
   /* Stroke everything we have so far */
 
@@ -1012,3 +1021,15 @@ curve_editor_set_path (CurveEditor *self,
 
   gtk_widget_queue_draw (GTK_WIDGET (self));
 }
+
+GskPath *
+curve_editor_get_path (CurveEditor *self)
+{
+  GskPathBuilder *builder;
+
+  builder = gsk_path_builder_new ();
+
+  curve_editor_add_path (self, builder);
+
+  return gsk_path_builder_free_to_path (builder);
+}
diff --git a/tests/curve-editor.h b/tests/curve-editor.h
index e26247ba2b..5daf1c0114 100644
--- a/tests/curve-editor.h
+++ b/tests/curve-editor.h
@@ -15,4 +15,6 @@ void        curve_editor_set_edit (CurveEditor *self,
 void        curve_editor_set_path (CurveEditor *self,
                                    GskPath     *path);
 
+GskPath *   curve_editor_get_path (CurveEditor *self);
+
 G_END_DECLS


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