1 #include "evas_common.h"
2 #include "evas_private.h"
5 evas_object_inject(Evas_Object *obj, Evas *e)
9 if (obj->in_layer) return;
10 lay = evas_layer_find(e, obj->cur.layer);
13 lay = evas_layer_new(e);
14 lay->layer = obj->cur.layer;
17 lay->objects = evas_object_list_append(lay->objects, obj);
24 evas_object_release(Evas_Object *obj, int clean_layer)
26 if (!obj->in_layer) return;
27 obj->layer->objects = evas_object_list_remove(obj->layer->objects, obj);
31 if (obj->layer->usage <= 0)
33 evas_layer_del(obj->layer);
34 evas_layer_free(obj->layer);
42 evas_layer_new(Evas *e)
46 lay = calloc(1, sizeof(Evas_Layer));
47 if (!lay) return NULL;
53 evas_layer_pre_free(Evas_Layer *lay)
57 for (l = (Evas_Object_List *)lay->objects; l; l = l->next)
61 obj = (Evas_Object *)l;
62 if ((!obj->smart.parent) && (!obj->delete_me))
68 evas_layer_free(Evas_Layer *lay)
74 obj = (Evas_Object *)lay->objects;
75 evas_object_free(obj, 0);
81 evas_layer_find(Evas *e, short layer_num)
83 Evas_Object_List *list;
85 for (list = (Evas_Object_List *)e->layers; list; list = list->next)
89 layer = (Evas_Layer *)list;
90 if (layer->layer == layer_num) return layer;
96 evas_layer_add(Evas_Layer *lay)
98 Evas_Object_List *list;
100 for (list = (Evas_Object_List *)lay->evas->layers; list; list = list->next)
104 layer = (Evas_Layer *)list;
105 if (layer->layer > lay->layer)
107 lay->evas->layers = evas_object_list_prepend_relative(lay->evas->layers, lay, layer);
111 lay->evas->layers = evas_object_list_append(lay->evas->layers, lay);
115 evas_layer_del(Evas_Layer *lay)
117 Evas_Object_List *ol;
120 ol = (Evas_Object_List *)lay;
122 e->layers = evas_object_list_remove(e->layers, lay);
125 /* public functions */
128 * @defgroup Evas_Object_Layer_Group Object Layer Functions
130 * Functions that retrieve and set the layer that an evas object is on.
132 * @todo Document which way layers go.
136 * Sets the layer of the evas that the given object will be part of.
137 * @param obj The given evas object.
138 * @param l The number of the layer to place the object on.
139 * @ingroup Evas_Object_Layer_Group
142 evas_object_layer_set(Evas_Object *obj, short l)
146 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
149 if (evas_object_intercept_call_layer_set(obj, l)) return;
150 if (obj->smart.parent) return;
151 if (obj->cur.layer == l)
153 evas_object_raise(obj);
156 e = obj->layer->evas;
157 evas_object_release(obj, 1);
159 evas_object_inject(obj, e);
161 evas_object_change(obj);
162 if (obj->clip.clipees)
164 evas_object_inform_call_restack(obj);
167 evas_object_change(obj);
168 if (!obj->smart.smart)
170 if (evas_object_is_in_output_rect(obj,
171 obj->layer->evas->pointer.x,
172 obj->layer->evas->pointer.y, 1, 1) &&
174 if (evas_list_find(obj->layer->evas->pointer.object.in, obj))
175 evas_event_feed_mouse_move(obj->layer->evas,
176 obj->layer->evas->pointer.x,
177 obj->layer->evas->pointer.y,
178 obj->layer->evas->last_timestamp,
181 evas_object_inform_call_restack(obj);
185 * Retrieves the layer of the evas that the given object is part of.
186 * @param obj The given evas object.
187 * @return Number of the layer.
188 * @ingroup Evas_Object_Layer_Group
191 evas_object_layer_get(const Evas_Object *obj)
193 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
196 if (obj->smart.parent)
198 return obj->smart.parent->cur.layer;
200 return obj->cur.layer;