efl

Форк
0
/
button_example_01.c 
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

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
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
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
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
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

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

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

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

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