efl

Форк
0
/
test_part_shadow.c 
191 строка · 6.1 Кб
1
#ifdef HAVE_CONFIG_H
2
# include "elementary_config.h"
3
#endif
4

5
#define EFL_UI_WIDGET_PROTECTED
6
#include <Efl_Ui.h>
7
#include <Elementary.h>
8

9
typedef struct Test_Data
10
{
11
   Evas_Object *pb1;
12
   Evas_Object *pb2;
13
   Evas_Object *pb3;
14
   Evas_Object *pb4;
15
   Evas_Object *pb5;
16
   Evas_Object *ico;
17
   Evas_Object *btn_start;
18
   Evas_Object *btn_stop;
19
   int loop;
20
} Test_Data;
21

22
static void
23
animate(void *data, const Efl_Event *ev EINA_UNUSED)
24
{
25
   Test_Data *td = data;
26
   int loop = td->loop++;
27
   double radius;
28

29
   loop = (loop % 120) < 60 ? (loop % 60) : (60 - (loop % 60));
30
   radius = 3.0 + (loop * 32.0 / 60.0);
31
   radius *= elm_config_scale_get() / elm_app_base_scale_get();
32
   efl_gfx_blur_radius_set(efl_part(td->ico, "shadow"), radius, radius);
33
}
34

35
static void
36
pulse_start(void *data, const Efl_Event *ev EINA_UNUSED)
37
{
38
   Test_Data *td = data;
39

40
   efl_ui_progressbar_infinite_mode_set(td->pb1, EINA_TRUE);
41
   efl_ui_progressbar_infinite_mode_set(td->pb2, EINA_TRUE);
42
   efl_ui_progressbar_infinite_mode_set(td->pb3, EINA_TRUE);
43
   efl_ui_progressbar_infinite_mode_set(td->pb4, EINA_TRUE);
44
   efl_ui_progressbar_infinite_mode_set(td->pb5, EINA_TRUE);
45

46
   efl_ui_widget_disabled_set(td->btn_start, EINA_TRUE);
47
   efl_ui_widget_disabled_set(td->btn_stop, EINA_FALSE);
48

49
   efl_event_callback_add(td->ico, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, animate, td);
50
}
51

52
static void
53
pulse_stop(void *data, const Efl_Event *ev EINA_UNUSED)
54
{
55
   Test_Data *td = data;
56

57
   efl_ui_progressbar_infinite_mode_set(td->pb1, EINA_FALSE);
58
   efl_ui_progressbar_infinite_mode_set(td->pb2, EINA_FALSE);
59
   efl_ui_progressbar_infinite_mode_set(td->pb3, EINA_FALSE);
60
   efl_ui_progressbar_infinite_mode_set(td->pb4, EINA_FALSE);
61
   efl_ui_progressbar_infinite_mode_set(td->pb5, EINA_FALSE);
62

63
   efl_ui_widget_disabled_set(td->btn_start, EINA_FALSE);
64
   efl_ui_widget_disabled_set(td->btn_stop, EINA_TRUE);
65

66
   efl_event_callback_del(td->ico, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, animate, td);
67
}
68

69
static void
70
_delete_cb(void *data, const Efl_Event *ev)
71
{
72
   Test_Data *td = data;
73

74
   pulse_stop(td, NULL);
75
   efl_unref(ev->object);
76
   free(td);
77
}
78

79
void
80
test_part_shadow(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
81
{
82
   Evas_Object *win, *pb, *bx, *hbx, *bt, *bt_bx, *ic, *shadow;
83
   char buf[PATH_MAX];
84
   Test_Data *td;
85
   char loops[32];
86

87
   td = calloc(1, sizeof(*td));
88

89
   win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
90
                 efl_ui_win_name_set(efl_added, "shadow"),
91
                 efl_text_set(efl_added, "Shadow effects"));
92
   efl_event_callback_add(win, EFL_UI_WIN_EVENT_DELETE_REQUEST, _delete_cb, td);
93

94
   bx = efl_add(EFL_UI_BOX_CLASS, win);
95
   efl_content_set(win, bx);
96

97
   pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win);
98
   efl_gfx_hint_weight_set(pb, EFL_GFX_HINT_EXPAND, 0);
99
   efl_pack(bx, pb);
100
   td->pb1 = pb;
101

102
   // A black drop-down shadow
