7 #include "gtkoffscreenbox.h"
11 combo_changed_cb (GtkWidget *combo,
14 GtkWidget *label = GTK_WIDGET (data);
17 active = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
19 gtk_label_set_ellipsize (GTK_LABEL (label), (PangoEllipsizeMode)active);
23 layout_expose_handler (GtkWidget *widget,
24 GdkEventExpose *event)
26 GtkLayout *layout = GTK_LAYOUT (widget);
29 gint imin, imax, jmin, jmax;
31 if (event->window != layout->bin_window)
34 imin = (event->area.x) / 10;
35 imax = (event->area.x + event->area.width + 9) / 10;
37 jmin = (event->area.y) / 10;
38 jmax = (event->area.y + event->area.height + 9) / 10;
40 for (i = imin; i < imax; i++)
41 for (j = jmin; j < jmax; j++)
43 gdk_draw_rectangle (layout->bin_window,
44 widget->style->black_gc,
47 1 + i % 10, 1 + j % 10);
53 scroll_layout (gpointer data)
55 GtkWidget *layout = data;
58 adj = gtk_layout_get_hadjustment (GTK_LAYOUT (layout));
59 gtk_adjustment_set_value (adj,
60 gtk_adjustment_get_value (adj) + 5.0);
64 static guint layout_timeout;
67 create_layout (GtkWidget *vbox)
70 GtkWidget *scrolledwindow;
75 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
76 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
78 gtk_scrolled_window_set_placement (GTK_SCROLLED_WINDOW (scrolledwindow),
79 GTK_CORNER_TOP_RIGHT);
81 gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE, 0);
83 layout = gtk_layout_new (NULL, NULL);
84 gtk_container_add (GTK_CONTAINER (scrolledwindow), layout);
86 /* We set step sizes here since GtkLayout does not set
89 GTK_LAYOUT (layout)->hadjustment->step_increment = 10.0;
90 GTK_LAYOUT (layout)->vadjustment->step_increment = 10.0;
92 gtk_widget_set_events (layout, GDK_EXPOSURE_MASK);
93 g_signal_connect (layout, "expose_event",
94 G_CALLBACK (layout_expose_handler),
97 gtk_layout_set_size (GTK_LAYOUT (layout), 1600, 128000);
99 for (i = 0 ; i < 16 ; i++)
100 for (j = 0 ; j < 16 ; j++)
102 g_snprintf (buf, sizeof (buf), "Button %d, %d", i, j);
105 button = gtk_button_new_with_label (buf);
107 button = gtk_label_new (buf);
109 gtk_layout_put (GTK_LAYOUT (layout), button,
113 for (i = 16; i < 1280; i++)
115 g_snprintf (buf, sizeof (buf), "Button %d, %d", i, 0);
118 button = gtk_button_new_with_label (buf);
120 button = gtk_label_new (buf);
122 gtk_layout_put (GTK_LAYOUT (layout), button,
126 layout_timeout = g_timeout_add (1000, scroll_layout, layout);
130 create_treeview (GtkWidget *vbox)
132 GtkWidget *scrolledwindow;
134 GtkWidget *tree_view;
138 scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
139 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
142 gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE, 0);
144 store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
145 tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
146 g_object_unref (store);
148 gtk_container_add (GTK_CONTAINER (scrolledwindow), tree_view);
150 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view), -1,
152 gtk_cell_renderer_pixbuf_new (),
155 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view), -1,
157 gtk_cell_renderer_text_new (),
161 stock_ids = gtk_stock_list_ids ();
163 for (list = stock_ids; list; list = g_slist_next (list))
165 const gchar *stock_id = list->data;
168 if (gtk_stock_lookup (stock_id, &item))
170 gtk_list_store_insert_with_values (store, NULL, -1,
177 g_slist_foreach (stock_ids, (GFunc) g_free, NULL);
178 g_slist_free (stock_ids);
182 create_widgets (void)
184 GtkWidget *main_hbox, *main_vbox;
185 GtkWidget *vbox, *hbox, *label, *combo, *entry, *button, *cb;
186 GtkWidget *sw, *text_view;
188 main_vbox = gtk_vbox_new (0, FALSE);
190 main_hbox = gtk_hbox_new (0, FALSE);
191 gtk_box_pack_start (GTK_BOX (main_vbox), main_hbox, TRUE, TRUE, 0);
193 vbox = gtk_vbox_new (0, FALSE);
194 gtk_box_pack_start (GTK_BOX (main_hbox), vbox, TRUE, TRUE, 0);
196 hbox = gtk_hbox_new (0, FALSE);
197 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
199 label = gtk_label_new ("This label may be ellipsized\nto make it fit.");
200 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
202 combo = gtk_combo_box_new_text ();
203 gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "NONE");
204 gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "START");
205 gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "MIDDLE");
206 gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "END");
207 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
208 gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0);
210 g_signal_connect (combo, "changed",
211 G_CALLBACK (combo_changed_cb),
214 entry = gtk_entry_new ();
215 gtk_entry_set_text (GTK_ENTRY (entry), "an entry - lots of text.... lots of text.... lots of text.... lots of text.... ");
216 gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
218 label = gtk_label_new ("Label after entry.");
219 gtk_label_set_selectable (GTK_LABEL (label), TRUE);
220 gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
222 button = gtk_button_new_with_label ("Button");
223 gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);
225 button = gtk_check_button_new_with_mnemonic ("_Check button");
226 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
228 cb = gtk_combo_box_new_text ();
229 entry = gtk_entry_new ();
230 gtk_widget_show (entry);
231 gtk_container_add (GTK_CONTAINER (cb), entry);
233 gtk_combo_box_append_text (GTK_COMBO_BOX (cb), "item0");
234 gtk_combo_box_append_text (GTK_COMBO_BOX (cb), "item1");
235 gtk_combo_box_append_text (GTK_COMBO_BOX (cb), "item1");
236 gtk_combo_box_append_text (GTK_COMBO_BOX (cb), "item2");
237 gtk_combo_box_append_text (GTK_COMBO_BOX (cb), "item2");
238 gtk_combo_box_append_text (GTK_COMBO_BOX (cb), "item2");
239 gtk_entry_set_text (GTK_ENTRY (entry), "hello world ♥ foo");
240 gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
241 gtk_box_pack_start (GTK_BOX (vbox), cb, TRUE, TRUE, 0);
243 sw = gtk_scrolled_window_new (NULL, NULL);
244 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
245 GTK_POLICY_AUTOMATIC,
246 GTK_POLICY_AUTOMATIC);
247 text_view = gtk_text_view_new ();
248 gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
249 gtk_container_add (GTK_CONTAINER (sw), text_view);
251 create_layout (vbox);
253 create_treeview (main_hbox);
260 scale_changed (GtkRange *range,
261 GtkOffscreenBox *offscreen_box)
263 gtk_offscreen_box_set_angle (offscreen_box, gtk_range_get_value (range));
266 static GtkWidget *scale = NULL;
269 remove_clicked (GtkButton *button,
272 gtk_widget_destroy (widget);
273 g_source_remove (layout_timeout);
275 gtk_widget_set_sensitive (GTK_WIDGET (button), FALSE);
276 gtk_widget_set_sensitive (scale, FALSE);
283 GtkWidget *window, *widget, *vbox, *button;
284 GtkWidget *offscreen = NULL;
285 gboolean use_offscreen;
287 gtk_init (&argc, &argv);
289 use_offscreen = argc == 1;
291 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
292 gtk_window_set_default_size (GTK_WINDOW (window), 300,300);
294 g_signal_connect (window, "destroy",
295 G_CALLBACK (gtk_main_quit),
298 vbox = gtk_vbox_new (0, FALSE);
299 gtk_container_add (GTK_CONTAINER (window), vbox);
301 scale = gtk_hscale_new_with_range (0,
304 gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
306 button = gtk_button_new_with_label ("Remove child 2");
307 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
311 offscreen = gtk_offscreen_box_new ();
313 g_signal_connect (scale, "value_changed",
314 G_CALLBACK (scale_changed),
319 offscreen = gtk_vpaned_new ();
322 gtk_box_pack_start (GTK_BOX (vbox), offscreen, TRUE, TRUE, 0);
324 widget = create_widgets ();
326 gtk_offscreen_box_add1 (GTK_OFFSCREEN_BOX (offscreen),
329 gtk_paned_add1 (GTK_PANED (offscreen), widget);
331 widget = create_widgets ();
334 GtkWidget *widget2, *box2, *offscreen2;
336 offscreen2 = gtk_offscreen_box_new ();
337 gtk_box_pack_start (GTK_BOX (widget), offscreen2, FALSE, FALSE, 0);
339 g_signal_connect (scale, "value_changed",
340 G_CALLBACK (scale_changed),
343 box2 = gtk_vbox_new (FALSE, 0);
344 gtk_offscreen_box_add2 (GTK_OFFSCREEN_BOX (offscreen2), box2);
346 widget2 = gtk_button_new_with_label ("Offscreen in offscreen");
347 gtk_box_pack_start (GTK_BOX (box2), widget2, FALSE, FALSE, 0);
349 widget2 = gtk_entry_new ();
350 gtk_entry_set_text (GTK_ENTRY (widget2), "Offscreen in offscreen");
351 gtk_box_pack_start (GTK_BOX (box2), widget2, FALSE, FALSE, 0);
355 gtk_offscreen_box_add2 (GTK_OFFSCREEN_BOX (offscreen), widget);
357 gtk_paned_add2 (GTK_PANED (offscreen), widget);
359 gtk_widget_show_all (window);
361 g_signal_connect (G_OBJECT (button), "clicked",
362 G_CALLBACK (remove_clicked),
368 GtkWidget *redirect_win;
370 redirect_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
371 gtk_window_set_default_size (GTK_WINDOW (redirect_win), 400,400);
372 gtk_widget_show (redirect_win);
373 gtk_widget_realize (redirect_win);
374 gtk_widget_realize (window);
375 gdk_window_redirect_to_drawable (window->window,
376 GDK_DRAWABLE (redirect_win->window),