efl

Форк
0
/
test_hover.c 
252 строки · 7.4 Кб
1
#include "elementary_config.h"
2
#include <Elementary.h>
3

4
static void
5
_dismissed_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
6
              void *event_info EINA_UNUSED)
7
{
8
   printf("hover dismissed callback is called!\n");
9
}
10

11
static void
12
my_hover_bt(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
13
{
14
   Evas_Object *hv = data;
15

16
   evas_object_show(hv);
17
}
18

19
static void
20
_dismiss_hover(void *data, Evas_Object *obj EINA_UNUSED,
21
               void *event_info EINA_UNUSED)
22
{
23
   Evas_Object *hv = data;
24

25
   elm_hover_dismiss(hv);
26
}
27

28
void
29
test_hover(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
30
{
31
   Evas_Object *win, *bx, *bt, *hv, *ic;
32
   char buf[PATH_MAX];
33

34
   win = elm_win_util_standard_add("hover", "Hover");
35
   elm_win_autodel_set(win, EINA_TRUE);
36

37
   bx = elm_box_add(win);
38
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
39
   elm_win_resize_object_add(win, bx);
40
   evas_object_show(bx);
41

42
   hv = elm_hover_add(win);
43
   evas_object_smart_callback_add(hv, "dismissed", _dismissed_cb, NULL);
44

45
   bt = elm_button_add(win);
46
   elm_object_text_set(bt, "Button");
47
   evas_object_smart_callback_add(bt, "clicked", my_hover_bt, hv);
48
   elm_box_pack_end(bx, bt);
49
   evas_object_show(bt);
50
   elm_hover_parent_set(hv, win);
51
   elm_hover_target_set(hv, bt);
52

53
   bt = elm_button_add(win);
54
   elm_object_text_set(bt, "Popup");
55
   elm_object_part_content_set(hv, "middle", bt);
56
   evas_object_show(bt);
57

58
   bx = elm_box_add(win);
59

60
   ic = elm_icon_add(win);
61
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
62
   elm_image_file_set(ic, buf, NULL);
63
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
64
   elm_box_pack_end(bx, ic);
65
   evas_object_show(ic);
66

67
   bt = elm_button_add(win);
68
   elm_object_text_set(bt, "Top 1");
69
   evas_object_smart_callback_add(bt, "clicked", _dismiss_hover, hv);
70
   elm_box_pack_end(bx, bt);
71
   evas_object_show(bt);
72
   bt = elm_button_add(win);
73
   elm_object_text_set(bt, "Top 2");
74
   elm_box_pack_end(bx, bt);
75
   evas_object_show(bt);
76
   bt = elm_button_add(win);
77
   elm_object_text_set(bt, "Top 3");
78
   elm_box_pack_end(bx, bt);
79
   evas_object_show(bt);
80

81
   evas_object_show(bx);
82
   elm_object_part_content_set(hv, "top", bx);
83

84
   bt = elm_button_add(win);
85
   elm_object_text_set(bt, "Bottom");
86
   elm_object_part_content_set(hv, "bottom", bt);
87
   evas_object_show(bt);
88

89
   bt = elm_button_add(win);
90
   elm_object_text_set(bt, "Left");
91
   elm_object_part_content_set(hv, "left", bt);
92
   evas_object_show(bt);
93

94
   bt = elm_button_add(win);
95
   elm_object_text_set(bt, "Right");
96
   elm_object_part_content_set(hv, "right", bt);
97
   evas_object_show(bt);
98

99
   evas_object_resize(win, 440 * elm_config_scale_get(),
100
                           440 * elm_config_scale_get());
101
   evas_object_show(win);
102
}
103

104
void
105
test_hover2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
106
{
107
   Evas_Object *win, *bx, *bt, *hv, *ic;
108
   char buf[PATH_MAX];
109

110
   win = elm_win_util_standard_add("hover2", "Hover 2");
111
   elm_win_autodel_set(win, EINA_TRUE);
112

113
   bx = elm_box_add(win);
114
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
115
   elm_win_resize_object_add(win, bx);
116
   evas_object_show(bx);
117

118
   hv = elm_hover_add(win);
119
   elm_object_style_set(hv, "popout");
120

121
   bt = elm_button_add(win);
122
   elm_object_text_set(bt, "Button");
123
   evas_object_smart_callback_add(bt, "clicked", my_hover_bt, hv);
124
   elm_box_pack_end(bx, bt);
125
   evas_object_show(bt);
126
   elm_hover_parent_set(hv, win);
127
   elm_hover_target_set(hv, bt);
128

129
   bt = elm_button_add(win);
130
   elm_object_text_set(bt, "Popup");
131
   elm_object_part_content_set(hv, "middle", bt);
132
   evas_object_show(bt);
133

134
   bx = elm_box_add(win);
135

136
   ic = elm_icon_add(win);
137
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());
138
   elm_image_file_set(ic, buf, NULL);
139
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
140
   elm_box_pack_end(bx, ic);
141
   evas_object_show(ic);
142
   bt = elm_button_add(win);
143
   elm_object_text_set(bt, "Top 1");
144
   elm_box_pack_end(bx, bt);
145
   evas_object_show(bt);
146
   bt = elm_button_add(win);
147
   elm_object_text_set(bt, "Top 2");
148
   elm_box_pack_end(bx, bt);
149
   evas_object_show(bt);
150
   bt = elm_button_add(win);
151
   elm_object_text_set(bt, "Top 3");
152
   elm_box_pack_end(bx, bt);
153
   evas_object_show(bt);
154
   evas_object_show(bx);
155
   elm_object_part_content_set(hv, "top", bx);
156

157
   bt = elm_button_add(win);
158
   elm_object_text_set(bt, "Bot");
159
   elm_object_part_content_set(hv, "bottom", bt);
160
   evas_object_show(bt);
161

162
   bt = elm_button_add(win);
163
   elm_object_text_set(bt, "Left");
164
   elm_object_part_content_set(hv, "left", bt);
165
   evas_object_show(bt);
166

167
   bt = elm_button_add(win);
168
   elm_object_text_set(bt, "Right");
169
   elm_object_part_content_set(hv, "right", bt);
170
   evas_object_show(bt);
171

172
   evas_object_resize(win, 440 * elm_config_scale_get(),
173
                           440 * elm_config_scale_get());
174
   evas_object_show(win);
175
}
176

177
static void
178
_hover_show_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
179
               void *event_info)
