2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
7 #include "evas_common.h"
8 #include "evas_gradient_private.h"
11 typedef struct _Radial_Data Radial_Data;
25 radial_shutdown(void);
28 radial_init_geom(RGBA_Gradient *gr);
31 radial_setup_geom(RGBA_Gradient *gr);
34 radial_free_geom(void *gdata);
37 radial_has_alpha(RGBA_Gradient *gr, int op);
40 radial_has_mask(RGBA_Gradient *gr, int op);
43 radial_get_map_len(RGBA_Gradient *gr);
45 static Gfx_Func_Gradient_Fill
46 radial_get_fill_func(RGBA_Gradient *gr, int op, unsigned char aa);
48 static RGBA_Gradient_Type radial = {"radial", radial_init, radial_shutdown,
49 radial_init_geom, radial_setup_geom, radial_free_geom,
50 radial_has_alpha, radial_has_mask,
51 radial_get_map_len, radial_get_fill_func};
54 /** internal functions **/
57 radial_reflect(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
58 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
61 radial_reflect_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
62 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
65 radial_reflect_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
66 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
69 radial_reflect_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
70 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
73 radial_repeat(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
74 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
77 radial_repeat_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
78 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
81 radial_repeat_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
82 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
85 radial_repeat_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
86 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
89 radial_restrict_reflect(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
90 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
93 radial_restrict_reflect_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
94 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
97 radial_restrict_reflect_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
98 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
101 radial_restrict_reflect_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
102 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
105 radial_restrict_repeat(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
106 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
109 radial_restrict_repeat_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
110 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
113 radial_restrict_repeat_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
114 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
117 radial_restrict_repeat_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
118 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
120 radial_pad(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
121 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
124 radial_pad_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
125 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
128 radial_pad_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
129 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
132 radial_pad_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
133 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data);
137 evas_common_gradient_radial_get(void)
148 radial_shutdown(void)
153 radial_free_geom(void *gdata)
155 Radial_Data *data = (Radial_Data *)gdata;
156 if (data) free(data);
160 radial_setup_geom(RGBA_Gradient *gr)
162 Radial_Data *radial_data;
164 if (!gr || (gr->type.geometer != &radial)) return;
166 radial_data = (Radial_Data *)gr->type.gdata;
167 if (!radial_data) return;
168 radial_data->sx = gr->fill.w;
169 radial_data->sy = gr->fill.h;
170 radial_data->s = radial_data->sx;
171 if (radial_data->sy > radial_data->sx)
172 radial_data->s = radial_data->sy;
173 radial_data->off = gr->map.offset;
174 radial_data->len = radial_data->s - (int)(radial_data->s * radial_data->r0);
178 radial_init_geom(RGBA_Gradient *gr)
180 Radial_Data *radial_data;
182 char *s, *p, key[256];
185 if (!gr || (gr->type.geometer != &radial)) return;
187 radial_data = (Radial_Data *)gr->type.gdata;
190 radial_data = calloc(1, sizeof(Radial_Data));
191 if (!radial_data) return;
192 radial_data->r0 = 0.0;
193 radial_data->sx = 32;
194 radial_data->sy = 32;
196 radial_data->off = 0.0;
197 radial_data->len = 32;
199 gr->type.gdata = radial_data;
201 if (!gr->type.params || !*(gr->type.params))
204 s = strdup(gr->type.params);
207 r0 = radial_data->r0;
209 while ((p = evas_common_gradient_get_key_fval(p, key, &r0)))
211 if (!strcmp(key, "inner_radius"))
221 if (r0 < 0.0) r0 = 0.0;
222 if (r0 > 1.0) r0 = 1.0;
223 radial_data->r0 = r0;
230 radial_has_alpha(RGBA_Gradient *gr, int op)
232 Radial_Data *radial_data;
234 if (!gr || (gr->type.geometer != &radial)) return 0;
235 if (gr->has_alpha | gr->map.has_alpha)
237 if ( (op == _EVAS_RENDER_COPY) || (op == _EVAS_RENDER_COPY_REL) ||
238 (op == _EVAS_RENDER_MASK) || (op == _EVAS_RENDER_MUL) )
240 radial_data = (Radial_Data *)gr->type.gdata;
241 if (!radial_data) return 0;
242 if (radial_data->r0 > 0)
244 if ( (gr->fill.spread == _EVAS_TEXTURE_RESTRICT) ||
245 (gr->fill.spread == _EVAS_TEXTURE_RESTRICT_REFLECT) ||
246 (gr->fill.spread == _EVAS_TEXTURE_RESTRICT_REPEAT) )
252 radial_has_mask(RGBA_Gradient *gr, int op)
254 Radial_Data *radial_data;
256 if (!gr || (gr->type.geometer != &radial)) return 0;
257 if ( (op == _EVAS_RENDER_COPY) || (op == _EVAS_RENDER_COPY_REL) ||
258 (op == _EVAS_RENDER_MASK) || (op == _EVAS_RENDER_MUL) )
260 radial_data = (Radial_Data *)gr->type.gdata;
261 if (!radial_data) return 0;
262 if (radial_data->r0 > 0)
264 if ( (gr->fill.spread == _EVAS_TEXTURE_RESTRICT) ||
265 (gr->fill.spread == _EVAS_TEXTURE_RESTRICT_REFLECT) ||
266 (gr->fill.spread == _EVAS_TEXTURE_RESTRICT_REPEAT) )
273 radial_get_map_len(RGBA_Gradient *gr)
275 Radial_Data *radial_data;
277 if (!gr || (gr->type.geometer != &radial)) return 0;
278 radial_data = (Radial_Data *)gr->type.gdata;
279 if (!radial_data) return 0;
280 return radial_data->len;
283 static Gfx_Func_Gradient_Fill
284 radial_get_fill_func(RGBA_Gradient *gr, int op, unsigned char aa)
286 Radial_Data *radial_data;
287 Gfx_Func_Gradient_Fill sfunc = NULL;
290 if (!gr || (gr->type.geometer != &radial)) return sfunc;
291 radial_data = (Radial_Data *)gr->type.gdata;
292 if (!radial_data) return sfunc;
294 radial_data->off = gr->map.offset;
295 if ( (op == _EVAS_RENDER_COPY) || (op == _EVAS_RENDER_COPY_REL) ||
296 (op == _EVAS_RENDER_MASK) || (op == _EVAS_RENDER_MUL) )
299 switch (gr->fill.spread)
301 case _EVAS_TEXTURE_REFLECT:
305 if (radial_data->r0 > 0)
308 sfunc = radial_reflect_aa_masked;
310 sfunc = radial_reflect_aa;
313 sfunc = radial_reflect_aa;
317 if (radial_data->r0 > 0)
320 sfunc = radial_reflect_masked;
322 sfunc = radial_reflect;
325 sfunc = radial_reflect;
329 case _EVAS_TEXTURE_REPEAT:
333 if (radial_data->r0 > 0)
336 sfunc = radial_repeat_aa_masked;
338 sfunc = radial_repeat_aa;
341 sfunc = radial_repeat_aa;
345 if (radial_data->r0 > 0)
348 sfunc = radial_repeat_masked;
350 sfunc = radial_repeat;
353 sfunc = radial_repeat;
357 case _EVAS_TEXTURE_RESTRICT:
358 radial_data->off = 0;
359 case _EVAS_TEXTURE_RESTRICT_REFLECT:
364 sfunc = radial_restrict_reflect_aa_masked;
366 sfunc = radial_restrict_reflect_aa;
371 sfunc = radial_restrict_reflect_masked;
373 sfunc = radial_restrict_reflect;
377 case _EVAS_TEXTURE_RESTRICT_REPEAT:
382 sfunc = radial_restrict_repeat_aa_masked;
384 sfunc = radial_restrict_repeat_aa;
389 sfunc = radial_restrict_repeat_masked;
391 sfunc = radial_restrict_repeat;
395 case _EVAS_TEXTURE_PAD:
400 sfunc = radial_pad_aa_masked;
402 sfunc = radial_pad_aa;
407 sfunc = radial_pad_masked;
414 sfunc = radial_reflect_aa;
420 #define SETUP_RADIAL_FILL \
421 if (gdata->sx != gdata->s) \
423 axx = (gdata->s * axx) / gdata->sx; \
424 axy = (gdata->s * axy) / gdata->sx; \
426 if (gdata->sy != gdata->s) \
428 ayy = (gdata->s * ayy) / gdata->sy; \
429 ayx = (gdata->s * ayx) / gdata->sy; \
431 xx = (axx * x) + (axy * y); \
432 yy = (ayx * x) + (ayy * y); \
433 rr0 = gdata->r0 * gdata->s; \
438 radial_reflect(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
439 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
441 DATA32 *dst_end = dst + dst_len;
442 Radial_Data *gdata = (Radial_Data *)params_data;
444 int off = gdata->off * (src_len - 1);
448 while (dst < dst_end)
450 int ll = (hypot(xx, yy) - rr0);
453 l += (ll - (l << 16)) >> 15;
461 int m = (l % (2 * src_len));
469 dst++; xx += axx; yy += ayx;
474 radial_reflect_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
475 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
477 DATA32 *dst_end = dst + dst_len;
478 Radial_Data *gdata = (Radial_Data *)params_data;
480 int off = gdata->off * (src_len - 1);
484 while (dst < dst_end)
486 int ll = (hypot(xx, yy) - rr0);
487 int l = (ll >> 16), lp;
492 DATA32 a = 1 + ((ll - (l << 16)) >> 8), a0 = a;
495 if (lp < 0) { lp = -lp; a = 257 - a; }
498 int m = (lp % (2 * src_len));
502 { lp = src_len - lp - 1; a = 257 - a; }
505 if (lp + 1 < src_len)
506 *dst = INTERP_256(a, src[lp + 1], *dst);
508 *dst = MUL_256(a0, *dst);
510 dst++; xx += axx; yy += ayx;
515 radial_reflect_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
516 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
518 DATA32 *dst_end = dst + dst_len;
519 Radial_Data *gdata = (Radial_Data *)params_data;
521 int off = gdata->off * (src_len - 1);
525 while (dst < dst_end)
527 int ll = (hypot(xx, yy) - rr0);
530 l += (ll - (l << 16)) >> 15;
538 int m = (l % (2 * src_len));
544 *dst = src[l]; *mask = 255;
546 dst++; mask++; xx += axx; yy += ayx;
551 radial_reflect_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
552 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
554 DATA32 *dst_end = dst + dst_len;
555 Radial_Data *gdata = (Radial_Data *)params_data;
557 int off = gdata->off * (src_len - 1);
561 while (dst < dst_end)
563 int ll = (hypot(xx, yy) - rr0);
564 int l = (ll >> 16), lp;
569 DATA32 a = 1 + ((ll - (l << 16)) >> 8), a0 = a - 1;
572 if (lp < 0) { lp = -lp; a = 257 - a; }
575 int m = (lp % (2 * src_len));
579 { lp = src_len - lp - 1; a = 257 - a; }
581 *dst = src[lp]; *mask = 255;
582 if (lp + 1 < src_len)
583 *dst = INTERP_256(a, src[lp + 1], *dst);
587 dst++; mask++; xx += axx; yy += ayx;
592 radial_repeat(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
593 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
595 DATA32 *dst_end = dst + dst_len;
596 Radial_Data *gdata = (Radial_Data *)params_data;
598 int off = gdata->off * (src_len - 1);
602 while (dst < dst_end)
604 int ll = (hypot(xx, yy) - rr0);
607 l += (ll - (l << 16)) >> 15;
617 dst++; xx += axx; yy += ayx;
622 radial_repeat_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
623 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
625 DATA32 *dst_end = dst + dst_len;
626 Radial_Data *gdata = (Radial_Data *)params_data;
628 int off = gdata->off * (src_len - 1);
632 while (dst < dst_end)
634 int ll = (hypot(xx, yy) - rr0);
635 int l = (ll >> 16), lp;
640 DATA32 a = 1 + ((ll - (l << 16)) >> 8);
647 if (lp + 1 < src_len)
648 *dst = INTERP_256(a, src[lp + 1], *dst);
649 if (lp == src_len - 1)
650 *dst = INTERP_256(a, src[0], *dst);
652 *dst = MUL_256(a, *dst);
654 dst++; xx += axx; yy += ayx;
659 radial_repeat_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
660 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
662 DATA32 *dst_end = dst + dst_len;
663 Radial_Data *gdata = (Radial_Data *)params_data;
665 int off = gdata->off * (src_len - 1);
669 while (dst < dst_end)
671 int ll = (hypot(xx, yy) - rr0);
674 l += (ll - (l << 16)) >> 15;
682 *dst = src[l]; *mask = 255;
684 dst++; mask++; xx += axx; yy += ayx;
689 radial_repeat_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
690 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
692 DATA32 *dst_end = dst + dst_len;
693 Radial_Data *gdata = (Radial_Data *)params_data;
695 int off = gdata->off * (src_len - 1);
699 while (dst < dst_end)
701 int ll = (hypot(xx, yy) - rr0);
702 int l = (ll >> 16), lp;
707 DATA32 a = 1 + ((ll - (l << 16)) >> 8);
713 *dst = src[lp]; *mask = 255;
714 if (lp + 1 < src_len)
715 *dst = INTERP_256(a, src[lp + 1], *dst);
716 if (lp == src_len - 1)
717 *dst = INTERP_256(a, src[0], *dst);
721 dst++; mask++; xx += axx; yy += ayx;
726 radial_restrict_reflect(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
727 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
729 DATA32 *dst_end = dst + dst_len;
730 Radial_Data *gdata = (Radial_Data *)params_data;
732 int off = gdata->off * (src_len - 1);
736 while (dst < dst_end)
738 int ll = (hypot(xx, yy) - rr0);
741 l += (ll - (l << 16)) >> 15;
743 if ((unsigned)l < src_len)
749 int m = (l % (2 * src_len));
757 dst++; xx += axx; yy += ayx;
762 radial_restrict_reflect_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
763 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
765 DATA32 *dst_end = dst + dst_len;
766 Radial_Data *gdata = (Radial_Data *)params_data;
768 int off = gdata->off * (src_len - 1);
772 while (dst < dst_end)
774 int ll = (hypot(xx, yy) - rr0);
775 int l = (ll >> 16), lp;
778 if ((unsigned)l < src_len)
780 DATA32 a = 1 + ((ll - (l << 16)) >> 8), a0 = a;
783 if (lp < 0) { lp = -lp; a = 257 - a; }
786 int m = (lp % (2 * src_len));
790 { lp = src_len - lp - 1; a = 257 - a; }
793 if (lp + 1 < src_len)
794 *dst = INTERP_256(a, src[lp + 1], *dst);
795 if (l == (src_len - 1))
796 *dst = MUL_256(257 - a0, *dst);
798 *dst = MUL_256(a0, *dst);
800 dst++; xx += axx; yy += ayx;
805 radial_restrict_reflect_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
806 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
808 DATA32 *dst_end = dst + dst_len;
809 Radial_Data *gdata = (Radial_Data *)params_data;
811 int off = gdata->off * (src_len - 1);
815 while (dst < dst_end)
817 int ll = (hypot(xx, yy) - rr0);
820 l += (ll - (l << 16)) >> 15;
822 if ((unsigned)l < src_len)
828 int m = (l % (2 * src_len));
834 *dst = src[l]; *mask = 255;
836 dst++; mask++; xx += axx; yy += ayx;
841 radial_restrict_reflect_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
842 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
844 DATA32 *dst_end = dst + dst_len;
845 Radial_Data *gdata = (Radial_Data *)params_data;
847 int off = gdata->off * (src_len - 1);
851 while (dst < dst_end)
853 int ll = (hypot(xx, yy) - rr0);
854 int l = (ll >> 16), lp;
857 if ((unsigned)l < src_len)
859 DATA32 a = 1 + ((ll - (l << 16)) >> 8), a0 = a - 1;
862 if (lp < 0) { lp = -lp; a = 257 - a; }
865 int m = (lp % (2 * src_len));
869 { lp = src_len - lp - 1; a = 257 - a; }
871 *dst = src[lp]; *mask = 255;
872 if (lp + 1 < src_len)
873 *dst = INTERP_256(a, src[lp + 1], *dst);
874 if (l == (src_len - 1))
879 dst++; mask++; xx += axx; yy += ayx;
884 radial_restrict_repeat(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
885 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
887 DATA32 *dst_end = dst + dst_len;
888 Radial_Data *gdata = (Radial_Data *)params_data;
890 int off = gdata->off * (src_len - 1);
894 while (dst < dst_end)
896 int ll = (hypot(xx, yy) - rr0);
899 l += (ll - (l << 16)) >> 15;
901 if ((unsigned)l < src_len)
909 dst++; xx += axx; yy += ayx;
914 radial_restrict_repeat_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
915 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
917 DATA32 *dst_end = dst + dst_len;
918 Radial_Data *gdata = (Radial_Data *)params_data;
920 int off = gdata->off * (src_len - 1);
924 while (dst < dst_end)
926 int ll = (hypot(xx, yy) - rr0);
927 int l = (ll >> 16), lp;
930 if ((unsigned)l < src_len)
932 DATA32 a = 1 + ((ll - (l << 16)) >> 8);
939 if (lp + 1 < src_len)
940 *dst = INTERP_256(a, src[lp + 1], *dst);
941 if (lp == (src_len - 1))
942 *dst = INTERP_256(a, src[0], *dst);
943 if (l == (src_len - 1))
944 *dst = MUL_256(257 - a, *dst);
946 *dst = MUL_256(a, *dst);
948 dst++; xx += axx; yy += ayx;
953 radial_restrict_repeat_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
954 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
956 DATA32 *dst_end = dst + dst_len;
957 Radial_Data *gdata = (Radial_Data *)params_data;
959 int off = gdata->off * (src_len - 1);
963 while (dst < dst_end)
965 int ll = (hypot(xx, yy) - rr0);
968 l += (ll - (l << 16)) >> 15;
970 if ((unsigned)l < src_len)
976 *dst = src[l]; *mask = 255;
978 dst++; mask++; xx += axx; yy += ayx;
983 radial_restrict_repeat_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
984 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
986 DATA32 *dst_end = dst + dst_len;
987 Radial_Data *gdata = (Radial_Data *)params_data;
989 int off = gdata->off * (src_len - 1);
993 while (dst < dst_end)
995 int ll = (hypot(xx, yy) - rr0);
996 int l = (ll >> 16), lp;
999 if ((unsigned)l < src_len)
1001 DATA32 a = 1 + ((ll - (l << 16)) >> 8);
1004 lp = (lp % src_len);
1007 *dst = src[lp]; *mask = 255;
1008 if (lp + 1 < src_len)
1009 *dst = INTERP_256(a, src[lp + 1], *dst);
1010 if (lp == (src_len - 1))
1011 *dst = INTERP_256(a, src[0], *dst);
1012 if (l == (src_len - 1))
1014 if ((l == 0) && rr0)
1017 dst++; mask++; xx += axx; yy += ayx;
1022 radial_pad(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
1023 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
1025 DATA32 *dst_end = dst + dst_len;
1026 Radial_Data *gdata = (Radial_Data *)params_data;
1031 while (dst < dst_end)
1033 int ll = (hypot(xx, yy) - rr0);
1036 l += (ll - (l << 16)) >> 15;
1044 dst++; xx += axx; yy += ayx;
1049 radial_pad_aa(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
1050 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
1052 DATA32 *dst_end = dst + dst_len;
1053 Radial_Data *gdata = (Radial_Data *)params_data;
1058 while (dst < dst_end)
1060 int ll = (hypot(xx, yy) - rr0);
1062 DATA32 a = 1 + ((ll - (l << 16)) >> 8);
1065 if ((unsigned)l < src_len)
1068 if (l + 1 < src_len)
1069 *dst = INTERP_256(a, src[l + 1], src[l]);
1075 *dst = MUL_256(a, *dst);
1079 *dst = src[src_len - 1];
1081 dst++; xx += axx; yy += ayx;
1086 radial_pad_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
1087 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
1089 DATA32 *dst_end = dst + dst_len;
1090 Radial_Data *gdata = (Radial_Data *)params_data;
1095 while (dst < dst_end)
1097 int ll = (hypot(xx, yy) - rr0);
1100 l += (ll - (l << 16)) >> 15;
1101 *dst = 0; *mask = 0;
1106 *dst = src[l]; *mask = 255;
1108 dst++; mask++; xx += axx; yy += ayx;
1113 radial_pad_aa_masked(DATA32 *src, int src_len, DATA32 *dst, DATA8 *mask, int dst_len,
1114 int x, int y, int axx, int axy, int ayx, int ayy, void *params_data)
1116 DATA32 *dst_end = dst + dst_len;
1117 Radial_Data *gdata = (Radial_Data *)params_data;
1122 while (dst < dst_end)
1124 int ll = (hypot(xx, yy) - rr0);
1126 DATA32 a = 1 + ((ll - (l << 16)) >> 8);
1128 *dst = 0; *mask = 0;
1129 if ((unsigned)l < src_len)
1132 if (l + 1 < src_len)
1133 *dst = INTERP_256(a, src[l + 1], src[l]);
1137 *dst = src[0]; *mask = 255;
1143 *dst = src[src_len - 1]; *mask = 255;
1145 dst++; mask++; xx += axx; yy += ayx;