a few things.

1. disable viewports other than 1:1 at 0,0
2. remove output space coorsds for pointer.
3. remove geom caching
4. make threaded pipelined engine a runtime detect if u have > 1 cpu.
5. pthread build default if u have pthread.h and sched.h


SVN revision: 27131
This commit is contained in:
Carsten Haitzler 2006-11-16 03:20:24 +00:00
parent ccc60306a0
commit f80a02f999
16 changed files with 379 additions and 236 deletions

View File

@ -989,6 +989,15 @@ AM_CONDITIONAL(BUILD_LOADER_SVG, test x$have_svg = xyes)
pthread_cflags="" pthread_cflags=""
pthread_libs="" pthread_libs=""
build_pthreads="no" build_pthreads="no"
AC_CHECK_HEADER(pthread.h,
[
AC_CHECK_HEADER(sched.h,
[ build_pthreads="yes" ],
[ build_pthreads="no" ]
)
],
[ build_pthreads="no" ]
)
AC_MSG_CHECKING(whether to build pthread code) AC_MSG_CHECKING(whether to build pthread code)
AC_ARG_ENABLE(pthreads, AC_ARG_ENABLE(pthreads,
[ --enable-pthreads enable threaded rendering], [ [ --enable-pthreads enable threaded rendering], [

View File

@ -9,8 +9,10 @@ evas_object_clip_recalc(Evas_Object *obj)
if (obj->layer->evas->events_frozen > 0) return; if (obj->layer->evas->events_frozen > 0) return;
evas_object_coords_recalc(obj); evas_object_coords_recalc(obj);
cx = obj->cur.cache.geometry.x; cy = obj->cur.cache.geometry.y; cx = obj->cur.geometry.x; cy = obj->cur.geometry.y;
cw = obj->cur.cache.geometry.w; ch = obj->cur.cache.geometry.h; cw = obj->cur.geometry.w; ch = obj->cur.geometry.h;
//// cx = obj->cur.cache.geometry.x; cy = obj->cur.cache.geometry.y;
//// cw = obj->cur.cache.geometry.w; ch = obj->cur.cache.geometry.h;
if (obj->cur.color.a == 0) cvis = 0; if (obj->cur.color.a == 0) cvis = 0;
else cvis = obj->cur.visible; else cvis = obj->cur.visible;
cr = obj->cur.color.r; cg = obj->cur.color.g; cr = obj->cur.color.r; cg = obj->cur.color.g;

View File

@ -248,8 +248,10 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
ev.button = b; ev.button = b;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -298,8 +300,10 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
ev.button = b; ev.button = b;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -333,8 +337,10 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
ev.buttons = e->pointer.button; ev.buttons = e->pointer.button;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -360,8 +366,10 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
ev.buttons = e->pointer.button; ev.buttons = e->pointer.button;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -417,8 +425,10 @@ evas_event_feed_mouse_wheel(Evas *e, int direction, int z, unsigned int timestam
ev.z = z; ev.z = z;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *) data; ev.data = (void *) data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -441,7 +451,7 @@ EAPI void
evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const void *data) evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const void *data)
{ {
int px, py; int px, py;
Evas_Coord pcx, pcy; //// Evas_Coord pcx, pcy;
MAGIC_CHECK(e, Evas, MAGIC_EVAS); MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return; return;
@ -449,16 +459,18 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
px = e->pointer.x; px = e->pointer.x;
py = e->pointer.y; py = e->pointer.y;
pcx = e->pointer.canvas_x; //// pcx = e->pointer.canvas_x;
pcy = e->pointer.canvas_y; //// pcy = e->pointer.canvas_y;
if (e->events_frozen > 0) return; if (e->events_frozen > 0) return;
e->last_timestamp = timestamp; e->last_timestamp = timestamp;
e->pointer.x = x; e->pointer.x = x;
e->pointer.y = y; e->pointer.y = y;
e->pointer.canvas_x = evas_coord_screen_x_to_world(e, x); //// e->pointer.canvas_x = x;
e->pointer.canvas_y = evas_coord_screen_y_to_world(e, y); //// e->pointer.canvas_y = y;
//// e->pointer.canvas_x = evas_coord_screen_x_to_world(e, x);
//// e->pointer.canvas_y = evas_coord_screen_y_to_world(e, y);
if ((!e->pointer.inside) && (e->pointer.mouse_grabbed == 0)) return; if ((!e->pointer.inside) && (e->pointer.mouse_grabbed == 0)) return;
/* if our mouse button is grabbed to any objects */ /* if our mouse button is grabbed to any objects */
if (e->pointer.mouse_grabbed > 0) if (e->pointer.mouse_grabbed > 0)
@ -485,12 +497,16 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
ev.buttons = e->pointer.button; ev.buttons = e->pointer.button;
ev.cur.output.x = e->pointer.x; ev.cur.output.x = e->pointer.x;
ev.cur.output.y = e->pointer.y; ev.cur.output.y = e->pointer.y;
ev.cur.canvas.x = e->pointer.canvas_x; ev.cur.canvas.x = e->pointer.x;
ev.cur.canvas.y = e->pointer.canvas_y; ev.cur.canvas.y = e->pointer.y;
//// ev.cur.canvas.x = e->pointer.canvas_x;
//// ev.cur.canvas.y = e->pointer.canvas_y;
ev.prev.output.x = px; ev.prev.output.x = px;
ev.prev.output.y = py; ev.prev.output.y = py;
ev.prev.canvas.x = pcx; ev.prev.canvas.x = px;
ev.prev.canvas.y = pcy; ev.prev.canvas.y = py;
//// ev.prev.canvas.x = pcx;
//// ev.prev.canvas.y = pcy;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -519,8 +535,10 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
ev.buttons = e->pointer.button; ev.buttons = e->pointer.button;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -563,12 +581,16 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
ev.buttons = e->pointer.button; ev.buttons = e->pointer.button;
ev.cur.output.x = e->pointer.x; ev.cur.output.x = e->pointer.x;
ev.cur.output.y = e->pointer.y; ev.cur.output.y = e->pointer.y;
ev.cur.canvas.x = e->pointer.canvas_x; ev.cur.canvas.x = e->pointer.x;
ev.cur.canvas.y = e->pointer.canvas_y; ev.cur.canvas.y = e->pointer.y;
//// ev.cur.canvas.x = e->pointer.canvas_x;
//// ev.cur.canvas.y = e->pointer.canvas_y;
ev.prev.output.x = px; ev.prev.output.x = px;
ev.prev.output.y = py; ev.prev.output.y = py;
ev.prev.canvas.x = pcx; ev.prev.canvas.x = px;
ev.prev.canvas.y = pcy; ev.prev.canvas.y = py;
//// ev.prev.canvas.x = pcx;
//// ev.prev.canvas.y = pcy;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -586,8 +608,10 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
ev.buttons = e->pointer.button; ev.buttons = e->pointer.button;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -612,8 +636,10 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
ev.buttons = e->pointer.button; ev.buttons = e->pointer.button;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -667,8 +693,10 @@ evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data)
ev.buttons = e->pointer.button; ev.buttons = e->pointer.button;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);
@ -720,8 +748,10 @@ evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data)
ev.buttons = e->pointer.button; ev.buttons = e->pointer.button;
ev.output.x = e->pointer.x; ev.output.x = e->pointer.x;
ev.output.y = e->pointer.y; ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x; ev.canvas.x = e->pointer.x;
ev.canvas.y = e->pointer.canvas_y; ev.canvas.y = e->pointer.y;
//// ev.canvas.x = e->pointer.canvas_x;
//// ev.canvas.y = e->pointer.canvas_y;
ev.data = (void *)data; ev.data = (void *)data;
ev.modifiers = &(e->modifiers); ev.modifiers = &(e->modifiers);
ev.locks = &(e->locks); ev.locks = &(e->locks);

View File

@ -401,6 +401,12 @@ evas_output_viewport_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas
(w == e->viewport.w) && (h == e->viewport.h)) return; (w == e->viewport.w) && (h == e->viewport.h)) return;
if (w <= 0) return; if (w <= 0) return;
if (h <= 0) return; if (h <= 0) return;
if ((x != 0) || (y != 0))
{
printf("EVAS: compat error. viewport x,y != 0,0 not supported\n");
x = 0;
y = 0;
}
e->viewport.x = x; e->viewport.x = x;
e->viewport.y = y; e->viewport.y = y;
e->viewport.w = w; e->viewport.w = w;

