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