1 #include "test.h"
2 #ifdef HAVE_CONFIG_H
3 # include "elementary_config.h"
4 #endif
5
6 #include <Efl_Ui.h>
7 #include <Elementary.h>
8
9 #define CR 100
10
11 #define TEST_UI_TEXTPATH_LONG_TEXT "This text follows the path which you defined. This is a <long> text designed to make it ellipsis."
12 #define TEST_UI_TEXTPATH_SHORT_TEXT "This text is short."
13
14 static Evas_Object *angle_sld, *slice_sld, *dir_chk;
15 static int path_type;
16
17 static void
_ellipsis_changed_cb(void * data,const Efl_Event * event)18 _ellipsis_changed_cb(void *data, const Efl_Event *event)
19 {
20 Evas_Object *txtpath = data;
21 efl_ui_textpath_ellipsis_set(txtpath, elm_check_state_get(event->object));
22 }
23
24 static void
_direction_changed_cb(void * data,const Efl_Event * event)25 _direction_changed_cb(void *data, const Efl_Event *event)
26 {
27 Evas_Object *txtpath = data;
28 int angle = elm_slider_value_get(angle_sld);
29 Eina_Bool val = elm_check_selected_get(event->object);
30 Efl_Ui_Textpath_Direction dir = val ? EFL_UI_TEXTPATH_DIRECTION_CW :
31 EFL_UI_TEXTPATH_DIRECTION_CCW;
32 efl_ui_textpath_circular_set(txtpath, CR, angle, dir);
33 }
34
35 static void
_angle_changed_cb(void * data,const Efl_Event * event)36 _angle_changed_cb(void *data, const Efl_Event *event)
37 {
38 Evas_Object *txtpath = data;
39 int angle = elm_slider_value_get(event->object);
40 printf("angle: %d\n", angle);
41 Eina_Bool val = elm_check_selected_get(dir_chk);
42 Efl_Ui_Textpath_Direction dir = val ? EFL_UI_TEXTPATH_DIRECTION_CW :
43 EFL_UI_TEXTPATH_DIRECTION_CCW;
44 efl_ui_textpath_circular_set(txtpath, CR, angle, dir);
45 }
46
47 static void
_short_text_changed_cb(void * data,const Efl_Event * event)48 _short_text_changed_cb(void *data, const Efl_Event *event)
49 {
50 Evas_Object *txtpath = data;
51 Eina_Bool val = elm_check_selected_get(event->object);
52
53 if (val)
54 efl_text_set(txtpath, TEST_UI_TEXTPATH_SHORT_TEXT);
55 else
56 efl_text_set(txtpath, TEST_UI_TEXTPATH_LONG_TEXT);
57 }
58
59 static char *user_style = "DEFAULT='font_size=16 color=#F00 underline=on underline_color=#00ffff'";
60
61 static void
_user_style_changed_cb(void * data,const Efl_Event * event)62 _user_style_changed_cb(void *data, const Efl_Event *event)
63 {
64 Evas_Object *txtpath = data;
65 Eina_Bool val = elm_check_selected_get(event->object);
66
67 if (val)
68 elm_textpath_text_user_style_set(txtpath, user_style);
69 else
70 elm_textpath_text_user_style_set(txtpath, NULL);
71 }
72
73 static void
_change_shape_cb(void * data,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)74 _change_shape_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
75 {
76 Evas_Object *txtpath = data;
77
78 efl_gfx_path_reset(txtpath);
79 path_type = (path_type + 1) % 2;
80 if (path_type == 1)
81 {
82 efl_gfx_path_append_move_to(txtpath, 20, 300);
83 efl_gfx_path_append_cubic_to(txtpath, 80, 80, 240, 270, 300, 20);
84 }
85 else
86 {
87 int angle = elm_slider_value_get(angle_sld);
88 Eina_Bool val = elm_check_selected_get(dir_chk);
89 Efl_Ui_Textpath_Direction dir = val ? EFL_UI_TEXTPATH_DIRECTION_CW :
90 EFL_UI_TEXTPATH_DIRECTION_CCW;
91 efl_ui_textpath_circular_set(txtpath, CR, angle, dir);
92 }
93 }
94
95 static void
_slice_no_changed_cb(void * data,const Efl_Event * event)96 _slice_no_changed_cb(void *data, const Efl_Event *event)
97 {
98 Evas_Object *txtpath = data;
99 int slice_no = elm_slider_value_get(event->object);
100 printf("Slice no: %d\n", slice_no);
101 efl_ui_textpath_slice_number_set(txtpath, slice_no);
102 }
103
104 void
test_ui_textpath(void * data EINA_UNUSED,Evas_Object * obj EINA_UNUSED,void * event_info EINA_UNUSED)105 test_ui_textpath(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
106 {
107 Evas_Object *win, *txtpath, *box, *hbox, *chk, *sld, *btn;
108
109 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
110 win = elm_win_util_standard_add("efl.ui.textpath", "TextPath test");
111 elm_win_autodel_set(win, EINA_TRUE);
112
113 box = elm_box_add(win);
114 elm_box_horizontal_set(box, EINA_FALSE);
115 efl_gfx_hint_weight_set(box, EFL_GFX_HINT_EXPAND, EFL_GFX_HINT_EXPAND);
116 efl_gfx_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
117 efl_gfx_entity_visible_set(box, EINA_TRUE);
118
119 txtpath = efl_add(EFL_UI_TEXTPATH_CLASS, win);
120 elm_box_pack_end(box, txtpath);
121
122 efl_text_set(txtpath, TEST_UI_TEXTPATH_LONG_TEXT);
123
124 efl_ui_textpath_circular_set(txtpath, CR, 0, EFL_UI_TEXTPATH_DIRECTION_CCW);
125 efl_gfx_entity_visible_set(txtpath, EINA_TRUE);
126 path_type = 0;
127
128 hbox = elm_box_add(win);
129 elm_box_horizontal_set(hbox, EINA_TRUE);
130 efl_gfx_hint_weight_set(hbox, EFL_GFX_HINT_EXPAND, EFL_GFX_HINT_EXPAND);
131 efl_gfx_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
132 efl_gfx_entity_visible_set(hbox, EINA_TRUE);
133 elm_box_pack_end(box, hbox);
134
135 chk = efl_add(EFL_UI_CHECK_CLASS, win);
136 efl_text_set(chk, "Ellipsis");
137 elm_check_state_set(chk, efl_ui_textpath_ellipsis_get(txtpath));
138 efl_event_callback_add(chk, EFL_UI_EVENT_SELECTED_CHANGED, _ellipsis_changed_cb, txtpath);
139 elm_box_pack_end(hbox, chk);
140 efl_gfx_entity_visible_set(chk, EINA_TRUE);
141
142 chk = efl_add(EFL_UI_CHECK_CLASS, win);
143 efl_text_set(chk, "Clockwise");
144 efl_event_callback_add(chk, EFL_UI_EVENT_SELECTED_CHANGED, _direction_changed_cb, txtpath);
145 elm_box_pack_end(hbox, chk);
146 efl_gfx_entity_visible_set(chk, EINA_TRUE);
147 dir_chk = chk;
148
149 chk = efl_add(EFL_UI_CHECK_CLASS, win);
150 efl_text_set(chk, "Short text");
151 efl_event_callback_add(chk, EFL_UI_EVENT_SELECTED_CHANGED, _short_text_changed_cb, txtpath);
152 elm_box_pack_end(hbox, chk);
153 efl_gfx_entity_visible_set(chk, EINA_TRUE);
154
155 chk = efl_add(EFL_UI_CHECK_CLASS, win);
156 efl_text_set(chk, "User style");
157 efl_event_callback_add(chk, EFL_UI_EVENT_SELECTED_CHANGED, _user_style_changed_cb, txtpath);
158 elm_box_pack_end(hbox, chk);
159 efl_gfx_entity_visible_set(chk, EINA_TRUE);
160
161 hbox = elm_box_add(win);
162 elm_box_horizontal_set(hbox, EINA_TRUE);
163 efl_gfx_hint_weight_set(hbox, EFL_GFX_HINT_EXPAND, EFL_GFX_HINT_EXPAND);
164 efl_gfx_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
165 efl_gfx_entity_visible_set(hbox, EINA_TRUE);
166 elm_box_pack_end(box, hbox);
167
168 sld = elm_slider_add(win);
169 elm_object_text_set(sld, "Angle");
170 elm_slider_min_max_set(sld, 0, 360);
171 elm_slider_value_set(sld, 0);
172 efl_gfx_hint_align_set(sld, 0.5, EVAS_HINT_FILL);
173 efl_gfx_hint_weight_set(sld, EFL_GFX_HINT_EXPAND, EFL_GFX_HINT_EXPAND);
174 efl_gfx_hint_size_min_set(sld, EINA_SIZE2D(150, 0));
175 efl_event_callback_add(sld, EFL_UI_RANGE_EVENT_CHANGED, _angle_changed_cb, txtpath);
176 elm_box_pack_end(hbox, sld);
177 efl_gfx_entity_visible_set(sld, EINA_TRUE);
178 angle_sld = sld;
179
180 sld = elm_slider_add(win);
181 elm_object_text_set(sld, "Slice No");
182 elm_slider_min_max_set(sld, 20, 300);
183 elm_slider_value_set(sld, 99);
184 efl_gfx_hint_align_set(sld, 0.5, EVAS_HINT_FILL);
185 efl_gfx_hint_weight_set(sld, EFL_GFX_HINT_EXPAND, EFL_GFX_HINT_EXPAND);
186 efl_gfx_hint_size_min_set(sld, EINA_SIZE2D(150, 0));
187 efl_event_callback_add(sld, EFL_UI_RANGE_EVENT_CHANGED, _slice_no_changed_cb, txtpath);
188 elm_box_pack_end(hbox, sld);
189 efl_gfx_entity_visible_set(sld, EINA_TRUE);
190 slice_sld = sld;
191
192 hbox = elm_box_add(win);
193 elm_box_horizontal_set(hbox, EINA_TRUE);
194 efl_gfx_hint_weight_set(hbox, EFL_GFX_HINT_EXPAND, EFL_GFX_HINT_EXPAND);
195 efl_gfx_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
196 efl_gfx_entity_visible_set(hbox, EINA_TRUE);
197 elm_box_pack_end(box, hbox);
198
199 btn = elm_button_add(win);
200 elm_object_text_set(btn, "Change Path");
201 evas_object_smart_callback_add(btn, "clicked", _change_shape_cb, txtpath);
202 elm_box_pack_end(hbox, btn);
203 efl_gfx_entity_visible_set(btn, EINA_TRUE);
204
205 elm_win_resize_object_add(win, box);
206 efl_gfx_entity_size_set(win, EINA_SIZE2D(400, 400));
207 efl_gfx_entity_visible_set(win, 1);
208 }
209