View File

@ -888,10 +888,14 @@ evas_object_gradient_render(Evas_Object *obj, void *output, void *context, void
{ {
obj->layer->evas->engine.func->gradient_draw(output, context, surface, obj->layer->evas->engine.func->gradient_draw(output, context, surface,
o->engine_data, o->engine_data,
obj->cur.cache.geometry.x + x, obj->cur.geometry.x + x,
obj->cur.cache.geometry.y + y, obj->cur.geometry.y + y,
obj->cur.cache.geometry.w, obj->cur.geometry.w,
obj->cur.cache.geometry.h); obj->cur.geometry.h);
//// obj->cur.cache.geometry.x + x,
//// obj->cur.cache.geometry.y + y,
//// obj->cur.cache.geometry.w,
//// obj->cur.cache.geometry.h);
} }
} }

View File

@ -1566,7 +1566,8 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
if (idh < 1.0) idh = 1.0; if (idh < 1.0) idh = 1.0;
if (idx > 0.0) idx -= idw; if (idx > 0.0) idx -= idw;
if (idy > 0.0) idy -= idh; if (idy > 0.0) idy -= idh;
while ((int)idx < obj->cur.cache.geometry.w) while ((int)idx < obj->cur.geometry.w)
//// while ((int)idx < obj->cur.cache.geometry.w)
{ {
Evas_Coord ydy; Evas_Coord ydy;
int dobreak_w = 0; int dobreak_w = 0;
@ -1577,11 +1578,13 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
(o->cur.fill.x == 0.0)) (o->cur.fill.x == 0.0))
{ {
dobreak_w = 1; dobreak_w = 1;
iw = obj->cur.cache.geometry.w; iw = obj->cur.geometry.w;
//// iw = obj->cur.cache.geometry.w;
} }
else else
iw = ((int)(idx + idw)) - ix; iw = ((int)(idx + idw)) - ix;
while ((int)idy < obj->cur.cache.geometry.h) while ((int)idy < obj->cur.geometry.h)
//// while ((int)idy < obj->cur.cache.geometry.h)
{ {
int dobreak_h = 0; int dobreak_h = 0;
@ -1589,7 +1592,8 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
if ((o->cur.fill.h == obj->cur.geometry.h) && if ((o->cur.fill.h == obj->cur.geometry.h) &&
(o->cur.fill.y == 0.0)) (o->cur.fill.y == 0.0))
{ {
ih = obj->cur.cache.geometry.h; ih = obj->cur.geometry.h;
//// ih = obj->cur.cache.geometry.h;
dobreak_h = 1; dobreak_h = 1;
} }
else else
@ -1606,8 +1610,10 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
0, 0, 0, 0,
o->cur.image.w, o->cur.image.w,
o->cur.image.h, o->cur.image.h,
obj->cur.cache.geometry.x + ix + x, obj->cur.geometry.x + ix + x,
obj->cur.cache.geometry.y + iy + y, obj->cur.geometry.y + iy + y,
//// obj->cur.cache.geometry.x + ix + x,
//// obj->cur.cache.geometry.y + iy + y,
iw, ih, iw, ih,
o->cur.smooth_scale); o->cur.smooth_scale);
else else
@ -1616,8 +1622,10 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
int bl, br, bt, bb; int bl, br, bt, bb;
int imw, imh, ox, oy; int imw, imh, ox, oy;
ox = obj->cur.cache.geometry.x + ix + x; ox = obj->cur.geometry.x + ix + x;
oy = obj->cur.cache.geometry.y + iy + y; oy = obj->cur.geometry.y + iy + y;
//// ox = obj->cur.cache.geometry.x + ix + x;
//// oy = obj->cur.cache.geometry.y + iy + y;
imw = o->cur.image.w; imw = o->cur.image.w;
imh = o->cur.image.h; imh = o->cur.image.h;
bl = o->cur.border.l; bl = o->cur.border.l;
@ -1819,14 +1827,22 @@ evas_object_image_render_pre(Evas_Object *obj)
Evas_Rectangle *r; Evas_Rectangle *r;
Evas_List *rl; Evas_List *rl;
rl = evas_rects_return_difference_rects(obj->cur.cache.geometry.x, rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
obj->cur.cache.geometry.y, obj->cur.geometry.y,
obj->cur.cache.geometry.w, obj->cur.geometry.w,
obj->cur.cache.geometry.h, obj->cur.geometry.h,
obj->prev.cache.geometry.x, obj->prev.geometry.x,
obj->prev.cache.geometry.y, obj->prev.geometry.y,
obj->prev.cache.geometry.w, obj->prev.geometry.w,
obj->prev.cache.geometry.h); obj->prev.geometry.h);
//// rl = evas_rects_return_difference_rects(obj->cur.cache.geometry.x,
//// obj->cur.cache.geometry.y,
//// obj->cur.cache.geometry.w,
//// obj->cur.cache.geometry.h,
//// obj->prev.cache.geometry.x,
//// obj->prev.cache.geometry.y,
//// obj->prev.cache.geometry.w,
//// obj->prev.cache.geometry.h);
while (rl) while (rl)
{ {
r = rl->data; r = rl->data;
@ -1876,14 +1892,16 @@ evas_object_image_render_pre(Evas_Object *obj)
if (idh < 1) idh = 1; if (idh < 1) idh = 1;
if (idx > 0) idx -= idw; if (idx > 0) idx -= idw;
if (idy > 0) idy -= idh; if (idy > 0) idy -= idh;
while (idx < obj->cur.cache.geometry.w) while (idx < obj->cur.geometry.w)
//// while (idx < obj->cur.cache.geometry.w)
{ {
Evas_Coord ydy; Evas_Coord ydy;
ydy = idy; ydy = idy;
x = idx; x = idx;
w = ((int)(idx + idw)) - x; w = ((int)(idx + idw)) - x;
while (idy < obj->cur.cache.geometry.h) while (idy < obj->cur.geometry.h)
//// while (idy < obj->cur.cache.geometry.h)
{ {
y = idy; y = idy;
h = ((int)(idy + idh)) - y; h = ((int)(idy + idh)) - y;
@ -1892,8 +1910,10 @@ evas_object_image_render_pre(Evas_Object *obj)
r->y = ((rr->y - 1) * r->h) / o->cur.image.h; r->y = ((rr->y - 1) * r->h) / o->cur.image.h;
r->w = ((rr->w + 2) * r->w) / o->cur.image.w; r->w = ((rr->w + 2) * r->w) / o->cur.image.w;
r->h = ((rr->h + 2) * r->h) / o->cur.image.h; r->h = ((rr->h + 2) * r->h) / o->cur.image.h;
r->x += obj->cur.cache.geometry.x + x; r->x += obj->cur.geometry.x + x;
r->y += obj->cur.cache.geometry.y + y; r->y += obj->cur.geometry.y + y;
//// r->x += obj->cur.cache.geometry.x + x;
//// r->y += obj->cur.cache.geometry.y + y;
if (r) updates = evas_list_append(updates, r); if (r) updates = evas_list_append(updates, r);
idy += h; idy += h;
} }

View File

@ -142,7 +142,7 @@ evas_object_line_xy_set(Evas_Object *obj, Evas_Coord x1, Evas_Coord y1, Evas_Coo
obj->cur.geometry.y = min_y; obj->cur.geometry.y = min_y;
obj->cur.geometry.w = max_x - min_x + 2.0; obj->cur.geometry.w = max_x - min_x + 2.0;
obj->cur.geometry.h = max_y - min_y + 2.0; obj->cur.geometry.h = max_y - min_y + 2.0;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
o->cur.x1 = x1 - min_x; o->cur.x1 = x1 - min_x;
o->cur.y1 = y1 - min_y; o->cur.y1 = y1 - min_y;
o->cur.x2 = x2 - min_x; o->cur.x2 = x2 - min_x;
@ -458,10 +458,14 @@ evas_object_line_coords_recalc(Evas_Object *obj)
Evas_Object_Line *o; Evas_Object_Line *o;
o = (Evas_Object_Line *)(obj->object_data); o = (Evas_Object_Line *)(obj->object_data);
o->cur.cache.x1 = evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x + o->cur.x1); o->cur.cache.x1 = obj->cur.geometry.x + o->cur.x1;
o->cur.cache.y1 = evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y + o->cur.y1); o->cur.cache.y1 = obj->cur.geometry.y + o->cur.y2;
o->cur.cache.x2 = evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x + o->cur.x2); o->cur.cache.x2 = obj->cur.geometry.x + o->cur.x2;
o->cur.cache.y2 = evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y + o->cur.y2); o->cur.cache.y2 = obj->cur.geometry.y + o->cur.y2;
//// o->cur.cache.x1 = evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x + o->cur.x1);
//// o->cur.cache.y1 = evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y + o->cur.y1);
//// o->cur.cache.x2 = evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x + o->cur.x2);
//// o->cur.cache.y2 = evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y + o->cur.y2);
o->cur.cache.object.w = obj->cur.geometry.w; o->cur.cache.object.w = obj->cur.geometry.w;
o->cur.cache.object.h = obj->cur.geometry.h; o->cur.cache.object.h = obj->cur.geometry.h;
} }

