3 typedef struct _E_Widget_Data E_Widget_Data;
6 Evas_Object *o_widget, *o_scrollframe, *o_textblock;
9 static void _e_wid_del_hook(Evas_Object *obj);
10 static void _e_wid_focus_hook(Evas_Object *obj);
11 static void _e_wid_cb_scrollframe_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
12 static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info);
14 /* externally accessible functions */
16 e_widget_textblock_add(Evas *evas)
21 obj = e_widget_add(evas);
23 e_widget_del_hook_set(obj, _e_wid_del_hook);
24 e_widget_focus_hook_set(obj, _e_wid_focus_hook);
25 wd = calloc(1, sizeof(E_Widget_Data));
26 e_widget_data_set(obj, wd);
28 o = e_scrollframe_add(evas);
29 wd->o_scrollframe = o;
31 e_widget_sub_object_add(obj, o);
32 e_widget_resize_object_set(obj, o);
33 evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _e_wid_focus_steal, obj);
35 o = edje_object_add(evas);
36 e_theme_edje_object_set(o, "base/theme/widgets",
37 "e/widgets/textblock");
39 evas_object_event_callback_add(wd->o_scrollframe, EVAS_CALLBACK_RESIZE, _e_wid_cb_scrollframe_resize, wd);
40 evas_object_event_callback_add(wd->o_textblock, EVAS_CALLBACK_RESIZE, _e_wid_cb_scrollframe_resize, wd);
41 e_scrollframe_child_set(wd->o_scrollframe, o);
42 e_widget_sub_object_add(obj, o);
45 evas_object_resize(obj, 32, 32);
46 e_widget_size_min_set(obj, 32, 32);
51 e_widget_textblock_markup_set(Evas_Object *obj, const char *text)
54 Evas_Coord mw, mh, vw, vh;
56 wd = e_widget_data_get(obj);
58 evas_object_resize(wd->o_textblock, 0, 0);
60 edje_object_part_text_set(wd->o_textblock, "e.textblock.text", text);
61 e_scrollframe_child_viewport_size_get(wd->o_scrollframe, &vw, &vh);
62 edje_object_size_min_restricted_calc(wd->o_textblock, &mw, &mh, vw, 0);
65 evas_object_resize(wd->o_textblock, mw, mh);
69 e_widget_textblock_plain_set(Evas_Object *obj, const char *text)
78 e_widget_textblock_markup_set(obj, NULL);
82 /* need to look for these and replace with a new string (on the right)
89 for (p = text; *p != 0; p++)
91 if (*p == '\n') mlen += 4 - 1;
92 else if (*p == '\t') mlen += 8 - 1;
93 else if (*p == '<') mlen += 4 - 1;
94 else if (*p == '>') mlen += 4 - 1;
95 else if (*p == '&') mlen += 5 - 1;
97 markup = alloca(mlen + 1);
100 for (d = markup, p = text; *p != 0; p++, d++)
130 e_widget_textblock_markup_set(obj, markup);
135 _e_wid_del_hook(Evas_Object *obj)
139 wd = e_widget_data_get(obj);
144 _e_wid_focus_hook(Evas_Object *obj)
148 wd = e_widget_data_get(obj);
149 if (e_widget_focus_get(obj))
151 edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_scrollframe), "e,state,focused", "e");
152 evas_object_focus_set(wd->o_scrollframe, 1);
156 edje_object_signal_emit(e_scrollframe_edje_object_get(wd->o_scrollframe), "e,state,unfocused", "e");
157 evas_object_focus_set(wd->o_scrollframe, 0);
162 _e_wid_cb_scrollframe_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
165 Evas_Coord mw, mh, vw, vh;
168 e_scrollframe_child_viewport_size_get(wd->o_scrollframe, &vw, &vh);
169 edje_object_size_min_restricted_calc(wd->o_textblock, &mw, &mh, vw, 0);
170 if (vw > mw) mw = vw;
171 if (vh > mh) mh = vh;
172 evas_object_resize(wd->o_textblock, mw, mh);
176 _e_wid_focus_steal(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
178 e_widget_focus_steal(data);