efl
191 строка · 6.1 Кб
1#ifdef HAVE_CONFIG_H2# include "elementary_config.h"3#endif4
5#define EFL_UI_WIDGET_PROTECTED6#include <Efl_Ui.h>7#include <Elementary.h>8
9typedef struct Test_Data10{
11Evas_Object *pb1;12Evas_Object *pb2;13Evas_Object *pb3;14Evas_Object *pb4;15Evas_Object *pb5;16Evas_Object *ico;17Evas_Object *btn_start;18Evas_Object *btn_stop;19int loop;20} Test_Data;21
22static void23animate(void *data, const Efl_Event *ev EINA_UNUSED)24{
25Test_Data *td = data;26int loop = td->loop++;27double radius;28
29loop = (loop % 120) < 60 ? (loop % 60) : (60 - (loop % 60));30radius = 3.0 + (loop * 32.0 / 60.0);31radius *= elm_config_scale_get() / elm_app_base_scale_get();32efl_gfx_blur_radius_set(efl_part(td->ico, "shadow"), radius, radius);33}
34
35static void36pulse_start(void *data, const Efl_Event *ev EINA_UNUSED)37{
38Test_Data *td = data;39
40efl_ui_progressbar_infinite_mode_set(td->pb1, EINA_TRUE);41efl_ui_progressbar_infinite_mode_set(td->pb2, EINA_TRUE);42efl_ui_progressbar_infinite_mode_set(td->pb3, EINA_TRUE);43efl_ui_progressbar_infinite_mode_set(td->pb4, EINA_TRUE);44efl_ui_progressbar_infinite_mode_set(td->pb5, EINA_TRUE);45
46efl_ui_widget_disabled_set(td->btn_start, EINA_TRUE);47efl_ui_widget_disabled_set(td->btn_stop, EINA_FALSE);48
49efl_event_callback_add(td->ico, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, animate, td);50}
51
52static void53pulse_stop(void *data, const Efl_Event *ev EINA_UNUSED)54{
55Test_Data *td = data;56
57efl_ui_progressbar_infinite_mode_set(td->pb1, EINA_FALSE);58efl_ui_progressbar_infinite_mode_set(td->pb2, EINA_FALSE);59efl_ui_progressbar_infinite_mode_set(td->pb3, EINA_FALSE);60efl_ui_progressbar_infinite_mode_set(td->pb4, EINA_FALSE);61efl_ui_progressbar_infinite_mode_set(td->pb5, EINA_FALSE);62
63efl_ui_widget_disabled_set(td->btn_start, EINA_FALSE);64efl_ui_widget_disabled_set(td->btn_stop, EINA_TRUE);65
66efl_event_callback_del(td->ico, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, animate, td);67}
68
69static void70_delete_cb(void *data, const Efl_Event *ev)71{
72Test_Data *td = data;73
74pulse_stop(td, NULL);75efl_unref(ev->object);76free(td);77}
78
79void
80test_part_shadow(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)81{
82Evas_Object *win, *pb, *bx, *hbx, *bt, *bt_bx, *ic, *shadow;83char buf[PATH_MAX];84Test_Data *td;85char loops[32];86
87td = calloc(1, sizeof(*td));88
89win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),90efl_ui_win_name_set(efl_added, "shadow"),91efl_text_set(efl_added, "Shadow effects"));92efl_event_callback_add(win, EFL_UI_WIN_EVENT_DELETE_REQUEST, _delete_cb, td);93
94bx = efl_add(EFL_UI_BOX_CLASS, win);95efl_content_set(win, bx);96
97pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win);98efl_gfx_hint_weight_set(pb, EFL_GFX_HINT_EXPAND, 0);99efl_pack(bx, pb);100td->pb1 = pb;101
102// A black drop-down shadow103shadow = efl_ref(efl_part(pb, "shadow"));104efl_gfx_color_set(shadow, 0, 0, 0, 255);105efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(1));106efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(8), ELM_SCALE_SIZE(8));107efl_gfx_blur_offset_set(shadow, ELM_SCALE_SIZE(5), ELM_SCALE_SIZE(5));108efl_unref(shadow);109
110ic = efl_add(EFL_UI_IMAGE_CLASS, win);111snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());112efl_file_simple_load(ic, buf, NULL);113efl_pack(bx, ic);114td->ico = ic;115
116// A red glow117shadow = efl_ref(efl_part(ic, "shadow"));118efl_gfx_color_set(shadow, 255, 0, 0, 255);119efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(3));120efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(5), ELM_SCALE_SIZE(5));121efl_unref(shadow);122
123pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win);124efl_gfx_hint_weight_set(pb, EFL_GFX_HINT_EXPAND, 0);125efl_pack(bx, pb);126td->pb4 = pb;127
128// A custom 3D shadow effect129static const char *filter_code =130"for i = 1,loops,1 do\n"131" local offset = i - loops - 1\n"132" local alpha = i * 128/loops\n"133" blend { ox = offset, oy = offset, color = color(255, 255, 255, alpha) }\n"134"end"135;136
137sprintf(loops, "%f", (double) ELM_SCALE_SIZE(12));138shadow = efl_ref(efl_part(pb, "shadow"));139efl_gfx_filter_data_set(shadow, "loops", loops, EINA_TRUE);140efl_gfx_filter_program_set(shadow, filter_code, "custom");141efl_unref(shadow);142
143hbx = efl_add(EFL_UI_BOX_CLASS, win);144efl_ui_layout_orientation_set(hbx, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);145efl_gfx_hint_weight_set(hbx, EFL_GFX_HINT_EXPAND, 0);146efl_pack(bx, hbx);147
148// FIXME: Needs wheel progressbar class149pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win,150efl_ui_widget_style_set(efl_added, "wheel"));151efl_pack(hbx, pb);152td->pb2 = pb;153
154// A cyan glow155shadow = efl_ref(efl_part(pb, "shadow"));156efl_gfx_color_set(shadow, 0, 255, 255, 255);157efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(5));158efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(8), ELM_SCALE_SIZE(8));159efl_unref(shadow);160
161pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win,162efl_ui_widget_style_set(efl_added, "wheel"));163efl_pack(hbx, pb);164td->pb3 = pb;165
166// A black drop-down shadow167shadow = efl_ref(efl_part(pb, "shadow"));168efl_gfx_color_set(shadow, 0, 0, 0, 255);169efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(1));170efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(8), ELM_SCALE_SIZE(8));171efl_gfx_blur_offset_set(shadow, ELM_SCALE_SIZE(6), ELM_SCALE_SIZE(6));172efl_unref(shadow);173
174bt_bx = efl_add(EFL_UI_BOX_CLASS, win);175efl_ui_layout_orientation_set(bt_bx, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);176efl_gfx_hint_weight_set(bt_bx, EFL_GFX_HINT_EXPAND, 0);177efl_pack(bx, bt_bx);178
179bt = efl_add(EFL_UI_BUTTON_CLASS, win, efl_text_set(efl_added, "Start"));180efl_event_callback_add(bt, EFL_INPUT_EVENT_CLICKED, pulse_start, td);181efl_pack(bt_bx, bt);182td->btn_start = bt;183
184bt = efl_add(EFL_UI_BUTTON_CLASS, win, efl_text_set(efl_added, "Stop"));185efl_event_callback_add(bt, EFL_INPUT_EVENT_CLICKED, pulse_stop, td);186efl_ui_widget_disabled_set(bt, EINA_TRUE);187efl_pack(bt_bx, bt);188td->btn_stop = bt;189
190efl_gfx_entity_size_set(win, EINA_SIZE2D(240, 320));191}
192