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