1 #include <gtk/gtk.h>
2
3 const int KEEP_HEIGHT = 1 << 0;
4 const int KEEP_WIDTH = 1 << 1;
5
6 static void
keep_size(int direction,guint transition_type,gboolean animations)7 keep_size (int direction,
8 guint transition_type,
9 gboolean animations)
10 {
11 gboolean animations_before;
12 int min_height, min_width;
13 int min_child_width, min_child_height;
14 GtkRevealer *revealer = GTK_REVEALER (gtk_revealer_new ());
15 GtkWidget *child = gtk_button_new_with_label ("Some Text!");
16 GtkSettings *settings = gtk_settings_get_default ();
17
18 g_object_get (settings, "gtk-enable-animations", &animations_before, NULL);
19 g_object_set (settings, "gtk-enable-animations", animations, NULL);
20
21 gtk_revealer_set_child (GTK_REVEALER (revealer), child);
22
23 gtk_revealer_set_transition_type (revealer, transition_type);
24
25 gtk_revealer_set_reveal_child (revealer, TRUE);
26
27 gtk_widget_measure (child, GTK_ORIENTATION_HORIZONTAL, -1,
28 &min_child_width, NULL, NULL, NULL);
29 gtk_widget_measure (child, GTK_ORIENTATION_VERTICAL, -1,
30 &min_child_height, NULL, NULL, NULL);
31
32 gtk_widget_measure (GTK_WIDGET (revealer), GTK_ORIENTATION_HORIZONTAL, -1,
33 &min_width, NULL, NULL, NULL);
34 gtk_widget_measure (GTK_WIDGET (revealer), GTK_ORIENTATION_VERTICAL, -1,
35 &min_height, NULL, NULL, NULL);
36
37 g_assert_cmpint (min_width, ==, min_child_width);
38 g_assert_cmpint (min_height, ==, min_child_height);
39
40
41 gtk_revealer_set_reveal_child (revealer, FALSE);
42 gtk_widget_measure (GTK_WIDGET (revealer), GTK_ORIENTATION_HORIZONTAL, -1,
43 &min_width, NULL, NULL, NULL);
44 gtk_widget_measure (GTK_WIDGET (revealer), GTK_ORIENTATION_VERTICAL, -1,
45 &min_height, NULL, NULL, NULL);
46
47 if (direction & KEEP_WIDTH)
48 g_assert_cmpint (min_width, ==, min_child_width);
49 else
50 g_assert_cmpint (min_width, ==, 0);
51
52 if (direction & KEEP_HEIGHT)
53 g_assert_cmpint (min_height, ==, min_child_height);
54 else
55 g_assert_cmpint (min_height, ==, 0);
56
57 g_object_set (settings, "gtk-enable-animations", animations_before, NULL);
58 }
59
60
61 static void
slide_right_animations(void)62 slide_right_animations (void)
63 {
64 keep_size (KEEP_HEIGHT, GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT, TRUE);
65 }
66
67 static void
slide_right_no_animations(void)68 slide_right_no_animations (void)
69 {
70 keep_size (KEEP_HEIGHT, GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT, FALSE);
71 }
72
73 static void
slide_left_animations(void)74 slide_left_animations (void)
75 {
76 keep_size (KEEP_HEIGHT, GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT, TRUE);
77 }
78
79 static void
slide_left_no_animations(void)80 slide_left_no_animations (void)
81 {
82 keep_size (KEEP_HEIGHT, GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT, FALSE);
83 }
84
85 static void
none_animations(void)86 none_animations (void)
87 {
88 keep_size (KEEP_WIDTH | KEEP_HEIGHT, GTK_REVEALER_TRANSITION_TYPE_NONE, TRUE);
89 }
90
91 static void
none_no_animations(void)92 none_no_animations (void)
93 {
94 keep_size (KEEP_WIDTH | KEEP_HEIGHT, GTK_REVEALER_TRANSITION_TYPE_NONE, FALSE);
95 }
96
97 static void
crossfade_animations(void)98 crossfade_animations (void)
99 {
100 keep_size (KEEP_WIDTH | KEEP_HEIGHT, GTK_REVEALER_TRANSITION_TYPE_CROSSFADE, TRUE);
101 }
102
103 static void
crossfade_no_animations(void)104 crossfade_no_animations (void)
105 {
106 keep_size (KEEP_WIDTH | KEEP_HEIGHT, GTK_REVEALER_TRANSITION_TYPE_CROSSFADE, FALSE);
107 }
108
109 static void
slide_down_animations(void)110 slide_down_animations (void)
111 {
112 keep_size (KEEP_WIDTH, GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN, TRUE);
113 }
114
115 static void
slide_down_no_animations(void)116 slide_down_no_animations (void)
117 {
118 keep_size (KEEP_WIDTH, GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN, FALSE);
119 }
120
121 static void
slide_up_animations(void)122 slide_up_animations (void)
123 {
124 keep_size (KEEP_WIDTH, GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP, TRUE);
125 }
126
127 static void
slide_up_no_animations(void)128 slide_up_no_animations (void)
129 {
130 keep_size (KEEP_WIDTH, GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP, FALSE);
131 }
132
133 int
main(int argc,char ** argv)134 main (int argc, char **argv)
135 {
136 gtk_init ();
137 (g_test_init) (&argc, &argv, NULL);
138
139 g_test_add_func ("/sizing/revealer/slide_right_animations", slide_right_animations);
140 g_test_add_func ("/sizing/revealer/slide_right_no_animations", slide_right_no_animations);
141
142 g_test_add_func ("/sizing/revealer/slide_left_animations", slide_left_animations);
143 g_test_add_func ("/sizing/revealer/slide_left_no_animations", slide_left_no_animations);
144
145 g_test_add_func ("/sizing/revealer/none_animations", none_animations);
146 g_test_add_func ("/sizing/revealer/none_no_animations", none_no_animations);
147
148 g_test_add_func ("/sizing/revealer/crossfade_animations", crossfade_animations);
149 g_test_add_func ("/sizing/revealer/crossfade_no_animations", crossfade_no_animations);
150
151 g_test_add_func ("/sizing/revealer/slide_down_animations", slide_down_animations);
152 g_test_add_func ("/sizing/revealer/slide_down_no_animations", slide_down_no_animations);
153
154 g_test_add_func ("/sizing/revealer/slide_up_animations", slide_up_animations);
155 g_test_add_func ("/sizing/revealer/slide_up_no_animations", slide_up_no_animations);
156
157 return g_test_run ();
158 }
159