Text: enhance cursor_get to ask for a "get type"

This commit is contained in:
Daniel Hirt 2017-06-08 16:46:42 +03:00
parent 6e1b5fdd10
commit 869da955ec
6 changed files with 46 additions and 26 deletions

View File

@ -114,7 +114,7 @@ static void
my_efl_ui_text_bt_4(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Evas_Object *en = data;
efl_text_cursor_object_item_insert(en, efl_text_cursor_get(en),
efl_text_cursor_object_item_insert(en, efl_text_cursor_get(en, EFL_TEXT_CURSOR_GET_MAIN),
"size=32x32 href=emoticon");
}
@ -181,7 +181,7 @@ test_efl_ui_text(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
efl_text_font_width_set(en, EFL_TEXT_FONT_WIDTH_ULTRACONDENSED);
efl_text_style_normal_color_set(en, 255, 255, 255, 255);
main_cur = efl_text_cursor_get(en);
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);

View File

@ -17,6 +17,9 @@ interface Efl.Text.Cursor {
legacy: null;
return: ptr(Efl.Text.Cursor.Cursor_Data); [[Text cursor object]]
}
keys {
get_type: Efl.Text.Cursor.Cursor_Get_Type;
}
}
@property cursor_position {
set { legacy: null; }

View File

@ -7,6 +7,19 @@ enum Efl.Text.Bidirectional_Type {
inherit [[Inherit text type]]
}
enum Efl.Text.Cursor.Cursor_Get_Type {
[[All available cursor states]]
legacy: efl_text_cursor_get;
default = 0, [[Main cursor state (alias to "main")]]
main, [[Main cursor state]]
selection_begin, [[Selection begin cursor state]]
selection_end, [[Selection end cursor state]]
preedit_start, [[Pre-edit start cursor state]]
preedit_end, [[Pre-edit end cursor starge]]
user, [[User cursor state]]
user_extra [[User extra cursor state]]
}
struct Efl.Canvas.Text.Annotation; [[EFL text annotations data structure]]
struct Efl.Text.Cursor.Cursor_Data; [[Text cursor data structure]]

View File

@ -75,7 +75,7 @@ static Eina_Bool
_entry_imf_retrieve_surrounding_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, char **text, int *cursor_pos)
{
Efl_Canvas_Text *obj = data;
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
const char *str;
if (text)
@ -177,7 +177,7 @@ static void
_entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info EINA_UNUSED)
{
Efl_Canvas_Text *obj = data;
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
int cursor_pos;
int preedit_start_pos, preedit_end_pos;
@ -330,7 +330,7 @@ static void
_entry_imf_event_delete_surrounding_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info)
{
Efl_Canvas_Text *obj = data;
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
Ecore_IMF_Event_Delete_Surrounding *ev = event_info;
Evas_Textblock_Cursor *del_start, *del_end;
@ -373,7 +373,7 @@ static void
_entry_imf_event_selection_set_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info)
{
Efl_Canvas_Text *obj = data;
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
Ecore_IMF_Event_Selection *ev = event_info;
@ -464,7 +464,7 @@ _focus_in_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
if (!en->imf_context) return;
cur = efl_text_cursor_get(obj);
cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
ecore_imf_context_focus_in(en->imf_context);
_entry_imf_cursor_info_set(obj, cur, en);
#endif
@ -719,7 +719,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
/* FIXME: Maybe allow selctions to happen even when not editable. */
if (!en->editable) return;
cur = efl_text_cursor_get(obj);
cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
old_cur_pos = evas_textblock_cursor_pos_get(cur);
control = evas_key_modifier_is_set(ev->modifiers, "Control");
@ -1098,7 +1098,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
Evas_Coord cx, cy;
Evas_Event_Mouse_Down *ev = event_info;
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
Evas_Textblock_Cursor *tc = NULL;
Eina_Bool dosel = EINA_FALSE;
Eina_Bool shift;
@ -1209,7 +1209,7 @@ _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
{
Evas_Coord cx, cy;
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
Evas_Event_Mouse_Up *ev = event_info;
if ((!ev) || (ev->button != 1)) return;
@ -1250,7 +1250,7 @@ _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo
{
Evas_Coord cx, cy;
Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
Evas_Event_Mouse_Move *ev = event_info;
Evas_Coord x, y, w, h;
Evas_Textblock_Cursor *tc;

View File

@ -763,7 +763,7 @@ _selection_data_cb(void *data EINA_UNUSED,
{
efl_canvas_text_range_delete(obj, start, end);
}
cur = efl_text_cursor_get(obj);
cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
efl_text_cursor_text_insert(obj, cur, buf);
}
free(buf);
@ -1049,7 +1049,7 @@ _cursor_geometry_recalc(Evas_Object *obj)
x = y = w = h = 0;
Efl_Canvas_Text_Cursor *main_cur =
efl_text_cursor_get(obj);
efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
efl_text_cursor_geometry_get(obj, main_cur,
EFL_TEXT_CURSOR_TYPE_BEFORE,
@ -2772,7 +2772,7 @@ _selection_handlers_offset_calc(Evas_Object *obj, Evas_Object *handler, Evas_Coo
evas_object_geometry_get(sd->entry_edje, &ex, &ey, NULL, NULL);
efl_text_cursor_geometry_get(obj,
efl_text_cursor_get(obj),
efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN),
EFL_TEXT_CURSOR_TYPE_BEFORE,
&cx, &cy, &cw, &ch,
NULL, NULL, NULL, NULL);
@ -2813,7 +2813,7 @@ _start_handler_mouse_down_cb(void *data,
/* Get the cursors */
efl_ui_text_interactive_selection_cursors_get(text_obj, &sel_start, &sel_end);
main_cur = efl_text_cursor_get(text_obj);
main_cur = efl_text_cursor_get(text_obj, EFL_TEXT_CURSOR_GET_MAIN);
start_pos = efl_text_cursor_position_get(obj, sel_start);
end_pos = efl_text_cursor_position_get(obj, sel_end);
@ -2873,7 +2873,7 @@ _start_handler_mouse_move_cb(void *data,
pos = efl_text_cursor_position_get(obj, sd->sel_handler_cursor);
/* Set the main cursor. */
efl_text_cursor_position_set(obj, efl_text_cursor_get(data), pos);
efl_text_cursor_position_set(obj, efl_text_cursor_get(data, EFL_TEXT_CURSOR_GET_MAIN), pos);
ELM_SAFE_FREE(sd->longpress_timer, ecore_timer_del);
sd->long_pressed = EINA_FALSE;
@ -2899,7 +2899,7 @@ _end_handler_mouse_down_cb(void *data,
Eo *text_obj = edje_object_part_swallow_get(sd->entry_edje, "elm.text");
efl_ui_text_interactive_selection_cursors_get(text_obj, &sel_start, &sel_end);
main_cur = efl_text_cursor_get(text_obj);
main_cur = efl_text_cursor_get(text_obj, EFL_TEXT_CURSOR_GET_MAIN);
start_pos = efl_text_cursor_position_get(obj, sel_start);
end_pos = efl_text_cursor_position_get(obj, sel_end);
@ -2959,7 +2959,7 @@ _end_handler_mouse_move_cb(void *data,
efl_text_cursor_coord_set(obj, sd->sel_handler_cursor, cx, cy);
pos = efl_text_cursor_position_get(obj, sd->sel_handler_cursor);
/* Set the main cursor. */
efl_text_cursor_position_set(obj, efl_text_cursor_get(data), pos);
efl_text_cursor_position_set(obj, efl_text_cursor_get(data, EFL_TEXT_CURSOR_GET_MAIN), pos);
ELM_SAFE_FREE(sd->longpress_timer, ecore_timer_del);
sd->long_pressed = EINA_FALSE;
if (_elm_config->magnifier_enable)
@ -3451,7 +3451,7 @@ _efl_ui_text_selection_handler_disabled_get(Eo *obj EINA_UNUSED, Efl_Ui_Text_Dat
static void
_efl_ui_text_entry_insert(Eo *obj, Efl_Ui_Text_Data *sd, const char *entry)
{
Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
efl_text_cursor_text_insert(obj, cur_obj, entry);
sd->changed = EINA_TRUE;
elm_layout_sizing_eval(obj);
@ -4217,13 +4217,13 @@ fail:
EOLIAN static int
_efl_ui_text_elm_interface_atspi_text_caret_offset_get(Eo *obj, Efl_Ui_Text_Data *_pd EINA_UNUSED)
{
return efl_text_cursor_position_get(obj, efl_text_cursor_get(obj));
return efl_text_cursor_position_get(obj, efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN));
}
EOLIAN static Eina_Bool
_efl_ui_text_elm_interface_atspi_text_caret_offset_set(Eo *obj, Efl_Ui_Text_Data *_pd EINA_UNUSED, int offset)
{
efl_text_cursor_position_set(obj, efl_text_cursor_get(obj), offset);
efl_text_cursor_position_set(obj, efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN), offset);
return EINA_TRUE;
}
@ -4529,7 +4529,7 @@ _efl_ui_text_elm_interface_atspi_text_editable_content_set(Eo *obj, Efl_Ui_Text_
EOLIAN static Eina_Bool
_efl_ui_text_elm_interface_atspi_text_editable_insert(Eo *obj, Efl_Ui_Text_Data *pd, const char *string, int position)
{
Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
efl_text_cursor_position_set(obj, cur_obj, position);
_efl_ui_text_entry_insert(obj, pd, string);
@ -4579,7 +4579,7 @@ _efl_ui_text_elm_interface_atspi_text_editable_delete(Eo *obj, Efl_Ui_Text_Data
EOLIAN static Eina_Bool
_efl_ui_text_elm_interface_atspi_text_editable_paste(Eo *obj, Efl_Ui_Text_Data *_pd EINA_UNUSED, int position)
{
Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj);
Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
efl_text_cursor_position_set(obj, cur_obj, position);
efl_ui_text_selection_paste(obj);
return EINA_TRUE;
@ -4701,7 +4701,7 @@ _update_text_cursors(Eo *obj)
xx = yy = ww = hh = -1;
_decoration_calc_offset(sd, &x, &y);
bidi_cursor = efl_text_cursor_geometry_get(obj,
efl_text_cursor_get(text_obj),
efl_text_cursor_get(text_obj, EFL_TEXT_CURSOR_GET_MAIN),
EFL_TEXT_CURSOR_TYPE_BEFORE, &xx, &yy, &ww, &hh, &xx2, &yy2,
NULL, NULL);
if (ww < 1) ww = 1;

View File

@ -15548,15 +15548,19 @@ ppar(Evas_Object_Textblock_Paragraph *par)
EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_canvas_text_efl_object_dbg_info_get)
EOLIAN static Efl_Canvas_Text_Cursor *
_efl_canvas_text_efl_text_cursor_cursor_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
_efl_canvas_text_efl_text_cursor_cursor_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o, Efl_Text_Cursor_Cursor_Get_Type get_type)
{
if (get_type > EFL_TEXT_CURSOR_GET_MAIN)
{
ERR("Unsupported cursor types other than main!");
}
return o->cursor;
}
EAPI Efl_Canvas_Text_Cursor *
evas_object_textblock_cursor_get(Eo *eo_obj EINA_UNUSED)
{
return efl_text_cursor_get(eo_obj);
return efl_text_cursor_get(eo_obj, EFL_TEXT_CURSOR_GET_MAIN);
}
EOLIAN static Efl_Canvas_Text_Cursor *