forked from enlightenment/efl
1. if you stack above/below yourself.. you get lost as an obj! ignore
that case 2. add render debug #ifdef in evas_render.c and latent render debug stuff SVN revision: 43706
This commit is contained in:
parent
43115643e8
commit
a6798a676f
|
@ -1,6 +1,43 @@
|
||||||
#include "evas_common.h"
|
#include "evas_common.h"
|
||||||
#include "evas_private.h"
|
#include "evas_private.h"
|
||||||
|
|
||||||
|
// debug rendering
|
||||||
|
//#define REND_DGB 1
|
||||||
|
|
||||||
|
#ifdef REND_DGB
|
||||||
|
static FILE *dbf = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
rend_dbg(const char *txt)
|
||||||
|
{
|
||||||
|
if (!dbf)
|
||||||
|
{
|
||||||
|
dbf = fopen("EVAS-RENDER-DEBUG.log", "w");
|
||||||
|
if (!dbf) return;
|
||||||
|
}
|
||||||
|
fputs(txt, dbf);
|
||||||
|
fflush(dbf);
|
||||||
|
}
|
||||||
|
#define RD(args...) \
|
||||||
|
{ \
|
||||||
|
char __tmpbuf[4096]; \
|
||||||
|
\
|
||||||
|
snprintf(__tmpbuf, sizeof(__tmpbuf), ##args); \
|
||||||
|
rend_dbg(__tmpbuf); \
|
||||||
|
}
|
||||||
|
#define RDI(xxxx) \
|
||||||
|
{ \
|
||||||
|
char __tmpbuf[4096]; int __tmpi; \
|
||||||
|
for (__tmpi = 0; __tmpi < xxxx; __tmpi++) \
|
||||||
|
__tmpbuf[__tmpi] = ' '; \
|
||||||
|
__tmpbuf[__tmpi] = 0; \
|
||||||
|
rend_dbg(__tmpbuf); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define RD(args...)
|
||||||
|
#define RDI(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
static Eina_List *
|
static Eina_List *
|
||||||
evas_render_updates_internal(Evas *e, unsigned char make_updates, unsigned char do_draw);
|
evas_render_updates_internal(Evas *e, unsigned char make_updates, unsigned char do_draw);
|
||||||
|
|
||||||
|
@ -146,11 +183,13 @@ _evas_render_phase1_direct(Evas *e,
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
RD(" [--- PHASE 1 DIRECT\n");
|
||||||
for (i = 0; i < render_objects->count; i++)
|
for (i = 0; i < render_objects->count; i++)
|
||||||
{
|
{
|
||||||
Evas_Object *obj;
|
Evas_Object *obj;
|
||||||
|
|
||||||
obj = eina_array_data_get(render_objects, i);
|
obj = eina_array_data_get(render_objects, i);
|
||||||
|
RD(" OBJ [%p] changed %i\n", obj, obj->changed);
|
||||||
if (obj->changed)
|
if (obj->changed)
|
||||||
{
|
{
|
||||||
evas_object_clip_recalc(obj);
|
evas_object_clip_recalc(obj);
|
||||||
|
@ -158,10 +197,16 @@ _evas_render_phase1_direct(Evas *e,
|
||||||
if (obj->pre_render_done)
|
if (obj->pre_render_done)
|
||||||
{
|
{
|
||||||
if ((obj->smart.smart) && _evas_render_has_map(obj))
|
if ((obj->smart.smart) && _evas_render_has_map(obj))
|
||||||
_evas_render_prev_cur_clip_cache_add(e, obj);
|
{
|
||||||
|
RD(" has map + smart\n");
|
||||||
|
_evas_render_prev_cur_clip_cache_add(e, obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (_evas_render_had_map(obj))
|
else if (_evas_render_had_map(obj))
|
||||||
_evas_render_prev_cur_clip_cache_add(e, obj);
|
{
|
||||||
|
RD(" no pre-render done\n");
|
||||||
|
_evas_render_prev_cur_clip_cache_add(e, obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -170,9 +215,13 @@ _evas_render_phase1_direct(Evas *e,
|
||||||
// obj->func->render_pre(obj);
|
// obj->func->render_pre(obj);
|
||||||
}
|
}
|
||||||
else if (obj->rect_del)
|
else if (obj->rect_del)
|
||||||
_evas_render_cur_clip_cache_del(e, obj);
|
{
|
||||||
|
RD(" rect del\n");
|
||||||
|
_evas_render_cur_clip_cache_del(e, obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RD(" ---]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -181,7 +230,11 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
Eina_Array *restack_objects,
|
Eina_Array *restack_objects,
|
||||||
Eina_Array *delete_objects,
|
Eina_Array *delete_objects,
|
||||||
Eina_Array *render_objects,
|
Eina_Array *render_objects,
|
||||||
int restack, int map)
|
int restack, int map
|
||||||
|
#ifdef REND_DGB
|
||||||
|
, int level
|
||||||
|
#endif
|
||||||
|
)
|
||||||
{
|
{
|
||||||
Eina_Bool clean_them = EINA_FALSE;
|
Eina_Bool clean_them = EINA_FALSE;
|
||||||
Evas_Object *obj2;
|
Evas_Object *obj2;
|
||||||
|
@ -200,6 +253,9 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
evas_object_clip_recalc(obj);
|
evas_object_clip_recalc(obj);
|
||||||
is_active = evas_object_is_active(obj);
|
is_active = evas_object_is_active(obj);
|
||||||
obj->is_active = is_active;
|
obj->is_active = is_active;
|
||||||
|
|
||||||
|
RDI(level);
|
||||||
|
RD(" [--- PROCESS [%p] '%s' active = %i, del = %i | %i %i %ix%i\n", obj, obj->type, is_active, obj->delete_me, obj->cur.geometry.x, obj->cur.geometry.y, obj->cur.geometry.w, obj->cur.geometry.h);
|
||||||
if ((is_active) || (obj->delete_me != 0))
|
if ((is_active) || (obj->delete_me != 0))
|
||||||
eina_array_push(active_objects, obj);
|
eina_array_push(active_objects, obj);
|
||||||
|
|
||||||
|
@ -218,6 +274,8 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
|
|
||||||
if (map)
|
if (map)
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" obj mapped\n");
|
||||||
if (obj->changed)
|
if (obj->changed)
|
||||||
{
|
{
|
||||||
evas_object_clip_recalc(obj);
|
evas_object_clip_recalc(obj);
|
||||||
|
@ -243,7 +301,9 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
}
|
}
|
||||||
else if (_evas_render_had_map(obj))
|
else if (_evas_render_had_map(obj))
|
||||||
{
|
{
|
||||||
eina_array_push(restack_objects, obj);
|
RDI(level);
|
||||||
|
RD(" had map - restack objs\n");
|
||||||
|
// eina_array_push(restack_objects, obj);
|
||||||
_evas_render_prev_cur_clip_cache_add(e, obj);
|
_evas_render_prev_cur_clip_cache_add(e, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,6 +313,8 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
{
|
{
|
||||||
if (obj->smart.smart)
|
if (obj->smart.smart)
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" changed + smart - render ok\n");
|
||||||
eina_array_push(render_objects, obj);
|
eina_array_push(render_objects, obj);
|
||||||
obj->render_pre = 1;
|
obj->render_pre = 1;
|
||||||
EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(obj), obj2)
|
EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(obj), obj2)
|
||||||
|
@ -263,7 +325,11 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
delete_objects,
|
delete_objects,
|
||||||
render_objects,
|
render_objects,
|
||||||
obj->restack,
|
obj->restack,
|
||||||
map);
|
map
|
||||||
|
#ifdef REND_DGB
|
||||||
|
, level + 1
|
||||||
|
#endif
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -271,6 +337,8 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
if ((is_active) && (!obj->clip.clipees) &&
|
if ((is_active) && (!obj->clip.clipees) &&
|
||||||
_evas_render_is_relevant(obj))
|
_evas_render_is_relevant(obj))
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" relevant + active\n");
|
||||||
if (obj->restack)
|
if (obj->restack)
|
||||||
eina_array_push(restack_objects, obj);
|
eina_array_push(restack_objects, obj);
|
||||||
else
|
else
|
||||||
|
@ -279,6 +347,11 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
obj->render_pre = 1;
|
obj->render_pre = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" skip - not smart, not active or clippees or not relevant\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -289,6 +362,8 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
{
|
{
|
||||||
if (obj->smart.smart)
|
if (obj->smart.smart)
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" smart + visible/was visible + not clip\n");
|
||||||
eina_array_push(render_objects, obj);
|
eina_array_push(render_objects, obj);
|
||||||
obj->render_pre = 1;
|
obj->render_pre = 1;
|
||||||
EINA_INLIST_FOREACH
|
EINA_INLIST_FOREACH
|
||||||
|
@ -299,7 +374,11 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
restack_objects,
|
restack_objects,
|
||||||
delete_objects,
|
delete_objects,
|
||||||
render_objects,
|
render_objects,
|
||||||
restack, map);
|
restack, map
|
||||||
|
#ifdef REND_DGB
|
||||||
|
, level + 1
|
||||||
|
#endif
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -307,18 +386,52 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj,
|
||||||
if (evas_object_is_opaque(obj) &&
|
if (evas_object_is_opaque(obj) &&
|
||||||
evas_object_is_visible(obj))
|
evas_object_is_visible(obj))
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" opaque + visible\n");
|
||||||
eina_array_push(render_objects, obj);
|
eina_array_push(render_objects, obj);
|
||||||
obj->rect_del = 1;
|
obj->rect_del = 1;
|
||||||
}
|
}
|
||||||
else if (evas_object_is_visible(obj))
|
else if (evas_object_is_visible(obj))
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" visible\n");
|
||||||
eina_array_push(render_objects, obj);
|
eina_array_push(render_objects, obj);
|
||||||
obj->render_pre = 1;
|
obj->render_pre = 1;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" skip\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
else if (obj->smart.smart)
|
||||||
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" smart + mot visible/was visible\n");
|
||||||
|
eina_array_push(render_objects, obj);
|
||||||
|
obj->render_pre = 1;
|
||||||
|
EINA_INLIST_FOREACH
|
||||||
|
(evas_object_smart_members_get_direct(obj), obj2)
|
||||||
|
{
|
||||||
|
_evas_render_phase1_object_process(e, obj2,
|
||||||
|
active_objects,
|
||||||
|
restack_objects,
|
||||||
|
delete_objects,
|
||||||
|
render_objects,
|
||||||
|
restack, map
|
||||||
|
#ifdef REND_DGB
|
||||||
|
, level + 1
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
if (!is_active) obj->restack = 0;
|
if (!is_active) obj->restack = 0;
|
||||||
|
RDI(level);
|
||||||
|
RD(" ---]\n");
|
||||||
return clean_them;
|
return clean_them;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,6 +445,7 @@ _evas_render_phase1_process(Evas *e,
|
||||||
Evas_Layer *lay;
|
Evas_Layer *lay;
|
||||||
Eina_Bool clean_them = EINA_FALSE;
|
Eina_Bool clean_them = EINA_FALSE;
|
||||||
|
|
||||||
|
RD(" [--- PHASE 1\n");
|
||||||
EINA_INLIST_FOREACH(e->layers, lay)
|
EINA_INLIST_FOREACH(e->layers, lay)
|
||||||
{
|
{
|
||||||
Evas_Object *obj;
|
Evas_Object *obj;
|
||||||
|
@ -340,9 +454,14 @@ _evas_render_phase1_process(Evas *e,
|
||||||
{
|
{
|
||||||
clean_them |= _evas_render_phase1_object_process
|
clean_them |= _evas_render_phase1_object_process
|
||||||
(e, obj, active_objects, restack_objects, delete_objects,
|
(e, obj, active_objects, restack_objects, delete_objects,
|
||||||
render_objects, 0, 0);
|
render_objects, 0, 0
|
||||||
|
#ifdef REND_DGB
|
||||||
|
, 1
|
||||||
|
#endif
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RD(" ---]\n");
|
||||||
|
|
||||||
return clean_them;
|
return clean_them;
|
||||||
}
|
}
|
||||||
|
@ -433,22 +552,36 @@ pending_change(void *data, void *gdata __UNUSED__)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
int off_x, int off_y, int mapped)
|
int off_x, int off_y, int mapped
|
||||||
|
#ifdef REND_DGB
|
||||||
|
, int level
|
||||||
|
#endif
|
||||||
|
)
|
||||||
{
|
{
|
||||||
void *ctx;
|
void *ctx;
|
||||||
Evas_Object *obj2;
|
Evas_Object *obj2;
|
||||||
|
|
||||||
evas_object_clip_recalc(obj);
|
evas_object_clip_recalc(obj);
|
||||||
|
RDI(level);
|
||||||
|
RD(" { evas_render_mapped(%p, %p, %p, %p, %i, %i, %i, %i)\n", e, obj, context, surface, off_x, off_y, mapped, level);
|
||||||
if (mapped)
|
if (mapped)
|
||||||
{
|
{
|
||||||
if ((!evas_object_is_visible(obj)) || (obj->clip.clipees) ||
|
if ((!evas_object_is_visible(obj)) || (obj->clip.clipees) ||
|
||||||
(obj->cur.have_clipees))
|
(obj->cur.have_clipees))
|
||||||
return;
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" }\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (!(((evas_object_is_active(obj) && (!obj->clip.clipees) &&
|
else if (!(((evas_object_is_active(obj) && (!obj->clip.clipees) &&
|
||||||
((evas_object_is_visible(obj) && (!obj->cur.have_clipees)))))
|
((evas_object_is_visible(obj) && (!obj->cur.have_clipees)))))
|
||||||
))
|
))
|
||||||
return;
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" }\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_evas_render_has_map(obj))
|
if (_evas_render_has_map(obj))
|
||||||
{
|
{
|
||||||
|
@ -459,7 +592,14 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
|
|
||||||
sw = obj->cur.geometry.w;
|
sw = obj->cur.geometry.w;
|
||||||
sh = obj->cur.geometry.h;
|
sh = obj->cur.geometry.h;
|
||||||
if ((sw <= 0) || (sh <= 0)) return;
|
RDI(level);
|
||||||
|
RD(" mapped obj: %ix%i\n", sw, sh);
|
||||||
|
if ((sw <= 0) || (sh <= 0))
|
||||||
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" }\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
p = obj->cur.map->points;
|
p = obj->cur.map->points;
|
||||||
p_end = p + 4;
|
p_end = p + 4;
|
||||||
|
@ -479,6 +619,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
if ((obj->cur.map->surface_w != sw) ||
|
if ((obj->cur.map->surface_w != sw) ||
|
||||||
(obj->cur.map->surface_h != sh))
|
(obj->cur.map->surface_h != sh))
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" new surf: %ix%i\n", sw, sh);
|
||||||
obj->layer->evas->engine.func->image_map_surface_free
|
obj->layer->evas->engine.func->image_map_surface_free
|
||||||
(e->engine.data.output, obj->cur.map->surface);
|
(e->engine.data.output, obj->cur.map->surface);
|
||||||
obj->cur.map->surface = NULL;
|
obj->cur.map->surface = NULL;
|
||||||
|
@ -494,6 +636,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
(e->engine.data.output, obj->cur.map->surface_w,
|
(e->engine.data.output, obj->cur.map->surface_w,
|
||||||
obj->cur.map->surface_h,
|
obj->cur.map->surface_h,
|
||||||
obj->cur.map->alpha);
|
obj->cur.map->alpha);
|
||||||
|
RDI(level);
|
||||||
|
RD(" fisrt surf: %ix%i\n", sw, sh);
|
||||||
changed = 1;
|
changed = 1;
|
||||||
}
|
}
|
||||||
if (obj->smart.smart)
|
if (obj->smart.smart)
|
||||||
|
@ -520,6 +664,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
// clear surface before re-render
|
// clear surface before re-render
|
||||||
if ((changed) && (obj->cur.map->surface))
|
if ((changed) && (obj->cur.map->surface))
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" children redraw\n");
|
||||||
// FIXME: calculate "changes" within map surface and only clear
|
// FIXME: calculate "changes" within map surface and only clear
|
||||||
// and re-render those
|
// and re-render those
|
||||||
if (obj->cur.map->alpha)
|
if (obj->cur.map->alpha)
|
||||||
|
@ -547,7 +693,11 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
{
|
{
|
||||||
evas_render_mapped(e, obj2, ctx,
|
evas_render_mapped(e, obj2, ctx,
|
||||||
obj->cur.map->surface,
|
obj->cur.map->surface,
|
||||||
off_x, off_y, 1);
|
off_x, off_y, 1
|
||||||
|
#ifdef REND_DGB
|
||||||
|
, level + 1
|
||||||
|
#endif
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -556,6 +706,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
e->engine.func->context_free(e->engine.data.output, ctx);
|
e->engine.func->context_free(e->engine.data.output, ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RDI(level);
|
||||||
|
RD(" draw map4\n");
|
||||||
obj->layer->evas->engine.func->image_map4_draw
|
obj->layer->evas->engine.func->image_map4_draw
|
||||||
(e->engine.data.output, e->engine.data.context, surface,
|
(e->engine.data.output, e->engine.data.context, surface,
|
||||||
obj->cur.map->surface, pts, obj->cur.map->smooth, 0);
|
obj->cur.map->surface, pts, obj->cur.map->smooth, 0);
|
||||||
|
@ -570,6 +722,8 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
{
|
{
|
||||||
if (mapped)
|
if (mapped)
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" draw child of mapped obj\n");
|
||||||
ctx = e->engine.func->context_new(e->engine.data.output);
|
ctx = e->engine.func->context_new(e->engine.data.output);
|
||||||
if (obj->smart.smart)
|
if (obj->smart.smart)
|
||||||
{
|
{
|
||||||
|
@ -578,7 +732,11 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
{
|
{
|
||||||
evas_render_mapped(e, obj2, ctx,
|
evas_render_mapped(e, obj2, ctx,
|
||||||
surface,
|
surface,
|
||||||
off_x, off_y, 1);
|
off_x, off_y, 1
|
||||||
|
#ifdef REND_DGB
|
||||||
|
, level + 1
|
||||||
|
#endif
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -588,10 +746,14 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
RDI(level);
|
||||||
|
RD(" draw normal obj\n");
|
||||||
obj->func->render(obj, e->engine.data.output, context, surface,
|
obj->func->render(obj, e->engine.data.output, context, surface,
|
||||||
off_x, off_y);
|
off_x, off_y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RDI(level);
|
||||||
|
RD(" }\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_List *
|
static Eina_List *
|
||||||
|
@ -616,6 +778,8 @@ evas_render_updates_internal(Evas *e,
|
||||||
|
|
||||||
evas_call_smarts_calculate(e);
|
evas_call_smarts_calculate(e);
|
||||||
|
|
||||||
|
RD("[--- RENDER EVAS (size: %ix%i)\n", e->viewport.w, e->viewport.h);
|
||||||
|
|
||||||
/* Check if the modified object mean recalculating every thing */
|
/* Check if the modified object mean recalculating every thing */
|
||||||
if (!e->invalidate)
|
if (!e->invalidate)
|
||||||
_evas_render_check_pending_objects(&e->pending_objects, e);
|
_evas_render_check_pending_objects(&e->pending_objects, e);
|
||||||
|
@ -703,6 +867,7 @@ evas_render_updates_internal(Evas *e,
|
||||||
{
|
{
|
||||||
int off_x, off_y;
|
int off_x, off_y;
|
||||||
|
|
||||||
|
RD(" [--- UPDATE %i %i %ix%i\n", ux, uy, uw, uh);
|
||||||
if (make_updates)
|
if (make_updates)
|
||||||
{
|
{
|
||||||
Eina_Rectangle *rect;
|
Eina_Rectangle *rect;
|
||||||
|
@ -782,7 +947,9 @@ evas_render_updates_internal(Evas *e,
|
||||||
obj = eina_array_data_get(&e->active_objects, i);
|
obj = eina_array_data_get(&e->active_objects, i);
|
||||||
|
|
||||||
/* if it's in our outpout rect and it doesn't clip anything */
|
/* if it's in our outpout rect and it doesn't clip anything */
|
||||||
if (evas_object_is_in_output_rect(obj, ux, uy, uw, uh) &&
|
RD(" OBJ: [%p] '%s' %i %i %ix%i\n", obj, obj->type, obj->cur.geometry.x, obj->cur.geometry.y, obj->cur.geometry.w, obj->cur.geometry.h);
|
||||||
|
if ((evas_object_is_in_output_rect(obj, ux, uy, uw, uh) ||
|
||||||
|
(obj->smart.smart)) &&
|
||||||
(!obj->clip.clipees) &&
|
(!obj->clip.clipees) &&
|
||||||
(obj->cur.visible) &&
|
(obj->cur.visible) &&
|
||||||
(!obj->delete_me) &&
|
(!obj->delete_me) &&
|
||||||
|
@ -792,6 +959,7 @@ evas_render_updates_internal(Evas *e,
|
||||||
{
|
{
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
|
|
||||||
|
RD(" DRAW (vis: %i, a: %i, clipees: %p\n", obj->cur.visible, obj->cur.color.a, obj->clip.clipees);
|
||||||
if ((e->temporary_objects.count > offset) &&
|
if ((e->temporary_objects.count > offset) &&
|
||||||
(eina_array_data_get(&e->temporary_objects, offset) == obj))
|
(eina_array_data_get(&e->temporary_objects, offset) == obj))
|
||||||
offset++;
|
offset++;
|
||||||
|
@ -801,7 +969,7 @@ evas_render_updates_internal(Evas *e,
|
||||||
obj->cur.cache.clip.y + off_y,
|
obj->cur.cache.clip.y + off_y,
|
||||||
obj->cur.cache.clip.w,
|
obj->cur.cache.clip.w,
|
||||||
obj->cur.cache.clip.h);
|
obj->cur.cache.clip.h);
|
||||||
if ((w > 0) && (h > 0))
|
if (((w > 0) && (h > 0)) || (obj->smart.smart))
|
||||||
{
|
{
|
||||||
e->engine.func->context_clip_set(e->engine.data.output,
|
e->engine.func->context_clip_set(e->engine.data.output,
|
||||||
e->engine.data.context,
|
e->engine.data.context,
|
||||||
|
@ -846,7 +1014,11 @@ evas_render_updates_internal(Evas *e,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
evas_render_mapped(e, obj, e->engine.data.context,
|
evas_render_mapped(e, obj, e->engine.data.context,
|
||||||
surface, off_x, off_y, 0);
|
surface, off_x, off_y, 0
|
||||||
|
#ifdef REND_DGB
|
||||||
|
, 1
|
||||||
|
#endif
|
||||||
|
);
|
||||||
e->engine.func->context_cutout_clear(e->engine.data.output,
|
e->engine.func->context_cutout_clear(e->engine.data.output,
|
||||||
e->engine.data.context);
|
e->engine.data.context);
|
||||||
}
|
}
|
||||||
|
@ -858,6 +1030,7 @@ evas_render_updates_internal(Evas *e,
|
||||||
ux, uy, uw, uh);
|
ux, uy, uw, uh);
|
||||||
/* free obscuring objects list */
|
/* free obscuring objects list */
|
||||||
eina_array_clean(&e->temporary_objects);
|
eina_array_clean(&e->temporary_objects);
|
||||||
|
RD(" ---]\n");
|
||||||
}
|
}
|
||||||
/* flush redraws */
|
/* flush redraws */
|
||||||
e->engine.func->output_flush(e->engine.data.output);
|
e->engine.func->output_flush(e->engine.data.output);
|
||||||
|
@ -937,6 +1110,8 @@ evas_render_updates_internal(Evas *e,
|
||||||
|
|
||||||
evas_module_clean();
|
evas_module_clean();
|
||||||
|
|
||||||
|
RD("---]\n");
|
||||||
|
|
||||||
return updates;
|
return updates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -172,6 +172,7 @@ evas_object_stack_above(Evas_Object *obj, Evas_Object *above)
|
||||||
MAGIC_CHECK(above, Evas_Object, MAGIC_OBJ);
|
MAGIC_CHECK(above, Evas_Object, MAGIC_OBJ);
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
|
if (obj == above) return;
|
||||||
if (evas_object_intercept_call_stack_above(obj, above)) return;
|
if (evas_object_intercept_call_stack_above(obj, above)) return;
|
||||||
if (!above)
|
if (!above)
|
||||||
{
|
{
|
||||||
|
@ -187,16 +188,21 @@ evas_object_stack_above(Evas_Object *obj, Evas_Object *above)
|
||||||
{
|
{
|
||||||
if (obj->smart.parent != above->smart.parent)
|
if (obj->smart.parent != above->smart.parent)
|
||||||
{
|
{
|
||||||
// ERR("BITCH! evas_object_stack_above(), %p not inside same smart as %p!", obj, above);
|
ERR("BITCH! evas_object_stack_above(), %p not inside same smart as %p!", obj, above);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
evas_object_smart_member_stack_above(obj, above);
|
evas_object_smart_member_stack_above(obj, above);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (above->smart.parent) return;
|
if (above->smart.parent)
|
||||||
|
{
|
||||||
|
ERR("BITCH! evas_object_stack_above(), %p stack above %p, but above has smart parent, obj does not\n", obj, above);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (obj->layer != above->layer)
|
if (obj->layer != above->layer)
|
||||||
{
|
{
|
||||||
|
ERR("BITCH! evas_object_stack_above(), %p stack above %p, not matching layers\n", obj, above);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (obj->in_layer)
|
if (obj->in_layer)
|
||||||
|
@ -260,6 +266,7 @@ evas_object_stack_below(Evas_Object *obj, Evas_Object *below)
|
||||||
MAGIC_CHECK(below, Evas_Object, MAGIC_OBJ);
|
MAGIC_CHECK(below, Evas_Object, MAGIC_OBJ);
|
||||||
return;
|
return;
|
||||||
MAGIC_CHECK_END();
|
MAGIC_CHECK_END();
|
||||||
|
if (obj == below) return;
|
||||||
if (evas_object_intercept_call_stack_below(obj, below)) return;
|
if (evas_object_intercept_call_stack_below(obj, below)) return;
|
||||||
if (!below)
|
if (!below)
|
||||||
{
|
{
|
||||||
|
@ -275,16 +282,21 @@ evas_object_stack_below(Evas_Object *obj, Evas_Object *below)
|
||||||
{
|
{
|
||||||
if (obj->smart.parent != below->smart.parent)
|
if (obj->smart.parent != below->smart.parent)
|
||||||
{
|
{
|
||||||
// ERR("BITCH! evas_object_stack_below(), %p not inside same smart as %p!", obj, below);
|
ERR("BITCH! evas_object_stack_below(), %p not inside same smart as %p!", obj, below);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
evas_object_smart_member_stack_below(obj, below);
|
evas_object_smart_member_stack_below(obj, below);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (below->smart.parent) return;
|
if (below->smart.parent)
|
||||||
|
{
|
||||||
|
ERR("BITCH! evas_object_stack_below(), %p stack below %p, but below has smart parent, obj does not\n", obj, below);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (obj->layer != below->layer)
|
if (obj->layer != below->layer)
|
||||||
{
|
{
|
||||||
|
ERR("BITCH! evas_object_stack_below(), %p stack below %p, not matching layers\n", obj, below);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (obj->in_layer)
|
if (obj->in_layer)
|
||||||
|
|
Loading…
Reference in New Issue