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