180
{
181
   Evas_Object *fake_obj = evas_object_data_get(obj, "fake_obj");
182
   if (!fake_obj) return;
183

184
   Evas_Event_Mouse_Down *ev = event_info;
185
   printf("position x: %d, y: %d \n", ev->canvas.x, ev->canvas.y);
186

187
   evas_object_move(fake_obj, ev->canvas.x, ev->canvas.y);
188
   evas_object_show(data);
189
}
190

191
/*
192
 * hover acts like elm_menu but it has all the hover features such as:
193
 * 1. positioning: left, top-left, top, top-right, right, bottom-right, bottom,
194
 *                 bottom-left, middle
195
 * 2. content: one can set any object object as hover content
196
 */
197
void
198
test_hover3(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
199
            void *event_info EINA_UNUSED)
200
{
201
   Evas_Object *win, *fake_obj, *bx, *bt, *hv, *ic, *rect;
202
   char buf[PATH_MAX];
203

204
   win = elm_win_util_standard_add("hover3", "Hover 3");
205
   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
206
   elm_win_autodel_set(win, EINA_TRUE);
207

208
   rect = evas_object_rectangle_add(evas_object_evas_get(win));
209
   evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
210
   elm_win_resize_object_add(win, rect);
211
   evas_object_color_set(rect, 0, 0, 0, 0);
212
   evas_object_show(rect);
213

214
   // fake object to move hover object as we wish
215
   fake_obj = elm_box_add(win);
216
   evas_object_data_set(rect, "fake_obj", fake_obj);
217

218
   hv = elm_hover_add(win);
219
   elm_hover_parent_set(hv, win);
220
   elm_hover_target_set(hv, fake_obj);
221

222
   evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN,
223
                                  _hover_show_cb, hv);
224

225
   bx = elm_box_add(win);
226
   elm_object_part_content_set(hv, "smart", bx);
227
   evas_object_show(bx);
228

229
   bt = elm_button_add(win);
230
   elm_object_text_set(bt, "Button");
231
   elm_box_pack_end(bx, bt);
232
   evas_object_show(bt);
233
   evas_object_smart_callback_add(bt, "clicked", _dismiss_hover, hv);
234

235
   ic = elm_icon_add(win);
236
   snprintf(buf, sizeof(buf), "%s/images/logo_small.png",
237
            elm_app_data_dir_get());
238
   elm_image_file_set(ic, buf, NULL);
239
   elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);
240
   elm_box_pack_end(bx, ic);
241
   evas_object_show(ic);
242

243
   bt = elm_button_add(win);
244
   elm_object_text_set(bt, "Close");
245
   elm_box_pack_end(bx, bt);
246
   evas_object_show(bt);
247
   evas_object_smart_callback_add(bt, "clicked", _dismiss_hover, hv);
248

249
   evas_object_resize(win, 440 * elm_config_scale_get(),
250
                           440 * elm_config_scale_get());
251
   evas_object_show(win);
252
}
253

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

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

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

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