diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-04-12 10:10:11 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-04-12 10:10:11 +0000 |
commit | d8b46c16cc8982c3b00f4b58a8bdb018a1aa3d3f (patch) | |
tree | 69c8a6db69c1ea6886c0e91121ba01508819314b /demos | |
parent | e9f7a9b8e60912bcbb412f5b0fcd437dac7b4735 (diff) | |
parent | e12669e230871061b1baf1fb9a4ea23ede5700b4 (diff) | |
download | gtk+-d8b46c16cc8982c3b00f4b58a8bdb018a1aa3d3f.tar.gz |
Merge branch 'stylus-fixes' into 'main'
gtk-demo: Test stylus-only mode
See merge request GNOME/gtk!5804
Diffstat (limited to 'demos')
-rw-r--r-- | demos/gtk-demo/paint.c | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/demos/gtk-demo/paint.c b/demos/gtk-demo/paint.c index 34830284b9..5c641b848c 100644 --- a/demos/gtk-demo/paint.c +++ b/demos/gtk-demo/paint.c @@ -24,6 +24,7 @@ typedef struct GdkRGBA draw_color; GtkPadController *pad_controller; double brush_size; + GtkGesture *gesture; } DrawingArea; typedef struct @@ -260,7 +261,7 @@ drawing_area_apply_stroke (DrawingArea *area, double y, double pressure) { - if (gdk_device_tool_get_tool_type (tool) == GDK_DEVICE_TOOL_TYPE_ERASER) + if (tool && gdk_device_tool_get_tool_type (tool) == GDK_DEVICE_TOOL_TYPE_ERASER) { cairo_set_line_width (area->cr, 10 * pressure * area->brush_size); cairo_set_operator (area->cr, CAIRO_OPERATOR_DEST_OUT); @@ -311,7 +312,9 @@ stylus_gesture_motion (GtkGestureStylus *gesture, drawing_area_apply_stroke (area, tool, backlog[i].axes[GDK_AXIS_X], backlog[i].axes[GDK_AXIS_Y], - backlog[i].axes[GDK_AXIS_PRESSURE]); + backlog[i].flags & GDK_AXIS_FLAG_PRESSURE + ? backlog[i].axes[GDK_AXIS_PRESSURE] + : 1); } g_free (backlog); @@ -341,6 +344,8 @@ drawing_area_init (DrawingArea *area) area->draw_color = (GdkRGBA) { 0, 0, 0, 1 }; area->brush_size = 1; + + area->gesture = gesture; } static GtkWidget * @@ -379,6 +384,12 @@ drawing_area_color_set (DrawingArea *area, gtk_color_dialog_button_set_rgba (button, color); } +static GtkGesture * +drawing_area_get_gesture (DrawingArea *area) +{ + return area->gesture; +} + GtkWidget * do_paint (GtkWidget *toplevel) { @@ -386,7 +397,7 @@ do_paint (GtkWidget *toplevel) if (!window) { - GtkWidget *draw_area, *headerbar, *colorbutton; + GtkWidget *draw_area, *headerbar, *button; window = gtk_window_new (); @@ -395,15 +406,22 @@ do_paint (GtkWidget *toplevel) headerbar = gtk_header_bar_new (); - colorbutton = gtk_color_dialog_button_new (gtk_color_dialog_new ()); - g_signal_connect (colorbutton, "notify::rgba", + button = gtk_color_dialog_button_new (gtk_color_dialog_new ()); + g_signal_connect (button, "notify::rgba", G_CALLBACK (color_button_color_set), draw_area); g_signal_connect (draw_area, "color-set", - G_CALLBACK (drawing_area_color_set), colorbutton); - gtk_color_dialog_button_set_rgba (GTK_COLOR_DIALOG_BUTTON (colorbutton), + G_CALLBACK (drawing_area_color_set), button); + gtk_color_dialog_button_set_rgba (GTK_COLOR_DIALOG_BUTTON (button), &(GdkRGBA) { 0, 0, 0, 1 }); - gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), colorbutton); + gtk_header_bar_pack_end (GTK_HEADER_BAR (headerbar), button); + + button = gtk_check_button_new_with_label ("Stylus only"); + g_object_bind_property (button, "active", + drawing_area_get_gesture ((DrawingArea *)draw_area), "stylus-only", + G_BINDING_SYNC_CREATE); + gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), button); + gtk_window_set_titlebar (GTK_WINDOW (window), headerbar); gtk_window_set_title (GTK_WINDOW (window), "Paint"); g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window); |