diff --git a/legacy/edje/src/lib/Edje.h b/legacy/edje/src/lib/Edje.h index 3c60683522..45be5ab0d7 100644 --- a/legacy/edje/src/lib/Edje.h +++ b/legacy/edje/src/lib/Edje.h @@ -238,6 +238,7 @@ extern "C" { EAPI const char *edje_object_part_text_selection_get(const Evas_Object *obj, const char *part); EAPI void edje_object_part_text_insert (Evas_Object *obj, const char *part, const char *text); EAPI Eina_List *edje_object_part_text_anchor_list_get(const Evas_Object *obj, const char *part); + EAPI Eina_List *edje_object_part_text_anchor_geometry_get(const Evas_Object *obj, const char *part, const char *anchor); EAPI void edje_object_part_text_cursor_geometry_get(const Evas_Object *obj, const char *part, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); EAPI void edje_object_part_swallow (Evas_Object *obj, const char *part, Evas_Object *obj_swallow); diff --git a/legacy/edje/src/lib/edje_entry.c b/legacy/edje/src/lib/edje_entry.c index b257112154..165e2b84d1 100644 --- a/legacy/edje/src/lib/edje_entry.c +++ b/legacy/edje/src/lib/edje_entry.c @@ -34,7 +34,7 @@ struct _Entry struct _Sel { Evas_Textblock_Rectangle rect; - Evas_Object *obj_fg, *obj_bg, *obj; + Evas_Object *obj_fg, *obj_bg, *obj, *sobj; }; struct _Anchor @@ -517,6 +517,7 @@ _anchors_update(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) Evas_Textblock_Rectangle *r; r = range->data; + *(&(sel->rect)) = *r; if (sel->obj_bg) { evas_object_move(sel->obj_bg, x + r->x, y + r->y); @@ -1284,6 +1285,22 @@ _edje_entry_set_cursor_end(Edje_Real_Part *rp) _curs_end(en->cursor, rp->object, en); } +const Eina_List * +_edje_entry_anchor_geometry_get(Edje_Real_Part *rp, const char *anchor) +{ + Entry *en = rp->entry_data; + Eina_List *l; + Anchor *an; + + if (!en) return; + EINA_LIST_FOREACH(en->anchors, l, an) + { + if (!strcmp(anchor, an->name)) + return an->sel; + } + return NULL; +} + const Eina_List * _edje_entry_anchors_list(Edje_Real_Part *rp) { @@ -1296,9 +1313,7 @@ _edje_entry_anchors_list(Edje_Real_Part *rp) { EINA_LIST_FOREACH(en->anchors, l, an) { - char *n; - - n = an->name; + const char *n = an->name; if (!n) n = ""; anchors = eina_list_append(anchors, strdup(n)); } diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 011c513c27..00baa2fc90 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -1245,6 +1245,7 @@ void _edje_entry_text_markup_set(Edje_Real_Part *rp, const char *text); void _edje_entry_text_markup_insert(Edje_Real_Part *rp, const char *text); void _edje_entry_set_cursor_start(Edje_Real_Part *rp); void _edje_entry_set_cursor_end(Edje_Real_Part *rp); +const Eina_List *_edje_entry_anchor_geometry_get(Edje_Real_Part *rp, const char *anchor); const Eina_List *_edje_entry_anchors_list(Edje_Real_Part *rp); void _edje_entry_cursor_geometry_get(Edje_Real_Part *rp, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch); diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index acbe1a4f19..131a4bcc83 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -960,7 +960,7 @@ edje_object_part_text_insert(Evas_Object *obj, const char *part, const char *tex /** Returns a list of char * anchor names * @param obj A valid Evas_Object handle * @param part The part name - * @return The list of anchors + * @return The list of anchors (const char *) */ EAPI Eina_List * edje_object_part_text_anchor_list_get(const Evas_Object *obj, const char *part) @@ -977,6 +977,27 @@ edje_object_part_text_anchor_list_get(const Evas_Object *obj, const char *part) return NULL; } +/** Returns a list of Evas_Textblock_Rectangle * anchor rectangles + * @param obj A valid Evas_Object handle + * @param part The part name + * @param anchor The anchor name + * @return The list of anchor rects (const Evas_Textblock_Rectangle *) + */ +EAPI Eina_List * +edje_object_part_text_anchor_geometry_get(const Evas_Object *obj, const char *part, const char *anchor) +{ + Edje *ed; + Edje_Real_Part *rp; + + ed = _edje_fetch(obj); + if ((!ed) || (!part)) return NULL; + rp = _edje_real_part_recursive_get(ed, (char *)part); + if (!rp) return NULL; + if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + return _edje_entry_anchor_geometry_get(rp, anchor); + return NULL; +} + /** Returns the cursor geometry of the part relative to the edje object * @param obj A valid Evas_Object handle * @param part The part name