forked from enlightenment/efl
oh this one was a doosey to find. objects still having map applied BUT
map is the same as a normal display (no mapping at all) are not considered opaque. fix! SVN revision: 64264
This commit is contained in:
parent
78410d7e8f
commit
30517bc67c
|
@ -3342,6 +3342,9 @@ evas_object_image_render_pre(Evas_Object *obj)
|
|||
r.h = ((rr->h + 2) * h) / o->cur.image.h;
|
||||
r.x += obj->cur.geometry.x + x;
|
||||
r.y += obj->cur.geometry.y + y;
|
||||
RECTS_CLIP_TO_RECT(r.x, r.y, r.w, r.h,
|
||||
obj->cur.cache.clip.x, obj->cur.cache.clip.y,
|
||||
obj->cur.cache.clip.w, obj->cur.cache.clip.h);
|
||||
evas_add_rect(&e->clip_changes, r.x, r.y, r.w, r.h);
|
||||
idy += h;
|
||||
}
|
||||
|
@ -3377,10 +3380,10 @@ evas_object_image_render_pre(Evas_Object *obj)
|
|||
evas_object_is_opaque(obj))
|
||||
{
|
||||
e->engine.func->output_redraws_rect_del(e->engine.data.output,
|
||||
obj->cur.cache.clip.x,
|
||||
obj->cur.cache.clip.y,
|
||||
obj->cur.cache.clip.w,
|
||||
obj->cur.cache.clip.h);
|
||||
obj->cur.cache.clip.x,
|
||||
obj->cur.cache.clip.y,
|
||||
obj->cur.cache.clip.w,
|
||||
obj->cur.cache.clip.h);
|
||||
}
|
||||
done:
|
||||
evas_object_render_pre_effect_updates(&e->clip_changes, obj, is_v, was_v);
|
||||
|
@ -3442,30 +3445,66 @@ evas_object_image_is_opaque(Evas_Object *obj)
|
|||
/* this returns 1 if the internal object data implies that the object is */
|
||||
/* currently fully opaque over the entire rectangle it occupies */
|
||||
o = (Evas_Object_Image *)(obj->object_data);
|
||||
/* disable caching due tyo maps screwing with this
|
||||
o->cur.opaque_valid = 0;
|
||||
if (o->cur.opaque_valid)
|
||||
{
|
||||
if (!o->cur.opaque) return 0;
|
||||
}
|
||||
else
|
||||
*/
|
||||
{
|
||||
o->cur.opaque = 0;
|
||||
o->cur.opaque_valid = 1;
|
||||
/* disable caching */
|
||||
/* o->cur.opaque_valid = 1; */
|
||||
if ((o->cur.fill.w < 1) || (o->cur.fill.h < 1))
|
||||
return 0;
|
||||
return o->cur.opaque;
|
||||
if (((o->cur.border.l != 0) ||
|
||||
(o->cur.border.r != 0) ||
|
||||
(o->cur.border.t != 0) ||
|
||||
(o->cur.border.b != 0)) &&
|
||||
(!o->cur.border.fill)) return 0;
|
||||
if (!o->engine_data) return 0;
|
||||
(!o->cur.border.fill)) return o->cur.opaque;
|
||||
if (!o->engine_data) return o->cur.opaque;
|
||||
o->cur.opaque = 1;
|
||||
}
|
||||
// FIXME: use proxy
|
||||
if (o->cur.source) return 0; /* FIXME: Should go poke at the object */
|
||||
if ((obj->cur.map) && (obj->cur.usemap)) return 0;
|
||||
if (obj->cur.render_op == EVAS_RENDER_COPY) return 1;
|
||||
if (o->cur.has_alpha) return 0;
|
||||
return 1;
|
||||
if (o->cur.source)
|
||||
{
|
||||
o->cur.opaque = evas_object_is_opaque(o->cur.source);
|
||||
return o->cur.opaque; /* FIXME: Should go poke at the object */
|
||||
}
|
||||
if (o->cur.has_alpha)
|
||||
{
|
||||
o->cur.opaque = 0;
|
||||
return o->cur.opaque;
|
||||
}
|
||||
if ((obj->cur.map) && (obj->cur.usemap))
|
||||
{
|
||||
Evas_Map *m = obj->cur.map;
|
||||
|
||||
if ((m->points[0].a == 255) &&
|
||||
(m->points[1].a == 255) &&
|
||||
(m->points[2].a == 255) &&
|
||||
(m->points[3].a == 255))
|
||||
{
|
||||
if (
|
||||
((m->points[0].x == m->points[3].x) &&
|
||||
(m->points[1].x == m->points[2].x) &&
|
||||
(m->points[0].y == m->points[1].y) &&
|
||||
(m->points[2].y == m->points[3].y))
|
||||
||
|
||||
((m->points[0].x == m->points[1].x) &&
|
||||
(m->points[2].x == m->points[3].x) &&
|
||||
(m->points[0].y == m->points[3].y) &&
|
||||
(m->points[1].y == m->points[2].y))
|
||||
)
|
||||
return o->cur.opaque;
|
||||
}
|
||||
o->cur.opaque = 0;
|
||||
return o->cur.opaque;
|
||||
}
|
||||
if (obj->cur.render_op == EVAS_RENDER_COPY) return o->cur.opaque;
|
||||
return o->cur.opaque;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -151,8 +151,9 @@ _evas_render_phase1_direct(Evas *e,
|
|||
unsigned int i;
|
||||
Eina_List *l;
|
||||
Evas_Object *proxy;
|
||||
int tdbg = 1;
|
||||
|
||||
// printf("--------------------\n");
|
||||
if (tdbg) printf("--------------------\n");
|
||||
RD(" [--- PHASE 1 DIRECT\n");
|
||||
for (i = 0; i < active_objects->count; i++)
|
||||
{
|
||||
|
@ -175,7 +176,11 @@ _evas_render_phase1_direct(Evas *e,
|
|||
Evas_Object *obj;
|
||||
|
||||
obj = eina_array_data_get(render_objects, i);
|
||||
// printf("R: %p %s - %i %i %ix%i D:%i\n", obj, obj->type, obj->cur.geometry.x, obj->cur.geometry.y, obj->cur.geometry.w, obj->cur.geometry.h, obj->rect_del);
|
||||
if (tdbg)
|
||||
{
|
||||
printf("R: %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);
|
||||
printf(" ch=%i rdel=%i\n", obj->changed, obj->rect_del);
|
||||
}
|
||||
RD(" OBJ [%p] changed %i\n", obj, obj->changed);
|
||||
if (obj->changed)
|
||||
{
|
||||
|
@ -230,8 +235,10 @@ _evas_render_phase1_direct(Evas *e,
|
|||
_evas_render_cur_clip_cache_del(e, obj);
|
||||
}
|
||||
}
|
||||
if (tdbg) printf(" -next-\n");
|
||||
}
|
||||
RD(" ---]\n");
|
||||
if (tdbg) printf(".....................\n");
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
|
Loading…
Reference in New Issue