efl
572 строки · 23.1 Кб
1#ifdef HAVE_CONFIG_H
2# include "elementary_config.h"
3#endif
4
5#include <Efl_Ui.h>
6#include <Elementary.h>
7#include "elm_suite.h"
8#include "elm_priv.h"
9
10#define COORD_EQ(a, b) (!!(abs(a - b) < 2))
11#define GEOMETRY_EQ(a, b) (COORD_EQ(a.x, b.x) && COORD_EQ(a.y, b.y) && \
12COORD_EQ(a.w, b.w) && COORD_EQ(a.h, b.h))
13
14typedef struct {
15Eina_Size2D max;
16Eina_Size2D min;
17double weightx;
18double weighty;
19double alignx;
20double aligny;
21int marginl;
22int marginr;
23int margint;
24int marginb;
25Efl_Gfx_Hint_Aspect mode;
26Eina_Size2D aspect;
27Eina_Bool fillx;
28Eina_Bool filly;
29Eina_Size2D layout_size;
30Eina_Size2D layout_expected;
31Eina_Rect expected;
32char testname[1024];
33} Hint;
34
35static Hint hints[] = {
36{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(0, 0), 1, 1, 0.5, 0.5, 0, 0, 0, 0,
37EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
38EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
39EINA_RECT(0, 0, 200, 200), "[0]" },
40{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.3, 0.5, 0, 0, 0, 0,
41EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
42EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
43EINA_RECT(0, 0, 200, 200), "[1]" },
44{ EINA_SIZE2D(50, 150), EINA_SIZE2D(70, 70), 1, 1, 0.3, 0.7, 0, 0, 0, 0,
45EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
46EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
47EINA_RECT((200 - 70) * 0.3, (200 - 150) * 0.7, 70, 150), "[2]" },
48{ EINA_SIZE2D(150, -1), EINA_SIZE2D(70, 70), 0, 0, 0.3, 0.7, 0, 0, 0, 0,
49EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_FALSE,
50EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
51EINA_RECT((200 - 70) * 0.3, (200 - 70) * 0.2, 70, 70), "[3]" },
52{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
53EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_TRUE,
54EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
55EINA_RECT((200 - 70) * 0.3, (200 - 70) * 0.2, 70, 70), "[4]" },
56{ EINA_SIZE2D(150, 150), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
57EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_TRUE,
58EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 200),
59EINA_RECT((200 - 70) * 0.3, (200 - 70) * 0.2, 70, 70), "[5]" },
60{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 0, 1, 0.3, 0.7, 0, 0, 0, 0,
61EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
62EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 210),
63EINA_RECT((200 - 70) * 0.3, 0, 70, 70 * 3), "[6]" },
64{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 0, 1, 0.3, 0.7, 0, 0, 0, 0,
65EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
66EINA_SIZE2D(300, 300), EINA_SIZE2D(300, 300),
67EINA_RECT((300 - 70) * 0.3, (300 - 70 * 3) * 0.7, 70, 70 * 3), "[7]" },
68{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
69EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
70EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 210),
71EINA_RECT((200 - 70) * 0.3, 0, 70, 70 * 3), "[8]" },
72{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
73EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
74EINA_SIZE2D(300, 300), EINA_SIZE2D(300, 300),
75EINA_RECT((300 - 70) * 0.3, (300 - 70 * 3) * 0.2, 70, 70 * 3), "[9]" },
76{ EINA_SIZE2D(-1, 150), EINA_SIZE2D(70, 70), 0, 1, 0.3, 0.7, 0, 0, 0, 0,
77EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
78EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 210),
79EINA_RECT((200 - 70) * 0.3, 0, 70, 70 * 3), "[10]" },
80{ EINA_SIZE2D(-1, 150), EINA_SIZE2D(70, 70), 0, 1, 0.3, 0.7, 0, 0, 0, 0,
81EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
82EINA_SIZE2D(300, 300), EINA_SIZE2D(300, 300),
83EINA_RECT((300 - 70) * 0.3, (300 - 70 * 3) * 0.7, 70, 70 * 3), "[11]" },
84{ EINA_SIZE2D(-1, 150), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
85EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
86EINA_SIZE2D(200, 200), EINA_SIZE2D(200, 210),
87EINA_RECT((200 - 70) * 0.3, 0, 70, 70 * 3), "[12]" },
88{ EINA_SIZE2D(-1, 150), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
89EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
90EINA_SIZE2D(300, 300), EINA_SIZE2D(300, 300),
91EINA_RECT((300 - 70) * 0.3, (300 - 70 * 3) * 0.2, 70, 70 * 3), "[13]" },
92};
93
94static Hint hints2[][2] = {
95{
96{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.3, 0.7, 0, 0, 0, 0,
97EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_FALSE,
98EINA_SIZE2D(150, 300), EINA_SIZE2D(150, 300),
99EINA_RECT((150 - 70) * 0.3, (150 - 70) * 0.7, 70, 70), "[1/1 weight btn]" },
100{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.8, 0.2, 0, 0, 0, 0,
101EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_FALSE,
102EINA_SIZE2D(150, 300), EINA_SIZE2D(150, 300),
103EINA_RECT((150 - 70) * 0.8, (150 - 70) * 0.2 + 150, 70, 70), "[1/1 weight btn2]" }
104},
105{
106{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
107EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_FALSE,
108EINA_SIZE2D(150, 300), EINA_SIZE2D(150, 300),
109EINA_RECT((150 - 70) * 0.3, 0, 70, 70), "[0/1 weight btn]" },
110{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.8, 0.2, 0, 0, 0, 0,
111EFL_GFX_HINT_ASPECT_VERTICAL, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_TRUE,
112EINA_SIZE2D(150, 300), EINA_SIZE2D(150, 300),
113EINA_RECT((150 - ((300 - 70) / 3)) * 0.8, 70, (300 - 70) / 3, (300 - 70)), "[0/1 weight btn2]" }
114},
115{
116{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 0, 0.3, 0.7, 0, 0, 0, 0,
117EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_FALSE, EINA_FALSE,
118EINA_SIZE2D(150, 300), EINA_SIZE2D(150, 300),
119EINA_RECT((150 - 70) * 0.3, (300 - 280) * 0.2, 70, 70), "[0/0 weight btn]" },
120{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 0, 0.8, 0.2, 0, 0, 0, 0,
121EFL_GFX_HINT_ASPECT_HORIZONTAL, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_FALSE,
122EINA_SIZE2D(150, 300), EINA_SIZE2D(150, 300),
123EINA_RECT((150 - 70) * 0.8, (300 - 280) * 0.2 + 70, 70, 70 * 3), "[0/0 weight btn2]" }
124},
125};
126
127static Hint hints3[][3] = {
128{
129{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.3, 0.7, 0, 0, 0, 0,
130EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
131EINA_SIZE2D(150, 300), EINA_SIZE2D(150, 300),
132EINA_RECT(0, 0, 150, 100), "[1/1/1 weight_l btn]" },
133{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 100), 1, 1, 0.8, 0.2, 0, 0, 0, 0,
134EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
135EINA_SIZE2D(150, 300), EINA_SIZE2D(150, 300),
136EINA_RECT(0, 100, 150, 100), "[1/1/1 weight_l btn2]" },
137{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.8, 0.2, 0, 0, 0, 0,
138EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
139EINA_SIZE2D(150, 300), EINA_SIZE2D(150, 300),
140EINA_RECT(0, 100 + 100, 150, 100), "[1/1/1 weight_l btn3]" }
141},
142{
143{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.3, 0.7, 0, 0, 0, 0,
144EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
145EINA_SIZE2D(150, 270), EINA_SIZE2D(150, 270),
146EINA_RECT(0, 0, 150, 85), "[1/1/1 weight_m btn]" },
147{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 100), 1, 1, 0.8, 0.2, 0, 0, 0, 0,
148EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
149EINA_SIZE2D(150, 270), EINA_SIZE2D(150, 270),
150EINA_RECT(0, 85, 150, 100), "[1/1/1 weight_m btn2]" },
151{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.8, 0.2, 0, 0, 0, 0,
152EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
153EINA_SIZE2D(150, 270), EINA_SIZE2D(150, 270),
154EINA_RECT(0, 100 + 85, 150, 85), "[1/1/1 weight_m btn3]" }
155},
156{
157{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.3, 0.7, 0, 0, 0, 0,
158EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
159EINA_SIZE2D(150, 200), EINA_SIZE2D(150, 240),
160EINA_RECT(0, 0, 150, 70), "[1/1/1 weight_s btn]" },
161{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 100), 1, 1, 0.8, 0.2, 0, 0, 0, 0,
162EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
163EINA_SIZE2D(150, 200), EINA_SIZE2D(150, 240),
164EINA_RECT(0, 70, 150, 100), "[1/1/1 weight_s btn2]" },
165{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(70, 70), 1, 1, 0.8, 0.2, 0, 0, 0, 0,
166EFL_GFX_HINT_ASPECT_NONE, EINA_SIZE2D(0, 0), EINA_TRUE, EINA_TRUE,
167EINA_SIZE2D(150, 200), EINA_SIZE2D(150, 240),
168EINA_RECT(0, 170, 150, 70), "[1/1/1 weight_s btn3]" }
169},
170{
171{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(0, 0), 1, 1, 0.5, 0.5, 0, 0, 0, 0,
172EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_TRUE,
173EINA_SIZE2D(300, 900), EINA_SIZE2D(300, 900),
174EINA_RECT(100, 0, 100, 300), "[aspect resize btn]" },
175{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(0, 0), 1, 1, 0.5, 0.5, 0, 0, 0, 0,
176EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_TRUE,
177EINA_SIZE2D(300, 900), EINA_SIZE2D(300, 900),
178EINA_RECT(100, 300, 100, 300), "[aspect resize btn2]" },
179{ EINA_SIZE2D(-1, -1), EINA_SIZE2D(0, 0), 1, 1, 0.5, 0.5, 0, 0, 0, 0,
180EFL_GFX_HINT_ASPECT_BOTH, EINA_SIZE2D(1, 3), EINA_TRUE, EINA_TRUE,
181EINA_SIZE2D(300, 900), EINA_SIZE2D(300, 900),
182EINA_RECT(100, 300 + 300, 100, 300), "[aspect resize btn3]" }
183},
184};
185
186static Eo *win, *layout;
187
188static void
189btn_hint_set(Eo *btn, Hint *hint)
190{
191efl_gfx_entity_size_set(layout, hint->layout_size);
192efl_gfx_hint_size_min_set(layout, hint->layout_size);
193efl_gfx_hint_size_max_set(btn, hint->max);
194efl_gfx_hint_size_min_set(btn, hint->min);
195efl_gfx_hint_weight_set(btn, hint->weightx, hint->weighty);
196efl_gfx_hint_align_set(btn, hint->alignx, hint->aligny);
197efl_gfx_hint_fill_set(btn, hint->fillx, hint->filly);
198efl_gfx_hint_aspect_set(btn, hint->mode, hint->aspect);
199efl_canvas_group_calculate(layout);
200}
201
202static void
203btn_geom_assert(Hint *hint, Eina_Rect btn_geom)
204{
205Eina_Size2D layout_size, layout_min;
206
207layout_size = efl_gfx_entity_size_get(layout);
208layout_min = efl_gfx_hint_size_combined_min_get(layout);
209layout_size.w = layout_size.w > layout_min.w ? layout_size.w : layout_min.w;
210layout_size.h = layout_size.h > layout_min.h ? layout_size.h : layout_min.h;
211
212ck_assert_msg(GEOMETRY_EQ(btn_geom, hint->expected),
213"Case %s failed... button geometry: (%d, %d, %d, %d) expected geometry: (%d, %d, %d, %d)",
214hint->testname, btn_geom.x, btn_geom.y, btn_geom.w, btn_geom.h,
215hint->expected.x, hint->expected.y, hint->expected.w, hint->expected.h);
216ck_assert_msg(COORD_EQ(layout_size.w, hint->layout_expected.w) &&
217COORD_EQ(layout_size.h, hint->layout_expected.h),
218"Case %s failed... layout size: (%d, %d) expected size: (%d, %d)",
219hint->testname, layout_size.w, layout_size.h,
220hint->layout_expected.w, hint->layout_expected.h);
221}
222
223static void
224layout_setup()
225{
226win = win_add();
227
228layout = efl_add(EFL_UI_BOX_CLASS, win);
229}
230
231EFL_START_TEST (efl_ui_box_class_check)
232{
233const char *class;
234
235class = efl_class_name_get(layout);
236
237ck_assert(class != NULL);
238ck_assert(!strcmp(class, "Efl.Ui.Box"));
239}
240EFL_END_TEST
241
242EFL_START_TEST (efl_ui_box_layout_update)
243{
244int i, max_index = (sizeof(hints) / sizeof(Hint));
245
246efl_gfx_arrangement_content_align_set(layout, 0.8, 0.2);
247efl_ui_layout_orientation_set(layout, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
248
249Eo *btn = efl_add(EFL_UI_BUTTON_CLASS, layout,
250efl_pack_end(layout, efl_added));
251
252for (i = 0; i < max_index; i++)
253{
254btn_hint_set(btn, &hints[i]);
255btn_geom_assert(&hints[i], efl_gfx_entity_geometry_get(btn));
256}
257}
258EFL_END_TEST
259
260EFL_START_TEST (efl_ui_box_layout_update_pack)
261{
262int i, max_index2, max_index3;
263Eo *btn, *btn2, *btn3;
264
265efl_gfx_arrangement_content_align_set(layout, 0.8, 0.2);
266efl_ui_layout_orientation_set(layout, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
267
268max_index2 = ((sizeof(hints2) / sizeof(Hint)) / 2);
269max_index3 = ((sizeof(hints3) / sizeof(Hint)) / 3);
270
271btn = efl_add(EFL_UI_BUTTON_CLASS, layout,
272efl_pack_end(layout, efl_added));
273btn2 = efl_add(EFL_UI_BUTTON_CLASS, layout,
274efl_pack_end(layout, efl_added));
275
276for (i = 0; i < max_index2; i++)
277{
278btn_hint_set(btn, &hints2[i][0]);
279btn_hint_set(btn2, &hints2[i][1]);
280btn_geom_assert(&hints2[i][0], efl_gfx_entity_geometry_get(btn));
281btn_geom_assert(&hints2[i][1], efl_gfx_entity_geometry_get(btn2));
282}
283
284btn3 = efl_add(EFL_UI_BUTTON_CLASS, layout,
285efl_pack_end(layout, efl_added));
286
287for (i = 0; i < max_index3; i++)
288{
289btn_hint_set(btn, &hints3[i][0]);
290btn_hint_set(btn2, &hints3[i][1]);
291btn_hint_set(btn3, &hints3[i][2]);
292btn_geom_assert(&hints3[i][0], efl_gfx_entity_geometry_get(btn));
293btn_geom_assert(&hints3[i][1], efl_gfx_entity_geometry_get(btn2));
294btn_geom_assert(&hints3[i][2], efl_gfx_entity_geometry_get(btn3));
295}
296
297// aspect resize test
298hints3[3][0].layout_expected = hints3[3][0].layout_size = EINA_SIZE2D(150, 450);
299hints3[3][1].layout_expected = hints3[3][1].layout_size = EINA_SIZE2D(150, 450);
300hints3[3][2].layout_expected = hints3[3][2].layout_size = EINA_SIZE2D(150, 450);
301hints3[3][0].expected = EINA_RECT(50, 0, 50, 150);
302hints3[3][1].expected = EINA_RECT(50, 150, 50, 150);
303hints3[3][2].expected = EINA_RECT(50, 300, 50, 150);
304
305btn_hint_set(btn, &hints3[3][0]);
306btn_hint_set(btn2, &hints3[3][1]);
307btn_hint_set(btn3, &hints3[3][2]);
308btn_geom_assert(&hints3[3][0], efl_gfx_entity_geometry_get(btn));
309btn_geom_assert(&hints3[3][1], efl_gfx_entity_geometry_get(btn2));
310btn_geom_assert(&hints3[3][2], efl_gfx_entity_geometry_get(btn3));
311
312efl_ui_layout_orientation_set(layout, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
313hints3[3][0].layout_expected = hints3[3][0].layout_size = EINA_SIZE2D(300, 900);
314hints3[3][1].layout_expected = hints3[3][1].layout_size = EINA_SIZE2D(300, 900);
315hints3[3][2].layout_expected = hints3[3][2].layout_size = EINA_SIZE2D(300, 900);
316hints3[3][0].expected = EINA_RECT(0, 300, 100, 300);
317hints3[3][1].expected = EINA_RECT(100, 300, 100, 300);
318hints3[3][2].expected = EINA_RECT(200, 300, 100, 300);
319
320btn_hint_set(btn, &hints3[3][0]);
321btn_hint_set(btn2, &hints3[3][1]);
322btn_hint_set(btn3, &hints3[3][2]);
323btn_geom_assert(&hints3[3][0], efl_gfx_entity_geometry_get(btn));
324btn_geom_assert(&hints3[3][1], efl_gfx_entity_geometry_get(btn2));
325btn_geom_assert(&hints3[3][2], efl_gfx_entity_geometry_get(btn3));
326
327hints3[3][0].layout_expected = hints3[3][0].layout_size = EINA_SIZE2D(150, 450);
328hints3[3][1].layout_expected = hints3[3][1].layout_size = EINA_SIZE2D(150, 450);
329hints3[3][2].layout_expected = hints3[3][2].layout_size = EINA_SIZE2D(150, 450);
330hints3[3][0].expected = EINA_RECT(0, 150, 50, 150);
331hints3[3][1].expected = EINA_RECT(50, 150, 50, 150);
332hints3[3][2].expected = EINA_RECT(100, 150, 50, 150);
333
334btn_hint_set(btn, &hints3[3][0]);
335btn_hint_set(btn2, &hints3[3][1]);
336btn_hint_set(btn3, &hints3[3][2]);
337btn_geom_assert(&hints3[3][0], efl_gfx_entity_geometry_get(btn));
338btn_geom_assert(&hints3[3][1], efl_gfx_entity_geometry_get(btn2));
339btn_geom_assert(&hints3[3][2], efl_gfx_entity_geometry_get(btn3));
340}
341EFL_END_TEST
342
343EFL_START_TEST (efl_ui_box_size)
344{
345#define USERMIN_CHECK(a, b) \
346efl_canvas_group_calculate(layout); \
347user_min = efl_gfx_hint_size_min_get(layout); \
348ck_assert_msg(COORD_EQ(user_min.w, (a)) && COORD_EQ(user_min.h, (b)), \
349"Case box_size failed... user_min: (%d, %d) expected user_min: (%d, %d)", \
350user_min.w, user_min.h, (a), (b));
351
352#define MIN_CHECK(a, b) \
353efl_canvas_group_calculate(layout); \
354min = efl_gfx_hint_size_combined_min_get(layout); \
355ck_assert_msg(COORD_EQ(min.w, (a)) && COORD_EQ(min.h, (b)), \
356"Case box_size failed... min: (%d, %d) expected min: (%d, %d)", \
357min.w, min.h, (a), (b));
358
359Eo *btn, *btn2, *btn3;
360Eina_Size2D min, user_min;
361
362efl_ui_layout_orientation_set(layout, EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
363
364btn = efl_add(EFL_UI_BUTTON_CLASS, layout,
365efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(100, 100)),
366efl_pack_end(layout, efl_added));
367
368USERMIN_CHECK(0, 0);
369MIN_CHECK(100, 100);
370
371btn2 = efl_add(EFL_UI_BUTTON_CLASS, layout,
372efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(100, 100)),
373efl_pack_end(layout, efl_added));
374btn3 = efl_add(EFL_UI_BUTTON_CLASS, layout,
375efl_gfx_hint_size_min_set(efl_added, EINA_SIZE2D(100, 100)),
376efl_pack_end(layout, efl_added));
377USERMIN_CHECK(0, 0);
378MIN_CHECK(100, 300);
379
380efl_pack_unpack(layout, btn2);
381USERMIN_CHECK(0, 0);
382MIN_CHECK(100, 200);
383
384efl_pack_unpack(layout, btn3);
385USERMIN_CHECK(0, 0);
386MIN_CHECK(100, 100);
387
388efl_pack_unpack(layout, btn);
389USERMIN_CHECK(0, 0);
390MIN_CHECK(0, 0);
391
392efl_pack_end(layout, btn);
393efl_gfx_hint_size_min_set(layout, EINA_SIZE2D(200, 200));
394USERMIN_CHECK(200, 200);
395MIN_CHECK(200, 200);
396
397efl_pack_end(layout, btn2);
398efl_pack_end(layout, btn3);
399USERMIN_CHECK(200, 200);
400MIN_CHECK(200, 300);
401
402#undef USERMIN_ASSERT
403#undef MIN_ASSERT
404}
405EFL_END_TEST
406
407EFL_START_TEST (efl_ui_box_pack_unpack)
408{
409#define BTN_NUM 6
410Eo *o, *btn[BTN_NUM];
411Eina_Iterator *itr;
412int i;
413
414for (i = 0; i < BTN_NUM; i++)
415btn[i] = efl_add(EFL_UI_BUTTON_CLASS, layout);
416
417//pack test
418ck_assert(efl_pack(layout, btn[1]));
419ck_assert_ptr_eq(efl_pack_content_get(layout, 0), btn[1]);
420ck_assert_int_eq(efl_pack_index_get(layout, btn[1]), 0);
421EXPECT_ERROR_START;
422ck_assert(!efl_pack_end(layout, btn[1]));
423EXPECT_ERROR_END;
424EXPECT_ERROR_START;
425ck_assert(!efl_pack(layout, NULL));
426EXPECT_ERROR_END;
427ck_assert(efl_pack_after(layout, btn[3], btn[1]));
428ck_assert_ptr_eq(efl_pack_content_get(layout, 1), btn[3]);
429ck_assert_int_eq(efl_pack_index_get(layout, btn[3]), 1);
430ck_assert(efl_pack_after(layout, btn[5], NULL));
431ck_assert_ptr_eq(efl_pack_content_get(layout, 2), btn[5]);
432ck_assert_int_eq(efl_pack_index_get(layout, btn[5]), 2);
433ck_assert_ptr_eq(efl_pack_content_get(layout, -1), btn[5]);
434ck_assert_int_eq(efl_pack_index_get(layout, btn[5]), 2);
435EXPECT_ERROR_START;
436ck_assert(!efl_pack_after(layout, btn[5], NULL));
437EXPECT_ERROR_END;
438EXPECT_ERROR_START;
439ck_assert(!efl_pack_after(layout, NULL, btn[5]));
440EXPECT_ERROR_END;
441ck_assert(efl_pack_before(layout, btn[4], btn[5]));
442ck_assert(efl_pack_begin(layout, btn[0]));
443ck_assert_ptr_eq(efl_pack_content_get(layout, 0), btn[0]);
444ck_assert_int_eq(efl_pack_index_get(layout, btn[0]), 0);
445ck_assert(efl_pack_at(layout, btn[2], 2));
446ck_assert_ptr_eq(efl_pack_content_get(layout, 2), btn[2]);
447ck_assert_int_eq(efl_pack_index_get(layout, btn[2]), 2);
448
449ck_assert_int_eq(efl_content_count(layout), BTN_NUM);
450
451i = 0;
452itr = efl_content_iterate(layout);
453EINA_ITERATOR_FOREACH(itr, o)
454{
455ck_assert_ptr_eq(o, btn[i++]);
456}
457eina_iterator_free(itr);
458
459/* btn array index : 0 1 2 3 4 5
460* children index : 0 1 2 3 4 5
461* negative index : -6 -5 -4 -3 -2 -1
462*/
463//negative index test
464for (i = -1; i >= -BTN_NUM; i--)
465{
466o = efl_pack_content_get(layout, i);
467ck_assert_ptr_eq(o, btn[BTN_NUM + i]);
468ck_assert_int_eq(efl_pack_index_get(layout, o), BTN_NUM + i);
469}
470
471//unpack test
472ck_assert_ptr_eq(efl_pack_unpack_at(layout, 2), btn[2]);
473EXPECT_ERROR_START;
474ck_assert(!efl_pack_unpack(layout, btn[2]));
475EXPECT_ERROR_END;
476efl_pack_at(layout, btn[2], 2);
477ck_assert(efl_pack_unpack(layout, efl_pack_content_get(layout, 2)));
478EXPECT_ERROR_START;
479ck_assert(!efl_pack_unpack(layout, btn[2]));
480EXPECT_ERROR_END;
481
482efl_pack_at(layout, btn[2], 2);
483ck_assert_ptr_eq(efl_pack_unpack_at(layout, efl_pack_index_get(layout, btn[2])), btn[2]);
484
485EXPECT_ERROR_START;
486ck_assert(!efl_pack_unpack(layout, NULL));
487EXPECT_ERROR_END;
488ck_assert_int_eq(efl_content_count(layout), BTN_NUM - 1);
489
490efl_pack_unpack_all(layout);
491ck_assert_int_eq(efl_content_count(layout), 0);
492ck_assert(!efl_invalidated_get(btn[0]));
493
494for (i = 0; i < BTN_NUM; i++)
495efl_pack_end(layout, btn[i]);
496
497efl_pack_clear(layout);
498ck_assert_int_eq(efl_content_count(layout), 0);
499ck_assert(efl_invalidated_get(btn[0]));
500#undef BTN_NUM
501}
502EFL_END_TEST
503
504EFL_START_TEST (efl_ui_box_properties)
505{
506double h, v;
507unsigned int ph, pv;
508
509//align test
510efl_gfx_arrangement_content_align_get(layout, &h, &v);
511ck_assert(EINA_DBL_EQ(h, 0.5));
512ck_assert(EINA_DBL_EQ(v, 0.5));
513
514efl_gfx_arrangement_content_align_set(layout, 0.3, 0.8234);
515efl_gfx_arrangement_content_align_get(layout, &h, &v);
516ck_assert(EINA_DBL_EQ(h, 0.3));
517ck_assert(EINA_DBL_EQ(v, 0.8234));
518
519efl_gfx_arrangement_content_align_set(layout, -0.23, 123);
520efl_gfx_arrangement_content_align_get(layout, &h, &v);
521ck_assert(EINA_DBL_EQ(h, -1));
522ck_assert(EINA_DBL_EQ(v, 1));
523
524//padding test
525efl_gfx_arrangement_content_padding_get(layout, &ph, &pv);
526ck_assert_int_eq(ph, 0.0);
527ck_assert_int_eq(pv, 0.0);
528
529efl_gfx_arrangement_content_padding_set(layout, 3, 8234);
530efl_gfx_arrangement_content_padding_get(layout, &ph, &pv);
531ck_assert_int_eq(ph, 3);
532ck_assert_int_eq(pv, 8234);
533
534//direction test
535ck_assert_int_eq(efl_ui_layout_orientation_get(layout), EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
536
537efl_ui_layout_orientation_set(layout, EFL_UI_LAYOUT_ORIENTATION_DEFAULT);
538ck_assert_int_eq(efl_ui_layout_orientation_get(layout), EFL_UI_LAYOUT_ORIENTATION_VERTICAL);
539
540efl_ui_layout_orientation_set(layout, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
541ck_assert_int_eq(efl_ui_layout_orientation_get(layout), EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
542
543//homogeneous test
544ck_assert_int_eq(efl_ui_box_homogeneous_get(layout), 0);
545
546efl_ui_box_homogeneous_set(layout, 123);
547ck_assert_int_eq(efl_ui_box_homogeneous_get(layout), 1);
548}
549EFL_END_TEST
550
551EFL_START_TEST (efl_ui_box_internal)
552{
553Efl_Ui_Widget *w = efl_add(EFL_UI_BUTTON_CLASS, win);
554
555efl_ui_widget_internal_set(layout, EINA_TRUE);
556ck_assert_ptr_eq(efl_ui_widget_parent_get(w), win);
557efl_pack(layout, w);
558ck_assert_ptr_eq(efl_ui_widget_parent_get(w), win);
559}
560EFL_END_TEST
561
562void efl_ui_test_box(TCase *tc)
563{
564tcase_add_checked_fixture(tc, layout_setup, NULL);
565tcase_add_test(tc, efl_ui_box_class_check);
566tcase_add_test(tc, efl_ui_box_layout_update);
567tcase_add_test(tc, efl_ui_box_layout_update_pack);
568tcase_add_test(tc, efl_ui_box_size);
569tcase_add_test(tc, efl_ui_box_pack_unpack);
570tcase_add_test(tc, efl_ui_box_properties);
571tcase_add_test(tc, efl_ui_box_internal);
572}
573