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 | |
15 | GtkWidget * |
16 | do_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 | |