efl
261 строка · 8.1 Кб
1/*
2* gcc -o button_example_01 button_example_01.c `pkg-config --cflags --libs elementary`
3*/
4#include <Elementary.h>
5
6typedef struct
7{
8Evas_Object *mid;
9Evas_Object *icon_still;
10struct
11{
12Evas_Object *up;
13Evas_Object *down;
14Evas_Object *left;
15Evas_Object *right;
16} cursors;
17} App_Data;
18
19static void
20_btn_cursors_release_cb(void *data, Evas_Object *btn EINA_UNUSED,
21void *ev EINA_UNUSED)
22{
23App_Data *app = data;
24elm_object_part_content_set(app->mid, "icon", app->icon_still);
25app->icon_still = NULL;
26}
27
28static void
29_btn_cursors_move_cb(void *data, Evas_Object *btn, void *ev EINA_UNUSED)
30{
31App_Data *app = data;
32double ax, ay;
33
34if (!app->icon_still)
35{
36Evas_Object *icon;
37app->icon_still = elm_object_content_unset(app->mid);
38evas_object_hide(app->icon_still);
39icon = elm_icon_add(app->mid);
40elm_icon_standard_set(icon, "chat");
41elm_object_part_content_set(app->mid, "icon", icon);
42}
43
44evas_object_size_hint_align_get(app->mid, &ax, &ay);
45if (btn == app->cursors.up)
46{
47ay -= 0.05;
48if (ay < 0.0)
49ay = 0.0;
50}
51else if (btn == app->cursors.down)
52{
53ay += 0.05;
54if (ay > 1.0)
55ay = 1.0;
56}
57else if (btn == app->cursors.left)
58{
59ax -= 0.05;
60if (ax < 0.0)
61ax = 0.0;
62}
63else if (btn == app->cursors.right)
64{
65ax += 0.05;
66if (ax > 1.0)
67ax = 1.0;
68}
69evas_object_size_hint_align_set(app->mid, ax, ay);
70}
71
72static void
73_btn_options_cb(void *data, Evas_Object *btn, void *ev EINA_UNUSED)
74{
75char *ptr;
76double t;
77App_Data *app = data;
78const char *lbl = elm_object_text_get(btn);
79
80ptr = strchr(lbl, ':');
81ptr += 2;
82t = strtod(ptr, NULL);
83
84if (!strncmp(lbl, "Initial", 7))
85{
86elm_button_autorepeat_initial_timeout_set(app->cursors.up, t);
87elm_button_autorepeat_initial_timeout_set(app->cursors.down, t);
88elm_button_autorepeat_initial_timeout_set(app->cursors.left, t);
89elm_button_autorepeat_initial_timeout_set(app->cursors.right, t);
90}
91else if (!strncmp(lbl, "Gap", 3))
92{
93elm_button_autorepeat_gap_timeout_set(app->cursors.up, t);
94elm_button_autorepeat_gap_timeout_set(app->cursors.down, t);
95elm_button_autorepeat_gap_timeout_set(app->cursors.left, t);
96elm_button_autorepeat_gap_timeout_set(app->cursors.right, t);
97}
98}
99
100EAPI_MAIN int
101elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
102{
103Evas_Object *win, *box, *box2, *btn, *icon;
104static App_Data data;
105
106elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
107
108win = elm_win_util_standard_add("Button example", "Button example");
109elm_win_autodel_set(win, EINA_TRUE);
110
111box = elm_box_add(win);
112evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
113elm_win_resize_object_add(win, box);
114evas_object_show(box);
115
116box2 = elm_box_add(win);
117elm_box_horizontal_set(box2, EINA_TRUE);
118evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
119elm_box_pack_end(box, box2);
120evas_object_show(box2);
121
122btn = elm_button_add(win);
123elm_object_text_set(btn, "Initial: 0.0");
124elm_box_pack_end(box2, btn);
125evas_object_show(btn);
126evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
127
128btn = elm_button_add(win);
129elm_object_text_set(btn, "Initial: 1.0");
130elm_box_pack_end(box2, btn);
131evas_object_show(btn);
132evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
133
134btn = elm_button_add(win);
135elm_object_text_set(btn, "Initial: 5.0");
136elm_box_pack_end(box2, btn);
137evas_object_show(btn);
138evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
139
140box2 = elm_box_add(win);
141elm_box_horizontal_set(box2, EINA_TRUE);
142evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
143elm_box_pack_end(box, box2);
144evas_object_show(box2);
145
146btn = elm_button_add(win);
147elm_object_text_set(btn, "Gap: 0.1");
148elm_box_pack_end(box2, btn);
149evas_object_show(btn);
150evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
151
152btn = elm_button_add(win);
153elm_object_text_set(btn, "Gap: 0.5");
154elm_box_pack_end(box2, btn);
155evas_object_show(btn);
156evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
157
158btn = elm_button_add(win);
159elm_object_text_set(btn, "Gap: 1.0");
160elm_box_pack_end(box2, btn);
161evas_object_show(btn);
162evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
163
164btn = elm_button_add(win);
165elm_button_autorepeat_set(btn, EINA_TRUE);
166elm_button_autorepeat_initial_timeout_set(btn, 1.0);
167elm_button_autorepeat_gap_timeout_set(btn, 0.5);
168evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
169evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0);
170elm_box_pack_end(box, btn);
171evas_object_show(btn);
172evas_object_smart_callback_add(btn, "repeated", _btn_cursors_move_cb, &data);
173evas_object_smart_callback_add(btn, "unpressed", _btn_cursors_release_cb,
174&data);
175
176icon = elm_icon_add(win);
177elm_icon_standard_set(icon, "arrow_up");
178elm_object_part_content_set(btn, "icon", icon);
179
180data.cursors.up = btn;
181
182box2 = elm_box_add(win);
183elm_box_horizontal_set(box2, EINA_TRUE);
184evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
185evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
186elm_box_pack_end(box, box2);
187evas_object_show(box2);
188
189btn = elm_button_add(win);
190elm_button_autorepeat_set(btn, EINA_TRUE);
191elm_button_autorepeat_initial_timeout_set(btn, 1.0);
192elm_button_autorepeat_gap_timeout_set(btn, 0.5);
193evas_object_size_hint_weight_set(btn, 0.0, EVAS_HINT_EXPAND);
194evas_object_size_hint_align_set(btn, 0.0, EVAS_HINT_FILL);
195elm_box_pack_end(box2, btn);
196evas_object_show(btn);
197evas_object_smart_callback_add(btn, "repeated", _btn_cursors_move_cb, &data);
198evas_object_smart_callback_add(btn, "unpressed", _btn_cursors_release_cb,
199&data);
200
201icon = elm_icon_add(win);
202elm_icon_standard_set(icon, "arrow_left");
203elm_object_part_content_set(btn, "icon", icon);
204
205data.cursors.left = btn;
206
207btn = elm_button_add(win);
208evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
209elm_box_pack_end(box2, btn);
210evas_object_show(btn);
211
212icon = elm_icon_add(win);
213elm_icon_standard_set(icon, "close");
214elm_object_part_content_set(btn, "icon", icon);
215
216data.mid = btn;
217
218btn = elm_button_add(win);
219elm_button_autorepeat_set(btn, EINA_TRUE);
220elm_button_autorepeat_initial_timeout_set(btn, 1.0);
221elm_button_autorepeat_gap_timeout_set(btn, 0.5);
222evas_object_size_hint_weight_set(btn, 0.0, EVAS_HINT_EXPAND);
223evas_object_size_hint_align_set(btn, 0.0, EVAS_HINT_FILL);
224elm_box_pack_end(box2, btn);
225evas_object_show(btn);
226evas_object_smart_callback_add(btn, "repeated", _btn_cursors_move_cb, &data);
227evas_object_smart_callback_add(btn, "unpressed", _btn_cursors_release_cb,
228&data);
229
230icon = elm_icon_add(win);
231elm_icon_standard_set(icon, "arrow_right");
232elm_object_part_content_set(btn, "icon", icon);
233
234data.cursors.right = btn;
235
236btn = elm_button_add(win);
237elm_button_autorepeat_set(btn, EINA_TRUE);
238elm_button_autorepeat_initial_timeout_set(btn, 1.0);
239elm_button_autorepeat_gap_timeout_set(btn, 0.5);
240evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0);
241evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.0);
242elm_box_pack_end(box, btn);
243evas_object_show(btn);
244evas_object_smart_callback_add(btn, "repeated", _btn_cursors_move_cb, &data);
245evas_object_smart_callback_add(btn, "unpressed", _btn_cursors_release_cb,
246&data);
247
248icon = elm_icon_add(win);
249elm_icon_standard_set(icon, "arrow_down");
250elm_object_part_content_set(btn, "icon", icon);
251
252data.cursors.down = btn;
253
254evas_object_resize(win, 300, 320);
255evas_object_show(win);
256
257elm_run();
258
259return 0;
260}
261ELM_MAIN()
262