Add more api

Add curve_editor_get_path.
This commit is contained in:
Matthias Clasen
2020-11-20 21:51:25 -05:00
parent 267c1a277c
commit 01abd68455
2 changed files with 49 additions and 26 deletions

View File

@@ -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);
}

View File

@@ -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