1/* Overlay/Decorative Overlay
2 * #Keywords: GtkOverlay
3 *
4 * Another example of an overlay with some decorative
5 * and some interactive controls.
6 */
7
8#include <gtk/gtk.h>
9
10static GtkTextTag *tag;
11
12static void
13margin_changed (GtkAdjustment *adjustment,
14 GtkTextView *text)
15{
16 int value;
17
18 value = (int)gtk_adjustment_get_value (adjustment);
19 gtk_text_view_set_left_margin (GTK_TEXT_VIEW (text), left_margin: value);
20 g_object_set (object: tag, first_property_name: "pixels-above-lines", value, NULL);
21}
22
23GtkWidget *
24do_overlay_decorative (GtkWidget *do_widget)
25{
26 static GtkWidget *window = NULL;
27
28 if (!window)
29 {
30 GtkWidget *overlay;
31 GtkWidget *sw;
32 GtkWidget *text;
33 GtkWidget *image;
34 GtkWidget *scale;
35 GtkTextBuffer *buffer;
36 GtkTextIter start, end;
37 GtkAdjustment *adjustment;
38
39 window = gtk_window_new ();
40 gtk_window_set_default_size (GTK_WINDOW (window), width: 500, height: 510);
41 gtk_window_set_title (GTK_WINDOW (window), title: "Decorative Overlay");
42
43 overlay = gtk_overlay_new ();
44 sw = gtk_scrolled_window_new ();
45 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
46 hscrollbar_policy: GTK_POLICY_AUTOMATIC,
47 vscrollbar_policy: GTK_POLICY_AUTOMATIC);
48 text = gtk_text_view_new ();
49 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
50
51 gtk_text_buffer_set_text (buffer, text: "Dear diary...", len: -1);
52
53 tag = gtk_text_buffer_create_tag (buffer, tag_name: "top-margin",
54 first_property_name: "pixels-above-lines", 0,
55 NULL);
56 gtk_text_buffer_get_start_iter (buffer, iter: &start);
57 end = start;
58 gtk_text_iter_forward_word_end (iter: &end);
59 gtk_text_buffer_apply_tag (buffer, tag, start: &start, end: &end);
60
61 gtk_window_set_child (GTK_WINDOW (window), child: overlay);
62 gtk_overlay_set_child (GTK_OVERLAY (overlay), child: sw);
63 gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (sw), child: text);
64 g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window);
65
66 image = gtk_picture_new_for_resource (resource_path: "/overlay2/decor1.png");
67 gtk_overlay_add_overlay (GTK_OVERLAY (overlay), widget: image);
68 gtk_widget_set_can_target (widget: image, FALSE);
69 gtk_widget_set_halign (widget: image, align: GTK_ALIGN_START);
70 gtk_widget_set_valign (widget: image, align: GTK_ALIGN_START);
71
72 image = gtk_picture_new_for_resource (resource_path: "/overlay2/decor2.png");
73 gtk_overlay_add_overlay (GTK_OVERLAY (overlay), widget: image);
74 gtk_widget_set_can_target (widget: image, FALSE);
75 gtk_widget_set_halign (widget: image, align: GTK_ALIGN_END);
76 gtk_widget_set_valign (widget: image, align: GTK_ALIGN_END);
77
78 adjustment = gtk_adjustment_new (value: 0, lower: 0, upper: 100, step_increment: 1, page_increment: 1, page_size: 0);
79 g_signal_connect (adjustment, "value-changed",
80 G_CALLBACK (margin_changed), text);
81
82 scale = gtk_scale_new (orientation: GTK_ORIENTATION_HORIZONTAL, adjustment);
83 gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
84 gtk_widget_set_size_request (widget: scale, width: 120, height: -1);
85 gtk_widget_set_margin_start (widget: scale, margin: 20);
86 gtk_widget_set_margin_end (widget: scale, margin: 20);
87 gtk_widget_set_margin_bottom (widget: scale, margin: 20);
88 gtk_overlay_add_overlay (GTK_OVERLAY (overlay), widget: scale);
89 gtk_widget_set_halign (widget: scale, align: GTK_ALIGN_START);
90 gtk_widget_set_valign (widget: scale, align: GTK_ALIGN_END);
91 gtk_widget_set_tooltip_text (widget: scale, text: "Margin");
92
93 gtk_adjustment_set_value (adjustment, value: 100);
94 }
95
96 if (!gtk_widget_get_visible (widget: window))
97 gtk_widget_show (widget: window);
98 else
99 gtk_window_destroy (GTK_WINDOW (window));
100
101 return window;
102}
103

source code of gtk/demos/gtk-demo/overlay_decorative.c