efl
118 строк · 3.3 Кб
1#include <Efl_Ui.h>
2
3#include <Elementary.h>
4
5static Efl_Ui_Spotlight_Container *container;
6static Eina_Bool play_state = EINA_FALSE;
7static Efl_Loop_Timer *show_timer = NULL;
8
9char *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
21static void
22_show_next(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
23{
24if (!show_timer) return;
25efl_del(show_timer);
26show_timer = NULL;
27
28int current_index = efl_pack_index_get(container, efl_ui_spotlight_active_element_get(container));
29int new_index = (current_index + 1) % efl_content_count(container);
30efl_ui_spotlight_active_element_set(container, efl_pack_content_get(container, new_index));
31}
32
33static void
34put_play(void)
35{
36play_state = EINA_TRUE;
37show_timer = efl_add(EFL_LOOP_TIMER_CLASS, container,
38efl_loop_timer_interval_set(efl_added, 2.0),
39efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TIMER_TICK, _show_next, NULL));
40}
41
42static void
43put_pause(void)
44{
45play_state = EINA_FALSE;
46if (show_timer)
47efl_del(show_timer);
48show_timer = NULL;
49
50}
51
52static void
53_container_end(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
54{
55if (play_state)
56{
57show_timer = efl_add(EFL_LOOP_TIMER_CLASS, efl_app_main_get(),
58efl_loop_timer_interval_set(efl_added, 2.0),
59efl_event_callback_add(efl_added, EFL_LOOP_TIMER_EVENT_TIMER_TICK, _show_next, NULL));
60}
61}
62
63static void
64_play_toggle(void *data EINA_UNUSED, const Efl_Event *ev)
65{
66if (play_state)
67{
68put_pause();
69efl_text_set(ev->object, "Play");
70}
71else
72{
73put_play();
74efl_text_set(ev->object, "Pause");
75}
76}
77
78static void
79efl_main(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
80{
81Efl_Ui_Win *win;
82Efl_Ui_Table *table;
83
84elm_app_info_set(efl_main, "elementary", "images");
85
86win = efl_new(EFL_UI_WIN_CLASS,
87efl_ui_win_autodel_set(efl_added, EINA_TRUE),
88efl_text_set(efl_added, "Slideshow Example")
89);
90table = efl_add(EFL_UI_TABLE_CLASS, win);
91efl_content_set(win, table);
92
93container = efl_add(EFL_UI_SPOTLIGHT_CONTAINER_CLASS, win,
94efl_event_callback_add(efl_added, EFL_UI_SPOTLIGHT_EVENT_TRANSITION_END, _container_end, NULL),
95efl_pack_table(table, efl_added, 0, 0, 1, 1));
96efl_ui_spotlight_indicator_set(container, efl_new(EFL_UI_SPOTLIGHT_ICON_INDICATOR_CLASS));
97efl_ui_spotlight_manager_set(container, efl_new(EFL_UI_SPOTLIGHT_FADE_MANAGER_CLASS));
98
99for (int i = 0; i < IMG_NUM; i++)
100{
101char path[PATH_MAX];
102snprintf(path, PATH_MAX, "%s/images/%s", elm_app_data_dir_get(), img_files[i]);
103efl_add(EFL_UI_IMAGE_CLASS, container,
104efl_file_set(efl_added, path),
105efl_file_load(efl_added),
106efl_pack_end(container, efl_added));
107}
108
109efl_add(EFL_UI_BUTTON_CLASS, table,
110efl_gfx_hint_weight_set(efl_added, 1.0, 0.0),
111efl_pack_table(table, efl_added, 0, 1, 1, 1),
112efl_text_set(efl_added, "Play"),
113efl_event_callback_add(efl_added, EFL_INPUT_EVENT_CLICKED, _play_toggle, NULL));
114
115efl_gfx_entity_size_set(win, EINA_SIZE2D(200, 200));
116}
117
118EFL_MAIN();
119