damnit... the more i use evas the more i optimize it... ok - more

optimizations for special cases (rectangles that onyl change size or
location have only their detlas redrawn - not the whole rect, and the same
with images who share common global tile start and size parapeters for the
image...) this is getting quite fast now :) rememeber you only really see
the speedups in software.. hardware is so dispicably fast you never notice :(


SVN revision: 4252
This commit is contained in:
Carsten Haitzler 2001-02-19 09:27:59 +00:00
parent 2e7ba74abe
commit d6f9deb7ad
1 changed files with 33 additions and 28 deletions

View File

@ -398,7 +398,9 @@ evas_render_updates(Evas e)
(o->current.zoomscale != o->previous.zoomscale) || (o->current.zoomscale != o->previous.zoomscale) ||
(o->current.layer != o->previous.layer) || (o->current.layer != o->previous.layer) ||
(o->current.stacking)))) (o->current.stacking))))
prop_change = 1; {
prop_change = 1;
}
if ((!prop_change) && if ((!prop_change) &&
(o->type == OBJECT_RECTANGLE)) (o->type == OBJECT_RECTANGLE))
{ {
@ -407,12 +409,12 @@ evas_render_updates(Evas e)
(oo->current.b != oo->previous.b) || (oo->current.b != oo->previous.b) ||
(oo->current.a != oo->previous.a) (oo->current.a != oo->previous.a)
) )
prop_change = 1; {
prop_change = 1;
oo->previous = oo->current;
}
} }
if ((o->type == OBJECT_RECTANGLE) && if ((o->type == OBJECT_RECTANGLE) &&
(oo->current.r == oo->previous.r) &&
(oo->current.g == oo->previous.g) &&
(oo->current.b == oo->previous.b) &&
(oo->current.a == oo->previous.a) && (oo->current.a == oo->previous.a) &&
(oo->current.a == 0) (oo->current.a == 0)
) )
@ -455,10 +457,7 @@ evas_render_updates(Evas e)
(oo->current.color.a != oo->previous.color.a) (oo->current.color.a != oo->previous.color.a)
) )
{ {
if ((oo->current.color.r == oo->previous.color.r) && if ((oo->current.color.a == oo->previous.color.a) &&
(oo->current.color.g == oo->previous.color.g) &&
(oo->current.color.b == oo->previous.color.b) &&
(oo->current.color.a == oo->previous.color.a) &&
(oo->current.color.a == 0) (oo->current.color.a == 0)
) )
{ {
@ -486,10 +485,7 @@ evas_render_updates(Evas e)
(oo->current.a != oo->previous.a) (oo->current.a != oo->previous.a)
) )
{ {
if ((oo->current.r == oo->previous.r) && if ((oo->current.a == oo->previous.a) &&
(oo->current.g == oo->previous.g) &&
(oo->current.b == oo->previous.b) &&
(oo->current.a == oo->previous.a) &&
(oo->current.a == 0) (oo->current.a == 0)
) )
{ {
@ -513,10 +509,7 @@ evas_render_updates(Evas e)
(oo->current.a != oo->previous.a) (oo->current.a != oo->previous.a)
) )
{ {
if ((oo->current.r == oo->previous.r) && if ((oo->current.a == oo->previous.a) &&
(oo->current.g == oo->previous.g) &&
(oo->current.b == oo->previous.b) &&
(oo->current.a == oo->previous.a) &&
(oo->current.a == 0) (oo->current.a == 0)
) )
{ {
@ -525,7 +518,7 @@ evas_render_updates(Evas e)
} }
else else
{ {
real_change = 1; real_change = 0;
prop_change = 1; prop_change = 1;
} }
} }
@ -547,10 +540,7 @@ evas_render_updates(Evas e)
(oo->current.a != oo->previous.a) (oo->current.a != oo->previous.a)
) )
{ {
if ((oo->current.r == oo->previous.r) && if ((oo->current.a == oo->previous.a) &&
(oo->current.g == oo->previous.g) &&
(oo->current.b == oo->previous.b) &&
(oo->current.a == oo->previous.a) &&
(oo->current.a == 0) (oo->current.a == 0)
) )
{ {
@ -586,10 +576,7 @@ evas_render_updates(Evas e)
(oo->current.b != oo->previous.b) || (oo->current.b != oo->previous.b) ||
(oo->current.a != oo->previous.a)) (oo->current.a != oo->previous.a))
{ {
if ((oo->current.r == oo->previous.r) && if ((oo->current.a == oo->previous.a) &&
(oo->current.g == oo->previous.g) &&
(oo->current.b == oo->previous.b) &&
(oo->current.a == oo->previous.a) &&
(oo->current.a == 0) (oo->current.a == 0)
) )
{ {
@ -607,12 +594,30 @@ evas_render_updates(Evas e)
} }
} }
} }
if (real_change) if ((real_change) || (prop_change))
{ {
int x, y, w, h; int x, y, w, h;
int img_tile_ch;
img_tile_ch = 1;
if (o->type == OBJECT_IMAGE)
{
Evas_Object_Image oo;
double fx, fy, fxx, fyy;
oo = o;
fx = oo->current.fill.x + o->current.x;
fy = oo->current.fill.y + o->current.y;
fxx = oo->previous.fill.x + o->previous.x;
fyy = oo->previous.fill.y + o->previous.y;
if ((oo->current.fill.w == oo->previous.fill.w) &&
(oo->current.fill.h == oo->previous.fill.h) &&
(fx == fxx) && (fy == fyy))
img_tile_ch = 0;
}
/* special case for rectangle since its all one color */ /* special case for rectangle since its all one color */
if ((o->type == OBJECT_RECTANGLE) && if (((o->type == OBJECT_RECTANGLE) || (!img_tile_ch)) &&
(!prop_change) && (!prop_change) &&
(RECTS_INTERSECT(o->current.x, o->current.y, (RECTS_INTERSECT(o->current.x, o->current.y,
o->current.w, o->current.h, o->current.w, o->current.h,