1/* Layout Manager/Transformation
2 * #Keywords: GtkLayoutManager, GskTransform
3 *
4 * This demo shows how to use transforms in a nontrivial
5 * way with a custom layout manager. The layout manager places
6 * icons on a sphere that can be rotated using arrow keys.
7 */
8
9#include <gtk/gtk.h>
10
11#include "demo2widget.h"
12#include "demo2layout.h"
13#include "demochild.h"
14
15GtkWidget *
16do_layoutmanager2 (GtkWidget *parent)
17{
18 static GtkWidget *window = NULL;
19
20 if (!window)
21 {
22 GtkWidget *widget;
23 GtkWidget *child;
24 const char *name[] = {
25 "action-unavailable-symbolic",
26 "address-book-new-symbolic",
27 "application-exit-symbolic",
28 "appointment-new-symbolic",
29 "bookmark-new-symbolic",
30 "call-start-symbolic",
31 "call-stop-symbolic",
32 "camera-switch-symbolic",
33 "chat-message-new-symbolic",
34 "color-select-symbolic",
35 "contact-new-symbolic",
36 "document-edit-symbolic",
37 "document-new-symbolic",
38 "document-open-recent-symbolic",
39 "document-open-symbolic",
40 "document-page-setup-symbolic",
41 "document-print-preview-symbolic",
42 "document-print-symbolic",
43 "document-properties-symbolic",
44 "document-revert-symbolic-rtl",
45 "document-revert-symbolic",
46 "document-save-as-symbolic",
47 "document-save-symbolic",
48 "document-send-symbolic",
49 "edit-clear-all-symbolic",
50 "edit-clear-symbolic-rtl",
51 "edit-clear-symbolic",
52 "edit-copy-symbolic",
53 "edit-cut-symbolic",
54 "edit-delete-symbolic",
55 "edit-find-replace-symbolic",
56 "edit-find-symbolic",
57 "edit-paste-symbolic",
58 "edit-redo-symbolic-rtl",
59 "edit-redo-symbolic",
60 "edit-select-all-symbolic",
61 "edit-select-symbolic",
62 "edit-undo-symbolic-rtl",
63 "edit-undo-symbolic",
64 "error-correct-symbolic",
65 "find-location-symbolic",
66 "folder-new-symbolic",
67 "font-select-symbolic",
68 "format-indent-less-symbolic-rtl",
69 "format-indent-less-symbolic",
70 "format-indent-more-symbolic-rtl",
71 "format-indent-more-symbolic",
72 "format-justify-center-symbolic",
73 "format-justify-fill-symbolic",
74 "format-justify-left-symbolic",
75 "format-justify-right-symbolic",
76 "format-text-bold-symbolic",
77 "format-text-direction-symbolic-rtl",
78 "format-text-direction-symbolic",
79 "format-text-italic-symbolic",
80 "format-text-strikethrough-symbolic",
81 "format-text-underline-symbolic",
82 "go-bottom-symbolic",
83 "go-down-symbolic",
84 "go-first-symbolic-rtl",
85 "go-first-symbolic",
86 "go-home-symbolic",
87 "go-jump-symbolic-rtl",
88 "go-jump-symbolic",
89 "go-last-symbolic-rtl",
90 "go-last-symbolic",
91 "go-next-symbolic-rtl",
92 "go-next-symbolic",
93 "go-previous-symbolic-rtl",
94 "go-previous-symbolic",
95 "go-top-symbolic",
96 "go-up-symbolic",
97 "help-about-symbolic",
98 "insert-image-symbolic",
99 "insert-link-symbolic",
100 "insert-object-symbolic",
101 "insert-text-symbolic",
102 "list-add-symbolic",
103 "list-remove-all-symbolic",
104 "list-remove-symbolic",
105 "mail-forward-symbolic",
106 "mail-mark-important-symbolic",
107 "mail-mark-junk-symbolic",
108 "mail-mark-notjunk-symbolic",
109 "mail-message-new-symbolic",
110 "mail-reply-all-symbolic",
111 "mail-reply-sender-symbolic",
112 "mail-send-receive-symbolic",
113 "mail-send-symbolic",
114 "mark-location-symbolic",
115 "media-eject-symbolic",
116 "media-playback-pause-symbolic",
117 "media-playback-start-symbolic",
118 "media-playback-stop-symbolic",
119 "media-record-symbolic",
120 "media-seek-backward-symbolic",
121 "media-seek-forward-symbolic",
122 "media-skip-backward-symbolic",
123 "media-skip-forward-symbolic",
124 "media-view-subtitles-symbolic",
125 "object-flip-horizontal-symbolic",
126 "object-flip-vertical-symbolic",
127 "object-rotate-left-symbolic",
128 "object-rotate-right-symbolic",
129 "object-select-symbolic",
130 "open-menu-symbolic",
131 "process-stop-symbolic",
132 "send-to-symbolic",
133 "sidebar-hide-symbolic",
134 "sidebar-show-symbolic",
135 "star-new-symbolic",
136 "system-log-out-symbolic",
137 "system-reboot-symbolic",
138 "system-run-symbolic",
139 "system-search-symbolic",
140 "system-shutdown-symbolic",
141 "system-switch-user-symbolic",
142 "tab-new-symbolic",
143 "tools-check-spelling-symbolic",
144 "value-decrease-symbolic",
145 "value-increase-symbolic",
146 "view-app-grid-symbolic",
147 "view-conceal-symbolic",
148 "view-continuous-symbolic",
149 "view-dual-symbolic",
150 "view-fullscreen-symbolic",
151 "view-grid-symbolic",
152 "view-list-bullet-symbolic",
153 "view-list-ordered-symbolic",
154 "view-list-symbolic",
155 "view-mirror-symbolic",
156 "view-more-horizontal-symbolic",
157 "view-more-symbolic",
158 "view-paged-symbolic",
159 "view-pin-symbolic",
160 "view-refresh-symbolic",
161 "view-restore-symbolic",
162 "view-reveal-symbolic",
163 "view-sort-ascending-symbolic",
164 "view-sort-descending-symbolic",
165 "zoom-fit-best-symbolic",
166 "zoom-in-symbolic",
167 "zoom-original-symbolic",
168 "zoom-out-symbolic",
169 };
170 int i;
171
172 window = gtk_window_new ();
173 gtk_window_set_title (GTK_WINDOW (window), title: "Layout Manager — Transformation");
174 gtk_window_set_default_size (GTK_WINDOW (window), width: 600, height: 620);
175 g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window);
176
177 widget = demo2_widget_new ();
178
179 for (i = 0; i < 18 * 36; i++)
180 {
181 child = gtk_image_new_from_icon_name (icon_name: name[i % G_N_ELEMENTS (name)]);
182 gtk_widget_set_margin_start (widget: child, margin: 4);
183 gtk_widget_set_margin_end (widget: child, margin: 4);
184 gtk_widget_set_margin_top (widget: child, margin: 4);
185 gtk_widget_set_margin_bottom (widget: child, margin: 4);
186 demo2_widget_add_child (self: DEMO2_WIDGET (ptr: widget), child);
187 }
188
189 gtk_window_set_child (GTK_WINDOW (window), child: widget);
190 }
191
192 if (!gtk_widget_get_visible (widget: window))
193 gtk_widget_show (widget: window);
194 else
195 gtk_window_destroy (GTK_WINDOW (window));
196
197 return window;
198
199}
200

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