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 *;
}
range_geometry_get {
[[Get the geometry of a range. The geometry is the geometry in
which rectangles in middle lines of range are merged into one big
rectangle.
[[Get the geometry of a range in the text.
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
]]

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);
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 *
_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
Evas_Textblock_Cursor *cur2_obj)
{
@ -12102,8 +12102,10 @@ _efl_canvas_text_range_geometry_get(Eo *eo_obj EINA_UNUSED,
return itr;
}
EAPI Eina_List *
evas_textblock_cursor_range_geometry_get(const Efl_Canvas_Text_Cursor *cur1_obj, const Evas_Textblock_Cursor *cur2_obj)
static Eina_List *
_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_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;
Evas_Object_Protected_Data *obj = efl_data_scope_get(cur1->obj, EFL_CANVAS_OBJECT_CLASS);
evas_object_async_block(obj);
Efl_Canvas_Text_Data *o = efl_data_scope_get(cur1->obj, MY_CLASS);
_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;
}
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
_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)
{