2016-06-08 08:37:35 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
#define EO_BETA_API
|
|
|
|
#include <Elementary.h>
|
|
|
|
|
2016-12-08 02:03:02 -08:00
|
|
|
// 1. Label-equivalent setup
|
|
|
|
|
2016-12-01 03:25:11 -08:00
|
|
|
static void
|
|
|
|
_apply_style(Eo *obj, size_t start_pos, size_t end_pos, const char *style)
|
|
|
|
{
|
|
|
|
Efl_Canvas_Text_Cursor *start, *end;
|
|
|
|
|
2017-06-08 04:31:42 -07:00
|
|
|
start = efl_text_cursor_new(obj);
|
|
|
|
end = efl_text_cursor_new(obj);
|
2016-12-01 03:25:11 -08:00
|
|
|
|
2017-06-08 03:07:12 -07:00
|
|
|
efl_text_cursor_position_set(obj, start, start_pos);
|
|
|
|
efl_text_cursor_position_set(obj, end, end_pos);
|
2016-12-01 03:25:11 -08:00
|
|
|
|
2017-06-08 06:08:28 -07:00
|
|
|
efl_text_annotation_insert(obj, start, end, style);
|
2017-06-08 04:31:42 -07:00
|
|
|
|
|
|
|
efl_text_cursor_free(obj, start);
|
|
|
|
efl_text_cursor_free(obj, end);
|
2016-12-01 03:25:11 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static Eo *
|
|
|
|
_create_label(Eo *win, Eo *bx)
|
|
|
|
{
|
|
|
|
Eo *en;
|
|
|
|
en = efl_add(EFL_UI_TEXT_CLASS, win);
|
|
|
|
printf("Added Efl.Ui.Text object\n");
|
|
|
|
efl_ui_text_interactive_editable_set(en, EINA_FALSE);
|
|
|
|
efl_canvas_text_style_set(en, NULL, "DEFAULT='align=center font=Sans font_size=10 color=#fff wrap=word'");
|
|
|
|
|
|
|
|
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_show(en);
|
|
|
|
elm_box_pack_end(bx, en);
|
|
|
|
return en;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
test_efl_ui_text_label(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *win, *bx;
|
|
|
|
Eo *en;
|
|
|
|
|
|
|
|
win = elm_win_util_standard_add("label", "Label");
|
|
|
|
elm_win_autodel_set(win, EINA_TRUE);
|
|
|
|
|
|
|
|
bx = elm_box_add(win);
|
|
|
|
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
elm_win_resize_object_add(win, bx);
|
|
|
|
evas_object_show(bx);
|
|
|
|
|
|
|
|
en = _create_label(win, bx);
|
|
|
|
efl_text_set(en, "This is a small label");
|
|
|
|
// 012345678901234567890
|
|
|
|
_apply_style(en, 0, 21, "font_size=12 font_weight=bold");
|
|
|
|
|
|
|
|
en = _create_label(win, bx);
|
|
|
|
efl_text_set(en, "This is a text. Is also has\n"
|
|
|
|
"newlines. There are several styles applied.");
|
|
|
|
_apply_style(en, 40, 45, "font_weight=bold color=#ff0");
|
|
|
|
_apply_style(en, 52, 58, "font_weight=italic color=#f00");
|
|
|
|
efl_canvas_text_style_set(en, NULL, "DEFAULT='align=center font=Sans font_size=12 color=#fff wrap=word'");
|
|
|
|
|
|
|
|
// elm_object_focus_set(en, EINA_TRUE);
|
|
|
|
|
|
|
|
evas_object_resize(win, 480, 320);
|
|
|
|
evas_object_show(win);
|
|
|
|
}
|
2016-12-08 02:03:02 -08:00
|
|
|
|
|
|
|
// 2. Entry-equivalent setup
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
const char *wrap_mode[4];
|
|
|
|
size_t cur_wrap;
|
|
|
|
} Test_Data;
|
|
|
|
|
|
|
|
static void
|
|
|
|
my_efl_ui_text_anchor_hover_opened(void *data EINA_UNUSED, const Efl_Event *event)
|
|
|
|
{
|
|
|
|
Eo *bt;
|
|
|
|
Eo *en = data;
|
|
|
|
|
|
|
|
Efl_Ui_Text_Anchor_Hover_Info *ei = event->info;
|
|
|
|
|
2017-05-21 20:48:12 -07:00
|
|
|
bt = efl_add(EFL_UI_BUTTON_CLASS, en);
|
2016-12-08 02:03:02 -08:00
|
|
|
elm_object_text_set(bt, ei->anchor_info->name);
|
|
|
|
evas_object_show(bt);
|
|
|
|
elm_object_part_content_set(ei->hover, "middle", bt);
|
|
|
|
|
|
|
|
printf("anchor hover\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
my_efl_ui_text_bt_3(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
Canvas text cursor: move to Efl.Canvas.Text namespace
Originally it was its own object.
There are some valid claims that there is no justification for it to
remain an object.
Furthermore, it's apparent that it added little benefit: changes of
each cursors, in practice, triggered a query for all objects of the
same textblock. There wasn't real advantage to have a finer resolution
of controlling the cursors with their own events.
This ports back a lot of code, and changes a lot of other code in the
higher-up widgets, such as Efl.Ui.Text and co.
The usage was replaces from:
efl_canvas_text_cursor_char_next(cur_obj)
to
efl_canvas_text_cursor_char_next(text_obj, cur_obj)
that is, it is an operations on the TEXT OBJECT, rather than on the
(now removed) cursor object.
So, one less efl object to worry about now.
Hopefully, the port went smooth.
2017-06-05 04:52:10 -07:00
|
|
|
Efl_Canvas_Text_Cursor *sel_start, *sel_end;
|
2016-12-08 02:03:02 -08:00
|
|
|
|
|
|
|
efl_ui_text_interactive_selection_cursors_get(data, &sel_start, &sel_end);
|
|
|
|
const char *s = efl_canvas_text_range_text_get(data, sel_start, sel_end);
|
|
|
|
|
|
|
|
printf("SELECTION REGION: %d - %d\n",
|
2017-06-08 03:07:12 -07:00
|
|
|
efl_text_cursor_position_get(obj, sel_start),
|
|
|
|
efl_text_cursor_position_get(obj, sel_end));
|
2016-12-08 02:03:02 -08:00
|
|
|
printf("SELECTION:\n");
|
|
|
|
if (s) printf("%s\n", s);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
my_efl_ui_text_bt_4(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *en = data;
|
2017-06-08 06:46:42 -07:00
|
|
|
efl_text_cursor_object_item_insert(en, efl_text_cursor_get(en, EFL_TEXT_CURSOR_GET_MAIN),
|
2016-12-08 02:03:02 -08:00
|
|
|
"size=32x32 href=emoticon");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
my_efl_ui_text_bt_6(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
2017-05-23 06:04:04 -07:00
|
|
|
Eo *text_obj = data;
|
|
|
|
|
2017-06-11 14:16:40 -07:00
|
|
|
Efl_Text_Format_Wrap wrap = efl_text_wrap_get(text_obj);
|
2017-05-23 06:04:04 -07:00
|
|
|
|
|
|
|
switch(wrap)
|
|
|
|
{
|
|
|
|
case EFL_TEXT_FORMAT_WRAP_NONE:
|
|
|
|
wrap = EFL_TEXT_FORMAT_WRAP_CHAR;
|
|
|
|
break;
|
|
|
|
case EFL_TEXT_FORMAT_WRAP_CHAR:
|
|
|
|
wrap = EFL_TEXT_FORMAT_WRAP_WORD;
|
|
|
|
break;
|
|
|
|
case EFL_TEXT_FORMAT_WRAP_WORD:
|
|
|
|
wrap = EFL_TEXT_FORMAT_WRAP_MIXED;
|
|
|
|
break;
|
|
|
|
case EFL_TEXT_FORMAT_WRAP_MIXED:
|
|
|
|
wrap = EFL_TEXT_FORMAT_WRAP_NONE;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2017-06-11 14:16:40 -07:00
|
|
|
efl_text_wrap_set(text_obj, wrap);
|
2016-12-08 02:03:02 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
my_efl_ui_text_bt_5(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *en = data;
|
|
|
|
efl_ui_text_scrollable_set(en, !efl_ui_text_scrollable_get(en));
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
test_efl_ui_text(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Evas_Object *win, *bx, *bx2, *bx3, *bt, *en;
|
|
|
|
Efl_Canvas_Text_Cursor *main_cur, *cur;
|
|
|
|
|
|
|
|
win = elm_win_util_standard_add("entry", "Entry");
|
|
|
|
elm_win_autodel_set(win, EINA_TRUE);
|
|
|
|
|
|
|
|
bx = elm_box_add(win);
|
|
|
|
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
elm_win_resize_object_add(win, bx);
|
|
|
|
evas_object_show(bx);
|
|
|
|
|
2017-05-23 06:04:04 -07:00
|
|
|
en = efl_add(EFL_UI_TEXT_CLASS, win,
|
2017-06-11 14:16:40 -07:00
|
|
|
efl_text_multiline_set(efl_added, EINA_TRUE));
|
2016-12-08 02:03:02 -08:00
|
|
|
|
|
|
|
printf("Added Efl.Ui.Text object\n");
|
|
|
|
efl_key_data_set(en, "wrap_idx", 0);
|
|
|
|
efl_text_set(en, "Hello world! Goodbye world! This is a test text for the"
|
|
|
|
" new UI Text widget.\xE2\x80\xA9This is the next paragraph.\nThis"
|
|
|
|
" is the next line.\nThis is Yet another line! Line and paragraph"
|
|
|
|
" separators are actually different!");
|
2017-05-23 06:04:53 -07:00
|
|
|
efl_text_font_set(en, "Sans", 14);
|
|
|
|
efl_text_font_weight_set(en, EFL_TEXT_FONT_WEIGHT_BOLD);
|
|
|
|
efl_text_font_slant_set(en, EFL_TEXT_FONT_SLANT_ITALIC);
|
|
|
|
efl_text_font_width_set(en, EFL_TEXT_FONT_WIDTH_ULTRACONDENSED);
|
2017-06-11 14:16:40 -07:00
|
|
|
efl_text_normal_color_set(en, 255, 255, 255, 255);
|
2016-12-08 02:03:02 -08:00
|
|
|
|
2017-06-08 06:46:42 -07:00
|
|
|
main_cur = efl_text_cursor_get(en, EFL_TEXT_CURSOR_GET_MAIN);
|
2017-06-08 03:07:12 -07:00
|
|
|
cur = efl_text_cursor_new(en);
|
2016-12-08 02:03:02 -08:00
|
|
|
|
2017-06-08 03:07:12 -07:00
|
|
|
efl_text_cursor_position_set(en, cur, 2);
|
2017-06-08 06:08:28 -07:00
|
|
|
efl_text_cursor_object_item_insert(en, cur, "size=32x32 href=emoticon");
|
2017-06-08 03:07:12 -07:00
|
|
|
efl_text_cursor_position_set(en, cur, 50);
|
2017-06-08 06:08:28 -07:00
|
|
|
efl_text_cursor_object_item_insert(en, cur, "size=32x32 href=emoticon");
|
2016-12-08 02:03:02 -08:00
|
|
|
|
2017-06-08 03:07:12 -07:00
|
|
|
efl_text_cursor_position_set(en, main_cur, 5);
|
|
|
|
efl_text_cursor_position_set(en, cur, 20);
|
2016-12-08 02:03:02 -08:00
|
|
|
|
2017-06-08 06:08:28 -07:00
|
|
|
efl_text_annotation_insert(en, main_cur, cur, "a href=#hello");
|
2016-12-08 02:03:02 -08:00
|
|
|
|
|
|
|
efl_ui_text_interactive_editable_set(en, EINA_TRUE);
|
|
|
|
efl_ui_text_scrollable_set(en, EINA_TRUE);
|
|
|
|
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
elm_box_pack_end(bx, en);
|
|
|
|
evas_object_show(en);
|
|
|
|
elm_object_focus_set(en, EINA_TRUE);
|
|
|
|
|
|
|
|
bx2 = elm_box_add(win);
|
|
|
|
elm_box_horizontal_set(bx2, EINA_TRUE);
|
|
|
|
evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
|
|
|
|
bt = elm_button_add(win);
|
|
|
|
elm_object_text_set(bt, "Sel");
|
|
|
|
evas_object_smart_callback_add(bt, "clicked", my_efl_ui_text_bt_3, en);
|
|
|
|
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
elm_box_pack_end(bx2, bt);
|
|
|
|
elm_object_focus_allow_set(bt, EINA_FALSE);
|
|
|
|
evas_object_show(bt);
|
|
|
|
|
|
|
|
bt = elm_button_add(win);
|
|
|
|
elm_object_text_set(bt, "Ins");
|
|
|
|
evas_object_smart_callback_add(bt, "clicked", my_efl_ui_text_bt_4, en);
|
|
|
|
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
elm_box_pack_end(bx2, bt);
|
|
|
|
elm_object_focus_allow_set(bt, EINA_FALSE);
|
|
|
|
evas_object_show(bt);
|
|
|
|
|
|
|
|
bt = elm_button_add(win);
|
|
|
|
elm_object_text_set(bt, "Scrl");
|
|
|
|
evas_object_smart_callback_add(bt, "clicked", my_efl_ui_text_bt_5, en);
|
|
|
|
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
elm_box_pack_end(bx2, bt);
|
|
|
|
elm_object_focus_allow_set(bt, EINA_FALSE);
|
|
|
|
evas_object_show(bt);
|
|
|
|
|
|
|
|
bt = elm_button_add(win);
|
|
|
|
elm_object_text_set(bt, "Wr");
|
|
|
|
evas_object_smart_callback_add(bt, "clicked", my_efl_ui_text_bt_6, en);
|
|
|
|
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
elm_box_pack_end(bx2, bt);
|
|
|
|
elm_object_focus_allow_set(bt, EINA_FALSE);
|
|
|
|
evas_object_show(bt);
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
bt = elm_button_add(win);
|
|
|
|
elm_object_text_set(bt, "Edit");
|
|
|
|
evas_object_smart_callback_add(bt, "clicked", my_entry_bt_7, en);
|
|
|
|
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
elm_box_pack_end(bx2, bt);
|
|
|
|
elm_object_focus_allow_set(bt, EINA_FALSE);
|
|
|
|
evas_object_show(bt);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
bx3 = elm_box_add(win);
|
|
|
|
elm_box_horizontal_set(bx3, EINA_TRUE);
|
|
|
|
evas_object_size_hint_weight_set(bx3, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(bx3, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
|
|
|
|
elm_box_pack_end(bx, bx3);
|
|
|
|
elm_box_pack_end(bx, bx2);
|
|
|
|
evas_object_show(bx3);
|
|
|
|
evas_object_show(bx2);
|
|
|
|
|
|
|
|
efl_event_callback_add(en, EFL_UI_TEXT_EVENT_ANCHOR_HOVER_OPENED, my_efl_ui_text_anchor_hover_opened, en);
|
|
|
|
|
|
|
|
evas_object_resize(win, 480, 320);
|
|
|
|
evas_object_show(win);
|
|
|
|
}
|