summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Alzyod <ali198724@gmail.com>2020-01-09 22:33:07 +0900
committerWooHyun Jung <wh0705.jung@samsung.com>2020-01-09 22:33:07 +0900
commit1a02745a88eb863cad307f0ba9fd386594ce4e82 (patch)
tree229ed0c86d342e7d65027311fc3dffbc7aa95621
parent7b0a44dd3316d32e8150d9c800e00d923fc3a684 (diff)
downloadefl-1a02745a88eb863cad307f0ba9fd386594ce4e82.tar.gz
efl.text.cursor: change to abstract class
Summary: 1- Change cursor to abstract class 2- Remove copy method from cursor 3- remove cursor_Add method from efl.canvas.textblock and efl.ui.textbox Reviewers: woohyun, segfaultxavi, bu5hm4n Reviewed By: bu5hm4n Subscribers: lauromoura, YOhoho, cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8299, T8454 Differential Revision: https://phab.enlightenment.org/D11034
-rw-r--r--src/lib/elementary/efl_ui_internal_text_interactive.c40
-rw-r--r--src/lib/elementary/efl_ui_textbox.c8
-rw-r--r--src/lib/elementary/efl_ui_textbox.eo7
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock.eo9
-rw-r--r--src/lib/evas/canvas/efl_canvas_textblock_internal.h8
-rw-r--r--src/lib/evas/canvas/efl_text_cursor.c20
-rw-r--r--src/lib/evas/canvas/efl_text_cursor.eo9
-rw-r--r--src/lib/evas/canvas/evas_object_textblock.c8
-rw-r--r--src/tests/evas/evas_test_textblock.c21
9 files changed, 59 insertions, 71 deletions
diff --git a/src/lib/elementary/efl_ui_internal_text_interactive.c b/src/lib/elementary/efl_ui_internal_text_interactive.c
index 3212632532..54b29f2712 100644
--- a/src/lib/elementary/efl_ui_internal_text_interactive.c
+++ b/src/lib/elementary/efl_ui_internal_text_interactive.c
@@ -76,6 +76,12 @@ _text_filter_markup_prepend(Efl_Canvas_Textblock *obj, Efl_Ui_Internal_Text_Inte
const char *fmtpre, const char *fmtpost,
Eina_Bool clearsel, Eina_Bool changeinfo);
+static void
+_cur_pos_copy(Efl_Text_Cursor *src, Efl_Text_Cursor *dest)
+{
+ efl_text_cursor_position_set(dest, efl_text_cursor_position_get(src));
+}
+
#ifdef HAVE_ECORE_IMF
static void
_preedit_clear(Efl_Ui_Internal_Text_Interactive_Data *en)
@@ -523,12 +529,12 @@ _entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUS
/* set preedit start cursor */
if (!en->preedit_start)
en->preedit_start = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, en->preedit_start);
+ _cur_pos_copy(cur, en->preedit_start);
/* set preedit end cursor */
if (!en->preedit_end)
en->preedit_end = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, en->preedit_end);
+ _cur_pos_copy(cur, en->preedit_end);
preedit_end_pos = efl_text_cursor_position_get(cur);
@@ -752,8 +758,8 @@ _sel_init(Efl_Text_Cursor *c, Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_I
if (en->have_selection)
return;
- efl_text_cursor_copy(c, en->sel_start);
- efl_text_cursor_copy(c, en->sel_end);
+ _cur_pos_copy(c, en->sel_start);
+ _cur_pos_copy(c, en->sel_end);
en->have_selection = EINA_FALSE;
if (en->selection)
@@ -804,7 +810,7 @@ _sel_extend(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive
_sel_enable(c, o, en);
if (efl_text_cursor_equal(c, en->sel_end)) return;
- efl_text_cursor_copy(c, en->sel_end);
+ _cur_pos_copy(c, en->sel_end);
_entry_imf_cursor_info_set(en);
@@ -830,7 +836,7 @@ _sel_clear(Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en
{
en->have_selection = EINA_FALSE;
Eina_Bool b_value = en->have_selection;
- efl_text_cursor_copy(en->sel_start, en->sel_end);
+ _cur_pos_copy(en->sel_start, en->sel_end);
efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value);
}
}
@@ -1024,9 +1030,9 @@ _key_down_sel_pre(Efl_Ui_Internal_Text_Interactive *obj, Efl_Text_Cursor *cur, E
{
Eina_Bool sel_forward = efl_text_cursor_compare(en->sel_start, en->sel_end);
if ((sel_forward && movement_forward) || (!sel_forward && !movement_forward))
- efl_text_cursor_copy(en->sel_end, cur);
+ _cur_pos_copy(en->sel_end, cur);
else
- efl_text_cursor_copy(en->sel_start, cur);
+ _cur_pos_copy(en->sel_start, cur);
_sel_clear(obj, en);
}
}
@@ -1207,7 +1213,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
// del to start of previous word
Efl_Text_Cursor *tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(tc, cur);
+ _cur_pos_copy(tc, cur);
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_PREV);
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
@@ -1242,7 +1248,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
// del to end of next word
Efl_Text_Cursor *tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(tc, cur);
+ _cur_pos_copy(tc, cur);
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHAR_NEXT);
@@ -1484,7 +1490,7 @@ _cursor_char_coord_set(Efl_Canvas_Textblock *obj, Efl_Text_Cursor *cur, Evas_Coo
Efl_Text_Cursor *tc;
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
+ _cur_pos_copy(cur, tc);
evas_object_geometry_get(obj, &x, &y, NULL, NULL);
cx = canvasx - x;
cy = canvasy - y;
@@ -1549,7 +1555,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
if (shift)
{
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
+ _cur_pos_copy(cur, tc);
if (efl_text_cursor_compare(cur, en->sel_start) < 0)
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
else
@@ -1562,7 +1568,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
en->selecting = EINA_FALSE;
_sel_clear(obj, en);
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
+ _cur_pos_copy(cur, tc);
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START);
_sel_init(cur, obj, en);
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END);
@@ -1575,7 +1581,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
if (shift)
{
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
+ _cur_pos_copy(cur, tc);
if (efl_text_cursor_compare(cur, en->sel_start) < 0)
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
else
@@ -1591,7 +1597,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
en->selecting = EINA_FALSE;
_sel_clear(obj, en);
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
+ _cur_pos_copy(cur, tc);
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START);
_sel_init(cur, obj, en);
efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END);
@@ -1650,7 +1656,7 @@ _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
if (en->select_allow)
{
- efl_text_cursor_copy(en->sel_end, cur);
+ _cur_pos_copy(en->sel_end, cur);
}
if (en->selecting)
{
@@ -1690,7 +1696,7 @@ _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo
if (en->selecting)
{
tc = efl_canvas_textblock_cursor_create(obj);
- efl_text_cursor_copy(cur, tc);
+ _cur_pos_copy(cur, tc);
evas_object_geometry_get(obj, &x, &y, &w, &h);
cx = ev->cur.canvas.x - x;
cy = ev->cur.canvas.y - y;
diff --git a/src/lib/elementary/efl_ui_textbox.c b/src/lib/elementary/efl_ui_textbox.c
index 0f545e319f..ea26e3ce0b 100644
--- a/src/lib/elementary/efl_ui_textbox.c
+++ b/src/lib/elementary/efl_ui_textbox.c
@@ -2108,16 +2108,10 @@ _efl_ui_textbox_entry_insert(Eo *obj, Efl_Ui_Textbox_Data *sd, const char *entry
efl_canvas_group_change(obj);
}
-EOLIAN static void
-_efl_ui_textbox_cursor_add(Eo *obj, Efl_Ui_Textbox_Data *pd, Efl_Text_Cursor *cursor)
-{
- efl_text_cursor_text_object_set(cursor, pd->text_obj, obj);
-}
-
EOLIAN static Efl_Text_Cursor *
_efl_ui_textbox_cursor_create(Eo *obj, Efl_Ui_Textbox_Data *pd)
{
- Eo* cursor = efl_add(EFL_TEXT_CURSOR_CLASS, pd->text_obj);
+ Eo* cursor = efl_text_cursor_create(pd->text_obj);;
efl_text_cursor_text_object_set(cursor, pd->text_obj, obj);
return cursor;
}
diff --git a/src/lib/elementary/efl_ui_textbox.eo b/src/lib/elementary/efl_ui_textbox.eo
index 3f8097a90a..aa3a5dd5be 100644
--- a/src/lib/elementary/efl_ui_textbox.eo
+++ b/src/lib/elementary/efl_ui_textbox.eo
@@ -64,13 +64,6 @@ class @beta Efl.Ui.Textbox extends Efl.Ui.Layout_Base implements Efl.Input.Click
item_factory: Efl.Canvas.Textblock_Factory; [[Factory to create items]]
}
}
- cursor_add {
- [[Add cursor that will manipulate and iterate content of the text object.
- It is typically more convenient to obtain a cursor directly from the text object using @.cursor_create.]]
- params {
- cursor: Efl.Text.Cursor; [[Text cursor.]]
- }
- }
cursor_create {
[[Creates and returns a new cursor for the text.]]
return: Efl.Text.Cursor @move; [[Text cursor.]]
diff --git a/src/lib/evas/canvas/efl_canvas_textblock.eo b/src/lib/evas/canvas/efl_canvas_textblock.eo
index c9ed381e95..edc170ba81 100644
--- a/src/lib/evas/canvas/efl_canvas_textblock.eo
+++ b/src/lib/evas/canvas/efl_canvas_textblock.eo
@@ -23,15 +23,6 @@ class @beta Efl.Canvas.Textblock extends Efl.Canvas.Object implements Efl.Text,
is_empty: bool; [[$true if empty.]]
}
}
- cursor_add {
- [[Adds an existing cursor to the text object.
- If the cursor already belonged to another text object it will be reassigned to the new one.
- It is typically more convenient to obtain a cursor directly from the text object using @.cursor_create.
- ]]
- params {
- cursor: Efl.Text.Cursor; [[The text cursor to use.]]
- }
- }
cursor_create {
[[Creates a new cursor and adds it to the text object.
This cursor can be used to manipulate and iterate the content of the text object.
diff --git a/src/lib/evas/canvas/efl_canvas_textblock_internal.h b/src/lib/evas/canvas/efl_canvas_textblock_internal.h
index a4f03fcef8..eb137455ea 100644
--- a/src/lib/evas/canvas/efl_canvas_textblock_internal.h
+++ b/src/lib/evas/canvas/efl_canvas_textblock_internal.h
@@ -294,6 +294,14 @@ EAPI void efl_text_cursor_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *t
/**
+ * Internally create instance of cursor object.
+ *
+ * @param parent the parent of the cursor object.
+ */
+EAPI Eo* efl_text_cursor_create(Eo *parent);
+
+
+/**
* Internally sets cursor handle(legacy textblock cursor) into cursor object.
*
* @param obj the cursor object.
diff --git a/src/lib/evas/canvas/efl_text_cursor.c b/src/lib/evas/canvas/efl_text_cursor.c
index eb699728b8..c0a6c627d9 100644
--- a/src/lib/evas/canvas/efl_text_cursor.c
+++ b/src/lib/evas/canvas/efl_text_cursor.c
@@ -1,6 +1,7 @@
#include "evas_common_private.h"
#include "evas_private.h"
#include "efl_canvas_textblock_internal.h"
+#include "eo_internal.h"
#define MY_CLASS EFL_TEXT_CURSOR_CLASS
#define MY_CLASS_NAME "Efl.Text.Cursor"
@@ -20,6 +21,8 @@ struct _Evas_Textblock_Selection_Iterator
typedef struct _Evas_Textblock_Selection_Iterator Evas_Textblock_Selection_Iterator;
+EFL_CLASS_SIMPLE_CLASS(efl_text_cursor, "efl_text_cursor", EFL_TEXT_CURSOR_CLASS)
+
EOLIAN static void
_efl_text_cursor_position_set(Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, int position)
{
@@ -102,11 +105,15 @@ _efl_text_cursor_compare(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, co
return evas_textblock_cursor_compare(pd->handle, efl_text_cursor_handle_get(dst));
}
-EOLIAN static void
-_efl_text_cursor_copy(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_Text_Cursor *dst)
+static void
+_efl_text_cursor_copy(const Efl_Text_Cursor *obj, Efl_Text_Cursor *dst)
{
+ Efl_Text_Cursor_Data *pd = efl_data_scope_safe_get(obj, MY_CLASS);
+ EINA_SAFETY_ON_NULL_RETURN(pd);
+
Efl_Text_Cursor_Data *pd_dest = efl_data_scope_safe_get(dst, MY_CLASS);
EINA_SAFETY_ON_NULL_RETURN(pd_dest);
+
if (!pd->handle) return;
Efl_Text_Cursor_Handle *handle = evas_object_textblock_cursor_new(pd->handle->obj);
@@ -119,9 +126,9 @@ _efl_text_cursor_copy(const Eo *obj EINA_UNUSED, Efl_Text_Cursor_Data *pd, Efl_T
EOLIAN static Efl_Text_Cursor *
_efl_text_cursor_efl_duplicate_duplicate(const Eo *obj, Efl_Text_Cursor_Data *pd EINA_UNUSED)
{
- Efl_Text_Cursor *dup = efl_new(MY_CLASS);
+ Efl_Text_Cursor *dup = efl_text_cursor_create(efl_parent_get(obj));
- efl_text_cursor_copy(obj, dup);
+ _efl_text_cursor_copy(obj, dup);
return dup;
}
@@ -436,6 +443,11 @@ efl_text_cursor_handle_get(const Eo *obj)
return pd->handle;
}
+Eo* efl_text_cursor_create(Eo *parent)
+{
+ return efl_add(efl_text_cursor_realized_class_get(), parent);
+}
+
void efl_text_cursor_text_object_set(Eo *cursor, Eo *canvas_text_obj, Eo *text_obj)
{
Efl_Text_Cursor_Data *pd = efl_data_scope_safe_get(cursor, MY_CLASS);
diff --git a/src/lib/evas/canvas/efl_text_cursor.eo b/src/lib/evas/canvas/efl_text_cursor.eo
index 70cfdfad21..00dcbd6e63 100644
--- a/src/lib/evas/canvas/efl_text_cursor.eo
+++ b/src/lib/evas/canvas/efl_text_cursor.eo
@@ -26,7 +26,7 @@ enum @beta Efl.Text.Cursor_Move_Type
paragraph_prev [[Advances to the end of the previous paragraph.]]
}
-class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
+abstract @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
[[Cursor API.]]
c_prefix: efl_text_cursor;
methods {
@@ -112,13 +112,6 @@ class @beta Efl.Text.Cursor extends Efl.Object implements Efl.Duplicate{
return: int; [[Difference between cursors.]]
}
- copy @const {
- [[Copy existing cursor to destination cursor, like position and cursor text object.]]
- params {
- dst: Efl.Text.Cursor; [[Destination Cursor.]]
- }
- }
-
move {
[[Move the cursor.]]
params {
diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c
index 1996134966..f4d6cfb88f 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -8077,16 +8077,10 @@ _efl_canvas_textblock_all_styles_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Te
return o->default_format.default_style_str;
}
-EOLIAN static void
-_efl_canvas_textblock_cursor_add(Eo *obj, Efl_Canvas_Textblock_Data *pd EINA_UNUSED, Efl_Text_Cursor *cursor)
-{
- efl_text_cursor_text_object_set(cursor, obj, obj);
-}
-
EOLIAN static Efl_Text_Cursor *
_efl_canvas_textblock_cursor_create(Eo *obj, Efl_Canvas_Textblock_Data *pd EINA_UNUSED)
{
- Eo* cursor = efl_add(EFL_TEXT_CURSOR_CLASS, obj);
+ Eo* cursor = efl_text_cursor_create(obj);
efl_text_cursor_text_object_set(cursor, obj, obj);
return cursor;
}
diff --git a/src/tests/evas/evas_test_textblock.c b/src/tests/evas/evas_test_textblock.c
index c23eb65caa..b51f149174 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -4515,14 +4515,12 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
efl_text_cursor_line_number_set(cur_obj, 0);
ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
- Eo * cursor1 = efl_add(EFL_TEXT_CURSOR_CLASS, txt);
- pos = efl_text_cursor_position_get(cursor1);
- ck_assert_int_eq(pos, -1);
- efl_text_cursor_position_set(cursor1, 10);
- pos = efl_text_cursor_position_get(cursor1);
- ck_assert_int_eq(pos, -1);
+ Eo * cursor_temp = efl_duplicate(cur_obj);
+ ck_assert_ptr_ne(cursor_temp, NULL);
+ efl_del(cursor_temp);
+ cursor_temp = NULL;
- efl_canvas_textblock_cursor_add(txt, cursor1);
+ Eo * cursor1 = efl_canvas_textblock_cursor_create(txt);
efl_text_cursor_position_set(cursor1, 1);
pos = efl_text_cursor_position_get(cursor1);
ck_assert_int_eq(pos, 1);
@@ -4633,13 +4631,12 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
#endif
- Eo *nCur = efl_add(EFL_TEXT_CURSOR_CLASS, txt), *nCur2 = efl_add(EFL_TEXT_CURSOR_CLASS, txt), *nCur3 = efl_add(EFL_TEXT_CURSOR_CLASS, txt);
+ Eo *nCur = efl_canvas_textblock_cursor_create(txt);
+ Eo *nCur2 = efl_canvas_textblock_cursor_create(txt);
+ Eo *nCur3 = efl_canvas_textblock_cursor_create(txt);
efl_text_markup_set(txt, "Hello World<ps/>This is EFL<br/>Enlightenment");
efl_text_cursor_position_set(cur_obj, 0);
- efl_text_cursor_copy(cur_obj, nCur);
ck_assert_ptr_ne(nCur, NULL);
- efl_text_cursor_copy(cur_obj, nCur2);
- efl_text_cursor_copy(cur_obj, nCur3);
ck_assert_ptr_ne(nCur2, NULL);
ck_assert_ptr_ne(nCur3, NULL);
@@ -4655,7 +4652,7 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
ck_assert(efl_text_cursor_move(nCur, EFL_TEXT_CURSOR_MOVE_TYPE_PARAGRAPH_NEXT));
ck_assert_int_lt(efl_text_cursor_compare(cur_obj, nCur), 0);
ck_assert_int_gt(efl_text_cursor_compare(nCur, cur_obj), 0);
- efl_text_cursor_copy(nCur, nCur2);
+ efl_text_cursor_position_set(nCur2, efl_text_cursor_position_get(nCur));
ck_assert_int_lt(efl_text_cursor_compare(cur_obj, nCur2), 0);
ck_assert_int_gt(efl_text_cursor_compare(nCur2, cur_obj), 0);
ck_assert(!efl_text_cursor_equal(nCur2, nCur3));