static void
_edje_map_prop_set(Evas_Map *map, const Edje_Calc_Params *pf,
Edje_Part_Description_Common *chosen_desc,
- Edje_Real_Part *ep, Evas_Object *mo)
+ Edje_Real_Part *ep, Evas_Object *mo, Evas_Object *populate_obj)
{
Edje_Map_Color *color, **colors;
int colors_cnt, i;
colors = pf->ext->map->colors;
colors_cnt = pf->ext->map->colors_count;
- evas_map_util_points_populate_from_object(map, ep->object);
+ evas_map_util_points_populate_from_object(map, populate_obj ?: ep->object);
if (ep->part->type == EDJE_PART_TYPE_IMAGE ||
((ep->part->type == EDJE_PART_TYPE_SWALLOW) &&
if (ep->part->type != EDJE_PART_TYPE_SPACER)
{
Evas_Object *map_obj;
+ Evas_Object *cursor_objs[EDJE_ENTRY_NUM_CURSOR_OBJS];
+ int c = 0, num_cursors = 0;
/* Apply map to smart obj holding nested parts */
if (ep->nested_smart) map_obj = ep->nested_smart;
else map_obj = mo;
+ if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK)
+ num_cursors = _edje_entry_real_part_cursor_objs_get(ep, cursor_objs);
if (chosen_desc->map.on)
{
// create map and populate with part geometry
if (!map) map = evas_map_new(4);
- _edje_map_prop_set(map, pf, chosen_desc, ep, mo);
+ _edje_map_prop_set(map, pf, chosen_desc, ep, mo, NULL);
if (map_obj)
{
evas_object_map_set(map_obj, map);
evas_object_map_enable_set(map_obj, EINA_TRUE);
+ if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK)
+ {
+ for (c = 0; c < num_cursors; c++)
+ {
+ _edje_map_prop_set(map, pf, chosen_desc, ep, mo, cursor_objs[c]);
+ evas_object_map_set(cursor_objs[c], map);
+ evas_object_map_enable_set(cursor_objs[c], EINA_TRUE);
+ }
+ }
}
}
else
#endif
evas_object_map_enable_set(mo, EINA_FALSE);
evas_object_map_set(mo, NULL);
+ if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK)
+ {
+ for (c = 0; c < num_cursors; c++)
+ {
+ evas_object_map_enable_set(cursor_objs[c], EINA_FALSE);
+ evas_object_map_set(cursor_objs[c], NULL);
+ }
+ }
#ifdef HAVE_EPHYSICS
}
#endif
Evas_Coord ox, oy;
Evas_Object *cursor_bg;
Evas_Object *cursor_fg, *cursor_fg2;
+/* CHANGE EDJE_ENTRY_NUM_CURSOR_OBJS IF YOU ADD MORE OBJECTS HERE */
Evas_Textblock_Cursor *cursor;
Evas_Textblock_Cursor *sel_start, *sel_end;
Evas_Textblock_Cursor *cursor_user, *cursor_user_extra;
_evas_focus_out_cb, ed);
}
+int
+_edje_entry_real_part_cursor_objs_get(Edje_Real_Part *rp, Evas_Object **cursor_objs)
+{
+ Entry *en;
+ int ret = 0;
+
+ if ((rp->type != EDJE_RP_TYPE_TEXT) ||
+ (!rp->typedata.text) || (!rp->typedata.text->entry_data)) return -1;
+
+ en = rp->typedata.text->entry_data;
+
+ if (en->cursor_bg) cursor_objs[ret++] = en->cursor_bg;
+ if (en->cursor_fg) cursor_objs[ret++] = en->cursor_fg;
+ if (en->cursor_fg2) cursor_objs[ret++] = en->cursor_fg2;
+ return ret;
+}
+
void
_edje_entry_real_part_init(Edje *ed, Edje_Real_Part *rp, Ecore_IMF_Context *ic)
{
#endif
+#define EDJE_ENTRY_NUM_CURSOR_OBJS 3
+
/* Inheritable Edje Smart API. For now private so only Edje Edit makes
* use of this, but who knows what will be possible in the future */
#define EDJE_SMART_API_VERSION 1
void _edje_entry_init(Edje *ed);
void _edje_entry_shutdown(Edje *ed);
+int _edje_entry_real_part_cursor_objs_get(Edje_Real_Part *rp, Evas_Object **objs);
void _edje_entry_real_part_init(Edje *ed, Edje_Real_Part *rp, Ecore_IMF_Context *ic);
void _edje_entry_real_part_shutdown(Edje *ed, Edje_Real_Part *rp, Eina_Bool reuse_ic);
void _edje_entry_real_part_configure(Edje *ed, Edje_Real_Part *rp);