aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_map_image_core.c
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-01-04 18:41:13 +1000
committerDavid Walter Seikel2012-01-04 18:41:13 +1000
commitdd7595a3475407a7fa96a97393bae8c5220e8762 (patch)
treee341e911d7eb911a51684a7412ef7f7c7605d28e /libraries/evas/src/lib/engines/common/evas_map_image_core.c
parentAdd the skeleton. (diff)
downloadSledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.zip
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.gz
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.bz2
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.xz
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.
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_map_image_core.c')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_map_image_core.c226
1 files changed, 226 insertions, 0 deletions
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 @@
1//#undef SCALE_USING_MMX
2{
3 if (smooth)
4 {
5 for (y = ystart; y <= yend; y++)
6 {
7 int x, w, ww;
8 FPc u, v, ud, vd, dv, ue, ve;
9 DATA32 *d, *s;
10#ifdef COLMUL
11 FPc cv, cd; // col
12# ifdef SCALE_USING_MMX
13 FPc cc;
14#endif
15 DATA32 c1, c2; // col
16#endif
17 Line *line;
18
19#ifdef SCALE_USING_MMX
20 pxor_r2r(mm0, mm0);
21 MOV_A2R(ALPHA_255, mm5)
22#endif
23
24 line = &(spans[y - ystart]);
25 for (i = 0; i < 2; i++)
26 {
27 Span *span;
28
29 span = &(line->span[i]);
30 if (span->x1 >= 0)
31 {
32 long long tl;
33
34 x = span->x1;
35 w = (span->x2 - x);
36 if (w <= 0) continue;
37 dv = (span->o2 - span->o1);
38 if (dv <= 0) continue;
39
40 ww = w;
41 u = span->u[0] << FPI;
42 if (u < 0) u = 0;
43 else if (u > swp) u = swp;
44 v = span->v[0] << FPI;
45 if (v < 0) v = 0;
46 else if (v > shp) v = shp;
47 ue = span->u[1] << FPI;
48 if (ue < 0) ue = 0;
49 else if (ue > swp) ue = swp;
50 ve = span->v[1] << FPI;
51 if (ve < 0) ve = 0;
52 else if (ve > shp) ve = shp;
53 ud = (ue - u) / w;
54 vd = (ve - v) / w;
55 tl = (long long)ud * (w << FP);
56 tl = tl / dv;
57 ud = tl;
58 u -= (ud * (span->o1 - (span->x1 << FP))) / FP1;
59
60 tl = (long long)vd * (w << FP);
61 tl = tl / dv;
62 vd = tl;
63 v -= (vd * (span->o1 - (span->x1 << FP))) / FP1;
64
65 if (ud < 0) u += ud;
66 if (vd < 0) v += vd;
67 if (u < 0) u = 0;
68 else if (u >= swp) u = swp - 1;
69 if (v < 0) v = 0;
70 else if (v >= shp) v = shp - 1;
71
72 if (direct)
73 d = dst->image.data + (y * dst->cache_entry.w) + x;
74 else
75 d = buf;
76
77#define SMOOTH 1
78#ifdef COLMUL
79 c1 = span->col[0]; // col
80 c2 = span->col[1]; // col
81 cv = 0; // col
82 cd = (255 << 16) / w; // col
83
84 if (c1 == c2)
85 {
86 if (c1 == 0xffffffff)
87 {
88#endif
89#include "evas_map_image_loop.c"
90#ifdef COLMUL
91 }
92 else if ((c1 == 0x0000ff) && (!src->cache_entry.flags.alpha))
93 {
94 // all black line
95# define COLBLACK 1
96# include "evas_map_image_loop.c"
97# undef COLBLACK
98 }
99 else if (c1 == 0x000000)
100 {
101 // skip span
102 }
103 else
104 {
105 // generic loop
106# include "evas_map_image_loop.c"
107 }
108 }
109 else
110 {
111# include "evas_map_image_loop.c"
112 }
113#endif
114 if (!direct)
115 {
116 d = dst->image.data;
117 d += (y * dst->cache_entry.w) + x;
118 func(buf, NULL, dc->mul.col, d, w);
119 }
120 }
121 else break;
122 }
123 }
124 }
125 else
126 {
127 for (y = ystart; y <= yend; y++)
128 {
129 int x, w, ww;
130 FPc u, v, ud, vd, ue, ve;
131 DATA32 *d, *s;
132#ifdef COLMUL
133 FPc cv, cd; // col
134 DATA32 c1, c2; // col
135#endif
136 Line *line;
137
138 line = &(spans[y - ystart]);
139 for (i = 0; i < 2; i++)
140 {
141 Span *span;
142
143 span = &(line->span[i]);
144 if (span->x1 >= 0)
145 {
146 x = span->x1;
147 w = (span->x2 - x);
148
149 if (w <= 0) continue;
150 ww = w;
151 u = span->u[0] << FPI;
152 if (u < 0) u = 0;
153 else if (u > swp) u = swp;
154 v = span->v[0] << FPI;
155 if (v < 0) v = 0;
156 else if (v > shp) v = shp;
157 ue = span->u[1] << FPI;
158 if (ue < 0) ue = 0;
159 else if (ue > swp) ue = swp;
160 ve = span->v[1] << FPI;
161 if (ve < 0) ve = 0;
162 else if (ve > shp) ve = shp;
163 ud = (ue - u) / w;
164 vd = (ve - v) / w;
165 if (direct)
166 d = dst->image.data + (y * dst->cache_entry.w) + x;
167 else
168 d = buf;
169
170 if (ud < 0) u += ud;
171 if (vd < 0) v += vd;
172 if (u < 0) u = 0;
173 else if (u >= swp) u = swp - 1;
174 if (v < 0) v = 0;
175 else if (v >= shp) v = shp - 1;
176
177#undef SMOOTH
178#ifdef COLMUL
179 c1 = span->col[0]; // col
180 c2 = span->col[1]; // col
181 cv = 0; // col
182 cd = (255 << 16) / w; // col
183
184 if (c1 == c2)
185 {
186 if (c1 == 0xffffffff)
187 {
188#endif
189#include "evas_map_image_loop.c"
190#ifdef COLMUL
191 }
192 else if ((c1 == 0x0000ff) && (!src->cache_entry.flags.alpha))
193 {
194 // all black line
195# define COLBLACK 1
196# include "evas_map_image_loop.c"
197# undef COLBLACK
198 }
199 else if (c1 == 0x000000)
200 {
201 // skip span
202 }
203 else
204 {
205 // generic loop
206# include "evas_map_image_loop.c"
207 }
208 }
209 else
210 {
211 // generic loop
212# include "evas_map_image_loop.c"
213 }
214#endif
215 if (!direct)
216 {
217 d = dst->image.data;
218 d += (y * dst->cache_entry.w) + x;
219 func(buf, NULL, dc->mul.col, d, w);
220 }
221 }
222 else break;
223 }
224 }
225 }
226}