From dd7595a3475407a7fa96a97393bae8c5220e8762 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Wed, 4 Jan 2012 18:41:13 +1000 Subject: Add the base Enlightenment Foundation Libraries - eina, eet, evas, ecore, embryo, and edje. Note that embryo wont be used, but I'm not sure yet if you can build edje without it. --- .../src/lib/engines/common/evas_map_image_core.c | 226 +++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 libraries/evas/src/lib/engines/common/evas_map_image_core.c (limited to 'libraries/evas/src/lib/engines/common/evas_map_image_core.c') diff --git a/libraries/evas/src/lib/engines/common/evas_map_image_core.c b/libraries/evas/src/lib/engines/common/evas_map_image_core.c new file mode 100644 index 0000000..b9bbeb5 --- /dev/null +++ b/libraries/evas/src/lib/engines/common/evas_map_image_core.c @@ -0,0 +1,226 @@ +//#undef SCALE_USING_MMX +{ + if (smooth) + { + for (y = ystart; y <= yend; y++) + { + int x, w, ww; + FPc u, v, ud, vd, dv, ue, ve; + DATA32 *d, *s; +#ifdef COLMUL + FPc cv, cd; // col +# ifdef SCALE_USING_MMX + FPc cc; +#endif + DATA32 c1, c2; // col +#endif + Line *line; + +#ifdef SCALE_USING_MMX + pxor_r2r(mm0, mm0); + MOV_A2R(ALPHA_255, mm5) +#endif + + line = &(spans[y - ystart]); + for (i = 0; i < 2; i++) + { + Span *span; + + span = &(line->span[i]); + if (span->x1 >= 0) + { + long long tl; + + x = span->x1; + w = (span->x2 - x); + if (w <= 0) continue; + dv = (span->o2 - span->o1); + if (dv <= 0) continue; + + ww = w; + u = span->u[0] << FPI; + if (u < 0) u = 0; + else if (u > swp) u = swp; + v = span->v[0] << FPI; + if (v < 0) v = 0; + else if (v > shp) v = shp; + ue = span->u[1] << FPI; + if (ue < 0) ue = 0; + else if (ue > swp) ue = swp; + ve = span->v[1] << FPI; + if (ve < 0) ve = 0; + else if (ve > shp) ve = shp; + ud = (ue - u) / w; + vd = (ve - v) / w; + tl = (long long)ud * (w << FP); + tl = tl / dv; + ud = tl; + u -= (ud * (span->o1 - (span->x1 << FP))) / FP1; + + tl = (long long)vd * (w << FP); + tl = tl / dv; + vd = tl; + v -= (vd * (span->o1 - (span->x1 << FP))) / FP1; + + if (ud < 0) u += ud; + if (vd < 0) v += vd; + if (u < 0) u = 0; + else if (u >= swp) u = swp - 1; + if (v < 0) v = 0; + else if (v >= shp) v = shp - 1; + + if (direct) + d = dst->image.data + (y * dst->cache_entry.w) + x; + else + d = buf; + +#define SMOOTH 1 +#ifdef COLMUL + c1 = span->col[0]; // col + c2 = span->col[1]; // col + cv = 0; // col + cd = (255 << 16) / w; // col + + if (c1 == c2) + { + if (c1 == 0xffffffff) + { +#endif +#include "evas_map_image_loop.c" +#ifdef COLMUL + } + else if ((c1 == 0x0000ff) && (!src->cache_entry.flags.alpha)) + { + // all black line +# define COLBLACK 1 +# include "evas_map_image_loop.c" +# undef COLBLACK + } + else if (c1 == 0x000000) + { + // skip span + } + else + { + // generic loop +# include "evas_map_image_loop.c" + } + } + else + { +# include "evas_map_image_loop.c" + } +#endif + if (!direct) + { + d = dst->image.data; + d += (y * dst->cache_entry.w) + x; + func(buf, NULL, dc->mul.col, d, w); + } + } + else break; + } + } + } + else + { + for (y = ystart; y <= yend; y++) + { + int x, w, ww; + FPc u, v, ud, vd, ue, ve; + DATA32 *d, *s; +#ifdef COLMUL + FPc cv, cd; // col + DATA32 c1, c2; // col +#endif + Line *line; + + line = &(spans[y - ystart]); + for (i = 0; i < 2; i++) + { + Span *span; + + span = &(line->span[i]); + if (span->x1 >= 0) + { + x = span->x1; + w = (span->x2 - x); + + if (w <= 0) continue; + ww = w; + u = span->u[0] << FPI; + if (u < 0) u = 0; + else if (u > swp) u = swp; + v = span->v[0] << FPI; + if (v < 0) v = 0; + else if (v > shp) v = shp; + ue = span->u[1] << FPI; + if (ue < 0) ue = 0; + else if (ue > swp) ue = swp; + ve = span->v[1] << FPI; + if (ve < 0) ve = 0; + else if (ve > shp) ve = shp; + ud = (ue - u) / w; + vd = (ve - v) / w; + if (direct) + d = dst->image.data + (y * dst->cache_entry.w) + x; + else + d = buf; + + if (ud < 0) u += ud; + if (vd < 0) v += vd; + if (u < 0) u = 0; + else if (u >= swp) u = swp - 1; + if (v < 0) v = 0; + else if (v >= shp) v = shp - 1; + +#undef SMOOTH +#ifdef COLMUL + c1 = span->col[0]; // col + c2 = span->col[1]; // col + cv = 0; // col + cd = (255 << 16) / w; // col + + if (c1 == c2) + { + if (c1 == 0xffffffff) + { +#endif +#include "evas_map_image_loop.c" +#ifdef COLMUL + } + else if ((c1 == 0x0000ff) && (!src->cache_entry.flags.alpha)) + { + // all black line +# define COLBLACK 1 +# include "evas_map_image_loop.c" +# undef COLBLACK + } + else if (c1 == 0x000000) + { + // skip span + } + else + { + // generic loop +# include "evas_map_image_loop.c" + } + } + else + { + // generic loop +# include "evas_map_image_loop.c" + } +#endif + if (!direct) + { + d = dst->image.data; + d += (y * dst->cache_entry.w) + x; + func(buf, NULL, dc->mul.col, d, w); + } + } + else break; + } + } + } +} -- cgit v1.1