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_libs=""
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_ARG_ENABLE(pthreads,
[ --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;
evas_object_coords_recalc(obj);
cx = obj->cur.cache.geometry.x; cy = obj->cur.cache.geometry.y;
cw = obj->cur.cache.geometry.w; ch = obj->cur.cache.geometry.h;
cx = obj->cur.geometry.x; cy = obj->cur.geometry.y;
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;
else cvis = obj->cur.visible;
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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)
{
int px, py;
Evas_Coord pcx, pcy;
//// Evas_Coord pcx, pcy;
MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return;
@ -449,16 +459,18 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
px = e->pointer.x;
py = e->pointer.y;
pcx = e->pointer.canvas_x;
pcy = e->pointer.canvas_y;
//// pcx = e->pointer.canvas_x;
//// pcy = e->pointer.canvas_y;
if (e->events_frozen > 0) return;
e->last_timestamp = timestamp;
e->pointer.x = x;
e->pointer.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);
//// e->pointer.canvas_x = x;
//// 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 our mouse button is grabbed to any objects */
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.cur.output.x = e->pointer.x;
ev.cur.output.y = e->pointer.y;
ev.cur.canvas.x = e->pointer.canvas_x;
ev.cur.canvas.y = e->pointer.canvas_y;
ev.cur.canvas.x = e->pointer.x;
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.y = py;
ev.prev.canvas.x = pcx;
ev.prev.canvas.y = pcy;
ev.prev.canvas.x = px;
ev.prev.canvas.y = py;
//// ev.prev.canvas.x = pcx;
//// ev.prev.canvas.y = pcy;
ev.data = (void *)data;
ev.modifiers = &(e->modifiers);
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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.cur.output.x = e->pointer.x;
ev.cur.output.y = e->pointer.y;
ev.cur.canvas.x = e->pointer.canvas_x;
ev.cur.canvas.y = e->pointer.canvas_y;
ev.cur.canvas.x = e->pointer.x;
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.y = py;
ev.prev.canvas.x = pcx;
ev.prev.canvas.y = pcy;
ev.prev.canvas.x = px;
ev.prev.canvas.y = py;
//// ev.prev.canvas.x = pcx;
//// ev.prev.canvas.y = pcy;
ev.data = (void *)data;
ev.modifiers = &(e->modifiers);
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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.output.x = e->pointer.x;
ev.output.y = e->pointer.y;
ev.canvas.x = e->pointer.canvas_x;
ev.canvas.y = e->pointer.canvas_y;
ev.canvas.x = e->pointer.x;
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.modifiers = &(e->modifiers);
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;
if (w <= 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.y = y;
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,
o->engine_data,
obj->cur.cache.geometry.x + x,
obj->cur.cache.geometry.y + y,
obj->cur.cache.geometry.w,
obj->cur.cache.geometry.h);
obj->cur.geometry.x + x,
obj->cur.geometry.y + y,
obj->cur.geometry.w,
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 (idx > 0.0) idx -= idw;
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;
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))
{
dobreak_w = 1;
iw = obj->cur.cache.geometry.w;
iw = obj->cur.geometry.w;
//// iw = obj->cur.cache.geometry.w;
}
else
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;
@ -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) &&
(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;
}
else
@ -1606,8 +1610,10 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
0, 0,
o->cur.image.w,
o->cur.image.h,
obj->cur.cache.geometry.x + ix + x,
obj->cur.cache.geometry.y + iy + y,
obj->cur.geometry.x + ix + x,
obj->cur.geometry.y + iy + y,
//// obj->cur.cache.geometry.x + ix + x,
//// obj->cur.cache.geometry.y + iy + y,
iw, ih,
o->cur.smooth_scale);
else
@ -1616,8 +1622,10 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
int bl, br, bt, bb;
int imw, imh, ox, oy;
ox = obj->cur.cache.geometry.x + ix + x;
oy = obj->cur.cache.geometry.y + iy + y;
ox = obj->cur.geometry.x + ix + x;
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;
imh = o->cur.image.h;
bl = o->cur.border.l;
@ -1819,14 +1827,22 @@ evas_object_image_render_pre(Evas_Object *obj)
Evas_Rectangle *r;
Evas_List *rl;
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);
rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
obj->cur.geometry.y,
obj->cur.geometry.w,
obj->cur.geometry.h,
obj->prev.geometry.x,
obj->prev.geometry.y,
obj->prev.geometry.w,
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)
{
r = rl->data;
@ -1876,14 +1892,16 @@ evas_object_image_render_pre(Evas_Object *obj)
if (idh < 1) idh = 1;
if (idx > 0) idx -= idw;
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;
ydy = idy;
x = idx;
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;
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->w = ((rr->w + 2) * r->w) / o->cur.image.w;
r->h = ((rr->h + 2) * r->h) / o->cur.image.h;
r->x += obj->cur.cache.geometry.x + x;
r->y += obj->cur.cache.geometry.y + y;
r->x += obj->cur.geometry.x + x;
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);
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.w = max_x - min_x + 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.y1 = y1 - min_y;
o->cur.x2 = x2 - min_x;
@ -458,10 +458,14 @@ evas_object_line_coords_recalc(Evas_Object *obj)
Evas_Object_Line *o;
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.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.x1 = obj->cur.geometry.x + o->cur.x1;
o->cur.cache.y1 = obj->cur.geometry.y + o->cur.y2;
o->cur.cache.x2 = obj->cur.geometry.x + o->cur.x2;
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.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)
{
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,
rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
obj->cur.geometry.y,
obj->cur.geometry.w,
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.y,
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)
{
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,
rl = evas_rects_return_difference_rects(obj->prev.geometry.x,
obj->prev.geometry.y,
obj->prev.geometry.w,
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.y,
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;
NEW_RECT(r,
obj->cur.cache.geometry.x,
obj->cur.cache.geometry.y,
obj->cur.cache.geometry.w,
obj->cur.cache.geometry.h);
obj->cur.geometry.x,
obj->cur.geometry.y,
obj->cur.geometry.w,
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);
NEW_RECT(r,
obj->prev.cache.geometry.x,
obj->prev.cache.geometry.y,
obj->prev.cache.geometry.w,
obj->prev.cache.geometry.h);
obj->prev.geometry.x,
obj->prev.geometry.y,
obj->prev.geometry.w,
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);
return updates;
}
@ -289,20 +305,20 @@ void
evas_object_coords_recalc(Evas_Object *obj)
{
if (obj->smart.smart) return;
if (obj->cur.cache.geometry.validity == obj->layer->evas->output_validity)
return;
obj->cur.cache.geometry.x =
evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x);
obj->cur.cache.geometry.y =
evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y);
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, 0);
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, 0);
//// if (obj->cur.cache.geometry.validity == obj->layer->evas->output_validity)
//// return;
//// obj->cur.cache.geometry.x =
//// evas_coord_world_x_to_screen(obj->layer->evas, obj->cur.geometry.x);
//// obj->cur.cache.geometry.y =
//// evas_coord_world_y_to_screen(obj->layer->evas, obj->cur.geometry.y);
//// 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, 0);
//// 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, 0);
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
@ -501,7 +517,7 @@ evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
}
obj->cur.geometry.x = x;
obj->cur.geometry.y = y;
obj->cur.cache.geometry.validity = 0;
//// obj->cur.cache.geometry.validity = 0;
evas_object_change(obj);
evas_object_clip_dirty(obj);
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.h = h;
obj->cur.cache.geometry.validity = 0;
//// obj->cur.cache.geometry.validity = 0;
evas_object_change(obj);
evas_object_clip_dirty(obj);
evas_object_recalc_clippees(obj);
@ -754,8 +770,8 @@ evas_object_hide(Evas_Object *obj)
ev.buttons = obj->layer->evas->pointer.button;
ev.output.x = obj->layer->evas->pointer.x;
ev.output.y = obj->layer->evas->pointer.y;
ev.canvas.x = obj->layer->evas->pointer.canvas_x;
ev.canvas.y = obj->layer->evas->pointer.canvas_y;
ev.canvas.x = obj->layer->evas->pointer.x;
ev.canvas.y = obj->layer->evas->pointer.y;
ev.data = NULL;
ev.modifiers = &(obj->layer->evas->modifiers);
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);
return NULL;
MAGIC_CHECK_END();
xx = evas_coord_world_x_to_screen(e, x);
yy = evas_coord_world_y_to_screen(e, y);
xx = x;
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)
{
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 *
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);
return NULL;
MAGIC_CHECK_END();
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);
xx = x;
yy = y;
ww = w;
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 (hh < 1) hh = 1;
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);
return NULL;
MAGIC_CHECK_END();
xx = evas_coord_world_x_to_screen(e, x);
yy = evas_coord_world_y_to_screen(e, y);
xx = x;
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)
{
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);
return NULL;
MAGIC_CHECK_END();
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);
xx = x;
yy = y;
ww = w;
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 (hh < 1) hh = 1;
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);
obj->cur.cache.geometry.validity = 0;
//// obj->cur.cache.geometry.validity = 0;
o->changed = 1;
evas_object_change(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.h = 0;
obj->cur.cache.geometry.validity = 0;
//// obj->cur.cache.geometry.validity = 0;
o->changed = 1;
evas_object_change(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)
{
Evas_Polygon_Point *p;
int px, py;
//// int px, py;
p = l->data;
px = evas_coord_world_x_to_screen(obj->layer->evas, p->x);
py = evas_coord_world_y_to_screen(obj->layer->evas, p->y);
//// px = evas_coord_world_x_to_screen(obj->layer->evas, p->x);
//// 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,
obj->layer->evas->engine.data.context,
o->engine_data,
px + x, py + y);
p->x + x, p->y + y);
}
if (o->engine_data)
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,
context,
surface,
obj->cur.cache.geometry.x + x,
obj->cur.cache.geometry.y + y,
obj->cur.cache.geometry.w,
obj->cur.cache.geometry.h);
obj->cur.geometry.x + x,
obj->cur.geometry.y + y,
obj->cur.geometry.w,
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
@ -224,14 +228,22 @@ evas_object_rectangle_render_pre(Evas_Object *obj)
Evas_Rectangle *r;
Evas_List *rl;
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);
rl = evas_rects_return_difference_rects(obj->cur.geometry.x,
obj->cur.geometry.y,
obj->cur.geometry.w,
obj->cur.geometry.h,
obj->prev.geometry.x,
obj->prev.geometry.y,
obj->prev.geometry.w,
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)
{
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);
obj->cur.geometry.w = w + l + r;
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
{
@ -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.h = o->max_ascent + o->max_descent + t + b;
obj->cur.cache.geometry.validity = 0;
//// obj->cur.cache.geometry.validity = 0;
}
o->changed = 1;
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);
obj->cur.geometry.w = w + l + r;
obj->cur.geometry.h = h + t + b;
obj->cur.cache.geometry.validity = 0;
//// obj->cur.cache.geometry.validity = 0;
}
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);
obj->cur.geometry.w = 0;
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;
evas_object_change(obj);
@ -1393,16 +1393,32 @@ evas_object_text_render(Evas_Object *obj, void *output, void *context, void *sur
context, \
surface, \
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), \
obj->cur.cache.geometry.y + y + st + oy + \
obj->cur.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, \
(((o->max_ascent * obj->cur.geometry.h) / obj->cur.geometry.h) - 0.5), \
obj->cur.geometry.w, \
obj->cur.geometry.h, \
obj->cur.geometry.w, \
obj->cur.geometry.h, \
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 */
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);
obj->cur.geometry.w = w + l + r;
obj->cur.geometry.h = h + t + b;
obj->cur.cache.geometry.validity = 0;
//// obj->cur.cache.geometry.validity = 0;
}
else
{
@ -1681,7 +1697,7 @@ _evas_object_text_rehint(Evas_Object *obj)
evas_text_style_pad_get(o->cur.style, NULL, NULL, &t, &b);
obj->cur.geometry.w = 0;
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;
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,
context,
surface,
obj->cur.cache.geometry.x + x,
obj->cur.cache.geometry.y + y,
obj->cur.cache.geometry.w,
obj->cur.cache.geometry.h);
obj->cur.geometry.x + x,
obj->cur.geometry.y + y,
obj->cur.geometry.w,
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
#define ITEM_WALK() \
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);
#define DRAW_TEXT(ox, oy) \
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.cache.geometry.y + ln->y + yoff + y + (oy), \
obj->cur.geometry.x + ln->x + it->x - it->inset + x + (ox), \
obj->cur.geometry.y + ln->y + yoff + y + (oy), \
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;
/* backing */
@ -4095,8 +4106,10 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
ENFN->rectangle_draw(output,
context,
surface,
obj->cur.cache.geometry.x + ln->x + backx + x,
obj->cur.cache.geometry.y + ln->y + y,
obj->cur.geometry.x + ln->x + backx + x,
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,
ln->h);
}
@ -4249,8 +4262,10 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
ENFN->rectangle_draw(output,
context,
surface,
obj->cur.cache.geometry.x + ln->x + strikex + x,
obj->cur.cache.geometry.y + ln->y + y + (ln->h / 2),
obj->cur.geometry.x + ln->x + strikex + x,
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,
1);
}
@ -4302,8 +4317,10 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
ENFN->rectangle_draw(output,
context,
surface,
obj->cur.cache.geometry.x + ln->x + linex + x,
obj->cur.cache.geometry.y + ln->y + y + ln->baseline + 1,
obj->cur.geometry.x + ln->x + linex + x,
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,
1);
}
@ -4355,8 +4372,10 @@ evas_object_textblock_render(Evas_Object *obj, void *output, void *context, void
ENFN->rectangle_draw(output,
context,
surface,
obj->cur.cache.geometry.x + ln->x + line2x + x,
obj->cur.cache.geometry.y + ln->y + y + ln->baseline + 3,
obj->cur.geometry.x + ln->x + line2x + x,
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,
1);
}