View File

@ -145,10 +145,14 @@ evas_object_render_pre_clipper_change(Evas_List *updates, Evas_Object *obj)
} }
else if (obj->cur.clipper) else if (obj->cur.clipper)
{ {
rl = evas_rects_return_difference_rects(obj->cur.cache.geometry.x, rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
obj->cur.cache.geometry.y, obj->cur.geometry.y,
obj->cur.cache.geometry.w, obj->cur.geometry.w,
obj->cur.cache.geometry.h, obj->cur.geometry.h,
//// rl = evas_rects_return_difference_rects(obj->cur.cache.geometry.x,
//// obj->cur.cache.geometry.y,
//// obj->cur.cache.geometry.w,
//// obj->cur.cache.geometry.h,
obj->cur.clipper->cur.cache.clip.x, obj->cur.clipper->cur.cache.clip.x,
obj->cur.clipper->cur.cache.clip.y, obj->cur.clipper->cur.cache.clip.y,
obj->cur.clipper->cur.cache.clip.w, obj->cur.clipper->cur.cache.clip.w,
@ -162,10 +166,14 @@ evas_object_render_pre_clipper_change(Evas_List *updates, Evas_Object *obj)
} }
else if (obj->prev.clipper) else if (obj->prev.clipper)
{ {
rl = evas_rects_return_difference_rects(obj->prev.cache.geometry.x, rl = evas_rects_return_difference_rects(obj->prev.geometry.x,
obj->prev.cache.geometry.y, obj->prev.geometry.y,
obj->prev.cache.geometry.w, obj->prev.geometry.w,
obj->prev.cache.geometry.h, obj->prev.geometry.h,
//// rl = evas_rects_return_difference_rects(obj->prev.cache.geometry.x,
//// obj->prev.cache.geometry.y,
//// obj->prev.cache.geometry.w,
//// obj->prev.cache.geometry.h,
obj->prev.clipper->prev.cache.clip.x, obj->prev.clipper->prev.cache.clip.x,
obj->prev.clipper->prev.cache.clip.y, obj->prev.clipper->prev.cache.clip.y,
obj->prev.clipper->prev.cache.clip.w, obj->prev.clipper->prev.cache.clip.w,
@ -186,16 +194,24 @@ evas_object_render_pre_prev_cur_add(Evas_List *updates, Evas_Object *obj)
Evas_Rectangle *r; Evas_Rectangle *r;
NEW_RECT(r, NEW_RECT(r,
obj->cur.cache.geometry.x, obj->cur.geometry.x,
obj->cur.cache.geometry.y, obj->cur.geometry.y,
obj->cur.cache.geometry.w, obj->cur.geometry.w,
obj->cur.cache.geometry.h); obj->cur.geometry.h);
//// obj->cur.cache.geometry.x,
//// obj->cur.cache.geometry.y,
//// obj->cur.cache.geometry.w,
//// obj->cur.cache.geometry.h);
if (r) updates = evas_list_append(updates, r); if (r) updates = evas_list_append(updates, r);
NEW_RECT(r, NEW_RECT(r,
obj->prev.cache.geometry.x, obj->prev.geometry.x,
obj->prev.cache.geometry.y, obj->prev.geometry.y,
obj->prev.cache.geometry.w, obj->prev.geometry.w,
obj->prev.cache.geometry.h); obj->prev.geometry.h);
//// obj->prev.cache.geometry.x,
//// obj->prev.cache.geometry.y,
//// obj->prev.cache.geometry.w,
//// obj->prev.cache.geometry.h);
if (r) updates = evas_list_append(updates, r); if (r) updates = evas_list_append(updates, r);
return updates; return updates;
} }
@ -289,20 +305,20 @@ void
evas_object_coords_recalc(Evas_Object *obj) evas_object_coords_recalc(Evas_Object *obj)
{ {
if (obj->smart.smart) return; if (obj->smart.smart) return;
if (obj->cur.cache.geometry.validity == obj->layer->evas->output_validity) //// if (obj->cur.cache.geometry.validity == obj->layer->evas->output_validity)
return; //// return;
obj->cur.cache.geometry.x = //// obj->cur.cache.geometry.x =
evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x); //// evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x);
obj->cur.cache.geometry.y = //// obj->cur.cache.geometry.y =
evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y); //// evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y);
obj->cur.cache.geometry.w = //// obj->cur.cache.geometry.w =
evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.w) - //// evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.w) -
evas_coord_world_x_to_screen(obj->layer->evas, 0); //// evas_coord_world_x_to_screen(obj->layer->evas, 0);
obj->cur.cache.geometry.h = //// obj->cur.cache.geometry.h =
evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.h) - //// evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.h) -
evas_coord_world_y_to_screen(obj->layer->evas, 0); //// evas_coord_world_y_to_screen(obj->layer->evas, 0);
if (obj->func->coords_recalc) obj->func->coords_recalc(obj); if (obj->func->coords_recalc) obj->func->coords_recalc(obj);
obj->cur.cache.geometry.validity = obj->layer->evas->output_validity; //// obj->cur.cache.geometry.validity = obj->layer->evas->output_validity;
} }
int int
@ -501,7 +517,7 @@ evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
} }
obj->cur.geometry.x = x; obj->cur.geometry.x = x;
obj->cur.geometry.y = y; obj->cur.geometry.y = y;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
evas_object_change(obj); evas_object_change(obj);
evas_object_clip_dirty(obj); evas_object_clip_dirty(obj);
if (obj->layer->evas->events_frozen <= 0) if (obj->layer->evas->events_frozen <= 0)
@ -574,7 +590,7 @@ evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
} }
obj->cur.geometry.w = w; obj->cur.geometry.w = w;
obj->cur.geometry.h = h; obj->cur.geometry.h = h;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
evas_object_change(obj); evas_object_change(obj);
evas_object_clip_dirty(obj); evas_object_clip_dirty(obj);
evas_object_recalc_clippees(obj); evas_object_recalc_clippees(obj);
@ -754,8 +770,8 @@ evas_object_hide(Evas_Object *obj)
ev.buttons = obj->layer->evas->pointer.button; ev.buttons = obj->layer->evas->pointer.button;
ev.output.x = obj->layer->evas->pointer.x; ev.output.x = obj->layer->evas->pointer.x;
ev.output.y = obj->layer->evas->pointer.y; ev.output.y = obj->layer->evas->pointer.y;
ev.canvas.x = obj->layer->evas->pointer.canvas_x; ev.canvas.x = obj->layer->evas->pointer.x;
ev.canvas.y = obj->layer->evas->pointer.canvas_y; ev.canvas.y = obj->layer->evas->pointer.y;
ev.data = NULL; ev.data = NULL;
ev.modifiers = &(obj->layer->evas->modifiers); ev.modifiers = &(obj->layer->evas->modifiers);
ev.locks = &(obj->layer->evas->locks); ev.locks = &(obj->layer->evas->locks);
@ -1009,8 +1025,10 @@ evas_object_top_at_xy_get(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Bool include
MAGIC_CHECK(e, Evas, MAGIC_EVAS); MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return NULL; return NULL;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
xx = evas_coord_world_x_to_screen(e, x); xx = x;
yy = evas_coord_world_y_to_screen(e, y); yy = y;
//// xx = evas_coord_world_x_to_screen(e, x);
//// yy = evas_coord_world_y_to_screen(e, y);
for (l = ((Evas_Object_List *)(e->layers))->last; l; l = l->prev) for (l = ((Evas_Object_List *)(e->layers))->last; l; l = l->prev)
{ {
Evas_Object_List *l2; Evas_Object_List *l2;
@ -1043,7 +1061,8 @@ evas_object_top_at_xy_get(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Bool include
EAPI Evas_Object * EAPI Evas_Object *
evas_object_top_at_pointer_get(Evas *e) evas_object_top_at_pointer_get(Evas *e)
{ {
return evas_object_top_at_xy_get(e, e->pointer.canvas_x, e->pointer.canvas_y, 0, 0); //// return evas_object_top_at_xy_get(e, e->pointer.canvas_x, e->pointer.canvas_y, 0, 0);
return evas_object_top_at_xy_get(e, e->pointer.x, e->pointer.y, 1, 1);
} }
/** /**
@ -1061,10 +1080,14 @@ evas_object_top_in_rectangle_get(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord
MAGIC_CHECK(e, Evas, MAGIC_EVAS); MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return NULL; return NULL;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
xx = evas_coord_world_x_to_screen(e, x); xx = x;
yy = evas_coord_world_y_to_screen(e, y); yy = y;
ww = evas_coord_world_x_to_screen(e, w); ww = w;
hh = evas_coord_world_y_to_screen(e, h); hh = h;
//// xx = evas_coord_world_x_to_screen(e, x);
//// yy = evas_coord_world_y_to_screen(e, y);
//// ww = evas_coord_world_x_to_screen(e, w);
//// hh = evas_coord_world_y_to_screen(e, h);
if (ww < 1) ww = 1; if (ww < 1) ww = 1;
if (hh < 1) hh = 1; if (hh < 1) hh = 1;
for (l = ((Evas_Object_List *)(e->layers))->last; l; l = l->prev) for (l = ((Evas_Object_List *)(e->layers))->last; l; l = l->prev)
@ -1106,8 +1129,10 @@ evas_objects_at_xy_get(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Bool include_pa
MAGIC_CHECK(e, Evas, MAGIC_EVAS); MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return NULL; return NULL;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
xx = evas_coord_world_x_to_screen(e, x); xx = x;
yy = evas_coord_world_y_to_screen(e, y); yy = y;
//// xx = evas_coord_world_x_to_screen(e, x);
//// yy = evas_coord_world_y_to_screen(e, y);
for (l = ((Evas_Object_List *)(e->layers))->last; l; l = l->prev) for (l = ((Evas_Object_List *)(e->layers))->last; l; l = l->prev)
{ {
Evas_Object_List *l2; Evas_Object_List *l2;
@ -1147,10 +1172,14 @@ evas_objects_in_rectangle_get(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w,
MAGIC_CHECK(e, Evas, MAGIC_EVAS); MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return NULL; return NULL;
MAGIC_CHECK_END(); MAGIC_CHECK_END();
xx = evas_coord_world_x_to_screen(e, x); xx = x;
yy = evas_coord_world_y_to_screen(e, y); yy = y;
ww = evas_coord_world_x_to_screen(e, w); ww = w;
hh = evas_coord_world_y_to_screen(e, h); hh = h;
//// xx = evas_coord_world_x_to_screen(e, x);
//// yy = evas_coord_world_y_to_screen(e, y);
//// ww = evas_coord_world_x_to_screen(e, w);
//// hh = evas_coord_world_y_to_screen(e, h);
if (ww < 1) ww = 1; if (ww < 1) ww = 1;
if (hh < 1) hh = 1; if (hh < 1) hh = 1;
for (l = ((Evas_Object_List *)(e->layers))->last; l; l = l->prev) for (l = ((Evas_Object_List *)(e->layers))->last; l; l = l->prev)

View File

@ -141,7 +141,7 @@ evas_object_polygon_point_add(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
} }
o->points = evas_list_append(o->points, p); o->points = evas_list_append(o->points, p);
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
o->changed = 1; o->changed = 1;
evas_object_change(obj); evas_object_change(obj);
evas_object_coords_recalc(obj); evas_object_coords_recalc(obj);
@ -192,7 +192,7 @@ evas_object_polygon_points_clear(Evas_Object *obj)
} }
obj->cur.geometry.w = 0; obj->cur.geometry.w = 0;
obj->cur.geometry.h = 0; obj->cur.geometry.h = 0;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
o->changed = 1; o->changed = 1;
evas_object_change(obj); evas_object_change(obj);
evas_object_coords_recalc(obj); evas_object_coords_recalc(obj);
@ -294,15 +294,15 @@ evas_object_polygon_render(Evas_Object *obj, void *output, void *context, void *
for (l = o->points; l; l = l->next) for (l = o->points; l; l = l->next)
{ {
Evas_Polygon_Point *p; Evas_Polygon_Point *p;
int px, py; //// int px, py;
p = l->data; p = l->data;
px = evas_coord_world_x_to_screen(obj->layer->evas, p->x); //// px = evas_coord_world_x_to_screen(obj->layer->evas, p->x);
py = evas_coord_world_y_to_screen(obj->layer->evas, p->y); //// py = evas_coord_world_y_to_screen(obj->layer->evas, p->y);
o->engine_data = obj->layer->evas->engine.func->polygon_point_add(obj->layer->evas->engine.data.output, o->engine_data = obj->layer->evas->engine.func->polygon_point_add(obj->layer->evas->engine.data.output,
obj->layer->evas->engine.data.context, obj->layer->evas->engine.data.context,
o->engine_data, o->engine_data,
px + x, py + y); p->x + x, p->y + y);
} }
if (o->engine_data) if (o->engine_data)
obj->layer->evas->engine.func->polygon_draw(output, obj->layer->evas->engine.func->polygon_draw(output,

View File

@ -150,10 +150,14 @@ evas_object_rectangle_render(Evas_Object *obj, void *output, void *context, void
obj->layer->evas->engine.func->rectangle_draw(output, obj->layer->evas->engine.func->rectangle_draw(output,
context, context,
surface, surface,
obj->cur.cache.geometry.x + x, obj->cur.geometry.x + x,
obj->cur.cache.geometry.y + y, obj->cur.geometry.y + y,
obj->cur.cache.geometry.w, obj->cur.geometry.w,
obj->cur.cache.geometry.h); obj->cur.geometry.h);
//// obj->cur.cache.geometry.x + x,
//// obj->cur.cache.geometry.y + y,
//// obj->cur.cache.geometry.w,
//// obj->cur.cache.geometry.h);
} }
static void static void
@ -224,14 +228,22 @@ evas_object_rectangle_render_pre(Evas_Object *obj)
Evas_Rectangle *r; Evas_Rectangle *r;
Evas_List *rl; Evas_List *rl;
rl = evas_rects_return_difference_rects(obj->cur.cache.geometry.x, rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
obj->cur.cache.geometry.y, obj->cur.geometry.y,
obj->cur.cache.geometry.w, obj->cur.geometry.w,
obj->cur.cache.geometry.h, obj->cur.geometry.h,
obj->prev.cache.geometry.x, obj->prev.geometry.x,
obj->prev.cache.geometry.y, obj->prev.geometry.y,
obj->prev.cache.geometry.w, obj->prev.geometry.w,
obj->prev.cache.geometry.h); obj->prev.geometry.h);
//// rl = evas_rects_return_difference_rects(obj->cur.cache.geometry.x,
//// obj->cur.cache.geometry.y,
//// obj->cur.cache.geometry.w,
//// obj->cur.cache.geometry.h,
//// obj->prev.cache.geometry.x,
//// obj->prev.cache.geometry.y,
//// obj->prev.cache.geometry.w,
//// obj->prev.cache.geometry.h);
while (rl) while (rl)
{ {
r = rl->data; r = rl->data;

View File

@ -202,7 +202,7 @@ evas_object_text_font_set(Evas_Object *obj, const char *font, Evas_Font_Size siz
o->max_descent = ENFN->font_max_descent_get(ENDT, o->engine_data); o->max_descent = ENFN->font_max_descent_get(ENDT, o->engine_data);
obj->cur.geometry.w = w + l + r; obj->cur.geometry.w = w + l + r;
obj->cur.geometry.h = o->max_ascent + o->max_descent + t + b; obj->cur.geometry.h = o->max_ascent + o->max_descent + t + b;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
} }
else else
{ {
@ -222,7 +222,7 @@ evas_object_text_font_set(Evas_Object *obj, const char *font, Evas_Font_Size siz
} }
obj->cur.geometry.w = 0; obj->cur.geometry.w = 0;
obj->cur.geometry.h = o->max_ascent + o->max_descent + t + b; obj->cur.geometry.h = o->max_ascent + o->max_descent + t + b;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
} }
o->changed = 1; o->changed = 1;
evas_object_change(obj); evas_object_change(obj);
@ -311,7 +311,7 @@ evas_object_text_text_set(Evas_Object *obj, const char *text)
evas_text_style_pad_get(o->cur.style, &l, &r, &t, &b); evas_text_style_pad_get(o->cur.style, &l, &r, &t, &b);
obj->cur.geometry.w = w + l + r; obj->cur.geometry.w = w + l + r;
obj->cur.geometry.h = h + t + b; obj->cur.geometry.h = h + t + b;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
} }
else else
{ {
@ -320,7 +320,7 @@ evas_object_text_text_set(Evas_Object *obj, const char *text)
evas_text_style_pad_get(o->cur.style, NULL, NULL, &t, &b); evas_text_style_pad_get(o->cur.style, NULL, NULL, &t, &b);
obj->cur.geometry.w = 0; obj->cur.geometry.w = 0;
obj->cur.geometry.h = o->max_ascent + o->max_descent + t + b; obj->cur.geometry.h = o->max_ascent + o->max_descent + t + b;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
} }
o->changed = 1; o->changed = 1;
evas_object_change(obj); evas_object_change(obj);
@ -1393,16 +1393,32 @@ evas_object_text_render(Evas_Object *obj, void *output, void *context, void *sur
context, \ context, \
surface, \ surface, \
o->engine_data, \ o->engine_data, \
obj->cur.cache.geometry.x + x + sl + ox - \ obj->cur.geometry.x + x + sl + ox - \
ENFN->font_inset_get(ENDT, o->engine_data, o->cur.text), \ ENFN->font_inset_get(ENDT, o->engine_data, o->cur.text), \
obj->cur.cache.geometry.y + y + st + oy + \ obj->cur.geometry.y + y + st + oy + \
(int) \ (int) \
(((o->max_ascent * obj->cur.cache.geometry.h) / obj->cur.geometry.h) - 0.5), \ (((o->max_ascent * obj->cur.geometry.h) / obj->cur.geometry.h) - 0.5), \
obj->cur.cache.geometry.w, \ obj->cur.geometry.w, \
obj->cur.cache.geometry.h, \ obj->cur.geometry.h, \
obj->cur.geometry.w, \ obj->cur.geometry.w, \
obj->cur.geometry.h, \ obj->cur.geometry.h, \
o->cur.text); o->cur.text);
////#define DRAW_TEXT(ox, oy) \
//// if ((o->engine_data) && (o->cur.text)) \
//// ENFN->font_draw(output, \
//// context, \
//// surface, \
//// o->engine_data, \
//// obj->cur.cache.geometry.x + x + sl + ox - \
//// ENFN->font_inset_get(ENDT, o->engine_data, o->cur.text), \
//// obj->cur.cache.geometry.y + y + st + oy + \
//// (int) \
//// (((o->max_ascent * obj->cur.cache.geometry.h) / obj->cur.geometry.h) - 0.5), \
//// obj->cur.cache.geometry.w, \
//// obj->cur.cache.geometry.h, \
//// obj->cur.geometry.w, \
//// obj->cur.geometry.h, \
//// o->cur.text);
/* shadows */ /* shadows */
if (o->cur.style == EVAS_TEXT_STYLE_SHADOW) if (o->cur.style == EVAS_TEXT_STYLE_SHADOW)
{ {
@ -1672,7 +1688,7 @@ _evas_object_text_rehint(Evas_Object *obj)
evas_text_style_pad_get(o->cur.style, &l, &r, &t, &b); evas_text_style_pad_get(o->cur.style, &l, &r, &t, &b);
obj->cur.geometry.w = w + l + r; obj->cur.geometry.w = w + l + r;
obj->cur.geometry.h = h + t + b; obj->cur.geometry.h = h + t + b;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
} }
else else
{ {
@ -1681,7 +1697,7 @@ _evas_object_text_rehint(Evas_Object *obj)
evas_text_style_pad_get(o->cur.style, NULL, NULL, &t, &b); evas_text_style_pad_get(o->cur.style, NULL, NULL, &t, &b);
obj->cur.geometry.w = 0; obj->cur.geometry.w = 0;
obj->cur.geometry.h = o->max_ascent + o->max_descent + t + b; obj->cur.geometry.h = o->max_ascent + o->max_descent + t + b;
obj->cur.cache.geometry.validity = 0; //// obj->cur.cache.geometry.validity = 0;
} }
o->changed = 1; o->changed = 1;
evas_object_change(obj); evas_object_change(obj);

View File

@ -4006,10 +4006,14 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
obj->layer->evas->engine.func->rectangle_draw(output, obj->layer->evas->engine.func->rectangle_draw(output,
context, context,
surface, surface,
obj->cur.cache.geometry.x + x, obj->cur.geometry.x + x,
obj->cur.cache.geometry.y + y, obj->cur.geometry.y + y,
obj->cur.cache.geometry.w, obj->cur.geometry.w,
obj->cur.cache.geometry.h); obj->cur.geometry.h);
//// obj->cur.cache.geometry.x + x,
//// obj->cur.cache.geometry.y + y,
//// obj->cur.cache.geometry.w,
//// obj->cur.cache.geometry.h);
#endif #endif
#define ITEM_WALK() \ #define ITEM_WALK() \
for (l = (Evas_Object_List *)o->lines; l; l = l->next) \ for (l = (Evas_Object_List *)o->lines; l; l = l->next) \
@ -4047,9 +4051,16 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
(obj->cur.cache.clip.a * it->format->color.col.a * (amul)) / 65025); (obj->cur.cache.clip.a * it->format->color.col.a * (amul)) / 65025);
#define DRAW_TEXT(ox, oy) \ #define DRAW_TEXT(ox, oy) \
if (it->format->font.font) ENFN->font_draw(output, context, surface, it->format->font.font, \ if (it->format->font.font) ENFN->font_draw(output, context, surface, it->format->font.font, \
obj->cur.cache.geometry.x + ln->x + it->x - it->inset + x + (ox), \ obj->cur.geometry.x + ln->x + it->x - it->inset + x + (ox), \
obj->cur.cache.geometry.y + ln->y + yoff + y + (oy), \ obj->cur.geometry.y + ln->y + yoff + y + (oy), \
it->w, it->h, it->w, it->h, it->text); it->w, it->h, it->w, it->h, it->text);
////#define DRAW_TEXT(ox, oy) \
//// if (it->format->font.font) ENFN->font_draw(output, context, surface, it->format->font.font, \
//// obj->cur.geometry.x + ln->x + it->x - it->inset + x + (ox), \
//// obj->cur.geometry.y + ln->y + yoff + y + (oy), \
//// obj->cur.cache.geometry.x + ln->x + it->x - it->inset + x + (ox), \
//// obj->cur.cache.geometry.y + ln->y + yoff + y + (oy), \
//// it->w, it->h, it->w, it->h, it->text);
pback = 0; pback = 0;
/* backing */ /* backing */
@ -4095,8 +4106,10 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
ENFN->rectangle_draw(output, ENFN->rectangle_draw(output,
context, context,
surface, surface,
obj->cur.cache.geometry.x + ln->x + backx + x, obj->cur.geometry.x + ln->x + backx + x,
obj->cur.cache.geometry.y + ln->y + y, obj->cur.geometry.y + ln->y + y,
//// obj->cur.cache.geometry.x + ln->x + backx + x,
//// obj->cur.cache.geometry.y + ln->y + y,
x2 - backx, x2 - backx,
ln->h); ln->h);
} }
@ -4249,8 +4262,10 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
ENFN->rectangle_draw(output, ENFN->rectangle_draw(output,
context, context,
surface, surface,
obj->cur.cache.geometry.x + ln->x + strikex + x, obj->cur.geometry.x + ln->x + strikex + x,
obj->cur.cache.geometry.y + ln->y + y + (ln->h / 2), obj->cur.geometry.y + ln->y + y + (ln->h / 2),
//// obj->cur.cache.geometry.x + ln->x + strikex + x,
//// obj->cur.cache.geometry.y + ln->y + y + (ln->h / 2),
x2 - strikex, x2 - strikex,
1); 1);
} }
@ -4302,8 +4317,10 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
ENFN->rectangle_draw(output, ENFN->rectangle_draw(output,
context, context,
surface, surface,
obj->cur.cache.geometry.x + ln->x + linex + x, obj->cur.geometry.x + ln->x + linex + x,
obj->cur.cache.geometry.y + ln->y + y + ln->baseline + 1, obj->cur.geometry.y + ln->y + y + ln->baseline + 1,
//// obj->cur.cache.geometry.x + ln->x + linex + x,
//// obj->cur.cache.geometry.y + ln->y + y + ln->baseline + 1,
x2 - linex, x2 - linex,
1); 1);
} }
@ -4355,8 +4372,10 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
ENFN->rectangle_draw(output, ENFN->rectangle_draw(output,
context, context,
surface, surface,
obj->cur.cache.geometry.x + ln->x + line2x + x, obj->cur.geometry.x + ln->x + line2x + x,
obj->cur.cache.geometry.y + ln->y + y + ln->baseline + 3, obj->cur.geometry.y + ln->y + y + ln->baseline + 3,
//// obj->cur.cache.geometry.x + ln->x + line2x + x,
//// obj->cur.cache.geometry.y + ln->y + y + ln->baseline + 3,
x2 - line2x, x2 - line2x,
1); 1);
} }

