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