103
   shadow = efl_ref(efl_part(pb, "shadow"));
104
   efl_gfx_color_set(shadow, 0, 0, 0, 255);
105
   efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(1));
106
   efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(8), ELM_SCALE_SIZE(8));
107
   efl_gfx_blur_offset_set(shadow, ELM_SCALE_SIZE(5), ELM_SCALE_SIZE(5));
108
   efl_unref(shadow);
109

110
   ic = efl_add(EFL_UI_IMAGE_CLASS, win);
111
   snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());
112
   efl_file_simple_load(ic, buf, NULL);
113
   efl_pack(bx, ic);
114
   td->ico = ic;
115

116
   // A red glow
117
   shadow = efl_ref(efl_part(ic, "shadow"));
118
   efl_gfx_color_set(shadow, 255, 0, 0, 255);
119
   efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(3));
120
   efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(5), ELM_SCALE_SIZE(5));
121
   efl_unref(shadow);
122

123
   pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win);
124
   efl_gfx_hint_weight_set(pb, EFL_GFX_HINT_EXPAND, 0);
125
   efl_pack(bx, pb);
126
   td->pb4 = pb;
127

128
   // A custom 3D shadow effect
129
   static 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

137
   sprintf(loops, "%f", (double) ELM_SCALE_SIZE(12));
138
   shadow = efl_ref(efl_part(pb, "shadow"));
139
   efl_gfx_filter_data_set(shadow, "loops", loops, EINA_TRUE);
140
   efl_gfx_filter_program_set(shadow, filter_code, "custom");
141
   efl_unref(shadow);
142

143
   hbx = efl_add(EFL_UI_BOX_CLASS, win);
144
   efl_ui_layout_orientation_set(hbx, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
145
   efl_gfx_hint_weight_set(hbx, EFL_GFX_HINT_EXPAND, 0);
146
   efl_pack(bx, hbx);
147

148
   // FIXME: Needs wheel progressbar class
149
   pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win,
150
                efl_ui_widget_style_set(efl_added, "wheel"));
151
   efl_pack(hbx, pb);
152
   td->pb2 = pb;
153

154
   // A cyan glow
155
   shadow = efl_ref(efl_part(pb, "shadow"));
156
   efl_gfx_color_set(shadow, 0, 255, 255, 255);
157
   efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(5));
158
   efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(8), ELM_SCALE_SIZE(8));
159
   efl_unref(shadow);
160

161
   pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win,
162
                efl_ui_widget_style_set(efl_added, "wheel"));
163
   efl_pack(hbx, pb);
164
   td->pb3 = pb;
165

166
   // A black drop-down shadow
167
   shadow = efl_ref(efl_part(pb, "shadow"));
168
   efl_gfx_color_set(shadow, 0, 0, 0, 255);
169
   efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(1));
170
   efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(8), ELM_SCALE_SIZE(8));
171
   efl_gfx_blur_offset_set(shadow, ELM_SCALE_SIZE(6), ELM_SCALE_SIZE(6));
172
   efl_unref(shadow);
173

174
   bt_bx = efl_add(EFL_UI_BOX_CLASS, win);
175
   efl_ui_layout_orientation_set(bt_bx, EFL_UI_LAYOUT_ORIENTATION_HORIZONTAL);
176
   efl_gfx_hint_weight_set(bt_bx, EFL_GFX_HINT_EXPAND, 0);
177
   efl_pack(bx, bt_bx);
178

179
   bt = efl_add(EFL_UI_BUTTON_CLASS, win, efl_text_set(efl_added, "Start"));
180
   efl_event_callback_add(bt, EFL_INPUT_EVENT_CLICKED, pulse_start, td);
181
   efl_pack(bt_bx, bt);
182
   td->btn_start = bt;
183

184
   bt = efl_add(EFL_UI_BUTTON_CLASS, win, efl_text_set(efl_added, "Stop"));
185
   efl_event_callback_add(bt, EFL_INPUT_EVENT_CLICKED, pulse_stop, td);
186
   efl_ui_widget_disabled_set(bt, EINA_TRUE);
187
   efl_pack(bt_bx, bt);
188
   td->btn_stop = bt;
189

190
   efl_gfx_entity_size_set(win, EINA_SIZE2D(240, 320));
191
}
192

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

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

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

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