efl

Форк
0
/
test_scroller.c 
1201 строка · 41.7 Кб
1
#ifdef HAVE_CONFIG_H
2
# include "elementary_config.h"
3
#endif
4

5
#include <Elementary.h>
6

7
// FIXME: Some internal APIs are used here...
8
#include "elm_interface_scrollable.h"
9

10
#define PSIZE 318
11

12
static void
13
_my_bt_go_300_300(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
14
{
15
   elm_scroller_region_bring_in((Evas_Object *)data, 300, 300, PSIZE, PSIZE);
16
}
17

18
static void
19
_my_bt_go_900_300(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
20
{
21
   elm_scroller_region_bring_in((Evas_Object *)data, 900, 300, PSIZE, PSIZE);
22
}
23

24
static void
25
_my_bt_go_300_900(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
26
{
27
   elm_scroller_region_bring_in((Evas_Object *)data, 300, 900, PSIZE, PSIZE);
28
}
29

30
static void
31
_my_bt_go_900_900(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
32
{
33
   elm_scroller_region_bring_in((Evas_Object *)data, 900, 900, PSIZE, PSIZE);
34
}
35

36
static void
37
_my_bt_y_minus_one(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
38
{
39
   int x, y, w, h;
40
   elm_scroller_region_get((Evas_Object *)data, &x, &y, &w, &h);
41
   printf("Current region: %d %d %d %d\n", x, y, w, h);
42
   elm_scroller_region_show((Evas_Object *)data, x, y - 1, w, h);
43
}
44

45
static void
46
_my_bt_y_plus_one(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
47
{
48
   int x, y, w, h;
49
   elm_scroller_region_get((Evas_Object *)data, &x, &y, &w, &h);
50
   printf("Current region: %d %d %d %d\n", x, y, w, h);
51
   elm_scroller_region_show((Evas_Object *)data, x, y + 1, w, h);
52
}
53

54
static void
55
_my_bt_prev_page(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
56
{
57
	Evas_Object *sc = (Evas_Object *)data;
58
	int page_x = 0, page_y = 0;
59
	elm_scroller_current_page_get(sc, &page_x, &page_y);
60
	elm_scroller_page_bring_in(sc, --page_x, page_y);
61
}
62

63
static void
64
_my_bt_next_page(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
65
{
66
	Evas_Object *sc = (Evas_Object *)data;
67
	int page_x = 0, page_y = 0;
68
	elm_scroller_current_page_get(sc, &page_x, &page_y);
69
	elm_scroller_page_bring_in(sc, ++page_x, page_y);
70
}
71

72
static void
73
_my_bt_freeze_toggle(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
74
{
75
   if (elm_check_state_get(obj))
76
     elm_object_scroll_freeze_push((Evas_Object *)data);
77
   else
78
     elm_object_scroll_freeze_pop((Evas_Object *)data);
79
}
80

81
static void
82
_my_bt_hold_toggle(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
83
{
84
   if (elm_check_state_get(obj))
85
     elm_object_scroll_hold_push((Evas_Object *)data);
86
   else
87
     elm_object_scroll_hold_pop((Evas_Object *)data);
88
}
89

90
static void
91
_my_bt_block_movements_x_axis(void *data, Evas_Object *obj,
92
                             void *event_info EINA_UNUSED)
93
{
94
   Elm_Scroller_Movement_Block block;
95

96
   block = elm_scroller_movement_block_get((Evas_Object *)data);
97

98
   if (elm_check_state_get(obj))
99
     {
100
        elm_scroller_movement_block_set((Evas_Object *)data,
101
                                        ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL |
102
                                        block);
103
     }
104
   else if (block & ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL)
105
     {
106
        elm_scroller_movement_block_set((Evas_Object *)data,
107
                                        ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL);
108
     }
109
   else
110
     {
111
        elm_scroller_movement_block_set((Evas_Object *)data,
112
                                        ELM_SCROLLER_MOVEMENT_NO_BLOCK);
113
     }
114
}
115

116
static void
117
_my_bt_snap_to_pages(void *data,
118
                    Evas_Object *obj,
119
                    void *event_info EINA_UNUSED)
120
{
121
   if (elm_check_state_get(obj))
122
     {
123
        elm_scroller_page_snap_set(data, EINA_TRUE, EINA_TRUE);
124
     }
125
   else
126
     {
127
        elm_scroller_page_snap_set(data, EINA_FALSE, EINA_FALSE);
128
     }
129
}
130

131
static void
132
_my_bt_block_movements_y_axis(void *data, Evas_Object *obj,
133
                             void *event_info EINA_UNUSED)
134
{
135
   Elm_Scroller_Movement_Block block;
136

137
   block = elm_scroller_movement_block_get((Evas_Object *)data);
138

139
   if (elm_check_state_get(obj))
140
     {
141
        elm_scroller_movement_block_set((Evas_Object *)data,
142
                                        ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL |
143
                                        block);
144
     }
145
   else if (block & ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL)
146
     {
147
        elm_scroller_movement_block_set((Evas_Object *)data,
148
                                        ELM_SCROLLER_MOVEMENT_BLOCK_HORIZONTAL);
149
     }
150
   else
151
     {
152
        elm_scroller_movement_block_set((Evas_Object *)data,
153
                                        ELM_SCROLLER_MOVEMENT_NO_BLOCK);
154
     }
155
}
156

157
static void
158
_my_bt_loop_x_axis(void *data, Evas_Object *obj EINA_UNUSED,
159
                  void *event_info EINA_UNUSED)
160
{
161
   Eina_Bool loop_h, loop_v;
162
   Evas_Object *scroller = (Evas_Object *)data;
163

164
   elm_scroller_loop_get(scroller, &loop_h, &loop_v);
165
   elm_scroller_loop_set(scroller, !loop_h, loop_v);
166
}
167

168
static void
169
_my_bt_loop_y_axis(void *data, Evas_Object *obj EINA_UNUSED,
170
                  void *event_info EINA_UNUSED)
171
{
172
   Eina_Bool loop_h, loop_v;
173
   Evas_Object *scroller = (Evas_Object *)data;
174

175
   elm_scroller_loop_get(scroller, &loop_h, &loop_v);
176
   elm_scroller_loop_set(scroller, loop_h, !loop_v);
177
}
178

179
static void
180
_my_bt_wheel_disable_cb(void *data, Evas_Object *obj EINA_UNUSED,
181
                  void *event_info EINA_UNUSED)
182
{
183
   Evas_Object *scroller = (Evas_Object *)data;
184

185
   elm_scroller_wheel_disabled_set(scroller, elm_check_state_get(obj));
186
}
187

188
static void
189
_page_change_cb(void *data EINA_UNUSED,
190
               Evas_Object *obj,
191
               void *event_info EINA_UNUSED)
192
{
193
   int page_x = 0, page_y = 0;
194

195
   elm_scroller_current_page_get(obj, &page_x, &page_y);
196

197
   printf("Page changed to %d, %d\n", page_x, page_y);
198
}
199

200
static void
201
_sc_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
202
{
203
   Evas_Coord x = 0, y = 0;
204
   evas_object_geometry_get(obj, &x, &y, NULL, NULL);
205
   evas_object_move(data, x, y);
206
}
207

208
static void
209
_sc_resize_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
210
{
211
   Evas_Coord w = 0, h = 0;
212
   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
213
   evas_object_resize(data, w, h);
214
}
215

216
static void
217
_step_size_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
218
{
219
   Evas_Object *sc = data;
220
   int size = elm_spinner_value_get(obj);
221
   elm_scroller_step_size_set(sc, ELM_SCALE_SIZE(size), ELM_SCALE_SIZE(size));
222
}
223

224
static void
225
_page_size_changed(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
226
{
227
   Evas_Object *sc = data;
228
   int size = elm_spinner_value_get(obj);
229
   elm_scroller_page_size_set(sc, size, size);
230
}
231

232
void
233
test_scroller(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
234
{
235
   Evas_Object *win, *bg2, *tb, *tb2, *sc, *bt, *ck1, *ck2, *bx, *bx2, *fr,
236
       *ck3, *ck4, *ck5, *ck6, *ck7, *ck8;
237
   int i, j, n;
238
   char buf[PATH_MAX];
239
   Evas_Coord x = 0, y = 0, w = 0, h = 0;
240
   const char *img[9] =
241
     {
242
        "panel_01.jpg",
243
        "plant_01.jpg",
244
        "rock_01.jpg",
245
        "rock_02.jpg",
246
        "sky_01.jpg",
247
        "sky_02.jpg",
248
        "sky_03.jpg",
249
        "sky_04.jpg",
250
        "wood_01.jpg"
251
     };
252

253
   win = elm_win_util_standard_add("scroller", "Scroller");
254
   elm_win_autodel_set(win, EINA_TRUE);
255

256
   bx = elm_box_add(win);
257
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
258
   elm_win_resize_object_add(win, bx);
259
   evas_object_show(bx);
260

261
   fr = elm_frame_add(win);
262
   evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, 0.0);
263
   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, 0.0);
264
   elm_object_text_set(fr, "Options");
265
   elm_box_pack_end(bx, fr);
266
   evas_object_show(fr);
267

268
   bx2 = elm_box_add(win);
269
   elm_object_content_set(fr, bx2);
270
   elm_box_horizontal_set(bx2, EINA_TRUE);
271
   evas_object_show(bx2);
272

273
   ck1 = elm_check_add(win);
274
   elm_object_text_set(ck1, "Freeze");
275
   elm_box_pack_end(bx2, ck1);
276
   evas_object_show(ck1);
277

278
   ck2 = elm_check_add(win);
279
   elm_object_text_set(ck2, "Hold");
280
   elm_box_pack_end(bx2, ck2);
281
   evas_object_show(ck2);
282

283
   ck3 = elm_check_add(win);
284
   elm_object_text_set(ck3, "Block movements in X axis");
285
   elm_box_pack_end(bx2, ck3);
286
   evas_object_show(ck3);
287

288
   ck4 = elm_check_add(win);
289
   elm_object_text_set(ck4, "Block movements in Y axis");
290
   elm_box_pack_end(bx2, ck4);
291
   evas_object_show(ck4);
292

293
   ck5 = elm_check_add(win);
294
   elm_object_text_set(ck5, "Snap to pages");
295
   elm_box_pack_end(bx2, ck5);
296
   evas_object_show(ck5);
297

298
   ck6 = elm_check_add(win);
299
   elm_object_text_set(ck6, "Loop in X axis");
300
   elm_box_pack_end(bx2, ck6);
301
   evas_object_show(ck6);
302

303
   ck7 = elm_check_add(win);
304
   elm_object_text_set(ck7, "Loop in Y axis");
305
   elm_box_pack_end(bx2, ck7);
306
   evas_object_show(ck7);
307

308
   ck8 = elm_check_add(win);
309
   elm_object_text_set(ck8, "Wheel Disable");
310
   elm_box_pack_end(bx2, ck8);
311
   evas_object_show(ck8);
312

313
   sc = elm_scroller_add(win);
314
   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
315
   evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
316
   elm_box_pack_end(bx, sc);
317

318
   tb = elm_table_add(win);
319

320
   n = 0;
321
   for (j = 0; j < 12; j++)
322
     {
323
        for (i = 0; i < 12; i++)
324
          {
325
             bg2 = elm_bg_add(win);
326
             snprintf(buf, sizeof(buf), "%s/images/%s",
327
                      elm_app_data_dir_get(), img[n]);
328
             n++;
329
             if (n >= 9) n = 0;
330
             elm_bg_file_set(bg2, buf, NULL);
331
             evas_object_size_hint_weight_set(bg2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
332
             evas_object_size_hint_align_set(bg2, EVAS_HINT_FILL, EVAS_HINT_FILL);
333
             evas_object_size_hint_min_set(bg2, PSIZE, PSIZE);
334
             elm_table_pack(tb, bg2, i, j, 1, 1);
335
             evas_object_show(bg2);
336
          }
337
     }
338

339
   elm_object_content_set(sc, tb);
340
   evas_object_show(tb);
341

342
   elm_scroller_page_size_set(sc, PSIZE, PSIZE);
343
   evas_object_show(sc);
344

345
   evas_object_smart_callback_add
346
       (sc, "scroll,page,changed", _page_change_cb, sc);
347

348
   evas_object_smart_callback_add(ck1, "changed", _my_bt_freeze_toggle, tb);
349
   evas_object_smart_callback_add(ck2, "changed", _my_bt_hold_toggle, tb);
350
   evas_object_smart_callback_add(ck3, "changed", _my_bt_block_movements_x_axis,
351
                                  sc);
352
   evas_object_smart_callback_add(ck4, "changed", _my_bt_block_movements_y_axis,
353
                                  sc);
354
   evas_object_smart_callback_add(ck5, "changed", _my_bt_snap_to_pages, sc);
355
   evas_object_smart_callback_add(ck6, "changed", _my_bt_loop_x_axis, sc);
356
   evas_object_smart_callback_add(ck7, "changed", _my_bt_loop_y_axis, sc);
357
   evas_object_smart_callback_add(ck8, "changed", _my_bt_wheel_disable_cb, sc);
358

359
   bx2 = elm_box_add(win);
360
   elm_box_pack_end(bx, bx2);
361
   elm_box_horizontal_set(bx2, EINA_TRUE);
362
   elm_box_padding_set(bx2, 10, 0);
363
   evas_object_show(bx2);
364

365
   bt = elm_spinner_add(win);
366
   elm_spinner_min_max_set(bt, 0, 500);
367
   elm_scroller_step_size_get(sc, &x, &y);
368
   elm_spinner_value_set(bt, x);
369
   elm_spinner_editable_set(bt, EINA_TRUE);
370
   elm_spinner_label_format_set(bt, "Step size: %.0f");
371
   evas_object_smart_callback_add(bt, "changed", _step_size_changed, sc);
372
   elm_box_pack_end(bx2, bt);
373
   evas_object_show(bt);
374

375
   bt = elm_spinner_add(win);
376
   elm_spinner_min_max_set(bt, 0, PSIZE * 2);
377
   elm_scroller_page_size_get(sc, &x, &y);
378
   elm_spinner_value_set(bt, x);
379
   elm_spinner_editable_set(bt, EINA_TRUE);
380
   elm_spinner_label_format_set(bt, "Page size: %.0f");
381
   evas_object_smart_callback_add(bt, "changed", _page_size_changed, sc);
382
   elm_box_pack_end(bx2, bt);
383
   evas_object_show(bt);
384

385
   tb2 = elm_table_add(win);
386

387
   bt = elm_button_add(win);
388
   elm_object_text_set(bt, "to 300 300");
389
   evas_object_smart_callback_add(bt, "clicked", _my_bt_go_300_300, sc);
390
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
391
   evas_object_size_hint_align_set(bt, 0.1, 0.1);
392
   elm_table_pack(tb2, bt, 0, 0, 1, 1);
393
   evas_object_show(bt);
394

395
   bt = elm_button_add(win);
396
   elm_object_text_set(bt, "y -1 px");
397
   evas_object_smart_callback_add(bt, "clicked", _my_bt_y_minus_one, sc);
398
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
399
   evas_object_size_hint_align_set(bt, 0.5, 0.1);
400
   elm_table_pack(tb2, bt, 1, 0, 1, 1);
401
   evas_object_show(bt);
402

403
   bt = elm_button_add(win);
404
   elm_object_text_set(bt, "to 900 300");
405
   evas_object_smart_callback_add(bt, "clicked", _my_bt_go_900_300, sc);
406
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
407
   evas_object_size_hint_align_set(bt, 0.9, 0.1);
408
   elm_table_pack(tb2, bt, 2, 0, 1, 1);
409
   evas_object_show(bt);
410

411
   bt = elm_button_add(win);
412
   elm_object_text_set(bt, "to 300 900");
413
   evas_object_smart_callback_add(bt, "clicked", _my_bt_go_300_900, sc);
414
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
415
   evas_object_size_hint_align_set(bt, 0.1, 0.9);
416
   elm_table_pack(tb2, bt, 0, 2, 1, 1);
417
   evas_object_show(bt);
418

419
   bt = elm_button_add(win);
420
   elm_object_text_set(bt, "y +1 px");
421
   evas_object_smart_callback_add(bt, "clicked", _my_bt_y_plus_one, sc);
422
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
423
   evas_object_size_hint_align_set(bt, 0.5, 0.9);
424
   elm_table_pack(tb2, bt, 1, 2, 1, 1);
425
   evas_object_show(bt);
426

427
   bt = elm_button_add(win);
428
   elm_object_text_set(bt, "to 900 900");
429
   evas_object_smart_callback_add(bt, "clicked", _my_bt_go_900_900, sc);
430
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
431
   evas_object_size_hint_align_set(bt, 0.9, 0.9);
432
   elm_table_pack(tb2, bt, 2, 2, 1, 1);
433
   evas_object_show(bt);
434

435
   bt = elm_button_add(win);
436
   elm_object_text_set(bt, "prev page");
437
   evas_object_smart_callback_add(bt, "clicked", _my_bt_prev_page, sc);
438
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
439
   evas_object_size_hint_align_set(bt, 0.1, 0.5);
440
   elm_table_pack(tb2, bt, 0, 1, 1, 1);
441
   evas_object_show(bt);
442

443
   bt = elm_button_add(win);
444
   elm_object_text_set(bt, "next page");
445
   evas_object_smart_callback_add(bt, "clicked", _my_bt_next_page, sc);
446
   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
447
   evas_object_size_hint_align_set(bt, 0.9, 0.5);
448
   elm_table_pack(tb2, bt, 2, 1, 1, 1);
449
   evas_object_show(bt);
450

451
   evas_object_event_callback_add(sc, EVAS_CALLBACK_MOVE, _sc_move_cb, tb2);
452
   evas_object_event_callback_add(sc, EVAS_CALLBACK_RESIZE, _sc_resize_cb, tb2);
453
   evas_object_geometry_get(sc, &x, &y, &w, &h);
454
   evas_object_move(tb2, x, y);
455
   evas_object_resize(tb2, w, h);
456
   evas_object_show(tb2);
457

458
   evas_object_resize(win, 320 * elm_config_scale_get(),
459
                           420 * elm_config_scale_get());
460
   evas_object_show(win);
461
}
462

463
static void
464
_click_through(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
465
{
466
   printf("click went through on %p\n", obj);
467
}
468

469
typedef struct
470
{
471
   Evas_Object *scroller;
472
   Evas_Object *it1, *it2;
473
   Ecore_Timer *timer;
474
   int autobounce;
475
   int frames;
476
   int bounce_max;
477
   int y1, y2;
478
   int state;
479
} Bounce;
480

481
#ifdef CLOCK_PROCESS_CPUTIME_ID
482
static void
483
_bounce_cb_frame(void *data, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
484
{
485
   Bounce *bounce = data;
486
   bounce->frames++;
487
}
488
#endif
489

490
static Eina_Bool
491
_bounce_cb(void *data)
492
{
493
   Bounce *bounce = data;
494

495
   if (!bounce->y1)
496
     {
497
        elm_interface_scrollable_bounce_allow_set(bounce->scroller, 0, 1);
498
        bounce->y1 = efl_gfx_entity_position_get(bounce->it1).y;
499
        bounce->y2 = efl_gfx_entity_position_get(bounce->it2).y;
500
     }
501

502
   bounce->state++;
503
   if (bounce->state & 0x1)
504
     elm_interface_scrollable_region_bring_in(bounce->scroller, 0, bounce->y2, 1, 1);
505
   else
506
     elm_interface_scrollable_region_bring_in(bounce->scroller, 0, bounce->y1, 1, 1);
507

508
#ifdef CLOCK_PROCESS_CPUTIME_ID
509
   static struct timespec t0;
510
   if (bounce->state == 2)
511
     {
512
        evas_event_callback_add(evas_object_evas_get(bounce->scroller),
513
                                EVAS_CALLBACK_RENDER_FLUSH_POST,
514
                                _bounce_cb_frame, bounce);
515
        clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t0);
516
     }
517
#endif
518

519
   if (bounce->state > bounce->bounce_max)
520
     {
521
#ifdef CLOCK_PROCESS_CPUTIME_ID
522
        struct timespec t;
523
        unsigned long long tll, t0ll, tdll, frames;
524

525
        clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t);
526
        t0ll = ((unsigned long long) t0.tv_sec * 1000000000ULL) + t0.tv_nsec;
527
        tll = ((unsigned long long) t.tv_sec * 1000000000ULL) + t.tv_nsec;
528
        tdll = tll - t0ll;
529
        frames = bounce->frames ?: 1;
530
        printf("NS since frame 2 = %llu , %llu frames = %llu / frame\n",
531
               tdll, frames, tdll / frames);
532
#endif
533
        if (bounce->autobounce) elm_exit();
534
     }
535
   return EINA_TRUE;
536
}
537

538
static void
539
_scroll2_del_cb(void *data, Evas *e EINA_UNUSED,
540
                Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
541
{
542
   Bounce *bounce = data;
543

544
#ifdef CLOCK_PROCESS_CPUTIME_ID
545
   evas_event_callback_del_full(evas_object_evas_get(bounce->scroller),
546
                                EVAS_CALLBACK_RENDER_FLUSH_POST,
547
                                _bounce_cb_frame, bounce);
548
#endif
549

550
   ecore_timer_del(bounce->timer);
551
   free(bounce);
552
}
553

554
void
555
test_scroller2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
556
{
557
   Evas_Object *win, *bt, *bx, *bx2, *sc, *tb, *tb2, *rc;
558
   Bounce *bounce;
559
   int i, j;
560

561
   bounce = calloc(1, sizeof(Bounce));
562

563
   win = elm_win_util_standard_add("scroller2", "Scroller 2");
564
   elm_win_autodel_set(win, EINA_TRUE);
565

566
   bx = elm_box_add(win);
567
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0);
568
   evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0.0);
569

570
   /* { */
571
   for (i = 0; i < 3; i++)
572
     {
573
        bt = elm_button_add(win);
574
        elm_object_text_set(bt, "Vertical");
575
        evas_object_smart_callback_add(bt, "clicked", _click_through, NULL);
576
        evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
577
        evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5);
578
        elm_box_pack_end(bx, bt);
579
        evas_object_show(bt);
580

581
        if (i == 0) bounce->it1 = bt;
582
     }
583
   /* } */
584

585
   /* { */
586
   sc = elm_scroller_add(win);
587
   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, 0.0);
588
   evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, 0.5);
589
   elm_scroller_bounce_set(sc, EINA_TRUE, EINA_FALSE);
590
   elm_scroller_content_min_limit(sc, 0, 1);
591
   elm_box_pack_end(bx, sc);
592
   evas_object_show(sc);
593

594
   bx2 = elm_box_add(win);
595
   elm_box_horizontal_set(bx2, EINA_TRUE);
596

597
   for (i = 0; i < 10; i++)
598
     {
599
        bt = elm_button_add(win);
600
        elm_object_text_set(bt, "... Horizontal scrolling ...");
601
        evas_object_smart_callback_add(bt, "clicked", _click_through, NULL);
602
        elm_box_pack_end(bx2, bt);
603
        evas_object_show(bt);
604
     }
605

606
   elm_object_content_set(sc, bx2);
607
   evas_object_show(bx2);
608
   /* } */
609

610
   /* { */
611
   for (i = 0; i < 3; i++)
612
     {
613
        bt = elm_button_add(win);
614
        elm_object_text_set(bt, "Vertical");
615
        evas_object_smart_callback_add(bt, "clicked", _click_through, NULL);
616
        evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
617
        evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5);
618
        elm_box_pack_end(bx, bt);
619
        evas_object_show(bt);
620
     }
621
   /* } */
622

623
   /* { */
624
   tb = elm_table_add(win);
625
   evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
626
   evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
627
   elm_box_pack_end(bx, tb);
628
   evas_object_show(tb);
629

630
   rc = evas_object_rectangle_add(evas_object_evas_get(win));
631
   evas_object_size_hint_min_set(rc, 200, 120);
632
   elm_table_pack(tb, rc, 0, 0, 1, 1);
633

634
   sc = elm_scroller_add(win);
635
   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
636
   evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
637
   elm_table_pack(tb, sc, 0, 0, 1, 1);
638
   evas_object_show(sc);
639

640
   tb2 = elm_table_add(win);
641

642
   for (j = 0; j < 16; j++)
643
     {
644
        for (i = 0; i < 16; i++)
645
          {
646
             bt = elm_button_add(win);
647
             elm_object_text_set(bt, "Both");
648
             evas_object_smart_callback_add(bt, "clicked", _click_through, NULL);
649
             elm_table_pack(tb2, bt, i, j, 1, 1);
650
             evas_object_show(bt);
651
          }
652
     }
653

654
   elm_object_content_set(sc, tb2);
655
   evas_object_show(tb2);
656
   /* } */
657

658
   for (i = 0; i < 24; i++)
659
     {
660
        bt = elm_button_add(win);
661
        elm_object_text_set(bt, "Vertical");
662
        evas_object_smart_callback_add(bt, "clicked", _click_through, NULL);
663
        evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
664
        evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5);
665
        elm_box_pack_end(bx, bt);
666
        evas_object_show(bt);
667

668
        if (i == 23) bounce->it2 = bt;
669
     }
670

671
   sc = elm_scroller_add(win);
672
   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
673
   elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE);
674
   elm_win_resize_object_add(win, sc);
675
   elm_object_content_set(sc, bx);
676
   evas_object_show(bx);
677
   evas_object_show(sc);
678

679
   bounce->scroller = sc;
680

681
   evas_object_resize(win, 320 * elm_config_scale_get(),
682
                           480 * elm_config_scale_get());
683
   evas_object_show(win);
684

685
   evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _scroll2_del_cb, bounce);
686

687
   if (getenv("ELM_TEST_AUTOBOUNCE"))
688
     {
689
        bounce->autobounce = 1;
690
        bounce->bounce_max = atoi(getenv("ELM_TEST_AUTOBOUNCE"));
691
        bounce->timer = ecore_timer_add(0.5, _bounce_cb, bounce);
692
        _bounce_cb(bounce);
693
     }
694
}
695

696
static void
697
_scroll_anim_start(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
698
{
699
   int x, y;
700
   elm_scroller_region_get(obj, &x, &y, NULL, NULL);
701
   printf("scroll start: %p x: %d y: %d\n", obj, x, y);
702
}
703

704
static void
705
_scroll_anim_stop(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
706
{
707
   int x, y;
708
   elm_scroller_region_get(obj, &x, &y, NULL, NULL);
709
   printf("scroll stop: %p x: %d y: %d\n", obj, x, y);
710
}
711

712
void
713
test_scroller_simple(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
714
{
715
   Evas_Object *win, *bt, *bx, *sc;
716
   int i;
717

718

719
   win = elm_win_util_standard_add("scroller2", "Scroller Simple");
720
   elm_win_autodel_set(win, EINA_TRUE);
721

722
   bx = elm_box_add(win);
723
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0);
724
   evas_object_size_hint_align_set(bx, 0.5, 0);
725

726
   /* { */
727
   sc = elm_scroller_add(win);
728
   evas_object_smart_callback_add(sc, "scroll,anim,start", _scroll_anim_start, NULL);
729
   evas_object_smart_callback_add(sc, "scroll,anim,stop", _scroll_anim_stop, NULL);
730
   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
731
   evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
732
   elm_scroller_bounce_set(sc, EINA_TRUE, EINA_TRUE);
733
   evas_object_show(sc);
734
   evas_object_show(bx);
735

736
   elm_object_content_set(sc, bx);
737
   elm_win_resize_object_add(win, sc);
738
   /* } */
739

740
   for (i = 0; i < 2000; i++)
741
     {
742
        bt = elm_button_add(win);
743
        elm_object_text_set(bt, "Vertical");
744
        evas_object_smart_callback_add(bt, "clicked", _click_through, NULL);
745
        evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
746
        evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5);
747
        elm_box_pack_end(bx, bt);
748
        evas_object_show(bt);
749
     }
750
   evas_object_resize(win, 320 * elm_config_scale_get(),
751
                           400 * elm_config_scale_get());
752
   evas_object_show(win);
753
}
754

755
static Ecore_Timer *_timer = NULL;
756
static int _append = 0;
757
static int _count = 0;
758

759
static void
760
_del_item(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
761
{
762
   evas_object_del(obj);
763
}
764

765
static void
766
_append_item(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
767
{
768
   Evas_Object *bx = data, *bt;
769
   char buf[PATH_MAX];
770

771
   bt = elm_button_add(bx);
772
   snprintf(buf, sizeof(buf), "Item %d", ++_count);
773
   elm_object_text_set(bt, buf);
774
   elm_box_pack_end(bx, bt);
775
   evas_object_smart_callback_add(bt, "clicked", _del_item, NULL);
776
   evas_object_show(bt);
777
}
778

779
static void
780
_prepend_item(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
781
{
782
   Evas_Object *bx = data, *bt;
783
   char buf[PATH_MAX];
784

785
   bt = elm_button_add(bx);
786
   snprintf(buf, sizeof(buf), "Item %d", ++_count);
787
   elm_object_text_set(bt, buf);
788
   elm_box_pack_start(bx, bt);
789
   evas_object_smart_callback_add(bt, "clicked", _del_item, NULL);
790
   evas_object_show(bt);
791
}
792

793
static Eina_Bool
794
_append_cb(void *data)
795
{
796
   Evas_Object *bx = data, *bt;
797
   char buf[PATH_MAX];
798

799
   bt = elm_button_add(bx);
800
   snprintf(buf, sizeof(buf), "Item %d", ++_count);
801
   elm_object_text_set(bt, buf);
802
   elm_box_pack_end(bx, bt);
803
   evas_object_smart_callback_add(bt, "clicked", _del_item, NULL);
804
   evas_object_show(bt);
805

806
   _append--;
807

808
   if (_append <= 0)
809
     {
810
        _timer = NULL;
811
        return ECORE_CALLBACK_CANCEL;
812
     }
813
   else
814
     return ECORE_CALLBACK_RENEW;
815
}
816

817
static void
818
_append_items(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
819
{
820
   _append += 10;
821
   _timer = ecore_timer_add(0.3, _append_cb, data);
822
}
823

824
static void
825
_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
826
{
827
	Evas_Object *sl = data;
828
	double val = elm_slider_value_get(obj);
829
	elm_scroller_gravity_set(sl, 0.0, val);
830
	printf("Gravity change to %lf\n",val);
831
}
832

833
static void
834
_win_del_cb(void *data EINA_UNUSED,
835
		Evas *e EINA_UNUSED,
836
		Evas_Object *obj EINA_UNUSED,
837
		void *event_info EINA_UNUSED)
838
{
839
   ecore_timer_del(_timer);
840
   _timer = NULL;
841
}
842

843
void
844
test_scroller3(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
845
{
846
   Evas_Object *win, *bt, *bt2, *bt3, *bx, *bx2, *bx3, *bx4, *sc, *sl;
847
   _count = 0;
848

849
   win = elm_win_util_standard_add("scroller3", "Scroller 3");
850
   elm_win_autodel_set(win, EINA_TRUE);
851
   evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _win_del_cb, NULL);
852

853
   bx = elm_box_add(win);
854
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
855
   elm_win_resize_object_add(win, bx);
856
   evas_object_show(bx);
857

858
   bx2 = elm_box_add(bx);
859
   evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.1);
860
   evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
861
   elm_box_horizontal_set(bx2, EINA_TRUE);
862
   elm_box_pack_end(bx, bx2);
863
   evas_object_show(bx2);
864

865
   bt = elm_button_add(bx2);
866
   elm_object_text_set(bt, "Append Item");
867
   elm_box_pack_end(bx2, bt);
868
   evas_object_show(bt);
869

870
   bt2 = elm_button_add(bx2);
871
   elm_object_text_set(bt2, "Prepend Item");
872
   elm_box_pack_end(bx2, bt2);
873
   evas_object_show(bt2);
874

875
   bt3 = elm_button_add(bx2);
876
   elm_object_text_set(bt3, "Append 10 Items in 3s");
877
   elm_box_pack_end(bx2, bt3);
878
   evas_object_show(bt3);
879

880
   sl = elm_slider_add(bx);
881
   elm_object_text_set(sl, "Gravity");
882
   elm_slider_unit_format_set(sl, "%1.1f");
883
   elm_slider_indicator_format_set(sl, "%1.1f");
884
   elm_slider_min_max_set(sl, 0, 1);
885
   elm_slider_value_set(sl, 0.0);
886
   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, EVAS_HINT_FILL);
887
   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.1);
888
   elm_box_pack_end(bx, sl);
889
   evas_object_show(sl);
890

891
   bx3 = elm_box_add(bx);
892
   evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL);
893
   evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.8);
894
   elm_box_pack_end(bx, bx3);
895
   evas_object_show(bx3);
896

897
   sc = elm_scroller_add(bx3);
898
   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
899
   evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
900
   elm_box_pack_end(bx3, sc);
901
   evas_object_show(sc);
902

903
   bx4 = elm_box_add(sc);
904
   elm_box_padding_set(bx4, 0, 5);
905
   evas_object_size_hint_weight_set(bx4, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
906
   elm_object_content_set(sc, bx4);
907
   evas_object_show(bx4);
908

909
   evas_object_smart_callback_add(bt, "clicked", _append_item, bx4);
910
   evas_object_smart_callback_add(bt2, "clicked", _prepend_item, bx4);
911
   evas_object_smart_callback_add(bt3, "clicked", _append_items, bx4);
912
   evas_object_smart_callback_add(sl, "changed", _changed_cb, sc);
913

914
   evas_object_resize(win, 500 * elm_config_scale_get(),
915
                           500 * elm_config_scale_get());
916
   evas_object_show(win);
917
}
918

919
void
920
test_scroller4(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
921
{
922
   Evas_Object *win, *sc, *bx, *ly, *sc2, *rect, *rect2;
923
   char buf[PATH_MAX];
924

925
   win = elm_win_util_standard_add("scroller3", "Scroller 3");
926
   elm_win_autodel_set(win, EINA_TRUE);
927

928
   sc = elm_scroller_add(win);
929
   elm_scroller_loop_set(sc, EINA_TRUE, EINA_FALSE);
930
   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
931
   elm_scroller_page_relative_set(sc, 1.0, 0.0);
932
   elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
933
   elm_scroller_page_scroll_limit_set(sc, 1, 0);
934
   elm_win_resize_object_add(win, sc);
935
   evas_object_show(sc);
936

937
   bx = elm_box_add(sc);
938
   elm_box_horizontal_set(bx, EINA_TRUE);
939
   elm_object_content_set(sc, bx);
940
   evas_object_show(bx);
941

942
   ly = elm_layout_add(bx);
943
   snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
944
   elm_layout_file_set(ly, buf, "page_layout");
945
   elm_object_part_text_set(ly, "text", "Page1");
946
   elm_box_pack_end(bx, ly);
947
   evas_object_show(ly);
948

949
   sc2 = elm_scroller_add(ly);
950
   elm_object_part_content_set(ly, "page", sc2);
951
   evas_object_show(sc2);
952

953
   rect2 = evas_object_rectangle_add(evas_object_evas_get(sc2));
954
   evas_object_color_set(rect2, 50, 0, 0, 50);
955
   evas_object_size_hint_min_set(rect2, 0, 2000);
956
   elm_object_content_set(sc2, rect2);
957
   evas_object_show(rect2);
958

959
   ly = elm_layout_add(bx);
960
   snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
961
   elm_layout_file_set(ly, buf, "page_layout");
962
   rect = evas_object_rectangle_add(evas_object_evas_get(ly));
963
   evas_object_color_set(rect, 0, 50, 0, 50);
964
   elm_object_part_content_set(ly, "page", rect);
965
   elm_object_part_text_set(ly, "text", "Page2");
966
   elm_box_pack_end(bx, ly);
967
   evas_object_show(ly);
968

969
   ly = elm_layout_add(bx);
970
   snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
971
   elm_layout_file_set(ly, buf, "page_layout");
972
   rect = evas_object_rectangle_add(evas_object_evas_get(ly));
973
   evas_object_color_set(rect, 0, 0, 50, 50);
974
   elm_object_part_content_set(ly, "page", rect);
975
   elm_object_part_text_set(ly, "text", "Page3");
976
   elm_box_pack_end(bx, ly);
977
   evas_object_show(ly);
978

979
   evas_object_resize(win, 400 * elm_config_scale_get(),
980
                           550 * elm_config_scale_get());
981
   evas_object_show(win);
982
}
983

984
static void
985
_popup_btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
986
{
987
   evas_object_del(data);
988
}
989

990
static void
991
_block_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
992
{
993
   evas_object_del(obj);
994
}
995

996
static void
997
_btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
998
{
999
   Evas_Object *win = data;
1000
   Evas_Object *popup, *scr, *lbl, *btn, *rect, *tbl;
1001

1002
   popup = elm_popup_add(win);
1003
   elm_object_part_text_set(popup, "title,text", "Scroller on Popup");
1004
   evas_object_smart_callback_add(popup, "block,clicked",
1005
                                  _block_clicked_cb, NULL);
1006

1007
   tbl = elm_table_add(popup);
1008
   elm_object_content_set(popup, tbl);
1009
   evas_object_show(tbl);
1010

1011
   rect = evas_object_rectangle_add(evas_object_evas_get(popup));
1012
   evas_object_size_hint_min_set(rect, 200, 50);
1013
   elm_table_pack(tbl, rect, 0, 0, 1, 1);
1014

1015
   scr = elm_scroller_add(popup);
1016
   elm_object_focus_allow_set(scr, EINA_FALSE);
1017
   evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1018
   evas_object_size_hint_align_set(scr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1019
   evas_object_show(scr);
1020

1021
   lbl = elm_label_add(scr);
1022
   elm_object_text_set(lbl,
1023
                       "Do you want close the popup?<br>"
1024
                       "Please select cancel button<br><br>"
1025
                       "Do you wnat close the popup?<br>"
1026
                       "Please select cancel button");
1027
   evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1028
   evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
1029
   elm_object_content_set(scr, lbl);
1030
   evas_object_show(lbl);
1031

1032
   elm_table_pack(tbl, scr, 0, 0, 1, 1);
1033

1034
   btn = elm_button_add(popup);
1035
   elm_object_text_set(btn, "Cancel");
1036
   elm_object_part_content_set(popup, "button1", btn);
1037
   evas_object_smart_callback_add(btn, "clicked", _popup_btn_clicked_cb, popup);
1038
   evas_object_show(btn);
1039

1040
   evas_object_show(popup);
1041
   elm_object_focus_set(btn, EINA_TRUE);
1042
}
1043

1044
static void
1045
_focused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
1046
{
1047
   printf("focused");
1048
}
1049

1050
void
1051
test_scroller5(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
1052
{
1053
   Evas_Object *win, *bx, *btn;
1054

1055
   win = elm_win_util_standard_add("Scroller on Popup", "Scroller on Popup");
1056
   elm_win_autodel_set(win, EINA_TRUE);
1057
   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
1058

1059
   bx = elm_box_add(win);
1060
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1061
   elm_win_resize_object_add(win, bx);
1062
   evas_object_show(bx);
1063

1064
   btn = elm_button_add(bx);
1065
   elm_object_text_set(btn, "Button 1");
1066
   evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, win);
1067
   evas_object_smart_callback_add(btn, "focused", _focused_cb, NULL);
1068
   elm_box_pack_end(bx, btn);
1069
   evas_object_show(btn);
1070

1071
   btn = elm_button_add(bx);
1072
   elm_object_text_set(btn, "Button 2");
1073
   evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, win);
1074
   evas_object_smart_callback_add(btn, "focused", _focused_cb, NULL);
1075
   elm_box_pack_end(bx, btn);
1076
   evas_object_show(btn);
1077

1078
   elm_object_focus_set(btn, EINA_TRUE);
1079

1080
   evas_object_resize(win, 400 * elm_config_scale_get(),
1081
                           550 * elm_config_scale_get());
1082
   evas_object_show(win);
1083
}
1084

1085
void
1086
test_scroller6(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
1087
{
1088
   Evas_Object *win, *scr, *lb, *table, *btn, *btn2;
1089

1090
   win = elm_win_util_standard_add("Scroller with unfocusable content", "Scroller with unfocusable content");
1091
   elm_win_autodel_set(win, EINA_TRUE);
1092
   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
1093

1094
   table = elm_table_add(win);
1095
   evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1096
   evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL);
1097
   elm_win_resize_object_add(win, table);
1098
   evas_object_show(table);
1099

1100
   scr = elm_scroller_add(win);
1101
   evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1102
   evas_object_size_hint_align_set(scr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1103
   elm_table_pack(table, scr, 0, 0, 1, 1);
1104
   evas_object_show(scr);
1105

1106
   lb = elm_label_add(scr);
1107
   elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too.");
1108
   elm_object_content_set(scr, lb);
1109
   evas_object_show(lb);
1110

1111
   btn = elm_button_add(table);
1112
   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
1113
   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0);
1114
   elm_object_text_set(btn, "Button 2");
1115
   elm_table_pack(table, btn, 0, 1, 2, 1);
1116
   evas_object_show(btn);
1117

1118
   btn2 = elm_button_add(table);
1119
   evas_object_size_hint_weight_set(btn2, 0.0, EVAS_HINT_EXPAND);
1120
   evas_object_size_hint_align_set(btn2, 0.0, EVAS_HINT_FILL);
1121
   elm_object_text_set(btn2, "Button 3");
1122
   elm_table_pack(table, btn2, 1, 0, 1, 1);
1123
   evas_object_show(btn2);
1124

1125
   evas_object_resize(win, 400 * elm_config_scale_get(),
1126
                           550 * elm_config_scale_get());
1127
   evas_object_show(win);
1128
}
1129

1130
void
1131
test_scroller7(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
1132
{
1133
   Evas_Object *win, *scr, *lb, *table, *btn, *btn2, *inner_table, *o;
1134

1135
   win = elm_win_util_standard_add("Scroller with unfocusable content", "Scroller with unfocusable content");
1136
   elm_win_autodel_set(win, EINA_TRUE);
1137
   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
1138

1139
   table = elm_table_add(win);
1140
   evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1141
   evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL);
1142
   elm_win_resize_object_add(win, table);
1143
   evas_object_show(table);
1144

1145
   scr = elm_scroller_add(win);
1146
   evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1147
   evas_object_size_hint_align_set(scr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1148
   elm_table_pack(table, scr, 0, 0, 1, 1);
1149
   evas_object_show(scr);
1150

1151
   inner_table = o = elm_table_add(win);
1152
   evas_object_size_hint_weight_set(scr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1153
   evas_object_size_hint_align_set(scr, EVAS_HINT_FILL, EVAS_HINT_FILL);
1154
   elm_object_content_set(scr, inner_table);
1155
   evas_object_show(scr);
1156

1157
   lb = elm_label_add(scr);
1158
   elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too.");
1159
   elm_table_pack(inner_table, lb, 0, 1, 1, 1);
1160
   evas_object_show(lb);
1161

1162
   lb = elm_label_add(scr);
1163
   elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too.");
1164
   elm_table_pack(inner_table, lb, 1, 0, 1, 1);
1165
   evas_object_show(lb);
1166

1167
   lb = elm_label_add(scr);
1168
   elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too.");
1169
   elm_table_pack(inner_table, lb, 1, 2, 1, 1);
1170
   evas_object_show(lb);
1171

1172
   lb = elm_label_add(scr);
1173
   elm_object_text_set(lb, "Enlightenment started out way back in 1996 as a project to build a Window Manager for X11. It has grown much more since then. Enlightenment still produces this Window Manager, but it has evolved to also cover Mobile, Wearable and TV UI requirements for projects such as Tizen as well as the traditional “desktop” UI. We still push out releases. See our download page for more details on the this. Visit our contribute page for our latest source code repositories. The project is currently transitioning from X11 to Wayland. We are fully committed to moving to Wayland eventually, as its the future of graphical display layers on Linux. We still primarily support Linux for Enlightenment, but there is some effort (based on help and support from users and some developers) to support BSD too.");
1174
   elm_table_pack(inner_table, lb, 2, 1, 1, 1);
1175
   evas_object_show(lb);
1176

1177
   btn = elm_button_add(table);
1178
   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
1179
   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0);
1180
   elm_object_text_set(btn, "Button 2");
1181
   elm_table_pack(inner_table, btn, 1, 1, 1, 1);
1182
   evas_object_show(btn);
1183

1184
   btn = elm_button_add(table);
1185
   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
1186
   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0);
1187
   elm_object_text_set(btn, "Button 2");
1188
   elm_table_pack(table, btn, 0, 1, 2, 1);
1189
   evas_object_show(btn);
1190

1191
   btn2 = elm_button_add(table);
1192
   evas_object_size_hint_weight_set(btn2, 0.0, EVAS_HINT_EXPAND);
1193
   evas_object_size_hint_align_set(btn2, 0.0, EVAS_HINT_FILL);
1194
   elm_object_text_set(btn2, "Button 3");
1195
   elm_table_pack(table, btn2, 1, 0, 1, 1);
1196
   evas_object_show(btn2);
1197

1198
   evas_object_resize(win, 400 * elm_config_scale_get(),
1199
                           550 * elm_config_scale_get());
1200
   evas_object_show(win);
1201
}
1202

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.