{
Eina_List *l;
Evas_Object *obj2;
-
+ Eina_Bool movch = 0;
+
if (obj->layer->evas->nochange)
{
// printf("nochange %p\n", obj);
// else
// printf("ch %p\n", obj);
obj->layer->evas->changed = 1;
- if (obj->changed) return;
+ if (obj->changed_move)
+ {
+ movch = 1;
+ obj->changed_move = 0;
+ if (!obj->changed_nomove) obj->changed_move_only = 1;
+ if (obj->changed) return;
+ }
+ else
+ {
+ obj->changed_move_only = 0;
+ obj->changed_nomove = 1;
+ if (obj->changed) return;
+ }
// obj->changed = 1;
evas_render_object_recalc(obj);
/* set changed flag on all objects this one clips too */
- EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) evas_object_change(obj2);
+ if (!((movch) && (obj->is_static_clip)))
+ {
+ EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) evas_object_change(obj2);
+ }
if (obj->smart.parent) evas_object_change(obj->smart.parent);
}
obj->cur.geometry.x = x;
obj->cur.geometry.y = y;
//// obj->cur.cache.geometry.validity = 0;
+ obj->changed_move = 1;
evas_object_change(obj);
evas_object_clip_dirty(obj);
obj->doing.in_move--;
obj->pre_render_done = 0;
//// FIXME: this wipes out changes
obj->changed = 0;
+ obj->changed_move_only = 0;
+ obj->changed_nomove = 0;
+ obj->changed_move = 0;
}
return obj->changed ? EINA_TRUE : EINA_FALSE;
}
+/*
+static void
+unchange(Evas_Object *obj)
+{
+ Evas_Object *obj2;
+
+ if (!obj->changed) return;
+ obj->changed = 0;
+ obj->changed_move_only = 0;
+ obj->changed_nomove = 0;
+ obj->changed_move = 0;
+ EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(obj), obj2)
+ {
+ unchange(obj2);
+ }
+}
+
+static int
+chlist(Evas_Object *obj, int i)
+{
+ Evas_Object *obj2;
+ int j;
+ int ret = 0;
+
+ if (!obj->changed) return 0;
+ for (j = 0; j < i; j++) printf(" ");
+ printf("ch2 %p %s %i [%i %i %ix%i] v %i/%i [r%i] %p\n", obj,
+ obj->type,
+ obj->changed_move_only,
+ obj->cur.geometry.x,
+ obj->cur.geometry.y,
+ obj->cur.geometry.w,
+ obj->cur.geometry.h,
+ obj->cur.visible,
+ obj->prev.visible,
+ obj->restack,
+ obj->clip.clipees);
+ EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(obj), obj2)
+ {
+ if (obj2->changed)
+ ret |= chlist(obj2, i + 1);
+ }
+}
+*/
static Eina_Bool
evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
!evas_object_was_visible(obj2))
{
obj2->changed = 0;
+ obj2->changed_move_only = 0;
+ obj2->changed_nomove = 0;
+ obj2->changed_move = 0;
continue;
}
if (obj2->changed)
{
- obj2->changed = 0;
+// chlist(obj2, 0);
changed = 1;
+ obj2->changed = 0;
+ obj2->changed_move_only = 0;
+ obj2->changed_nomove = 0;
+ obj2->changed_move = 0;
break;
}
}
+// unchange(obj);
obj->changed = 0;
+ obj->changed_move_only = 0;
+ obj->changed_nomove = 0;
+ obj->changed_move = 0;
}
else
{
if (obj->changed)
{
- obj->changed = 0;
changed = 1;
+ obj->changed = 0;
+ obj->changed_move_only = 0;
+ obj->changed_nomove = 0;
+ obj->changed_move = 0;
}
}
obj->func->render_post(obj);
obj->restack = 0;
obj->changed = 0;
+ obj->changed_move_only = 0;
+ obj->changed_nomove = 0;
+ obj->changed_move = 0;
}
else if ((obj->cur.map != obj->prev.map) ||
(obj->cur.usemap != obj->prev.usemap))
obj->func->render_post(obj);
obj->restack = 0;
obj->changed = 0;
+ obj->changed_move_only = 0;
+ obj->changed_nomove = 0;
+ obj->changed_move = 0;
}
/* moved to other pre-process phase 1
if (obj->delete_me == 2)
Eina_Bool parent_cache_valid : 1;
Eina_Bool repeat_events : 1;
Eina_Bool restack : 1;
- Eina_Bool changed : 1;
- Eina_Bool changed_move : 1;
Eina_Bool is_active : 1;
+ Eina_Bool precise_is_inside : 1;
+ Eina_Bool is_static_clip : 1;
Eina_Bool render_pre : 1;
Eina_Bool rect_del : 1;
Eina_Bool in_layer : 1;
Eina_Bool no_propagate : 1;
- Eina_Bool precise_is_inside : 1;
- Eina_Bool is_static_clip : 1;
+ Eina_Bool changed : 1;
+ Eina_Bool changed_move : 1;
+ Eina_Bool changed_move_only : 1;
+ Eina_Bool changed_nomove : 1;
};
struct _Evas_Func_Node