efl
252 строки · 7.4 Кб
1#include "elementary_config.h"2#include <Elementary.h>3
4static void5_dismissed_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,6void *event_info EINA_UNUSED)7{
8printf("hover dismissed callback is called!\n");9}
10
11static void12my_hover_bt(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)13{
14Evas_Object *hv = data;15
16evas_object_show(hv);17}
18
19static void20_dismiss_hover(void *data, Evas_Object *obj EINA_UNUSED,21void *event_info EINA_UNUSED)22{
23Evas_Object *hv = data;24
25elm_hover_dismiss(hv);26}
27
28void
29test_hover(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)30{
31Evas_Object *win, *bx, *bt, *hv, *ic;32char buf[PATH_MAX];33
34win = elm_win_util_standard_add("hover", "Hover");35elm_win_autodel_set(win, EINA_TRUE);36
37bx = elm_box_add(win);38evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);39elm_win_resize_object_add(win, bx);40evas_object_show(bx);41
42hv = elm_hover_add(win);43evas_object_smart_callback_add(hv, "dismissed", _dismissed_cb, NULL);44
45bt = elm_button_add(win);46elm_object_text_set(bt, "Button");47evas_object_smart_callback_add(bt, "clicked", my_hover_bt, hv);48elm_box_pack_end(bx, bt);49evas_object_show(bt);50elm_hover_parent_set(hv, win);51elm_hover_target_set(hv, bt);52
53bt = elm_button_add(win);54elm_object_text_set(bt, "Popup");55elm_object_part_content_set(hv, "middle", bt);56evas_object_show(bt);57
58bx = elm_box_add(win);59
60ic = elm_icon_add(win);61snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());62elm_image_file_set(ic, buf, NULL);63elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);64elm_box_pack_end(bx, ic);65evas_object_show(ic);66
67bt = elm_button_add(win);68elm_object_text_set(bt, "Top 1");69evas_object_smart_callback_add(bt, "clicked", _dismiss_hover, hv);70elm_box_pack_end(bx, bt);71evas_object_show(bt);72bt = elm_button_add(win);73elm_object_text_set(bt, "Top 2");74elm_box_pack_end(bx, bt);75evas_object_show(bt);76bt = elm_button_add(win);77elm_object_text_set(bt, "Top 3");78elm_box_pack_end(bx, bt);79evas_object_show(bt);80
81evas_object_show(bx);82elm_object_part_content_set(hv, "top", bx);83
84bt = elm_button_add(win);85elm_object_text_set(bt, "Bottom");86elm_object_part_content_set(hv, "bottom", bt);87evas_object_show(bt);88
89bt = elm_button_add(win);90elm_object_text_set(bt, "Left");91elm_object_part_content_set(hv, "left", bt);92evas_object_show(bt);93
94bt = elm_button_add(win);95elm_object_text_set(bt, "Right");96elm_object_part_content_set(hv, "right", bt);97evas_object_show(bt);98
99evas_object_resize(win, 440 * elm_config_scale_get(),100440 * elm_config_scale_get());101evas_object_show(win);102}
103
104void
105test_hover2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)106{
107Evas_Object *win, *bx, *bt, *hv, *ic;108char buf[PATH_MAX];109
110win = elm_win_util_standard_add("hover2", "Hover 2");111elm_win_autodel_set(win, EINA_TRUE);112
113bx = elm_box_add(win);114evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);115elm_win_resize_object_add(win, bx);116evas_object_show(bx);117
118hv = elm_hover_add(win);119elm_object_style_set(hv, "popout");120
121bt = elm_button_add(win);122elm_object_text_set(bt, "Button");123evas_object_smart_callback_add(bt, "clicked", my_hover_bt, hv);124elm_box_pack_end(bx, bt);125evas_object_show(bt);126elm_hover_parent_set(hv, win);127elm_hover_target_set(hv, bt);128
129bt = elm_button_add(win);130elm_object_text_set(bt, "Popup");131elm_object_part_content_set(hv, "middle", bt);132evas_object_show(bt);133
134bx = elm_box_add(win);135
136ic = elm_icon_add(win);137snprintf(buf, sizeof(buf), "%s/images/logo_small.png", elm_app_data_dir_get());138elm_image_file_set(ic, buf, NULL);139elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);140elm_box_pack_end(bx, ic);141evas_object_show(ic);142bt = elm_button_add(win);143elm_object_text_set(bt, "Top 1");144elm_box_pack_end(bx, bt);145evas_object_show(bt);146bt = elm_button_add(win);147elm_object_text_set(bt, "Top 2");148elm_box_pack_end(bx, bt);149evas_object_show(bt);150bt = elm_button_add(win);151elm_object_text_set(bt, "Top 3");152elm_box_pack_end(bx, bt);153evas_object_show(bt);154evas_object_show(bx);155elm_object_part_content_set(hv, "top", bx);156
157bt = elm_button_add(win);158elm_object_text_set(bt, "Bot");159elm_object_part_content_set(hv, "bottom", bt);160evas_object_show(bt);161
162bt = elm_button_add(win);163elm_object_text_set(bt, "Left");164elm_object_part_content_set(hv, "left", bt);165evas_object_show(bt);166
167bt = elm_button_add(win);168elm_object_text_set(bt, "Right");169elm_object_part_content_set(hv, "right", bt);170evas_object_show(bt);171
172evas_object_resize(win, 440 * elm_config_scale_get(),173440 * elm_config_scale_get());174evas_object_show(win);175}
176
177static void178_hover_show_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,179void *event_info)180{
181Evas_Object *fake_obj = evas_object_data_get(obj, "fake_obj");182if (!fake_obj) return;183
184Evas_Event_Mouse_Down *ev = event_info;185printf("position x: %d, y: %d \n", ev->canvas.x, ev->canvas.y);186
187evas_object_move(fake_obj, ev->canvas.x, ev->canvas.y);188evas_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*/
197void
198test_hover3(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,199void *event_info EINA_UNUSED)200{
201Evas_Object *win, *fake_obj, *bx, *bt, *hv, *ic, *rect;202char buf[PATH_MAX];203
204win = elm_win_util_standard_add("hover3", "Hover 3");205elm_win_focus_highlight_enabled_set(win, EINA_TRUE);206elm_win_autodel_set(win, EINA_TRUE);207
208rect = evas_object_rectangle_add(evas_object_evas_get(win));209evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);210elm_win_resize_object_add(win, rect);211evas_object_color_set(rect, 0, 0, 0, 0);212evas_object_show(rect);213
214// fake object to move hover object as we wish215fake_obj = elm_box_add(win);216evas_object_data_set(rect, "fake_obj", fake_obj);217
218hv = elm_hover_add(win);219elm_hover_parent_set(hv, win);220elm_hover_target_set(hv, fake_obj);221
222evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN,223_hover_show_cb, hv);224
225bx = elm_box_add(win);226elm_object_part_content_set(hv, "smart", bx);227evas_object_show(bx);228
229bt = elm_button_add(win);230elm_object_text_set(bt, "Button");231elm_box_pack_end(bx, bt);232evas_object_show(bt);233evas_object_smart_callback_add(bt, "clicked", _dismiss_hover, hv);234
235ic = elm_icon_add(win);236snprintf(buf, sizeof(buf), "%s/images/logo_small.png",237elm_app_data_dir_get());238elm_image_file_set(ic, buf, NULL);239elm_image_resizable_set(ic, EINA_FALSE, EINA_FALSE);240elm_box_pack_end(bx, ic);241evas_object_show(ic);242
243bt = elm_button_add(win);244elm_object_text_set(bt, "Close");245elm_box_pack_end(bx, bt);246evas_object_show(bt);247evas_object_smart_callback_add(bt, "clicked", _dismiss_hover, hv);248
249evas_object_resize(win, 440 * elm_config_scale_get(),250440 * elm_config_scale_get());251evas_object_show(win);252}
253