1 | /* Menu |
2 | * #Keywords: action, zoom |
3 | * |
4 | * Demonstrates how to add a context menu to a custom widget |
5 | * and connect it with widget actions. |
6 | * |
7 | * The custom widget we create here is similar to a GtkPicture, |
8 | * but allows setting a zoom level for the displayed paintable. |
9 | * |
10 | * Our context menu has items to change the zoom level. |
11 | */ |
12 | |
13 | #include <gtk/gtk.h> |
14 | #include "demo3widget.h" |
15 | |
16 | |
17 | GtkWidget * |
18 | (GtkWidget *do_widget) |
19 | { |
20 | static GtkWidget *window = NULL; |
21 | |
22 | if (!window) |
23 | { |
24 | GtkWidget *box; |
25 | GtkWidget *sw; |
26 | GtkWidget *widget; |
27 | GtkWidget *scale; |
28 | |
29 | window = gtk_window_new (); |
30 | gtk_window_set_title (GTK_WINDOW (window), title: "Menu" ); |
31 | gtk_window_set_default_size (GTK_WINDOW (window), width: 600, height: 400); |
32 | gtk_window_set_display (GTK_WINDOW (window), |
33 | display: gtk_widget_get_display (widget: do_widget)); |
34 | g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window); |
35 | |
36 | box = gtk_box_new (orientation: GTK_ORIENTATION_VERTICAL, spacing: 0); |
37 | gtk_window_set_child (GTK_WINDOW (window), child: box); |
38 | |
39 | sw = gtk_scrolled_window_new (); |
40 | gtk_widget_set_vexpand (widget: sw, TRUE); |
41 | gtk_box_append (GTK_BOX (box), child: sw); |
42 | |
43 | widget = demo3_widget_new (resource: "/transparent/portland-rose.jpg" ); |
44 | gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), child: widget); |
45 | |
46 | scale = gtk_scale_new_with_range (orientation: GTK_ORIENTATION_HORIZONTAL, min: 0.01, max: 10.0, step: 0.1); |
47 | gtk_range_set_value (GTK_RANGE (scale), value: 1.0); |
48 | gtk_box_append (GTK_BOX (box), child: scale); |
49 | |
50 | g_object_bind_property (source: gtk_range_get_adjustment (GTK_RANGE (scale)), source_property: "value" , |
51 | target: widget, target_property: "scale" , |
52 | flags: G_BINDING_BIDIRECTIONAL); |
53 | } |
54 | |
55 | if (!gtk_widget_get_visible (widget: window)) |
56 | gtk_widget_show (widget: window); |
57 | else |
58 | gtk_window_destroy (GTK_WINDOW (window)); |
59 | |
60 | return window; |
61 | } |
62 | |