efl

Форк
0
/
efl_ui_slideshow_example.c 
118 строк · 3.3 Кб
1
#include <Efl_Ui.h>
2

3
#include <Elementary.h>
4

5
static Efl_Ui_Spotlight_Container *container;
6
static Eina_Bool play_state = EINA_FALSE;
7
static Efl_Loop_Timer *show_timer = NULL;
8

9
char *img_files[] = {
10
  "logo.png",
11
  "plant_01.jpg",
12
  "rock_01.jpg",
13
  "rock_02.jpg",
14
  "sky_01.jpg",
15
  "wood_01.jpg",
16
  "mystrale.jpg",
17
  "mystrale_2.jpg"
18
};
19
#define IMG_NUM 8
20

21
static void
22
_show_next(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
23
{
24
   if (!show_timer) return;
25
   efl_del(show_timer);
26
   show_timer = NULL;
27

28
   int current_index = efl_pack_index_get(container, efl_ui_spotlight_active_element_get(container));
29
   int new_index = (current_index + 1) % efl_content_count(container);
30
   efl_ui_spotlight_active_element_set(container, efl_pack_content_get(container, new_index));
31
}
32

33
static void
34
put_play(void)
35
{
36
   play_state = EINA_TRUE;
37
   show_timer = efl_add(EFL_LOOP_TIMER_CLASS, container,
38
                        efl_loop_timer_interval_set(efl_added, 2.0),
39
                        efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TIMER_TICK, _show_next, NULL));
40
}
41

42
static void
43
put_pause(void)
44
{
45
   play_state = EINA_FALSE;
46
   if (show_timer)
47
     efl_del(show_timer);
48
   show_timer = NULL;
49

50
}
51

52
static void
53
_container_end(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
54
{
55
   if (play_state)
56
     {
57
        show_timer = efl_add(EFL_LOOP_TIMER_CLASS, efl_app_main_get(),
58
                             efl_loop_timer_interval_set(efl_added, 2.0),
59
                             efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TIMER_TICK, _show_next, NULL));
60
     }
61
}
62

63
static void
64
_play_toggle(void *data EINA_UNUSED, const Efl_Event *ev)
65
{
66
   if (play_state)
67
     {
68
        put_pause();
69
        efl_text_set(ev->object, "Play");
70
     }
71
   else
72
     {
73
        put_play();
74
        efl_text_set(ev->object, "Pause");
75
     }
76
}
77

78
static void
79
efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
80
{
81
   Efl_Ui_Win *win;
82
   Efl_Ui_Table *table;
83

84
   elm_app_info_set(efl_main, "elementary", "images");
85

86
   win = efl_new(EFL_UI_WIN_CLASS,
87
                 efl_ui_win_autodel_set(efl_added, EINA_TRUE),
88
                 efl_text_set(efl_added, "Slideshow Example")
89
   );
90
   table = efl_add(EFL_UI_TABLE_CLASS, win);
91
   efl_content_set(win, table);
92

93
   container = efl_add(EFL_UI_SPOTLIGHT_CONTAINER_CLASS, win,
94
                       efl_event_callback_add(efl_added, EFL_UI_SPOTLIGHT_EVENT_TRANSITION_END, _container_end, NULL),
95
                       efl_pack_table(table, efl_added, 0, 0, 1, 1));
96
   efl_ui_spotlight_indicator_set(container, efl_new(EFL_UI_SPOTLIGHT_ICON_INDICATOR_CLASS));
97
   efl_ui_spotlight_manager_set(container, efl_new(EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS));
98

99
   for (int i = 0; i < IMG_NUM; i++)
100
     {
101
        char path[PATH_MAX];
102
        snprintf(path, PATH_MAX, "%s/images/%s", elm_app_data_dir_get(), img_files[i]);
103
        efl_add(EFL_UI_IMAGE_CLASS, container,
104
                efl_file_set(efl_added, path),
105
                efl_file_load(efl_added),
106
                efl_pack_end(container, efl_added));
107
     }
108

109
   efl_add(EFL_UI_BUTTON_CLASS, table,
110
           efl_gfx_hint_weight_set(efl_added, 1.0, 0.0),
111
           efl_pack_table(table, efl_added, 0, 1, 1, 1),
112
           efl_text_set(efl_added, "Play"),
113
           efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, _play_toggle, NULL));
114

115
   efl_gfx_entity_size_set(win, EINA_SIZE2D(200, 200));
116
}
117

118
EFL_MAIN();
119

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

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

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

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