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 &lt;long&gt; 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