View File

@ -238,6 +238,10 @@ evas_render_updates_internal(Evas *e, unsigned char make_updates)
0, 0, 0, 0,
e->output.w, e->output.h); e->output.w, e->output.h);
} }
if ((e->output.w != e->viewport.w) || (e->output.h != e->viewport.h))
{
printf("EVAS: error: viewport size != output size!\n");
}
/* phase 5. add obscures */ /* phase 5. add obscures */
for (ll = e->obscures; ll; ll = ll->next) for (ll = e->obscures; ll; ll = ll->next)
{ {

View File

@ -123,12 +123,14 @@ evas_common_pipe_begin(RGBA_Image *im)
#ifdef BUILD_PTHREAD #ifdef BUILD_PTHREAD
int i, y, h; int i, y, h;
if (thread_num == 1) return;
if (thread_num == 0) if (thread_num == 0)
{ {
int cpunum; int cpunum;
cpunum = evas_common_cpu_count(); cpunum = evas_common_cpu_count();
thread_num = cpunum; thread_num = cpunum;
if (thread_num == 1) return;
pthread_barrier_init(&(thbarrier[0]), NULL, thread_num + 1); pthread_barrier_init(&(thbarrier[0]), NULL, thread_num + 1);
for (i = 0; i < thread_num; i++) for (i = 0; i < thread_num; i++)
{ {
@ -176,6 +178,7 @@ evas_common_pipe_begin(RGBA_Image *im)
/* send startsignal */ /* send startsignal */
// printf("START %i\n", i); // printf("START %i\n", i);
} }
/* tell worker threads to start */
pthread_barrier_init(&(thbarrier[1]), NULL, thread_num + 1); pthread_barrier_init(&(thbarrier[1]), NULL, thread_num + 1);
pthread_barrier_wait(&(thbarrier[0])); pthread_barrier_wait(&(thbarrier[0]));
pthread_barrier_destroy(&(thbarrier[0])); pthread_barrier_destroy(&(thbarrier[0]));
@ -191,26 +194,27 @@ evas_common_pipe_flush(RGBA_Image *im)
if (!im->pipe) return; if (!im->pipe) return;
#ifdef BUILD_PTHREAD #ifdef BUILD_PTHREAD
/* FIXME: PTHREAD join all threads here (if not finished) or begin then join if (thread_num > 1)
* otherwise just process pipe */
{ {
/* sync worker threads */
pthread_barrier_init(&(thbarrier[0]), NULL, thread_num + 1); pthread_barrier_init(&(thbarrier[0]), NULL, thread_num + 1);
pthread_barrier_wait(&(thbarrier[1])); pthread_barrier_wait(&(thbarrier[1]));
pthread_barrier_destroy(&(thbarrier[1])); pthread_barrier_destroy(&(thbarrier[1]));
// printf("DONE\n"); // printf("DONE\n");
} }
else
#else #endif
/* process pipe - 1 thead */
for (p = im->pipe; p; p = (RGBA_Pipe *)((Evas_Object_List *)p)->next)
{ {
for (i = 0; i < p->op_num; i++) /* process pipe - 1 thead */
for (p = im->pipe; p; p = (RGBA_Pipe *)((Evas_Object_List *)p)->next)
{ {
if (p->op[i].op_func) for (i = 0; i < p->op_num; i++)
p->op[i].op_func(im, &(p->op[i]), NULL); {
if (p->op[i].op_func)
p->op[i].op_func(im, &(p->op[i]), NULL);
}
} }
} }
#endif
evas_common_cpu_end_opt(); evas_common_cpu_end_opt();
evas_common_pipe_free(im); evas_common_pipe_free(im);
} }

View File

@ -275,9 +275,9 @@ struct _Evas
unsigned char inside : 1; unsigned char inside : 1;
int mouse_grabbed; int mouse_grabbed;
DATA32 button; DATA32 button;
int x, y; Evas_Coord x, y;
Evas_Coord canvas_x, canvas_y; //// Evas_Coord canvas_x, canvas_y;
struct { struct {
Evas_List *in; Evas_List *in;
@ -364,10 +364,12 @@ struct _Evas_Object
struct { struct {
struct { struct {
/*
struct { struct {
int x, y, w, h; int x, y, w, h;
int validity; int validity;
} geometry; } geometry;
*/
struct { struct {
int x, y, w, h; int x, y, w, h;
unsigned char r, g, b, a; unsigned char r, g, b, a;

View File

@ -9,6 +9,8 @@
***** *****
*/ */
static int cpunum = 0;
static void * static void *
eng_context_new(void *data) eng_context_new(void *data)
{ {
@ -141,22 +143,28 @@ static void
eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h) eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
{ {
#ifdef BUILD_PTHREAD #ifdef BUILD_PTHREAD
evas_common_pipe_rectangle_draw(surface, context, x, y, w, h); if (cpunum > 1)
#else evas_common_pipe_rectangle_draw(surface, context, x, y, w, h);
evas_common_rectangle_draw(surface, context, x, y, w, h); else
evas_common_cpu_end_opt(); #endif
#endif {
evas_common_rectangle_draw(surface, context, x, y, w, h);
evas_common_cpu_end_opt();
}
} }
static void static void
eng_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2, int y2) eng_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2, int y2)
{ {
#ifdef BUILD_PTHREAD #ifdef BUILD_PTHREAD
evas_common_pipe_line_draw(surface, context, x1, y1, x2, y2); if (cpunum > 1)
#else evas_common_pipe_line_draw(surface, context, x1, y1, x2, y2);
evas_common_line_draw(surface, context, x1, y1, x2, y2); else
evas_common_cpu_end_opt();
#endif #endif
{
evas_common_line_draw(surface, context, x1, y1, x2, y2);
evas_common_cpu_end_opt();
}
} }
static void * static void *
@ -175,11 +183,14 @@ static void
eng_polygon_draw(void *data, void *context, void *surface, void *polygon) eng_polygon_draw(void *data, void *context, void *surface, void *polygon)
{ {
#ifdef BUILD_PTHREAD #ifdef BUILD_PTHREAD
evas_common_pipe_poly_draw(surface, context, polygon); if (cpunum > 1)
#else evas_common_pipe_poly_draw(surface, context, polygon);
evas_common_polygon_draw(surface, context, polygon); else
evas_common_cpu_end_opt();
#endif #endif
{
evas_common_polygon_draw(surface, context, polygon);
evas_common_cpu_end_opt();
}
} }
static void * static void *
@ -308,11 +319,14 @@ static void
eng_gradient_draw(void *data, void *context, void *surface, void *gradient, int x, int y, int w, int h) eng_gradient_draw(void *data, void *context, void *surface, void *gradient, int x, int y, int w, int h)
{ {
#ifdef BUILD_PTHREAD #ifdef BUILD_PTHREAD
evas_common_pipe_grad_draw(surface, context, x, y, w, h, gradient); if (cpunum > 1)
#else evas_common_pipe_grad_draw(surface, context, x, y, w, h, gradient);
evas_common_gradient_draw(surface, context, x, y, w, h, gradient); else
evas_common_cpu_end_opt();
#endif #endif
{
evas_common_gradient_draw(surface, context, x, y, w, h, gradient);
evas_common_cpu_end_opt();
}
} }
static void * static void *
@ -502,20 +516,23 @@ eng_image_draw(void *data, void *context, void *surface, void *image, int src_x,
{ {
evas_common_load_image_data_from_file(image); evas_common_load_image_data_from_file(image);
#ifdef BUILD_PTHREAD #ifdef BUILD_PTHREAD
evas_common_pipe_image_draw(image, surface, context, smooth, if (cpunum > 1)
src_x, src_y, src_w, src_h, evas_common_pipe_image_draw(image, surface, context, smooth,
dst_x, dst_y, dst_w, dst_h); src_x, src_y, src_w, src_h,
#else dst_x, dst_y, dst_w, dst_h);
if (smooth)
evas_common_scale_rgba_in_to_out_clip_smooth(image, surface, context,
src_x, src_y, src_w, src_h,
dst_x, dst_y, dst_w, dst_h);
else else
evas_common_scale_rgba_in_to_out_clip_sample(image, surface, context,
src_x, src_y, src_w, src_h,
dst_x, dst_y, dst_w, dst_h);
evas_common_cpu_end_opt();
#endif #endif
{
if (smooth)
evas_common_scale_rgba_in_to_out_clip_smooth(image, surface, context,
src_x, src_y, src_w, src_h,
dst_x, dst_y, dst_w, dst_h);
else
evas_common_scale_rgba_in_to_out_clip_sample(image, surface, context,
src_x, src_y, src_w, src_h,
dst_x, dst_y, dst_w, dst_h);
evas_common_cpu_end_opt();
}
} }
static char * static char *
@ -655,50 +672,14 @@ static void
eng_font_draw(void *data, void *context, void *surface, void *font, int x, int y, int w, int h, int ow, int oh, const char *text) eng_font_draw(void *data, void *context, void *surface, void *font, int x, int y, int w, int h, int ow, int oh, const char *text)
{ {
#ifdef BUILD_PTHREAD #ifdef BUILD_PTHREAD
evas_common_pipe_text_draw(surface, context, font, x, y, text); if (cpunum > 1)
#else evas_common_pipe_text_draw(surface, context, font, x, y, text);
evas_common_font_draw(surface, context, font, x, y, text);
evas_common_cpu_end_opt();
#endif
#if 0
else else
{
/* create output surface size ow x oh and scale to w x h */
RGBA_Draw_Context *dc, *dc_in;
dc_in = context;
dc = evas_common_draw_context_new();
if (dc)
{
RGBA_Image *im;
int inset;
dc->col.col = dc_in->col.col;
inset = evas_common_font_query_inset( font, text);
im = evas_common_image_create(ow+inset, oh);
if (im)
{
int max_ascent;
int j;
im->flags |= RGBA_IMAGE_HAS_ALPHA;
j = (ow + inset) * oh;
memset(im->image->data, 0, j * sizeof(DATA32));
max_ascent = evas_common_font_max_ascent_get(font);
evas_common_font_draw(im, dc, font, 0, max_ascent, text);
evas_common_cpu_end_opt();
evas_common_scale_rgba_in_to_out_clip_smooth
(im, surface, context, inset, 0, ow, oh,
x + ((inset * w) / ow), y - ((max_ascent * h) / oh),
w, h);
evas_common_image_free(im);
}
evas_common_draw_context_free(dc);
}
}
#endif #endif
{
evas_common_font_draw(surface, context, font, x, y, text);
evas_common_cpu_end_opt();
}
} }
static void static void
@ -863,6 +844,7 @@ module_open(Evas_Module *em)
{ {
if (!em) return 0; if (!em) return 0;
em->functions = (void *)(&func); em->functions = (void *)(&func);
cpunum = evas_common_cpu_count();
return 1; return 1;
} }