efl
234 строки · 9.2 Кб
1#ifdef HAVE_CONFIG_H
2# include "elementary_config.h"
3#endif
4
5#include <Efl_Ui.h>
6#include "elm_suite.h"
7
8#define COORD_EQ(a, b) (!!(abs(a - b) < 2))
9#define GEOMETRY_EQ(a, b) (COORD_EQ(a.x, b.x) && COORD_EQ(a.y, b.y) && \
10COORD_EQ(a.w, b.w) && COORD_EQ(a.h, b.h))
11
12typedef struct {
13Eina_Size2D max;
14Eina_Size2D min;
15double weightx;
16double weighty;
17double alignx;
18double aligny;
19int marginl;
20int marginr;
21int margint;
22int marginb;
23Efl_Gfx_Hint_Aspect mode;
24Eina_Size2D aspect;
25Eina_Bool fillx;
26Eina_Bool filly;
27Eina_Size2D layout_size;
28Eina_Size2D layout_expected;
29Eina_Rect expected;
30char testname[1024];
31} Hint;
32
33static Hint hints[] = {
34{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(0, 0), 1, 1, 0.5, 0.5, 0, 0, 0, 0,
35EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
36EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
37EINA_RECT(0, 0, 200, 200), "[0]" },
38{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.3, 0.5, 0, 0, 0, 0,
39EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
40EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
41EINA_RECT(0, 0, 200, 200), "[1]" },
42{ EINA_SIZE2D(50, 150), EINA_SIZE2D(70, 70), 1, 1, 0.3, 0.7, 0, 0, 0, 0,
43EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
44EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
45EINA_RECT((200 - 70) * 0.3, (200 - 150) * 0.7, 70, 150), "[2]" },
46{ EINA_SIZE2D(150, -1), EINA_SIZE2D(70, 70), 0, 0, 0.3, 0.7, 0, 0, 0, 0,
47EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_FALSE,
48EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
49EINA_RECT((200 - 70) * 0.3, (200 - 70) * 0.7, 70, 70), "[3]" },
50{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
51EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_TRUE,
52EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
53EINA_RECT((200 - 70) * 0.3, (200 - 70) * 0.7, 70, 70), "[4]" },
54{ EINA_SIZE2D(150, 150), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
55EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_TRUE,
56EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
57EINA_RECT((200 - 70) * 0.3, (200 - 70) * 0.7, 70, 70), "[5]" },
58{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 0, 1, 0.3, 0.7, 0, 0, 0, 0,
59EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
60EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 210),
61EINA_RECT((200 - 70) * 0.3, 0, 70, 70 * 3), "[6]" },
62{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 0, 1, 0.3, 0.7, 0, 0, 0, 0,
63EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
64EINA_SIZE2D(300, 300), EINA_SIZE2D(300, 300),
65EINA_RECT((300 - 70) * 0.3, (300 - 70 * 3) * 0.7, 70, 70 * 3), "[7]" },
66{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
67EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
68EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 210),
69EINA_RECT((200 - 70) * 0.3, 0, 70, 70 * 3), "[8]" },
70{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
71EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
72EINA_SIZE2D(300, 300), EINA_SIZE2D(300, 300),
73EINA_RECT((300 - 70) * 0.3, (300 - 70 * 3) * 0.7, 70, 70 * 3), "[9]" },
74{ EINA_SIZE2D(-1, 150), EINA_SIZE2D(70, 70), 0, 1, 0.3, 0.7, 0, 0, 0, 0,
75EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
76EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 210),
77EINA_RECT((200 - 70) * 0.3, 0, 70, 70 * 3), "[10]" },
78{ EINA_SIZE2D(-1, 150), EINA_SIZE2D(70, 70), 0, 1, 0.3, 0.7, 0, 0, 0, 0,
79EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
80EINA_SIZE2D(300, 300), EINA_SIZE2D(300, 300),
81EINA_RECT((300 - 70) * 0.3, (300 - 70 * 3) * 0.7, 70, 70 * 3), "[11]" },
82{ EINA_SIZE2D(-1, 150), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
83EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
84EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 210),
85EINA_RECT((200 - 70) * 0.3, 0, 70, 70 * 3), "[12]" },
86{ EINA_SIZE2D(-1, 150), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
87EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
88EINA_SIZE2D(300, 300), EINA_SIZE2D(300, 300),
89EINA_RECT((300 - 70) * 0.3, (300 - 70 * 3) * 0.7, 70, 70 * 3), "[13]" },
90};
91
92static Eo *win, *layout;
93
94static void
95btn_hint_set(Eo *btn, Hint *hint)
96{
97efl_gfx_entity_size_set(layout, hint->layout_size);
98efl_gfx_hint_size_max_set(btn, hint->max);
99efl_gfx_hint_size_min_set(btn, hint->min);
100efl_gfx_hint_margin_set(btn, hint->marginl, hint->marginr, hint->margint,
101hint->marginb);
102efl_gfx_hint_weight_set(btn, hint->weightx, hint->weighty);
103efl_gfx_hint_align_set(btn, hint->alignx, hint->aligny);
104efl_gfx_hint_fill_set(btn, hint->fillx, hint->filly);
105efl_gfx_hint_aspect_set(btn, hint->mode, hint->aspect);
106efl_canvas_group_calculate(layout);
107}
108
109static void
110btn_geom_assert(Hint *hint, Eina_Rect btn_geom)
111{
112Eina_Size2D layout_size, layout_min;
113
114layout_size = efl_gfx_entity_size_get(layout);
115layout_min = efl_gfx_hint_size_combined_min_get(layout);
116layout_size.w = layout_size.w > layout_min.w ? layout_size.w : layout_min.w;
117layout_size.h = layout_size.h > layout_min.h ? layout_size.h : layout_min.h;
118
119ck_assert_msg(GEOMETRY_EQ(btn_geom, hint->expected),
120"Case %s failed... button geometry: (%d, %d, %d, %d) expected geometry: (%d, %d, %d, %d)",
121hint->testname, btn_geom.x, btn_geom.y, btn_geom.w, btn_geom.h,
122hint->expected.x, hint->expected.y, hint->expected.w, hint->expected.h);
123ck_assert_msg(COORD_EQ(layout_size.w, hint->layout_expected.w) &&
124COORD_EQ(layout_size.h, hint->layout_expected.h),
125"Case %s failed... layout size: (%d, %d) expected size: (%d, %d)",
126hint->testname, layout_size.w, layout_size.h,
127hint->layout_expected.w, hint->layout_expected.h);
128}
129
130static void
131layout_setup()
132{
133win = win_add();
134
135layout = efl_add(EFL_UI_BOX_STACK_CLASS, win,
136efl_gfx_arrangement_content_align_set(efl_added, 0.8, 0.2),
137efl_ui_layout_orientation_set(efl_added, EFL_UI_LAYOUT_ORIENTATION_VERTICAL));
138}
139
140EFL_START_TEST (efl_ui_box_stack_class_check)
141{
142const char *class;
143
144class = efl_class_name_get(layout);
145
146ck_assert(class != NULL);
147ck_assert(!strcmp(class, "Efl.Ui.Box_Stack"));
148}
149EFL_END_TEST
150
151EFL_START_TEST (efl_ui_box_stack_layout_update)
152{
153int i, max_index = (sizeof(hints) / sizeof(Hint));
154
155Eo *btn = efl_add(EFL_UI_BUTTON_CLASS, layout,
156efl_pack_end(layout, efl_added));
157
158for (i = 0; i < max_index; i++)
159{
160btn_hint_set(btn, &hints[i]);
161btn_geom_assert(&hints[i], efl_gfx_entity_geometry_get(btn));
162}
163}
164EFL_END_TEST
165
166EFL_START_TEST (efl_ui_box_stack_size)
167{
168#define USERMIN_CHECK(a, b) \
169efl_canvas_group_calculate(layout); \
170user_min = efl_gfx_hint_size_min_get(layout); \
171ck_assert_msg(COORD_EQ(user_min.w, (a)) && COORD_EQ(user_min.h, (b)), \
172"Case box_size failed... user_min: (%d, %d) expected user_min: (%d, %d)", \
173user_min.w, user_min.h, (a), (b));
174
175#define MIN_CHECK(a, b) \
176efl_canvas_group_calculate(layout); \
177min = efl_gfx_hint_size_combined_min_get(layout); \
178ck_assert_msg(COORD_EQ(min.w, (a)) && COORD_EQ(min.h, (b)), \
179"Case box_size failed... min: (%d, %d) expected min: (%d, %d)", \
180min.w, min.h, (a), (b));
181
182Eo *btn, *btn2, *btn3;
183Eina_Size2D min, user_min;
184
185btn = efl_add(EFL_UI_BUTTON_CLASS, layout,
186efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(100, 100)),
187efl_pack_end(layout, efl_added));
188
189USERMIN_CHECK(0, 0);
190MIN_CHECK(100, 100);
191
192btn2 = efl_add(EFL_UI_BUTTON_CLASS, layout,
193efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(300, 300)),
194efl_pack_end(layout, efl_added));
195btn3 = efl_add(EFL_UI_BUTTON_CLASS, layout,
196efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(200, 200)),
197efl_pack_end(layout, efl_added));
198USERMIN_CHECK(0, 0);
199MIN_CHECK(300, 300);
200
201efl_pack_unpack(layout, btn2);
202USERMIN_CHECK(0, 0);
203MIN_CHECK(200, 200);
204
205efl_pack_unpack(layout, btn3);
206USERMIN_CHECK(0, 0);
207MIN_CHECK(100, 100);
208
209efl_pack_unpack(layout, btn);
210USERMIN_CHECK(0, 0);
211MIN_CHECK(0, 0);
212
213efl_pack_end(layout, btn);
214efl_gfx_hint_size_min_set(layout, EINA_SIZE2D(200, 200));
215USERMIN_CHECK(200, 200);
216MIN_CHECK(200, 200);
217
218efl_pack_end(layout, btn2);
219efl_pack_end(layout, btn3);
220USERMIN_CHECK(200, 200);
221MIN_CHECK(300, 300);
222
223#undef USERMIN_ASSERT
224#undef MIN_ASSERT
225}
226EFL_END_TEST
227
228void efl_ui_test_box_stack(TCase *tc)
229{
230tcase_add_checked_fixture(tc, layout_setup, NULL);
231tcase_add_test(tc, efl_ui_box_stack_class_check);
232tcase_add_test(tc, efl_ui_box_stack_layout_update);
233tcase_add_test(tc, efl_ui_box_stack_size);
234}
235