forked from enlightenment/efl
fix regression during 1.1 dev (towards 1.2) that made evas over-render
way too much! FIXED SVN revision: 68204
This commit is contained in:
parent
aaaa571c8d
commit
396572a355
|
@ -1500,6 +1500,12 @@ evas_render_updates_internal(Evas *e,
|
||||||
off_x = cx - ux;
|
off_x = cx - ux;
|
||||||
off_y = cy - uy;
|
off_y = cy - uy;
|
||||||
/* build obscuring objects list (in order from bottom to top) */
|
/* build obscuring objects list (in order from bottom to top) */
|
||||||
|
if (alpha)
|
||||||
|
{
|
||||||
|
e->engine.func->context_clip_set(e->engine.data.output,
|
||||||
|
e->engine.data.context,
|
||||||
|
ux + off_x, uy + off_y, uw, uh);
|
||||||
|
}
|
||||||
for (i = 0; i < e->obscuring_objects.count; ++i)
|
for (i = 0; i < e->obscuring_objects.count; ++i)
|
||||||
{
|
{
|
||||||
obj = (Evas_Object *)eina_array_data_get
|
obj = (Evas_Object *)eina_array_data_get
|
||||||
|
@ -1515,9 +1521,6 @@ evas_render_updates_internal(Evas *e,
|
||||||
}
|
}
|
||||||
if (alpha)
|
if (alpha)
|
||||||
{
|
{
|
||||||
e->engine.func->context_clip_set(e->engine.data.output,
|
|
||||||
e->engine.data.context,
|
|
||||||
ux + off_x, uy + off_y, uw, uh);
|
|
||||||
e->engine.func->context_color_set(e->engine.data.output,
|
e->engine.func->context_color_set(e->engine.data.output,
|
||||||
e->engine.data.context,
|
e->engine.data.context,
|
||||||
0, 0, 0, 0);
|
0, 0, 0, 0);
|
||||||
|
@ -1548,7 +1551,7 @@ evas_render_updates_internal(Evas *e,
|
||||||
(obj->cur.visible) &&
|
(obj->cur.visible) &&
|
||||||
(!obj->delete_me) &&
|
(!obj->delete_me) &&
|
||||||
(obj->cur.cache.clip.visible) &&
|
(obj->cur.cache.clip.visible) &&
|
||||||
// (!obj->smart.smart) &&
|
// (!obj->smart.smart) &&
|
||||||
((obj->cur.color.a > 0 || obj->cur.render_op != EVAS_RENDER_BLEND)))
|
((obj->cur.color.a > 0 || obj->cur.render_op != EVAS_RENDER_BLEND)))
|
||||||
{
|
{
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
|
@ -1579,6 +1582,9 @@ evas_render_updates_internal(Evas *e,
|
||||||
else
|
else
|
||||||
e->engine.func->context_mask_unset(e->engine.data.output,
|
e->engine.func->context_mask_unset(e->engine.data.output,
|
||||||
e->engine.data.context);
|
e->engine.data.context);
|
||||||
|
e->engine.func->context_clip_set(e->engine.data.output,
|
||||||
|
e->engine.data.context,
|
||||||
|
x, y, w, h);
|
||||||
#if 1 /* FIXME: this can slow things down... figure out optimum... coverage */
|
#if 1 /* FIXME: this can slow things down... figure out optimum... coverage */
|
||||||
for (j = offset; j < e->temporary_objects.count; ++j)
|
for (j = offset; j < e->temporary_objects.count; ++j)
|
||||||
{
|
{
|
||||||
|
@ -1589,9 +1595,6 @@ evas_render_updates_internal(Evas *e,
|
||||||
_evas_render_cutout_add(e, obj2, off_x, off_y);
|
_evas_render_cutout_add(e, obj2, off_x, off_y);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
e->engine.func->context_clip_set(e->engine.data.output,
|
|
||||||
e->engine.data.context,
|
|
||||||
x, y, w, h);
|
|
||||||
clean_them |= evas_render_mapped(e, obj, e->engine.data.context,
|
clean_them |= evas_render_mapped(e, obj, e->engine.data.context,
|
||||||
surface, off_x, off_y, 0,
|
surface, off_x, off_y, 0,
|
||||||
cx, cy, cw, ch
|
cx, cy, cw, ch
|
||||||
|
|
|
@ -559,7 +559,7 @@ evas_common_draw_context_cutout_split(Cutout_Rects* res, int idx, Cutout_Rect *s
|
||||||
EAPI Cutout_Rects*
|
EAPI Cutout_Rects*
|
||||||
evas_common_draw_context_apply_cutouts(RGBA_Draw_Context *dc)
|
evas_common_draw_context_apply_cutouts(RGBA_Draw_Context *dc)
|
||||||
{
|
{
|
||||||
Cutout_Rects* res;
|
Cutout_Rects* res, *res2;
|
||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
|
@ -583,6 +583,69 @@ evas_common_draw_context_apply_cutouts(RGBA_Draw_Context *dc)
|
||||||
active--;
|
active--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* merge rects */
|
||||||
|
#define RI res->rects[i]
|
||||||
|
#define RJ res->rects[j]
|
||||||
|
if (res->active > 1)
|
||||||
|
{
|
||||||
|
int found = 1;
|
||||||
|
|
||||||
|
while (found)
|
||||||
|
{
|
||||||
|
found = 0;
|
||||||
|
for (i = 0; i < res->active; i++)
|
||||||
|
{
|
||||||
|
for (j = i + 1; j < res->active; j++)
|
||||||
|
{
|
||||||
|
/* skip empty rects we are removing */
|
||||||
|
if (RJ.w == 0) continue;
|
||||||
|
/* check if its same width, immediately above or below */
|
||||||
|
if ((RJ.w == RI.w) && (RJ.x == RI.x))
|
||||||
|
{
|
||||||
|
if ((RJ.y + RJ.h) == RI.y) /* above */
|
||||||
|
{
|
||||||
|
RI.y = RJ.y;
|
||||||
|
RI.h += RJ.h;
|
||||||
|
RJ.w = 0;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
else if ((RI.y + RI.h) == RJ.y) /* below */
|
||||||
|
{
|
||||||
|
RI.h += RJ.h;
|
||||||
|
RJ.w = 0;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* check if its same height, immediately left or right */
|
||||||
|
else if ((RJ.h == RI.h) && (RJ.y == RI.y))
|
||||||
|
{
|
||||||
|
if ((RJ.x + RJ.w) == RI.x) /* left */
|
||||||
|
{
|
||||||
|
RI.x = RJ.x;
|
||||||
|
RI.w += RJ.w;
|
||||||
|
RJ.w = 0;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
else if ((RI.x + RI.w) == RJ.x) /* right */
|
||||||
|
{
|
||||||
|
RI.w += RJ.w;
|
||||||
|
RJ.w = 0;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res2 = evas_common_draw_context_cutouts_new();
|
||||||
|
for (i = 0; i < res->active; i++)
|
||||||
|
{
|
||||||
|
if (RI.w == 0) continue;
|
||||||
|
evas_common_draw_context_cutouts_add(res2, RI.x, RI.y, RI.w, RI.h);
|
||||||
|
}
|
||||||
|
free(res->rects);
|
||||||
|
free(res);
|
||||||
|
return res2;
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue