From 01abd68455a0a39f325207de303345ea76e08b3d Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 20 Nov 2020 21:51:25 -0500 Subject: 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 -- cgit v1.2.1