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)
/* 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);
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)
_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);
{
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);
}
}
{
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);
}
}
// 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);
// 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);
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;
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
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);
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
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);
if (en->select_allow)
{
- efl_text_cursor_copy(en->sel_end, cur);
+ _cur_pos_copy(en->sel_end, cur);
}
if (en->selecting)
{
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;
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;
}
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.]]
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.
/**
+ * 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.
#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"
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)
{
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);
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;
}
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);
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 {
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 {
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;
}
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);
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);
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));