static Eina_Bool _evas_object_map_parent_check(Evas_Object *eo_parent) { const Eina_Inlist *list; const Evas_Object_Protected_Data *o; if (!eo_parent) return EINA_FALSE; Evas_Object_Protected_Data *parent = eo_data_get(eo_parent, EVAS_OBJ_CLASS); list = evas_object_smart_members_get_direct(parent->smart.parent); EINA_INLIST_FOREACH(list, o) if (o->cur.usemap) break ; if (o) return EINA_FALSE; /* Still some child have a map enable */ parent->child_has_map = EINA_FALSE; _evas_object_map_parent_check(parent->smart.parent); return EINA_TRUE; }
static void evas_object_child_map_across_mark(Evas_Object *obj, Evas_Object *map_obj, Eina_Bool force) { #ifdef MAP_ACROSS if ((obj->cur.map_parent != map_obj) || force) { obj->cur.map_parent = map_obj; obj->cur.cache.clip.dirty = 1; evas_object_clip_recalc(obj); if (obj->smart.smart) { Evas_Object *obj2; EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(obj), obj2) { // if obj has its own map - skip it. already done if ((obj2->cur.map) && (obj2->cur.usemap)) continue; evas_object_child_map_across_mark(obj2, map_obj, force); } }
EAPI void evas_object_smart_move_children_relative(Evas_Object *obj, Evas_Coord dx, Evas_Coord dy) { const Eina_Inlist *lst; Evas_Object *child; if ((dx == 0) && (dy == 0)) return; lst = evas_object_smart_members_get_direct(obj); EINA_INLIST_FOREACH(lst, child) { Evas_Coord orig_x, orig_y; // shortcut as we are in evas // evas_object_geometry_get(child, &orig_x, &orig_y, NULL, NULL); if (child->delete_me) continue; if (child->is_static_clip) continue; orig_x = child->cur.geometry.x; orig_y = child->cur.geometry.y; evas_object_move(child, orig_x + dx, orig_y + dy); }