From f80a02f9991020c8d292f7c76222acf6edd7c83f Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 16 Nov 2006 03:20:24 +0000 Subject: [PATCH] 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 --- legacy/evas/configure.in | 9 ++ legacy/evas/src/lib/canvas/evas_clip.c | 6 +- legacy/evas/src/lib/canvas/evas_events.c | 96 +++++++++----- legacy/evas/src/lib/canvas/evas_main.c | 6 + .../src/lib/canvas/evas_object_gradient.c | 12 +- .../evas/src/lib/canvas/evas_object_image.c | 60 ++++++--- legacy/evas/src/lib/canvas/evas_object_line.c | 14 +- legacy/evas/src/lib/canvas/evas_object_main.c | 121 ++++++++++------- .../evas/src/lib/canvas/evas_object_polygon.c | 12 +- .../src/lib/canvas/evas_object_rectangle.c | 36 +++-- legacy/evas/src/lib/canvas/evas_object_text.c | 38 ++++-- .../src/lib/canvas/evas_object_textblock.c | 47 +++++-- legacy/evas/src/lib/canvas/evas_render.c | 4 + .../evas/src/lib/engines/common/evas_pipe.c | 24 ++-- legacy/evas/src/lib/include/evas_private.h | 6 +- .../engines/software_generic/evas_engine.c | 124 ++++++++---------- 16 files changed, 379 insertions(+), 236 deletions(-) diff --git a/legacy/evas/configure.in b/legacy/evas/configure.in index c91ea4a834..e1302ddbec 100644 --- a/legacy/evas/configure.in +++ b/legacy/evas/configure.in @@ -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], [ diff --git a/legacy/evas/src/lib/canvas/evas_clip.c b/legacy/evas/src/lib/canvas/evas_clip.c index 58da28c7c1..f0476d3e79 100644 --- a/legacy/evas/src/lib/canvas/evas_clip.c +++ b/legacy/evas/src/lib/canvas/evas_clip.c @@ -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; diff --git a/legacy/evas/src/lib/canvas/evas_events.c b/legacy/evas/src/lib/canvas/evas_events.c index 3649aeee11..8b9f1ddce6 100644 --- a/legacy/evas/src/lib/canvas/evas_events.c +++ b/legacy/evas/src/lib/canvas/evas_events.c @@ -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); diff --git a/legacy/evas/src/lib/canvas/evas_main.c b/legacy/evas/src/lib/canvas/evas_main.c index 8a51ec94cd..075bf612ad 100644 --- a/legacy/evas/src/lib/canvas/evas_main.c +++ b/legacy/evas/src/lib/canvas/evas_main.c @@ -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; diff --git a/legacy/evas/src/lib/canvas/evas_object_gradient.c b/legacy/evas/src/lib/canvas/evas_object_gradient.c index 0d7b191841..6e8cf684a0 100644 --- a/legacy/evas/src/lib/canvas/evas_object_gradient.c +++ b/legacy/evas/src/lib/canvas/evas_object_gradient.c @@ -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); } } diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index 8e7a9858b9..16612d02e1 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -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; } diff --git a/legacy/evas/src/lib/canvas/evas_object_line.c b/legacy/evas/src/lib/canvas/evas_object_line.c index c94c9d36e3..b6ce7d50e2 100644 --- a/legacy/evas/src/lib/canvas/evas_object_line.c +++ b/legacy/evas/src/lib/canvas/evas_object_line.c @@ -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; } diff --git a/legacy/evas/src/lib/canvas/evas_object_main.c b/legacy/evas/src/lib/canvas/evas_object_main.c index c8a532bb37..9121789afe 100644 --- a/legacy/evas/src/lib/canvas/evas_object_main.c +++ b/legacy/evas/src/lib/canvas/evas_object_main.c @@ -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) diff --git a/legacy/evas/src/lib/canvas/evas_object_polygon.c b/legacy/evas/src/lib/canvas/evas_object_polygon.c index 54509b6a44..60b4edea50 100644 --- a/legacy/evas/src/lib/canvas/evas_object_polygon.c +++ b/legacy/evas/src/lib/canvas/evas_object_polygon.c @@ -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, diff --git a/legacy/evas/src/lib/canvas/evas_object_rectangle.c b/legacy/evas/src/lib/canvas/evas_object_rectangle.c index 0bb064a1fe..b6469d08be 100644 --- a/legacy/evas/src/lib/canvas/evas_object_rectangle.c +++ b/legacy/evas/src/lib/canvas/evas_object_rectangle.c @@ -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; diff --git a/legacy/evas/src/lib/canvas/evas_object_text.c b/legacy/evas/src/lib/canvas/evas_object_text.c index 4d7335ff69..5de73e0bc8 100644 --- a/legacy/evas/src/lib/canvas/evas_object_text.c +++ b/legacy/evas/src/lib/canvas/evas_object_text.c @@ -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); diff --git a/legacy/evas/src/lib/canvas/evas_object_textblock.c b/legacy/evas/src/lib/canvas/evas_object_textblock.c index dee12df71f..bcf600a7bb 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textblock.c +++ b/legacy/evas/src/lib/canvas/evas_object_textblock.c @@ -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); } diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index ae02c0d41c..2866fd0b3e 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -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) { diff --git a/legacy/evas/src/lib/engines/common/evas_pipe.c b/legacy/evas/src/lib/engines/common/evas_pipe.c index 37e31dcaf8..812b1f40b8 100644 --- a/legacy/evas/src/lib/engines/common/evas_pipe.c +++ b/legacy/evas/src/lib/engines/common/evas_pipe.c @@ -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); } diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 75b940eca4..671c5448fd 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -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; diff --git a/legacy/evas/src/modules/engines/software_generic/evas_engine.c b/legacy/evas/src/modules/engines/software_generic/evas_engine.c index 4f3d0a9c7f..16d2c0a7a3 100644 --- a/legacy/evas/src/modules/engines/software_generic/evas_engine.c +++ b/legacy/evas/src/modules/engines/software_generic/evas_engine.c @@ -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; }