Canvas text cursor: add simple_geometry_get method

The ported geometry_get was actually the legacy simple_geometry_get.
For getting simple geometries like selection this was enough, but I forgot that
we also need to query more complex geometries e.g. links.
This is required to implement link anchors in Ui Text.

Now geometry_get and simple_geometry_get are the same as their legacy
counterparts.

@feature
This commit is contained in:
Daniel Hirt 2016-10-05 17:09:59 +03:00
parent 42a3c773c0
commit c0701a1051
2 changed files with 48 additions and 8 deletions

View File

@ -232,9 +232,27 @@ class Efl.Canvas.Text (Efl.Canvas.Object, Efl.Text)
return: Efl.Canvas.Text.Annotation *; return: Efl.Canvas.Text.Annotation *;
} }
range_geometry_get { range_geometry_get {
[[Get the geometry of a range. The geometry is the geometry in [[Get the geometry of a range in the text.
which rectangles in middle lines of range are merged into one big
rectangle. The geometry is represented as rectangles for each of the line
segments in the given range [$cur1, $cur2].
@since 1.19
]]
legacy: null;
params {
@in cur1: const(Efl.Canvas.Text.Cursor);
@in cur2: const(Efl.Canvas.Text.Cursor);
}
return: free(own(iterator<Eina.Rectangle>),
eina_iterator_free);
}
range_simple_geometry_get {
[[Get the "simple" geometry of a range.
The geometry is the geometry in which rectangles in middle lines of
range are merged into one big rectangle. This is an optimized
version of @.range_geometry_get.
@since 1.13 @since 1.13
]] ]]

View File

@ -11990,11 +11990,11 @@ evas_textblock_cursor_range_simple_geometry_get(const Efl_Canvas_Text_Cursor *cu
{ {
Efl_Canvas_Text_Cursor_Data *cur = efl_data_scope_get(cur1_obj, EFL_CANVAS_TEXT_CURSOR_CLASS); Efl_Canvas_Text_Cursor_Data *cur = efl_data_scope_get(cur1_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
if (!cur) return NULL; if (!cur) return NULL;
return efl_canvas_text_range_geometry_get(cur->obj, cur1_obj, cur2_obj); return efl_canvas_text_range_simple_geometry_get(cur->obj, cur1_obj, cur2_obj);
} }
static EOLIAN Eina_Iterator * static EOLIAN Eina_Iterator *
_efl_canvas_text_range_geometry_get(Eo *eo_obj EINA_UNUSED, _efl_canvas_text_range_simple_geometry_get(Eo *eo_obj EINA_UNUSED,
Efl_Canvas_Text_Data *o, const Efl_Canvas_Text_Cursor *cur1_obj, const Efl_Canvas_Text_Data *o, const Efl_Canvas_Text_Cursor *cur1_obj, const
Evas_Textblock_Cursor *cur2_obj) Evas_Textblock_Cursor *cur2_obj)
{ {
@ -12102,8 +12102,10 @@ _efl_canvas_text_range_geometry_get(Eo *eo_obj EINA_UNUSED,
return itr; return itr;
} }
EAPI Eina_List * static Eina_List *
evas_textblock_cursor_range_geometry_get(const Efl_Canvas_Text_Cursor *cur1_obj, const Evas_Textblock_Cursor *cur2_obj) _efl_canvas_text_range_geometry_list_get(Eo *eo_obj EINA_UNUSED,
Efl_Canvas_Text_Data *o, const Efl_Canvas_Text_Cursor *cur1_obj, const
Evas_Textblock_Cursor *cur2_obj)
{ {
Evas_Object_Textblock_Line *ln1, *ln2; Evas_Object_Textblock_Line *ln1, *ln2;
Evas_Object_Textblock_Item *it1, *it2; Evas_Object_Textblock_Item *it1, *it2;
@ -12117,7 +12119,6 @@ evas_textblock_cursor_range_geometry_get(const Efl_Canvas_Text_Cursor *cur1_obj,
if (cur1->obj != cur2->obj) return NULL; if (cur1->obj != cur2->obj) return NULL;
Evas_Object_Protected_Data *obj = efl_data_scope_get(cur1->obj, EFL_CANVAS_OBJECT_CLASS); Evas_Object_Protected_Data *obj = efl_data_scope_get(cur1->obj, EFL_CANVAS_OBJECT_CLASS);
evas_object_async_block(obj); evas_object_async_block(obj);
Efl_Canvas_Text_Data *o = efl_data_scope_get(cur1->obj, MY_CLASS);
_relayout_if_needed(cur1->obj, o); _relayout_if_needed(cur1->obj, o);
@ -12180,6 +12181,27 @@ evas_textblock_cursor_range_geometry_get(const Efl_Canvas_Text_Cursor *cur1_obj,
return rects; return rects;
} }
EAPI Eina_List *
evas_textblock_cursor_range_geometry_get(const Efl_Canvas_Text_Cursor *cur1_obj, const Evas_Textblock_Cursor *cur2_obj)
{
Efl_Canvas_Text_Cursor_Data *cur = efl_data_scope_get(cur1_obj, EFL_CANVAS_TEXT_CURSOR_CLASS);
Efl_Canvas_Text_Data *o = efl_data_scope_get(cur->obj, MY_CLASS);
if (!cur) return NULL;
return _efl_canvas_text_range_geometry_list_get(cur->obj, o, cur1_obj, cur2_obj);
}
static EOLIAN Eina_Iterator *
_efl_canvas_text_range_geometry_get(Eo *eo_obj EINA_UNUSED,
Efl_Canvas_Text_Data *o, const Efl_Canvas_Text_Cursor *cur1_obj, const
Evas_Textblock_Cursor *cur2_obj)
{
Eina_List *rects = _efl_canvas_text_range_geometry_list_get(eo_obj,
o, cur1_obj, cur2_obj);
return _evas_textblock_selection_iterator_new(rects);
}
static Eina_Bool static Eina_Bool
_evas_textblock_cursor_format_item_geometry_get(const Efl_Canvas_Text_Cursor_Data *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) _evas_textblock_cursor_format_item_geometry_get(const Efl_Canvas_Text_Cursor_Data *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch)
{ {