View File

@ -238,6 +238,10 @@ evas_render_updates_internal(Evas *e, unsigned char make_updates)
0, 0,
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 */
for (ll = e->obscures; ll; ll = ll->next)
{

View File

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

View File

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

View File

@ -9,6 +9,8 @@
*****
*/
static int cpunum = 0;
static void *
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)
{
#ifdef BUILD_PTHREAD
evas_common_pipe_rectangle_draw(surface, context, x, y, w, h);
#else
evas_common_rectangle_draw(surface, context, x, y, w, h);
evas_common_cpu_end_opt();
#endif
if (cpunum > 1)
evas_common_pipe_rectangle_draw(surface, context, x, y, w, h);
else
#endif
{
evas_common_rectangle_draw(surface, context, x, y, w, h);
evas_common_cpu_end_opt();
}
}
static void
eng_line_draw(void *data, void *context, void *surface, int x1, int y1, int x2, int y2)
{
#ifdef BUILD_PTHREAD
evas_common_pipe_line_draw(surface, context, x1, y1, x2, y2);
#else
evas_common_line_draw(surface, context, x1, y1, x2, y2);
evas_common_cpu_end_opt();
if (cpunum > 1)
evas_common_pipe_line_draw(surface, context, x1, y1, x2, y2);
else
#endif
{
evas_common_line_draw(surface, context, x1, y1, x2, y2);
evas_common_cpu_end_opt();
}
}
static void *
@ -175,11 +183,14 @@ static void
eng_polygon_draw(void *data, void *context, void *surface, void *polygon)
{
#ifdef BUILD_PTHREAD
evas_common_pipe_poly_draw(surface, context, polygon);
#else
evas_common_polygon_draw(surface, context, polygon);
evas_common_cpu_end_opt();
if (cpunum > 1)
evas_common_pipe_poly_draw(surface, context, polygon);
else
#endif
{
evas_common_polygon_draw(surface, context, polygon);
evas_common_cpu_end_opt();
}
}
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)
{
#ifdef BUILD_PTHREAD
evas_common_pipe_grad_draw(surface, context, x, y, w, h, gradient);
#else
evas_common_gradient_draw(surface, context, x, y, w, h, gradient);
evas_common_cpu_end_opt();
if (cpunum > 1)
evas_common_pipe_grad_draw(surface, context, x, y, w, h, gradient);
else
#endif
{
evas_common_gradient_draw(surface, context, x, y, w, h, gradient);
evas_common_cpu_end_opt();
}
}
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);
#ifdef BUILD_PTHREAD
evas_common_pipe_image_draw(image, surface, context, smooth,
src_x, src_y, src_w, src_h,
dst_x, dst_y, dst_w, dst_h);
#else
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);
if (cpunum > 1)
evas_common_pipe_image_draw(image, surface, context, smooth,
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();
#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 *
@ -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)
{
#ifdef BUILD_PTHREAD
evas_common_pipe_text_draw(surface, context, font, x, y, text);
#else
evas_common_font_draw(surface, context, font, x, y, text);
evas_common_cpu_end_opt();
#endif
#if 0
if (cpunum > 1)
evas_common_pipe_text_draw(surface, context, font, x, y, text);
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
{
evas_common_font_draw(surface, context, font, x, y, text);
evas_common_cpu_end_opt();
}
}
static void
@ -863,6 +844,7 @@ module_open(Evas_Module *em)
{
if (!em) return 0;
em->functions = (void *)(&func);
cpunum = evas_common_cpu_count();
return 1;
}