1/* Constraints/Builder
2 *
3 * GtkConstraintLayouts can be created in .ui files, and constraints can
4 * be set up at that time as well, as this example demonstrates. It shows
5 * various ways to do spacing and sizing with constraints.
6 *
7 * Make the window wider to see the rows react differently
8 */
9
10#include <glib/gi18n.h>
11#include <gtk/gtk.h>
12
13G_DECLARE_FINAL_TYPE (ConstraintsGrid, constraints_grid, CONSTRAINTS, GRID, GtkWidget)
14
15struct _ConstraintsGrid
16{
17 GtkWidget parent_instance;
18};
19
20G_DEFINE_TYPE (ConstraintsGrid, constraints_grid, GTK_TYPE_WIDGET)
21
22static void
23constraints_grid_init (ConstraintsGrid *grid)
24{
25}
26
27static void
28constraints_grid_dispose (GObject *object)
29{
30 GtkWidget *widget = GTK_WIDGET (object);
31 GtkWidget *child;
32
33 while ((child = gtk_widget_get_first_child (widget)))
34 gtk_widget_unparent (widget: child);
35
36 G_OBJECT_CLASS (constraints_grid_parent_class)->dispose (object);
37}
38
39static void
40constraints_grid_class_init (ConstraintsGridClass *klass)
41{
42 GObjectClass *object_class = G_OBJECT_CLASS (klass);
43
44 object_class->dispose = constraints_grid_dispose;
45}
46
47GtkWidget *
48do_constraints_builder (GtkWidget *do_widget)
49{
50 static GtkWidget *window;
51
52 if (!window)
53 {
54 GtkBuilder *builder;
55
56 g_type_ensure (type: constraints_grid_get_type ());
57
58 builder = gtk_builder_new_from_resource (resource_path: "/constraints_builder/constraints_builder.ui");
59
60 window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
61 gtk_window_set_display (GTK_WINDOW (window),
62 display: gtk_widget_get_display (widget: do_widget));
63 g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window);
64
65 g_object_unref (object: builder);
66 }
67
68 if (!gtk_widget_get_visible (widget: window))
69 gtk_widget_show (widget: window);
70 else
71 gtk_window_destroy (GTK_WINDOW (window));
72
73 return window;
74}
75

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