[gtk/matthiasc/lottie] Add a setter for the stroke



commit ee3d6d8514427a102de536b9836a500b6825edb9
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Nov 22 01:59:17 2020 -0500

    Add a setter for the stroke
    
    Make the stroke used for the curve itself settable,
    and add a scale in the demo to set it. This is not
    very interesting since the stroke doesn't have many
    parameters yet.

 tests/curve-editor.c | 16 +++++++++++++---
 tests/curve-editor.h |  3 +++
 tests/curve.c        | 17 +++++++++++++++++
 3 files changed, 33 insertions(+), 3 deletions(-)
---
diff --git a/tests/curve-editor.c b/tests/curve-editor.c
index b43167d487..12d65bf726 100644
--- a/tests/curve-editor.c
+++ b/tests/curve-editor.c
@@ -113,6 +113,7 @@ struct _CurveEditor
 
   GtkWidget *menu;
   GActionMap *actions;
+  GskStroke *stroke;
 };
 
 struct _CurveEditorClass
@@ -1246,9 +1247,7 @@ curve_editor_snapshot (GtkWidget   *widget,
   curve_editor_add_path (self, builder);
 
   path = gsk_path_builder_free_to_path (builder);
-  stroke = gsk_stroke_new (1);
-  gtk_snapshot_push_stroke (snapshot, path, stroke);
-  gsk_stroke_free (stroke);
+  gtk_snapshot_push_stroke (snapshot, path, self->stroke);
   gsk_path_unref (path);
 
   gtk_snapshot_append_color (snapshot,
@@ -1441,6 +1440,7 @@ curve_editor_init (CurveEditor *self)
 
   self->dragged = -1;
   self->edit = FALSE;
+  self->stroke = gsk_stroke_new (1.0);
 
   controller = GTK_EVENT_CONTROLLER (gtk_gesture_drag_new ());
   gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (controller), GDK_BUTTON_PRIMARY);
@@ -1613,5 +1613,15 @@ curve_editor_get_path (CurveEditor *self)
 
   return gsk_path_builder_free_to_path (builder);
 }
+
+void
+curve_editor_set_stroke (CurveEditor *self,
+                         GskStroke   *stroke)
+{
+  gsk_stroke_free (self->stroke);
+  self->stroke = gsk_stroke_copy (stroke);
+
+  gtk_widget_queue_draw (GTK_WIDGET (self));
+}
 /* }}} */
 /* vim:set foldmethod=marker expandtab: */
diff --git a/tests/curve-editor.h b/tests/curve-editor.h
index 5daf1c0114..85bac0d4b1 100644
--- a/tests/curve-editor.h
+++ b/tests/curve-editor.h
@@ -17,4 +17,7 @@ void        curve_editor_set_path (CurveEditor *self,
 
 GskPath *   curve_editor_get_path (CurveEditor *self);
 
+void        curve_editor_set_stroke (CurveEditor *self,
+                                     GskStroke   *stroke);
+
 G_END_DECLS
diff --git a/tests/curve.c b/tests/curve.c
index e0b1814d0b..e083ac8d18 100644
--- a/tests/curve.c
+++ b/tests/curve.c
@@ -53,6 +53,17 @@ reset (GtkButton   *button,
   gsk_path_unref (path);
 }
 
+static void
+stroke_changed (GtkRange    *range,
+                CurveEditor *editor)
+{
+  GskStroke *stroke;
+
+  stroke = gsk_stroke_new (gtk_range_get_value (range));
+  curve_editor_set_stroke (editor, stroke);
+  gsk_stroke_free (stroke);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -61,6 +72,7 @@ main (int argc, char *argv[])
   GtkWidget *edit_toggle;
   GtkWidget *reset_button;
   GtkWidget *titlebar;
+  GtkWidget *scale;
 
   gtk_init ();
 
@@ -72,9 +84,13 @@ main (int argc, char *argv[])
 
   reset_button = gtk_button_new_from_icon_name ("edit-undo-symbolic");
 
+  scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 1, 10, 1);
+  gtk_widget_set_size_request (scale, 60, -1);
+
   titlebar = gtk_header_bar_new ();
   gtk_header_bar_pack_start (GTK_HEADER_BAR (titlebar), edit_toggle);
   gtk_header_bar_pack_start (GTK_HEADER_BAR (titlebar), reset_button);
+  gtk_header_bar_pack_end (GTK_HEADER_BAR (titlebar), scale);
 
   gtk_window_set_titlebar (GTK_WINDOW (window), titlebar);
 
@@ -82,6 +98,7 @@ main (int argc, char *argv[])
 
   g_signal_connect (edit_toggle, "notify::active", G_CALLBACK (edit_changed), demo);
   g_signal_connect (reset_button, "clicked", G_CALLBACK (reset), demo);
+  g_signal_connect (scale, "value-changed", G_CALLBACK (stroke_changed), demo);
 
   reset (NULL, CURVE_EDITOR (demo));
 


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