Ui text: port widget to new interfaces

This is a big rewrite. In addition to implementing functionality with
the new Efl interfaces, a lot of legacy (Elm) code was removed.

A lot of work is squashed in this patch as the widget would've been
completely broken otherwise.

The major changes are:

Life-cycle:
  - Code was split to have 'finalize'
  - Item anchors (emoticons, images) were rewritten to have proper
  life-cycle

Scrolling logic:
  - Efl.Ui.Internal_Text_Scroller widget was added, and replaces the old
  Elm.Interface_Scrollable implementation. Singe-line and multi-line
  modes were fixed as well as sizing calculations. The object is now
  swallowed inside the Ui.Text widget.

Copy and paste:
  - Code was converted to Efl.Selection logic.

Modified tests:
    elementary_test -to "efl.ui.text"
    elementary_test -to "efl.ui.text label"

Added tests:
    elementary_test -to "efl.ui.text inputfield"

Removed test:
    elementary_test -to "efl.ui.text.async"
This commit is contained in:
Daniel Hirt 2018-09-13 12:45:29 +03:00
parent 581fa91a6b
commit 26c1f2477c
7 changed files with 697 additions and 2222 deletions

View File

@ -548,21 +548,6 @@ group { "efl/text";
rel2.offset: -2 -2; rel2.offset: -2 -2;
} }
} }
part { name: "efl.guide"; type: TEXTBLOCK; mouse_events: 0;
scale: 1;
description { state: "default" 0.0;
rel1.to: "efl.text";
rel2.to: "efl.text";
text { style: "efl_ui_text_guide_style";
min: 0 1;
align: 0.0 0.0;
}
}
description { state: "hidden" 0.0;
inherit: "default" 0.0;
visible: 0;
}
}
part { name: "efl.text"; type: SWALLOW; part { name: "efl.text"; type: SWALLOW;
scale: 1; scale: 1;
description { state: "default" 0.0; description { state: "default" 0.0;
@ -914,4 +899,4 @@ group { "efl/text/emoticon/worried"; images.image:
group { "efl/text/emoticon/wtf"; images.image: group { "efl/text/emoticon/wtf"; images.image:
"emo-wtf.png" COMP; parts { part { "icon"; nomouse; desc { "default"; max: 64 64; image.normal: "emo-wtf.png" COMP; parts { part { "icon"; nomouse; desc { "default"; max: 64 64; image.normal:
"emo-wtf.png"; } } } } "emo-wtf.png"; } } } }
//------------------------------------------------------------ //------------------------------------------------------------

View File

@ -339,8 +339,8 @@ void test_code_diff(void *data, Evas_Object *obj, void *event_info);
void test_code_diff_inline(void *data, Evas_Object *obj, void *event_info); void test_code_diff_inline(void *data, Evas_Object *obj, void *event_info);
void test_efl_ui_text(void *data, Evas_Object *obj, void *event_info); void test_efl_ui_text(void *data, Evas_Object *obj, void *event_info);
void test_efl_ui_text_inputfield(void *data, Evas_Object *obj, void *event_info);
void test_efl_ui_text_label(void *data, Evas_Object *obj, void *event_info); void test_efl_ui_text_label(void *data, Evas_Object *obj, void *event_info);
void test_efl_ui_text_async(void *data, Evas_Object *obj, void *event_info);
void test_ui_text_item_factory(void *data, Evas_Object *obj, void *event_info); void test_ui_text_item_factory(void *data, Evas_Object *obj, void *event_info);
void test_evas_mask(void *data, Edje_Object *obj, void *event_info); void test_evas_mask(void *data, Edje_Object *obj, void *event_info);
void test_gfx_filters(void *data, Evas_Object *obj, void *event_info); void test_gfx_filters(void *data, Evas_Object *obj, void *event_info);
@ -860,8 +860,8 @@ add_tests:
ADD_TEST(NULL, "Entries", "Entry Emoticon", test_entry_emoticon); ADD_TEST(NULL, "Entries", "Entry Emoticon", test_entry_emoticon);
ADD_TEST(NULL, "Entries", "Entry Password", test_entry_password); ADD_TEST(NULL, "Entries", "Entry Password", test_entry_password);
ADD_TEST_EO(NULL, "Entries", "Efl.Ui.Text", test_efl_ui_text); ADD_TEST_EO(NULL, "Entries", "Efl.Ui.Text", test_efl_ui_text);
ADD_TEST_EO(NULL, "Entries", "Efl.Ui.Text Input Field", test_efl_ui_text_inputfield);
ADD_TEST_EO(NULL, "Entries", "Efl.Ui.Text Label", test_efl_ui_text_label); ADD_TEST_EO(NULL, "Entries", "Efl.Ui.Text Label", test_efl_ui_text_label);
ADD_TEST_EO(NULL, "Entries", "Efl.Ui.Text.Async", test_efl_ui_text_async);
ADD_TEST_EO(NULL, "Entries", "Ui.Text Item Factory", test_ui_text_item_factory); ADD_TEST_EO(NULL, "Entries", "Ui.Text Item Factory", test_ui_text_item_factory);
ADD_TEST_EO(NULL, "Entries", "Efl.Ui.Tags", test_ui_tags); ADD_TEST_EO(NULL, "Entries", "Efl.Ui.Tags", test_ui_tags);

View File

@ -4,8 +4,6 @@
#define EO_BETA_API #define EO_BETA_API
#include <Elementary.h> #include <Elementary.h>
// 1. Label-equivalent setup
static void static void
_apply_style(Eo *obj, size_t start_pos, size_t end_pos, const char *style) _apply_style(Eo *obj, size_t start_pos, size_t end_pos, const char *style)
{ {
@ -30,10 +28,11 @@ _create_label(Eo *win, Eo *bx)
en = efl_add(EFL_UI_TEXT_CLASS, win); en = efl_add(EFL_UI_TEXT_CLASS, win);
printf("Added Efl.Ui.Text object\n"); printf("Added Efl.Ui.Text object\n");
efl_text_interactive_editable_set(en, EINA_FALSE); efl_text_interactive_editable_set(en, EINA_FALSE);
elm_box_pack_end(bx, en); efl_pack(bx, en);
return en; return en;
} }
void void
test_efl_ui_text_label(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) test_efl_ui_text_label(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{ {
@ -41,57 +40,35 @@ test_efl_ui_text_label(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, voi
Eo *en; Eo *en;
char *markup; char *markup;
win = elm_win_util_standard_add("label", "Label"); win = efl_add_ref(EFL_UI_WIN_CLASS, NULL,
elm_win_autodel_set(win, EINA_TRUE); efl_ui_win_type_set(efl_added, EFL_UI_WIN_BASIC),
efl_text_set(efl_added, "Efl Canvas_Layout"),
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
bx = elm_box_add(win); bx = efl_add(EFL_UI_BOX_CLASS, win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); efl_content_set(win, bx);
elm_win_resize_object_add(win, bx);
evas_object_show(bx);
en = _create_label(win, bx); en = _create_label(win, bx);
efl_text_set(en, "This is a\t small label"); efl_text_set(en, "This is a\t small label");
// 012345678901234567890 // 012345678901234567890
_apply_style(en, 0, 21, "font_size=12 font_weight=bold"); _apply_style(en, 0, 21, "font_size=12 font_weight=bold");
efl_text_halign_set(en, 0.5);
efl_text_font_weight_set(en, EFL_TEXT_FONT_WEIGHT_BOLD); efl_text_font_weight_set(en, EFL_TEXT_FONT_WEIGHT_BOLD);
en = _create_label(win, bx); en = _create_label(win, bx);
efl_text_halign_set(en, 0.5); efl_text_set(en, "This is a text. It is longer but its size is taken as the"
efl_text_set(en, "This is a text. Is also has\n" " min size so that it shows in whole");
"newlines. There are several styles applied.");
_apply_style(en, 40, 45, "font_weight=bold color=#ff0"); _apply_style(en, 40, 45, "font_weight=bold color=#ff0");
_apply_style(en, 52, 58, "font_weight=italic color=#f00"); _apply_style(en, 52, 58, "font_weight=italic color=#f00");
efl_text_multiline_set(en, EINA_TRUE);
en = _create_label(win, bx); en = _create_label(win, bx);
efl_text_halign_set(en, 0.5);
efl_text_set(en, "By default 'multiline' is disabled.\n" efl_text_set(en, "By default 'multiline' is disabled.\n"
"So, \\n would only work if you enable it."); "So, \\n would only work if you enable it.");
en = _create_label(win, bx);
efl_text_set(en, "You can input text here.");
efl_text_font_set(en, "Sans", 14);
efl_text_interactive_editable_set(en, EINA_TRUE);
efl_text_wrap_set(en, EFL_TEXT_FORMAT_WRAP_WORD);
efl_ui_text_scrollable_set(en, EINA_TRUE);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.5);
en = _create_label(win, bx);
efl_text_set(en, "Input multiline here.");
efl_text_font_set(en, "Sans", 14);
efl_text_interactive_editable_set(en, EINA_TRUE);
efl_text_wrap_set(en, EFL_TEXT_FORMAT_WRAP_WORD);
efl_text_multiline_set(en, EINA_TRUE);
efl_ui_text_scrollable_set(en, EINA_TRUE);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.5);
en = _create_label(win, bx); en = _create_label(win, bx);
efl_text_markup_set(en, "You can also <b>ENTER</b> markup!"); efl_text_markup_set(en, "You can also <b>ENTER</b> markup!");
efl_text_font_set(en, "Sans", 14); efl_text_font_set(en, "Sans", 14);
efl_text_wrap_set(en, EFL_TEXT_FORMAT_WRAP_WORD); efl_text_wrap_set(en, EFL_TEXT_FORMAT_WRAP_WORD);
efl_text_multiline_set(en, EINA_TRUE); efl_text_multiline_set(en, EINA_TRUE);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.5);
en = _create_label(win, bx); en = _create_label(win, bx);
markup = efl_text_markup_util_text_to_markup(EFL_TEXT_MARKUP_UTIL_CLASS, markup = efl_text_markup_util_text_to_markup(EFL_TEXT_MARKUP_UTIL_CLASS,
@ -101,7 +78,6 @@ test_efl_ui_text_label(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, voi
efl_text_font_set(en, "Sans", 14); efl_text_font_set(en, "Sans", 14);
efl_text_wrap_set(en, EFL_TEXT_FORMAT_WRAP_WORD); efl_text_wrap_set(en, EFL_TEXT_FORMAT_WRAP_WORD);
efl_text_multiline_set(en, EINA_TRUE); efl_text_multiline_set(en, EINA_TRUE);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.5);
en = _create_label(win, bx); en = _create_label(win, bx);
markup = efl_text_markup_util_markup_to_text(EFL_TEXT_MARKUP_UTIL_CLASS, markup = efl_text_markup_util_markup_to_text(EFL_TEXT_MARKUP_UTIL_CLASS,
@ -111,14 +87,8 @@ test_efl_ui_text_label(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, voi
efl_text_font_set(en, "Sans", 14); efl_text_font_set(en, "Sans", 14);
efl_text_wrap_set(en, EFL_TEXT_FORMAT_WRAP_WORD); efl_text_wrap_set(en, EFL_TEXT_FORMAT_WRAP_WORD);
efl_text_multiline_set(en, EINA_TRUE); efl_text_multiline_set(en, EINA_TRUE);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.5);
evas_object_resize(win, 480, 480);
evas_object_show(win);
} }
// 2. Entry-equivalent setup
typedef struct typedef struct
{ {
const char *wrap_mode[4]; const char *wrap_mode[4];
@ -126,30 +96,23 @@ typedef struct
} Test_Data; } Test_Data;
static void static void
my_efl_ui_text_bt_3(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) _on_bt3_clicked(void *data, const Efl_Event *event EINA_UNUSED)
{ {
Efl_Text_Cursor_Cursor *sel_start, *sel_end; Efl_Text_Cursor_Cursor *sel_start, *sel_end;
Eo *en = data;
efl_text_interactive_selection_cursors_get(data, &sel_start, &sel_end); efl_text_interactive_selection_cursors_get(data, &sel_start, &sel_end);
const char *s = efl_canvas_text_range_text_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", printf("SELECTION REGION: %d - %d\n",
efl_text_cursor_position_get(obj, sel_start), efl_text_cursor_position_get(en, sel_start),
efl_text_cursor_position_get(obj, sel_end)); efl_text_cursor_position_get(en, sel_end));
printf("SELECTION:\n"); printf("SELECTION:\n");
if (s) printf("%s\n", s); if (s) printf("%s\n", s);
} }
static void static void
my_efl_ui_text_bt_4(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) _on_bt6_clicked(void *data, const Efl_Event *event EINA_UNUSED)
{
Evas_Object *en = data;
efl_text_cursor_item_insert(en, efl_text_cursor_get(en, EFL_TEXT_CURSOR_GET_MAIN),
"emoticon/evil-laugh", "size=32x32");
}
static void
my_efl_ui_text_bt_6(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{ {
Eo *text_obj = data; Eo *text_obj = data;
@ -175,164 +138,107 @@ my_efl_ui_text_bt_6(void *data, Evas_Object *obj EINA_UNUSED, void *event_info E
efl_text_wrap_set(text_obj, wrap); efl_text_wrap_set(text_obj, wrap);
} }
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 void
test_efl_ui_text(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) 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; Eo *win, *bx, *bx2, *en;
Efl_Text_Cursor_Cursor *main_cur, *cur; Eo *bt;
char buf[128];
win = elm_win_util_standard_add("entry", "Entry"); win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
elm_win_autodel_set(win, EINA_TRUE); efl_ui_win_type_set(efl_added, EFL_UI_WIN_BASIC),
efl_text_set(efl_added, "Efl Ui Text"),
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
bx = elm_box_add(win); bx = efl_add(EFL_UI_BOX_CLASS, win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); efl_gfx_size_hint_weight_set(bx, EFL_GFX_SIZE_HINT_EXPAND, EFL_GFX_SIZE_HINT_EXPAND);
elm_win_resize_object_add(win, bx); efl_content_set(win, bx);
evas_object_show(bx);
en = efl_add(EFL_UI_TEXT_CLASS, win, en = efl_add(EFL_UI_TEXT_CLASS, bx,
efl_text_multiline_set(efl_added, EINA_TRUE)); efl_text_multiline_set(efl_added, EINA_TRUE));
printf("Added Efl.Ui.Text object\n"); 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!");
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);
efl_text_normal_color_set(en, 255, 255, 255, 255);
main_cur = efl_text_cursor_get(en, EFL_TEXT_CURSOR_GET_MAIN);
cur = efl_text_cursor_new(en);
efl_text_cursor_position_set(en, cur, 2);
efl_text_cursor_item_insert(en, cur, "emoticon/happy", "size=32x32");
efl_text_cursor_position_set(en, cur, 50);
snprintf(buf, sizeof(buf), "file://%s/images/sky_01.jpg", elm_app_data_dir_get());
efl_text_cursor_item_insert(en, cur, buf, "size=32x32");
efl_text_cursor_position_set(en, main_cur, 5);
efl_text_cursor_position_set(en, cur, 20);
efl_text_annotation_insert(en, main_cur, cur, "a href=#hello");
efl_text_interactive_editable_set(en, EINA_TRUE); efl_text_interactive_editable_set(en, EINA_TRUE);
efl_ui_text_scrollable_set(en, EINA_TRUE); efl_ui_text_scrollable_set(en, EINA_TRUE);
elm_box_pack_end(bx, en);
elm_object_focus_set(en, EINA_TRUE);
bx2 = elm_box_add(win); efl_text_font_set(en, "Sans", 12);
elm_box_horizontal_set(bx2, EINA_TRUE); efl_text_font_width_set(en, EFL_TEXT_FONT_WIDTH_ULTRACONDENSED);
evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); efl_text_normal_color_set(en, 255, 255, 255, 255);
evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
bt = elm_button_add(win); efl_text_set(en,
elm_object_text_set(bt, "Sel"); "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\n"
evas_object_smart_callback_add(bt, "clicked", my_efl_ui_text_bt_3, en); "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim\n"
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea\n"
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); "commodo consequat. Duis aute irure dolor in reprehenderit in voluptate\n"
elm_box_pack_end(bx2, bt); "velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint\n"
"occaecat cupidatat non proident, sunt in culpa qui officia deserunt\n"
"mollit anim id est laborum");
efl_gfx_size_hint_min_set(en, EINA_SIZE2D(300, 100));
efl_pack(bx, en);
bx2 = efl_add(EFL_UI_BOX_CLASS, bx);
efl_gfx_size_hint_weight_set(bx2, EFL_GFX_SIZE_HINT_EXPAND, EFL_GFX_SIZE_HINT_EXPAND);
efl_ui_direction_set(bx2, EFL_UI_DIR_HORIZONTAL);
bt = efl_add(EFL_UI_BUTTON_CLASS, bx2);
efl_text_set(bt, "Sel");
efl_event_callback_add(bt, EFL_UI_EVENT_CLICKED, _on_bt3_clicked, en);
efl_gfx_size_hint_weight_set(bt, EFL_GFX_SIZE_HINT_EXPAND, 0.0);
efl_pack(bx2, bt);
elm_object_focus_allow_set(bt, EINA_FALSE); elm_object_focus_allow_set(bt, EINA_FALSE);
evas_object_show(bt);
bt = elm_button_add(win); bt = efl_add(EFL_UI_BUTTON_CLASS, bx2);
elm_object_text_set(bt, "Ins"); efl_text_set(bt, "Wr");
evas_object_smart_callback_add(bt, "clicked", my_efl_ui_text_bt_4, en); efl_event_callback_add(bt, EFL_UI_EVENT_CLICKED, _on_bt6_clicked, en);
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); efl_gfx_size_hint_weight_set(bt, EFL_GFX_SIZE_HINT_EXPAND, 0.0);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); efl_pack(bx2, bt);
elm_box_pack_end(bx2, bt);
elm_object_focus_allow_set(bt, EINA_FALSE); elm_object_focus_allow_set(bt, EINA_FALSE);
evas_object_show(bt);
bt = elm_button_add(win); efl_pack(bx, bx2);
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);
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);
evas_object_resize(win, 480, 320);
evas_object_show(win);
} }
void void
test_efl_ui_text_async(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) test_efl_ui_text_inputfield(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{ {
Evas_Object *win, *bx, *bx2, *bx3, *en; Eo *win, *bx, *en;
win = elm_win_util_standard_add("entry", "Entry"); win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
elm_win_autodel_set(win, EINA_TRUE); efl_ui_win_type_set(efl_added, EFL_UI_WIN_BASIC),
efl_text_set(efl_added, "Efl Ui Text Input Field"),
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
bx = elm_box_add(win); bx = efl_add(EFL_UI_BOX_CLASS, win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); efl_gfx_size_hint_weight_set(bx, EFL_GFX_SIZE_HINT_EXPAND, EFL_GFX_SIZE_HINT_EXPAND);
elm_win_resize_object_add(win, bx); efl_content_set(win, bx);
evas_object_show(bx);
en = efl_add(EFL_UI_TEXT_CLASS, win, en = efl_add(EFL_UI_TEXT_CLASS, bx,
efl_text_wrap_set(efl_added, EFL_TEXT_FORMAT_WRAP_WORD), efl_text_multiline_set(efl_added, EINA_FALSE));
efl_text_multiline_set(efl_added, EINA_TRUE)
); efl_text_interactive_editable_set(en, EINA_TRUE);
efl_ui_text_scrollable_set(en, EINA_TRUE);
printf("Added Efl.Ui.Text object\n"); printf("Added Efl.Ui.Text object\n");
efl_key_data_set(en, "wrap_idx", 0); efl_text_set(en, "Sample input text");
efl_text_set(en, "Hello world! Goodbye world! This is a test text for the" efl_text_font_set(en, "Sans", 14);
" new UI Text widget.\xE2\x80\xA9This is the next paragraph.\nThis" efl_text_font_width_set(en, EFL_TEXT_FONT_WIDTH_ULTRACONDENSED);
" is the next line.\nThis is Yet another line! Line and paragraph"
" separators are actually different!");
efl_text_font_set(en, "Sans", 10);
efl_text_normal_color_set(en, 255, 255, 255, 255); efl_text_normal_color_set(en, 255, 255, 255, 255);
elm_box_pack_end(bx, en); efl_pack(bx, en);
elm_object_focus_set(en, EINA_TRUE);
bx2 = elm_box_add(win); en = _create_label(win, bx);
elm_box_horizontal_set(bx2, EINA_TRUE); efl_text_markup_set(en, "This is a multiline input.\n"
evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); "Enter multiline here");
evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); efl_text_font_set(en, "Sans", 14);
efl_text_interactive_editable_set(en, EINA_TRUE);
efl_text_wrap_set(en, EFL_TEXT_FORMAT_WRAP_WORD);
efl_text_multiline_set(en, EINA_TRUE);
efl_ui_text_scrollable_set(en, EINA_TRUE);
evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.5);
efl_pack(bx, en);
bx3 = elm_box_add(win); efl_gfx_entity_size_set(win, EINA_SIZE2D(300, 200));
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);
evas_object_resize(win, 480, 320);
evas_object_show(win);
} }
#define IMAGES_SZ 5 #define IMAGES_SZ 5
@ -341,8 +247,7 @@ static const char *images[IMAGES_SZ] = {
"sky", "logo", "dog", "eet_rock", "eet_plant" }; "sky", "logo", "dog", "eet_rock", "eet_plant" };
static void static void
my_efl_ui_text_item_factory_bt_image(void *data, Evas_Object *obj EINA_UNUSED, _on_factory_bt_image_clicked(void *data, const Efl_Event *event EINA_UNUSED)
void *event_info EINA_UNUSED)
{ {
Evas_Object *en = data; Evas_Object *en = data;
static int image_idx = 0; static int image_idx = 0;
@ -355,8 +260,7 @@ my_efl_ui_text_item_factory_bt_image(void *data, Evas_Object *obj EINA_UNUSED,
} }
static void static void
my_efl_ui_text_item_factory_bt_emoticon(void *data, Evas_Object *obj EINA_UNUSED, _on_factory_bt_emoticon_clicked(void *data, const Efl_Event *event EINA_UNUSED)
void *event_info EINA_UNUSED)
{ {
Evas_Object *en = data; Evas_Object *en = data;
efl_text_cursor_item_insert(en, efl_text_cursor_get(en, EFL_TEXT_CURSOR_GET_MAIN), efl_text_cursor_item_insert(en, efl_text_cursor_get(en, EFL_TEXT_CURSOR_GET_MAIN),
@ -370,8 +274,7 @@ static struct
} factories[3]; } factories[3];
static void static void
my_efl_ui_text_item_factory_bt_change(void *data, Evas_Object *obj EINA_UNUSED, _on_factory_bt_factory_clicked(void *data, const Efl_Event *event EINA_UNUSED)
void *event_info EINA_UNUSED)
{ {
Evas_Object *en = data; Evas_Object *en = data;
static int item_factory_idx = 0; static int item_factory_idx = 0;
@ -388,20 +291,20 @@ my_efl_ui_text_item_factory_bt_change(void *data, Evas_Object *obj EINA_UNUSED,
void void
test_ui_text_item_factory(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) test_ui_text_item_factory(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{ {
Evas_Object *win, *bx, *bx2, *bx3, *bt, *en; Evas_Object *win, *bx, *bx2, *bt, *en;
Efl_Text_Cursor_Cursor *main_cur, *cur; Efl_Text_Cursor_Cursor *main_cur, *cur;
char buf[128]; char buf[128];
Eina_File *f; Eina_File *f;
win = elm_win_util_standard_add("entry", "Entry"); win = efl_add(EFL_UI_WIN_CLASS, efl_main_loop_get(),
elm_win_autodel_set(win, EINA_TRUE); efl_ui_win_type_set(efl_added, EFL_UI_WIN_BASIC),
efl_text_set(efl_added, "Efl Ui Text Item Factory"),
efl_ui_win_autodel_set(efl_added, EINA_TRUE));
bx = elm_box_add(win); bx = efl_add(EFL_UI_BOX_CLASS, win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); efl_content_set(win, bx);
elm_win_resize_object_add(win, bx);
evas_object_show(bx);
en = efl_add(EFL_UI_TEXT_CLASS, win, en = efl_add(EFL_UI_TEXT_CLASS, bx,
efl_text_multiline_set(efl_added, EINA_TRUE)); efl_text_multiline_set(efl_added, EINA_TRUE));
factories[FACTORY_NONE].name = "None (Fallback)"; factories[FACTORY_NONE].name = "None (Fallback)";
@ -466,54 +369,34 @@ test_ui_text_item_factory(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
efl_text_interactive_editable_set(en, EINA_TRUE); efl_text_interactive_editable_set(en, EINA_TRUE);
efl_ui_text_scrollable_set(en, EINA_TRUE); efl_ui_text_scrollable_set(en, EINA_TRUE);
elm_box_pack_end(bx, en); efl_pack(bx, en);
elm_object_focus_set(en, EINA_TRUE); elm_object_focus_set(en, EINA_TRUE);
bx2 = elm_box_add(win); bx2 = efl_add(EFL_UI_BOX_CLASS, bx);
elm_box_horizontal_set(bx2, EINA_TRUE); efl_gfx_size_hint_weight_set(bx2, EFL_GFX_SIZE_HINT_EXPAND, EFL_GFX_SIZE_HINT_EXPAND);
evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); efl_ui_direction_set(bx2, EFL_UI_DIR_HORIZONTAL);
evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL);
bt = elm_button_add(win); bt = efl_add(EFL_UI_BUTTON_CLASS, bx2);
elm_object_text_set(bt, "Image"); efl_text_set(bt, "Image");
evas_object_smart_callback_add(bt, "clicked", efl_event_callback_add(bt, EFL_UI_EVENT_CLICKED, _on_factory_bt_image_clicked, en);
my_efl_ui_text_item_factory_bt_image, en); efl_gfx_size_hint_weight_set(bt, EFL_GFX_SIZE_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); efl_pack(bx2, bt);
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); elm_object_focus_allow_set(bt, EINA_FALSE);
evas_object_show(bt);
bt = elm_button_add(win); bt = efl_add(EFL_UI_BUTTON_CLASS, bx2);
elm_object_text_set(bt, "Emoticon"); efl_text_set(bt, "Emoticon");
evas_object_smart_callback_add(bt, "clicked", efl_event_callback_add(bt, EFL_UI_EVENT_CLICKED, _on_factory_bt_emoticon_clicked, en);
my_efl_ui_text_item_factory_bt_emoticon, en); efl_gfx_size_hint_weight_set(bt, EFL_GFX_SIZE_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); efl_pack(bx2, bt);
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); elm_object_focus_allow_set(bt, EINA_FALSE);
evas_object_show(bt);
bt = elm_button_add(win); bt = efl_add(EFL_UI_BUTTON_CLASS, bx2);
elm_object_text_set(bt, "Factory"); efl_text_set(bt, "Factory");
evas_object_smart_callback_add(bt, "clicked", efl_event_callback_add(bt, EFL_UI_EVENT_CLICKED, _on_factory_bt_factory_clicked, en);
my_efl_ui_text_item_factory_bt_change, en); efl_gfx_size_hint_weight_set(bt, EFL_GFX_SIZE_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); efl_pack(bx2, bt);
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); elm_object_focus_allow_set(bt, EINA_FALSE);
evas_object_show(bt);
bx3 = elm_box_add(win); efl_pack(bx, bx2);
elm_box_horizontal_set(bx3, EINA_TRUE); efl_gfx_entity_size_set(win, EINA_SIZE2D(480, 320));
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);
evas_object_resize(win, 480, 320);
evas_object_show(win);
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
/* FIXME - Text object must stop using elm_general! */ /* FIXME - Text object must stop using elm_general! */
import elm_general; import elm_general;
class Efl.Ui.Text (Efl.Ui.Layout.Object, Elm.Interface_Scrollable, Efl.Ui.Clickable, class Efl.Ui.Text (Efl.Ui.Layout.Object, Efl.Ui.Clickable,
Efl.Access.Text, Efl.Access.Editable.Text, Efl.File, Efl.Access.Text, Efl.Access.Editable.Text, Efl.File,
Efl.Ui.Selectable, Efl.Ui.Scrollable, Efl.Text_Interactive) Efl.Ui.Selectable, Efl.Text_Interactive)
{ {
[[Efl UI text class]] [[Efl UI text class]]
methods { methods {
@ -321,6 +321,7 @@ class Efl.Ui.Text (Efl.Ui.Layout.Object, Elm.Interface_Scrollable, Efl.Ui.Clicka
} }
implements { implements {
Efl.Object.constructor; Efl.Object.constructor;
Efl.Object.finalize;
Efl.Object.destructor; Efl.Object.destructor;
Efl.Gfx.Entity.visible { set; } Efl.Gfx.Entity.visible { set; }
Efl.Gfx.Entity.position { set; } Efl.Gfx.Entity.position { set; }
@ -334,9 +335,9 @@ class Efl.Ui.Text (Efl.Ui.Layout.Object, Elm.Interface_Scrollable, Efl.Ui.Clicka
Efl.Ui.Focus.Object.on_focus_update; Efl.Ui.Focus.Object.on_focus_update;
Efl.Ui.Widget.interest_region { get; } Efl.Ui.Widget.interest_region { get; }
Efl.Ui.Widget.on_disabled_update; Efl.Ui.Widget.on_disabled_update;
Efl.Ui.Widget.widget_sub_object_del; //Efl.Ui.Widget.widget_sub_object_del;
Elm.Interface_Scrollable.policy { set; } //Elm.Interface_Scrollable.policy { set; }
Elm.Interface_Scrollable.bounce_allow { set; } //Elm.Interface_Scrollable.bounce_allow { set; }
Efl.Access.Object.state_set { get; } Efl.Access.Object.state_set { get; }
Efl.Access.Object.i18n_name { get; } Efl.Access.Object.i18n_name { get; }
Efl.Access.Text.access_text { get; } Efl.Access.Text.access_text { get; }
@ -365,7 +366,6 @@ class Efl.Ui.Text (Efl.Ui.Layout.Object, Elm.Interface_Scrollable, Efl.Ui.Clicka
Efl.Text_Interactive.editable { set; } Efl.Text_Interactive.editable { set; }
} }
events { events {
activated: void; [[Called when entry is activated]]
changed: void; [[Called when entry changes]] changed: void; [[Called when entry changes]]
/* FIXME: Sometimes it can be NULL but @nullable does not work on events */ /* FIXME: Sometimes it can be NULL but @nullable does not work on events */
changed,user: Efl.Ui.Text_Change_Info; changed,user: Efl.Ui.Text_Change_Info;
@ -383,12 +383,5 @@ class Efl.Ui.Text (Efl.Ui.Layout.Object, Elm.Interface_Scrollable, Efl.Ui.Clicka
anchor,out: Elm.Entry_Anchor_Info; [[Called on anchor out]] anchor,out: Elm.Entry_Anchor_Info; [[Called on anchor out]]
anchor,up: Elm.Entry_Anchor_Info; [[called on anchor up]] anchor,up: Elm.Entry_Anchor_Info; [[called on anchor up]]
cursor,changed,manual: void; [[Called on manual cursor change]] cursor,changed,manual: void; [[Called on manual cursor change]]
/* FIXME: Nobody emits these
anchor,clicked: void; [[Called when anchor is clicked]]
rejected: void; [[Called when entry is rejected]]
maxlength,reached: void; [[Called when maximum entry length has been reached]]
text,set,done; [[Called when text set finished]]
cursor,changed: void; [[Called on cursor changed]]
*/
} }
} }

View File

@ -22,13 +22,12 @@ EOLIAN static Efl_Canvas_Object
const char *key) const char *key)
{ {
Eo *o; Eo *o;
const char *style = elm_widget_style_get(object);
o = edje_object_add(evas_object_evas_get(object)); o = efl_add(EFL_CANVAS_LAYOUT_CLASS, object);
if (!_elm_theme_object_set if (!elm_widget_element_update(object, o, key))
(object, o, "text", key, style)) {
_elm_theme_object_set elm_widget_element_update(object, o, "wtf");
(object, o, "text/emoticon", "wtf", style); }
return o; return o;
} }

View File

@ -29,8 +29,6 @@ EOLIAN static void
_efl_ui_text_factory_fallback_efl_object_destructor(Eo *obj, _efl_ui_text_factory_fallback_efl_object_destructor(Eo *obj,
Efl_Ui_Text_Factory_Fallback_Data *pd EINA_UNUSED) Efl_Ui_Text_Factory_Fallback_Data *pd EINA_UNUSED)
{ {
efl_del(pd->emoticon_factory);
efl_del(pd->image_factory);
efl_destructor(efl_super(obj, MY_CLASS)); efl_destructor(efl_super(obj, MY_CLASS));
} }