[gtk/path-tests: 7/7] curve2: Show osculating circles




commit 0b5af360ac2c4487df4dafef41bd7f8cfee3aa67
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Dec 23 18:52:56 2020 -0500

    curve2: Show osculating circles

 tests/curve2.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)
---
diff --git a/tests/curve2.c b/tests/curve2.c
index b79b3b96f9..5a9f99cc52 100644
--- a/tests/curve2.c
+++ b/tests/curve2.c
@@ -13,6 +13,8 @@ struct _DemoWidget
   graphene_point_t point2;
   graphene_vec2_t tangent;
   double start, end;
+  float curvature;
+  graphene_point_t center;
 
   gboolean track;
   gboolean show_bounding_box;
@@ -63,6 +65,7 @@ motion (GtkEventControllerMotion *controller,
                                                &self->tangent);
 
       gsk_path_measure_get_point (self->measure, t, &self->point2, NULL);
+      self->curvature = gsk_path_measure_get_curvature (self->measure, t, &self->center);
 
       text = g_strdup_printf ("%.1f", distance);
       gtk_label_set_label (GTK_LABEL (self->label), text);
@@ -273,6 +276,25 @@ demo_widget_snapshot (GtkWidget   *widget,
 
       gsk_path_unref (path);
 
+      if (self->curvature != 0)
+        {
+          builder = gsk_path_builder_new ();
+          gsk_path_builder_add_circle (builder, &self->center, fabs (1/self->curvature));
+          gsk_path_builder_add_circle (builder, &self->center, 3);
+
+          path = gsk_path_builder_free_to_path (builder);
+
+          stroke = gsk_stroke_new (1.0);
+          gtk_snapshot_push_stroke (snapshot, path, stroke);
+          gsk_stroke_free (stroke);
+
+          gtk_snapshot_append_color (snapshot,
+                                     &(GdkRGBA){ 1, 0, 1, 1},
+                                     &GRAPHENE_RECT_INIT (0, 0, width, height ));
+
+          gtk_snapshot_pop (snapshot);
+        }
+
       gtk_widget_snapshot_child (widget, self->label, snapshot);
     }
 


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