diff options
-rw-r--r-- | include/mupdf/fitz.h | 1 | ||||
-rw-r--r-- | include/mupdf/fitz/config.h | 126 | ||||
-rw-r--r-- | source/fitz/document-all.c | 20 | ||||
-rw-r--r-- | source/fitz/draw-affine.c | 1823 | ||||
-rw-r--r-- | source/fitz/draw-device.c | 2 | ||||
-rw-r--r-- | source/fitz/draw-edge.c | 6 | ||||
-rw-r--r-- | source/fitz/draw-paint.c | 1136 | ||||
-rw-r--r-- | source/fitz/paint-glyph.h | 3 |
8 files changed, 1870 insertions, 1247 deletions
diff --git a/include/mupdf/fitz.h b/include/mupdf/fitz.h index 6f4e431d..b299882f 100644 --- a/include/mupdf/fitz.h +++ b/include/mupdf/fitz.h @@ -6,6 +6,7 @@ extern "C" { #endif #include "mupdf/fitz/version.h" +#include "mupdf/fitz/config.h" #include "mupdf/fitz/system.h" #include "mupdf/fitz/context.h" diff --git a/include/mupdf/fitz/config.h b/include/mupdf/fitz/config.h new file mode 100644 index 00000000..47e5cd04 --- /dev/null +++ b/include/mupdf/fitz/config.h @@ -0,0 +1,126 @@ +#ifndef FZ_CONFIG_H + +#define FZ_CONFIG_H + +/* + Choose which plotters we need. + By default we build the greyscale, RGB and CMYK plotters in, + but omit the arbitraryall the plotters in. To avoid building + plotters in that aren't needed, define the unwanted + FZ_PLOTTERS_... define to 0. +*/ +/* #define FZ_PLOTTERS_G 1 */ +/* #define FZ_PLOTTERS_RGB 1 */ +/* #define FZ_PLOTTERS_CMYK 1 */ +/* #define FZ_PLOTTERS_N 0 */ + +/* + Choose which document agents to include. + By default all but GPRF are enabled. To avoid building unwanted + ones, define FZ_ENABLE_... to 0. +*/ +/* #define FZ_ENABLE_PDF 1 */ +/* #define FZ_ENABLE_XPS 1 */ +/* #define FZ_ENABLE_SVG 1 */ +/* #define FZ_ENABLE_CBZ 1 */ +/* #define FZ_ENABLE_IMG 1 */ +/* #define FZ_ENABLE_TIFF 1 */ +/* #define FZ_ENABLE_HTML 1 */ +/* #define FZ_ENABLE_EPUB 1 */ +/* #define FZ_ENABLE_GPRF 1 */ + +/* + Choose which fonts to include. + By default we include the base 14 PDF fonts, + DroidSansFallback from Android for CJK, and + Charis SIL from SIL for epub/html. + Enable the following defines to AVOID including + unwanted fonts. +*/ +/* To avoid all noto fonts except CJK, enable: */ +/* #define TOFU */ + +/* To skip the CJK font, enable: */ +/* #define TOFU_CJK */ + +/* To skip CJK Extension A, enable: */ +/* #define TOFU_CJK_EXT */ + +/* To skip the Emoji font, enable: */ +/* #define TOFU_EMOJI */ + +/* To skip the ancient/historic scripts, enable: */ +/* #define TOFU_HISTORIC */ + +/* To skip the symbol font, enable: */ +/* #define TOFU_SYMBOL */ + +/* To skip the SIL fonts, enable: */ +/* #define TOFU_SIL */ + +#ifndef FZ_PLOTTERS_G +#define FZ_PLOTTERS_G 1 +#endif /* FZ_PLOTTERS_G */ + +#ifndef FZ_PLOTTERS_RGB +#define FZ_PLOTTERS_RGB 1 +#endif /* FZ_PLOTTERS_RGB */ + +#ifndef FZ_PLOTTERS_CMYK +#define FZ_PLOTTERS_CMYK 1 +#endif /* FZ_PLOTTERS_CMYK */ + +#ifndef FZ_PLOTTERS_N +#define FZ_PLOTTERS_N 0 +#endif /* FZ_PLOTTERS_N */ + +/* We need at least 1 plotter defined */ +#if FZ_PLOTTERS_G == 0 && FZ_PLOTTERS_RGB == 0 && FZ_PLOTTERS_CMYK == 0 +#undef FZ_PLOTTERS_N +#define FZ_PLOTTERS_N 1 +#endif + +#ifndef FZ_ENABLE_PDF +#define FZ_ENABLE_PDF 1 +#endif /* FZ_ENABLE_PDF */ + +#ifndef FZ_ENABLE_XPS +#define FZ_ENABLE_XPS 1 +#endif /* FZ_ENABLE_XPS */ + +#ifndef FZ_ENABLE_SVG +#define FZ_ENABLE_SVG 1 +#endif /* FZ_ENABLE_SVG */ + +#ifndef FZ_ENABLE_CBZ +#define FZ_ENABLE_CBZ 1 +#endif /* FZ_ENABLE_CBZ */ + +#ifndef FZ_ENABLE_IMG +#define FZ_ENABLE_IMG 1 +#endif /* FZ_ENABLE_IMG */ + +#ifndef FZ_ENABLE_TIFF +#define FZ_ENABLE_TIFF 1 +#endif /* FZ_ENABLE_TIFF */ + +#ifndef FZ_ENABLE_HTML +#define FZ_ENABLE_HTML 1 +#endif /* FZ_ENABLE_HTML */ + +#ifndef FZ_ENABLE_EPUB +#define FZ_ENABLE_EPUB 1 +#endif /* FZ_ENABLE_EPUB */ + +#ifndef FZ_ENABLE_GPRF +#define FZ_ENABLE_GPRF 0 +#endif /* FZ_ENABLE_GPRF */ + + +/* If Epub and HTML are both disabled, disable SIL fonts */ +#if FZ_ENABLE_HTML == 0 && FZ_ENABLE_EPUB == 0 +#undef TOFU_SIL +#define TOFU_SIL +#endif + +#endif /* FZ_CONFIG_H */ diff --git a/source/fitz/document-all.c b/source/fitz/document-all.c index 3c1398e6..350e2f5e 100644 --- a/source/fitz/document-all.c +++ b/source/fitz/document-all.c @@ -2,15 +2,31 @@ void fz_register_document_handlers(fz_context *ctx) { +#if FZ_ENABLE_PDF fz_register_document_handler(ctx, &pdf_document_handler); +#endif /* FZ_ENABLE_PDF */ +#if FZ_ENABLE_XPS fz_register_document_handler(ctx, &xps_document_handler); +#endif /* FZ_ENABLE_XPS */ +#if FZ_ENABLE_SVG fz_register_document_handler(ctx, &svg_document_handler); +#endif /* FZ_ENABLE_SVG */ +#if FZ_ENABLE_CBZ fz_register_document_handler(ctx, &cbz_document_handler); +#endif /* FZ_ENABLE_CBZ */ +#if FZ_ENABLE_IMG fz_register_document_handler(ctx, &img_document_handler); +#endif /* FZ_ENABLE_IMG */ +#if FZ_ENABLE_TIFF fz_register_document_handler(ctx, &tiff_document_handler); +#endif /* FZ_ENABLE_TIFF */ +#if FZ_ENABLE_HTML fz_register_document_handler(ctx, &html_document_handler); +#endif /* FZ_ENABLE_HTML */ +#if FZ_ENABLE_EPUB fz_register_document_handler(ctx, &epub_document_handler); -#ifdef SUPPORT_GPROOF +#endif /* FZ_ENABLE_EPUB */ +#if FZ_ENABLE_GPRF fz_register_document_handler(ctx, &gprf_document_handler); -#endif +#endif /* FZ_ENABLE_GPRF */ } diff --git a/source/fitz/draw-affine.c b/source/fitz/draw-affine.c index 9e5c58cc..2738c188 100644 --- a/source/fitz/draw-affine.c +++ b/source/fitz/draw-affine.c @@ -27,7 +27,7 @@ static inline const byte *sample_nearest(const byte *s, int w, int h, int str, i /* Blend premultiplied source image in constant alpha over destination */ static inline void -fz_paint_affine_alpha_N_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, byte * restrict hp) +template_affine_alpha_N_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, byte * restrict hp) { int k; @@ -69,7 +69,7 @@ fz_paint_affine_alpha_N_lerp(byte * restrict dp, int da, const byte * restrict s /* Special case code for gray -> rgb */ static inline void -fz_paint_affine_alpha_g2rgb_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int alpha, byte * restrict hp) +template_affine_alpha_g2rgb_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int alpha, byte * restrict hp) { do { @@ -108,7 +108,7 @@ fz_paint_affine_alpha_g2rgb_lerp(byte * restrict dp, int da, const byte * restri } static inline void -fz_paint_affine_alpha_N_near_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, byte * restrict hp) +template_affine_alpha_N_near_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, byte * restrict hp) { int k; int ui = u >> 16; @@ -143,7 +143,7 @@ fz_paint_affine_alpha_N_near_fa0(byte * restrict dp, int da, const byte * restri } static inline void -fz_paint_affine_alpha_N_near_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, byte * restrict hp) +template_affine_alpha_N_near_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, byte * restrict hp) { int k; int vi = v >> 16; @@ -177,7 +177,7 @@ fz_paint_affine_alpha_N_near_fb0(byte * restrict dp, int da, const byte * restri } static inline void -fz_paint_affine_alpha_N_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, byte * restrict hp) +template_affine_alpha_N_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, byte * restrict hp) { int k; @@ -210,7 +210,7 @@ fz_paint_affine_alpha_N_near(byte * restrict dp, int da, const byte * restrict s } static inline void -fz_paint_affine_alpha_g2rgb_near_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int alpha, byte * restrict hp) +template_affine_alpha_g2rgb_near_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int alpha, byte * restrict hp) { int ui = u >> 16; if (ui < 0 || ui >= sw) @@ -245,7 +245,7 @@ fz_paint_affine_alpha_g2rgb_near_fa0(byte * restrict dp, int da, const byte * re } static inline void -fz_paint_affine_alpha_g2rgb_near_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int alpha, byte * restrict hp) +template_affine_alpha_g2rgb_near_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int alpha, byte * restrict hp) { int vi = v >> 16; if (vi < 0 || vi >= sh) @@ -280,7 +280,7 @@ fz_paint_affine_alpha_g2rgb_near_fb0(byte * restrict dp, int da, const byte * re } static inline void -fz_paint_affine_alpha_g2rgb_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int alpha, byte * restrict hp) +template_affine_alpha_g2rgb_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int alpha, byte * restrict hp) { do { @@ -314,7 +314,7 @@ fz_paint_affine_alpha_g2rgb_near(byte * restrict dp, int da, const byte * restri /* Blend premultiplied source image over destination */ static inline void -fz_paint_affine_N_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, byte * restrict hp) +template_affine_N_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, byte * restrict hp) { int k; @@ -355,7 +355,7 @@ fz_paint_affine_N_lerp(byte * restrict dp, int da, const byte * restrict sp, int } static inline void -fz_paint_affine_solid_g2rgb_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, byte * restrict hp) +template_affine_solid_g2rgb_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, byte * restrict hp) { do { @@ -393,7 +393,7 @@ fz_paint_affine_solid_g2rgb_lerp(byte * restrict dp, int da, const byte * restri } static inline void -fz_paint_affine_N_near_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, byte * restrict hp) +template_affine_N_near_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, byte * restrict hp) { int k; int ui = u >> 16; @@ -452,7 +452,7 @@ fz_paint_affine_N_near_fa0(byte * restrict dp, int da, const byte * restrict sp, } static inline void -fz_paint_affine_N_near_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, byte * restrict hp) +template_affine_N_near_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, byte * restrict hp) { int k; int vi = v >> 16; @@ -511,7 +511,7 @@ fz_paint_affine_N_near_fb0(byte * restrict dp, int da, const byte * restrict sp, } static inline void -fz_paint_affine_N_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, byte * restrict hp) +template_affine_N_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, byte * restrict hp) { int k; do @@ -568,7 +568,7 @@ fz_paint_affine_N_near(byte * restrict dp, int da, const byte * restrict sp, int } static inline void -fz_paint_affine_solid_g2rgb_near_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, byte * restrict hp) +template_affine_solid_g2rgb_near_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, byte * restrict hp) { int ui = u >> 16; if (ui < 0 || ui >= sw) @@ -616,7 +616,7 @@ fz_paint_affine_solid_g2rgb_near_fa0(byte * restrict dp, int da, const byte * re } static inline void -fz_paint_affine_solid_g2rgb_near_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, byte * restrict hp) +template_affine_solid_g2rgb_near_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, byte * restrict hp) { int vi = v >> 16; if (vi < 0 || vi >= sh) @@ -664,7 +664,7 @@ fz_paint_affine_solid_g2rgb_near_fb0(byte * restrict dp, int da, const byte * re } static inline void -fz_paint_affine_solid_g2rgb_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, byte * restrict hp) +template_affine_solid_g2rgb_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, byte * restrict hp) { do { @@ -712,7 +712,7 @@ fz_paint_affine_solid_g2rgb_near(byte * restrict dp, int da, const byte * restri /* Blend non-premultiplied color in source image mask over destination */ static inline void -fz_paint_affine_color_N_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int u, int v, int fa, int fb, int w, int n1, const byte * restrict color, byte * restrict hp) +template_affine_color_N_lerp(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int u, int v, int fa, int fb, int w, int n1, const byte * restrict color, byte * restrict hp) { int sa = color[n1]; int k; @@ -751,7 +751,7 @@ fz_paint_affine_color_N_lerp(byte * restrict dp, int da, const byte * restrict s } static inline void -fz_paint_affine_color_N_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int u, int v, int fa, int fb, int w, int n1, const byte * restrict color, byte * restrict hp) +template_affine_color_N_near(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int u, int v, int fa, int fb, int w, int n1, const byte * restrict color, byte * restrict hp) { int sa = color[n1]; int k; @@ -783,416 +783,508 @@ fz_paint_affine_color_N_near(byte * restrict dp, int da, const byte * restrict s while (--w); } -/* LERP DA + SA Solid */ static void -fz_paint_affine_lerp_da_sa_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, hp); } static void -fz_paint_affine_lerp_da_sa_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_alpha_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, alpha, hp); } static void -fz_paint_affine_lerp_da_sa_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, hp); } static void -fz_paint_affine_lerp_da_sa_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_alpha_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, alpha, hp); } -/* LERP DA + SA Alpha */ static void -fz_paint_affine_lerp_da_sa_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_lerp_da_sa_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_lerp_da_sa_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_lerp_da_sa_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); } -/* LERP DA Solid */ +#if FZ_PLOTTERS_G static void -fz_paint_affine_lerp_da_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_lerp_da_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_lerp_da_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_sa_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); + template_affine_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_lerp_da_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_sa_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); } +#endif /* FZ_PLOTTERS_G */ -/* LERP DA Alpha */ +#if FZ_PLOTTERS_RGB static void -fz_paint_affine_lerp_da_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_lerp_da_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_lerp_da_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_lerp_da_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); } -/* LERP SA Solid */ static void -fz_paint_affine_lerp_sa_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_sa_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); + template_affine_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_lerp_sa_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_sa_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_lerp_sa_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); + template_affine_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_lerp_sa_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); } +#endif /* FZ_PLOTTERS_RGB */ -/* LERP SA Alpha */ +#if FZ_PLOTTERS_CMYK static void -fz_paint_affine_lerp_sa_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_lerp_sa_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); } static void -fz_paint_affine_lerp_sa_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_lerp_sa_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); } -/* LERP Solid */ static void -fz_paint_affine_lerp_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_sa_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); + template_affine_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_lerp_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_sa_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); } static void -fz_paint_affine_lerp_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); + template_affine_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_lerp_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); } +#endif /* FZ_PLOTTERS_CMYK */ -/* LERP Alpha */ +#if FZ_PLOTTERS_N static void -fz_paint_affine_lerp_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_lerp_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); } static void -fz_paint_affine_lerp_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_lerp_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); } +static void +paint_affine_lerp_sa_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +{ + TRACK_FN(); + template_affine_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); +} + +static void +paint_affine_lerp_sa_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +{ + TRACK_FN(); + template_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); +} + +static void +paint_affine_lerp_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +{ + TRACK_FN(); + template_affine_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); +} + +static void +paint_affine_lerp_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +{ + TRACK_FN(); + template_affine_alpha_N_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); +} +#endif /* FZ_PLOTTERS_N */ + static paintfn_t * fz_paint_affine_lerp(int da, int sa, int fa, int fb, int n, int alpha) { - if (da) + switch(n) { - if (sa) - { - if (alpha == 255) + case 0: + if (!da) + return NULL; + if (sa) { - switch (n) - { - case 1: return fz_paint_affine_lerp_da_sa_1; - case 3: return fz_paint_affine_lerp_da_sa_3; - case 4: return fz_paint_affine_lerp_da_sa_4; - default: return fz_paint_affine_lerp_da_sa_N; - } + if (alpha == 255) + return paint_affine_lerp_da_sa_0; + else if (alpha > 0) + return paint_affine_lerp_da_sa_alpha_0; } - else if (alpha > 0) + else { - switch (n) + if (alpha == 255) + return paint_affine_lerp_da_0; + else if (alpha > 0) + return paint_affine_lerp_da_alpha_0; + } + break; + case 1: + if (sa) +#if FZ_PLOTTERS_G + if (da) { - case 1: return fz_paint_affine_lerp_da_sa_alpha_1; - case 3: return fz_paint_affine_lerp_da_sa_alpha_3; - case 4: return fz_paint_affine_lerp_da_sa_alpha_4; - default: return fz_paint_affine_lerp_da_sa_alpha_N; + if (alpha == 255) + return paint_affine_lerp_da_sa_1; + else if (alpha > 0) + return paint_affine_lerp_da_sa_alpha_1; } - } - } - else - { - if (alpha == 255) - { - switch (n) + else { - case 1: return fz_paint_affine_lerp_da_1; - case 3: return fz_paint_affine_lerp_da_3; - case 4: return fz_paint_affine_lerp_da_4; - default: return fz_paint_affine_lerp_da_N; + if (alpha == 255) + return paint_affine_lerp_sa_1; + else if (alpha > 0) + return paint_affine_lerp_sa_alpha_1; } - } - else if (alpha > 0) - { - switch (n) +#else + return NULL; +#endif /* FZ_PLOTTERS_H */ + else + if (da) { - case 1: return fz_paint_affine_lerp_da_alpha_1; - case 3: return fz_paint_affine_lerp_da_alpha_3; - case 4: return fz_paint_affine_lerp_da_alpha_4; - default: return fz_paint_affine_lerp_da_alpha_N; + if (alpha == 255) + return paint_affine_lerp_da_1; + else if (alpha > 0) + return paint_affine_lerp_da_alpha_1; } - } - } - } - else - { - if (sa) - { - if (alpha == 255) - { - switch (n) + else { - case 1: return fz_paint_affine_lerp_sa_1; - case 3: return fz_paint_affine_lerp_sa_3; - case 4: return fz_paint_affine_lerp_sa_4; - default: return fz_paint_affine_lerp_sa_N; + if (alpha == 255) + return paint_affine_lerp_1; + else if (alpha > 0) + return paint_affine_lerp_alpha_1; } - } - else if (alpha > 0) - { - switch (n) + break; +#if FZ_PLOTTERS_RGB + case 3: + if (da) + if (sa) { - case 1: return fz_paint_affine_lerp_sa_alpha_1; - case 3: return fz_paint_affine_lerp_sa_alpha_3; - case 4: return fz_paint_affine_lerp_sa_alpha_4; - default: return fz_paint_affine_lerp_sa_alpha_N; + if (alpha == 255) + return paint_affine_lerp_da_sa_3; + else if (alpha > 0) + return paint_affine_lerp_da_sa_alpha_3; } - } - } - else - { - if (alpha == 255) - { - switch (n) + else { - case 1: return fz_paint_affine_lerp_1; - case 3: return fz_paint_affine_lerp_3; - case 4: return fz_paint_affine_lerp_4; - default: return fz_paint_affine_lerp_N; + if (alpha == 255) + return paint_affine_lerp_da_3; + else if (alpha > 0) + return paint_affine_lerp_da_alpha_3; } - } - else if (alpha > 0) - { - switch (n) + else + if (sa) { - case 1: return fz_paint_affine_lerp_alpha_1; - case 3: return fz_paint_affine_lerp_alpha_3; - case 4: return fz_paint_affine_lerp_alpha_4; - default: return fz_paint_affine_lerp_alpha_N; + if (alpha == 255) + return paint_affine_lerp_sa_3; + else if (alpha > 0) + return paint_affine_lerp_sa_alpha_3; } - } - } + else + { + if (alpha == 255) + return paint_affine_lerp_3; + else if (alpha > 0) + return paint_affine_lerp_alpha_3; + } + break; +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK + case 4: + if (da) + if (sa) + { + if (alpha == 255) + return paint_affine_lerp_da_sa_4; + else if (alpha > 0) + return paint_affine_lerp_da_sa_alpha_4; + } + else + { + if (alpha == 255) + return paint_affine_lerp_da_4; + else if (alpha > 0) + return paint_affine_lerp_da_alpha_4; + } + else + if (sa) + { + if (alpha == 255) + return paint_affine_lerp_sa_4; + else if (alpha > 0) + return paint_affine_lerp_sa_alpha_4; + } + else + { + if (alpha == 255) + return paint_affine_lerp_4; + else if (alpha > 0) + return paint_affine_lerp_alpha_4; + } + break; +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N + default: + if (da) + if (sa) + { + if (alpha == 255) + return paint_affine_lerp_da_sa_N; + else if (alpha > 0) + return paint_affine_lerp_da_sa_alpha_N; + } + else + { + if (alpha == 255) + return paint_affine_lerp_da_N; + else if (alpha > 0) + return paint_affine_lerp_da_alpha_N; + } + else + if (sa) + { + if (alpha == 255) + return paint_affine_lerp_sa_N; + else if (alpha > 0) + return paint_affine_lerp_sa_alpha_N; + } + else + { + if (alpha == 255) + return paint_affine_lerp_N; + else if (alpha > 0) + return paint_affine_lerp_alpha_N; + } + break; +#endif /* FZ_PLOTTERS_G */ } return NULL; } +#if FZ_PLOTTERS_RGB static void -fz_paint_affine_lerp_da_sa_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); } static void -fz_paint_affine_lerp_da_sa_g2rgb_alpha(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_sa_g2rgb_alpha(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_lerp(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_lerp_da_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); } static void -fz_paint_affine_lerp_da_g2rgb_alpha(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_da_g2rgb_alpha(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_lerp(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_lerp_sa_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_sa_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); } static void -fz_paint_affine_lerp_sa_g2rgb_alpha(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_sa_g2rgb_alpha(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_lerp(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_lerp_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); } static void -fz_paint_affine_lerp_g2rgb_alpha(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_lerp_g2rgb_alpha(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_lerp(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); } +#endif /* FZ_PLOTTERS_RGB */ static paintfn_t * fz_paint_affine_g2rgb_lerp(int da, int sa, int fa, int fb, int n, int alpha) { +#if FZ_PLOTTERS_RGB if (da) { if (sa) { if (alpha == 255) - return fz_paint_affine_lerp_da_sa_g2rgb; + return paint_affine_lerp_da_sa_g2rgb; else if (alpha > 0) - return fz_paint_affine_lerp_da_sa_g2rgb_alpha; + return paint_affine_lerp_da_sa_g2rgb_alpha; } else { if (alpha == 255) - return fz_paint_affine_lerp_da_g2rgb; + return paint_affine_lerp_da_g2rgb; else if (alpha > 0) - return fz_paint_affine_lerp_da_g2rgb_alpha; + return paint_affine_lerp_da_g2rgb_alpha; } } else @@ -1200,1272 +1292,1377 @@ fz_paint_affine_g2rgb_lerp(int da, int sa, int fa, int fb, int n, int alpha) if (sa) { if (alpha == 255) - return fz_paint_affine_lerp_sa_g2rgb; + return paint_affine_lerp_sa_g2rgb; else if (alpha > 0) - return fz_paint_affine_lerp_sa_g2rgb_alpha; + return paint_affine_lerp_sa_g2rgb_alpha; } else { if (alpha == 255) - return fz_paint_affine_lerp_g2rgb; + return paint_affine_lerp_g2rgb; else if (alpha > 0) - return fz_paint_affine_lerp_g2rgb_alpha; + return paint_affine_lerp_g2rgb_alpha; } } +#endif /* FZ_PLOTTERS_RGB */ return NULL; } -/* Near DA+SA Solid fa==0 */ static void -fz_paint_affine_near_da_sa_0_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_0_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, hp); } static void -fz_paint_affine_near_da_sa_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_0_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, alpha, hp); } static void -fz_paint_affine_near_da_sa_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_0_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, hp); } static void -fz_paint_affine_near_da_sa_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_0_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, alpha, hp); } static void -fz_paint_affine_near_da_sa_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_0_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, hp); } -/* Near DA+SA Alpha */ static void -fz_paint_affine_near_da_sa_alpha_0_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_0_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, alpha, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, alpha, hp); } static void -fz_paint_affine_near_da_sa_alpha_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_0_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, hp); } static void -fz_paint_affine_near_da_sa_alpha_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_0_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, alpha, hp); } static void -fz_paint_affine_near_da_sa_alpha_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, hp); } static void -fz_paint_affine_near_da_sa_alpha_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, alpha, hp); } -/* Near DA Solid */ static void -fz_paint_affine_near_da_0_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, hp); } static void -fz_paint_affine_near_da_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, alpha, hp); } static void -fz_paint_affine_near_da_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); + template_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_da_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); + template_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_da_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); + template_affine_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); } -/* Near DA Alpha */ static void -fz_paint_affine_near_da_alpha_0_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_near_da_alpha_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); + template_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_near_da_alpha_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_near_da_alpha_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_da_alpha_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); } -/* Near SA Solid */ static void -fz_paint_affine_near_sa_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_sa_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_near_sa_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_sa_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); } -/* Near SA Alpha */ +#if FZ_PLOTTERS_G static void -fz_paint_affine_near_sa_alpha_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_sa_alpha_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_near_sa_alpha_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_sa_alpha_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); } -/* Near Solid */ static void -fz_paint_affine_near_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_near_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); + template_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_near_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); } -/* Near Alpha */ static void -fz_paint_affine_near_alpha_1_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_alpha_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); } static void -fz_paint_affine_near_alpha_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); } static void -fz_paint_affine_near_alpha_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); } +#endif /* FZ_PLOTTERS_G */ -/* Near DA+SA Solid */ +#if FZ_PLOTTERS_RGB static void -fz_paint_affine_near_da_sa_0_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_da_sa_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_near_da_sa_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_da_sa_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_near_da_sa_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); + template_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); } -/* Near DA+SA Alpha */ static void -fz_paint_affine_near_da_sa_alpha_0_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_near_da_sa_alpha_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_da_sa_alpha_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_3_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_near_da_sa_alpha_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_da_sa_alpha_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); } -/* Near DA Solid */ static void -fz_paint_affine_near_da_0_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_da_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_near_da_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_near_da_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_da_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); } -/* Near DA Alpha */ static void -fz_paint_affine_near_da_alpha_0_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, alpha, hp); + template_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_da_alpha_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_da_alpha_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_near_da_alpha_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_da_alpha_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); + template_affine_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); } -/* Near SA Solid */ static void -fz_paint_affine_near_sa_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_near_sa_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); } static void -fz_paint_affine_near_sa_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); + template_affine_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); } static void -fz_paint_affine_near_sa_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); } +#endif /* FZ_PLOTTERS_RGB */ -/* Near SA Alpha */ +#if FZ_PLOTTERS_CMYK static void -fz_paint_affine_near_sa_alpha_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_sa_alpha_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); } static void -fz_paint_affine_near_sa_alpha_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_sa_alpha_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); } -/* Near Solid */ static void -fz_paint_affine_near_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); + template_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); } static void -fz_paint_affine_near_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); + template_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_4_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); } -/* Near Alpha */ static void -fz_paint_affine_near_alpha_1_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_alpha_3_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); } static void -fz_paint_affine_near_alpha_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_alpha_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); } -/* Near DA+SA Solid */ static void -fz_paint_affine_near_da_sa_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, hp); + template_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_da_sa_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); + template_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); } static void -fz_paint_affine_near_da_sa_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); + template_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_da_sa_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_4_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); + template_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); } static void -fz_paint_affine_near_da_sa_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); } -/* Near DA+SA Alpha */ static void -fz_paint_affine_near_da_sa_alpha_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 0, alpha, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); } static void -fz_paint_affine_near_da_sa_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_da_sa_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); } static void -fz_paint_affine_near_da_sa_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_da_sa_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); } -/* Near DA Solid */ static void -fz_paint_affine_near_da_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, hp); + template_affine_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); } static void -fz_paint_affine_near_da_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); + template_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); } +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N static void -fz_paint_affine_near_da_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_da_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); } static void -fz_paint_affine_near_da_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); + template_affine_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); } -/* Near DA Alpha */ static void -fz_paint_affine_near_da_alpha_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 0, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); } static void -fz_paint_affine_near_da_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_da_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); } static void -fz_paint_affine_near_da_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_da_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_N_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); } -/* Near SA Solid */ static void -fz_paint_affine_near_sa_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_sa_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); } static void -fz_paint_affine_near_sa_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, hp); + template_affine_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_sa_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); } -/* Near SA Alpha */ static void -fz_paint_affine_near_sa_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_sa_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); } static void -fz_paint_affine_near_sa_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_sa_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_N_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); } -/* Near Solid */ static void -fz_paint_affine_near_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); } static void -fz_paint_affine_near_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, hp); + template_affine_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); + template_affine_alpha_N_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); } -/* Near Alpha */ static void -fz_paint_affine_near_alpha_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 1, alpha, hp); + template_affine_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_alpha_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 3, alpha, hp); + template_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, n, alpha, hp); } static void -fz_paint_affine_near_alpha_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, 4, alpha, hp); + template_affine_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, hp); } static void -fz_paint_affine_near_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); + template_affine_alpha_N_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, n, alpha, hp); } +#endif static paintfn_t * fz_paint_affine_near(int da, int sa, int fa, int fb, int n, int alpha) { - if (da) + switch(n) { - if (sa) - { - if (alpha == 255) - { - if (fa == 0) + case 0: + if (da) + if (sa) + if (alpha == 255) { - switch (n) - { - case 0: return fz_paint_affine_near_da_sa_0_fa0; - case 1: return fz_paint_affine_near_da_sa_1_fa0; - case 3: return fz_paint_affine_near_da_sa_3_fa0; - case 4: return fz_paint_affine_near_da_sa_4_fa0; - default: return fz_paint_affine_near_da_sa_N_fa0; - } + if (fa == 0) + return paint_affine_near_da_sa_0_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_0_fb0; + else + return paint_affine_near_da_sa_0; } - else if (fb == 0) + else if (alpha > 0) { - switch (n) - { - case 0: return fz_paint_affine_near_da_sa_0_fb0; - case 1: return fz_paint_affine_near_da_sa_1_fb0; - case 3: return fz_paint_affine_near_da_sa_3_fb0; - case 4: return fz_paint_affine_near_da_sa_4_fb0; - default: return fz_paint_affine_near_da_sa_N_fb0; - } + if (fa == 0) + return paint_affine_near_da_sa_alpha_0_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_alpha_0_fb0; + else + return paint_affine_near_da_sa_alpha_0; } else + return NULL; + else + if (alpha == 255) { - switch (n) - { - case 0: return fz_paint_affine_near_da_sa_0; - case 1: return fz_paint_affine_near_da_sa_1; - case 3: return fz_paint_affine_near_da_sa_3; - case 4: return fz_paint_affine_near_da_sa_4; - default: return fz_paint_affine_near_da_sa_N; - } + if (fa == 0) + return paint_affine_near_da_0_fa0; + else if (fb == 0) + return paint_affine_near_da_0_fb0; + else + return paint_affine_near_da_0; } - } - else if (alpha > 0) + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_da_alpha_0_fa0; + else if (fb == 0) + return paint_affine_near_da_alpha_0_fb0; + else + return paint_affine_near_da_alpha_0; + } + else + return NULL; + else + return NULL; + case 1: + if (sa) +#if FZ_PLOTTERS_G + if (da) { - if (fa == 0) + if (alpha == 255) { - switch (n) - { - case 0: return fz_paint_affine_near_da_sa_alpha_0_fa0; - case 1: return fz_paint_affine_near_da_sa_alpha_1_fa0; - case 3: return fz_paint_affine_near_da_sa_alpha_3_fa0; - case 4: return fz_paint_affine_near_da_sa_alpha_4_fa0; - default: return fz_paint_affine_near_da_sa_alpha_N_fa0; - } + if (fa == 0) + return paint_affine_near_da_sa_1_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_1_fb0; + else + return paint_affine_near_da_sa_1; } - else if (fb == 0) + else if (alpha > 0) { - switch (n) - { - case 0: return fz_paint_affine_near_da_sa_alpha_0_fb0; - case 1: return fz_paint_affine_near_da_sa_alpha_1_fb0; - case 3: return fz_paint_affine_near_da_sa_alpha_3_fb0; - case 4: return fz_paint_affine_near_da_sa_alpha_4_fb0; - default: return fz_paint_affine_near_da_sa_alpha_N_fb0; - } + if (fa == 0) + return paint_affine_near_da_sa_alpha_1_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_alpha_1_fb0; + else + return paint_affine_near_da_sa_alpha_1; } - else + } + else + { + if (alpha == 255) { - switch (n) - { - case 0: return fz_paint_affine_near_da_sa_alpha_0; - case 1: return fz_paint_affine_near_da_sa_alpha_1; - case 3: return fz_paint_affine_near_da_sa_alpha_3; - case 4: return fz_paint_affine_near_da_sa_alpha_4; - default: return fz_paint_affine_near_da_sa_alpha_N; - } + if (fa == 0) + return paint_affine_near_sa_1_fa0; + else if (fb == 0) + return paint_affine_near_sa_1_fb0; + else + return paint_affine_near_sa_1; + } + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_sa_alpha_1_fa0; + else if (fb == 0) + return paint_affine_near_sa_alpha_1_fb0; + else + return paint_affine_near_sa_alpha_1; } } - } +#else + return NULL; +#endif /* FZ_PLOTTERS_G */ else - { - if (alpha == 255) + if (da) { - if (fa == 0) + if (alpha == 255) { - switch (n) - { - case 0: return fz_paint_affine_near_da_0_fa0; - case 1: return fz_paint_affine_near_da_1_fa0; - case 3: return fz_paint_affine_near_da_3_fa0; - case 4: return fz_paint_affine_near_da_4_fa0; - default: return fz_paint_affine_near_da_N_fa0; - } + if (fa == 0) + return paint_affine_near_da_1_fa0; + else if (fb == 0) + return paint_affine_near_da_1_fb0; + else + return paint_affine_near_da_1; } - else if (fb == 0) + else if (alpha > 0) { - switch (n) - { - case 0: return fz_paint_affine_near_da_0_fb0; - case 1: return fz_paint_affine_near_da_1_fb0; - case 3: return fz_paint_affine_near_da_3_fb0; - case 4: return fz_paint_affine_near_da_4_fb0; - default: return fz_paint_affine_near_da_N_fb0; - } + if (fa == 0) + return paint_affine_near_da_alpha_1_fa0; + else if (fb == 0) + return paint_affine_near_da_alpha_1_fb0; + else + return paint_affine_near_da_alpha_1; } - else + } + else + { + if (alpha == 255) { - switch (n) - { - case 0: return fz_paint_affine_near_da_0; - case 1: return fz_paint_affine_near_da_1; - case 3: return fz_paint_affine_near_da_3; - case 4: return fz_paint_affine_near_da_4; - default: return fz_paint_affine_near_da_N; - } + if (fa == 0) + return paint_affine_near_1_fa0; + else if (fb == 0) + return paint_affine_near_1_fb0; + else + return paint_affine_near_1; + } + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_alpha_1_fa0; + else if (fb == 0) + return paint_affine_near_alpha_1_fb0; + else + return paint_affine_near_alpha_1; } } - else if (alpha > 0) + break; +#if FZ_PLOTTERS_RGB + case 3: + if (da) + if (sa) { - if (fa == 0) + if (alpha == 255) { - switch (n) - { - case 0: return fz_paint_affine_near_da_alpha_0_fa0; - case 1: return fz_paint_affine_near_da_alpha_1_fa0; - case 3: return fz_paint_affine_near_da_alpha_3_fa0; - case 4: return fz_paint_affine_near_da_alpha_4_fa0; - default: return fz_paint_affine_near_da_alpha_N_fa0; - } + if (fa == 0) + return paint_affine_near_da_sa_3_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_3_fb0; + else + return paint_affine_near_da_sa_3; } - else if (fb == 0) + else if (alpha > 0) { - switch (n) - { - case 0: return fz_paint_affine_near_da_alpha_0_fb0; - case 1: return fz_paint_affine_near_da_alpha_1_fb0; - case 3: return fz_paint_affine_near_da_alpha_3_fb0; - case 4: return fz_paint_affine_near_da_alpha_4_fb0; - default: return fz_paint_affine_near_da_alpha_N_fb0; - } + if (fa == 0) + return paint_affine_near_da_sa_alpha_3_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_alpha_3_fb0; + else + return paint_affine_near_da_sa_alpha_3; } - else + } + else + { + if (alpha == 255) { - switch (n) - { - case 0: return fz_paint_affine_near_da_alpha_0; - case 1: return fz_paint_affine_near_da_alpha_1; - case 3: return fz_paint_affine_near_da_alpha_3; - case 4: return fz_paint_affine_near_da_alpha_4; - default: return fz_paint_affine_near_da_alpha_N; - } + if (fa == 0) + return paint_affine_near_da_3_fa0; + else if (fb == 0) + return paint_affine_near_da_3_fb0; + else + return paint_affine_near_da_3; + } + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_da_alpha_3_fa0; + else if (fb == 0) + return paint_affine_near_da_alpha_3_fb0; + else + return paint_affine_near_da_alpha_3; } } - } - } - else - { - if (sa) - { - if (alpha == 255) + else + if (sa) { - if (fa == 0) + if (alpha == 255) { - switch (n) - { - case 1: return fz_paint_affine_near_sa_1_fa0; - case 3: return fz_paint_affine_near_sa_3_fa0; - case 4: return fz_paint_affine_near_sa_4_fa0; - default: return fz_paint_affine_near_sa_N_fa0; - } + if (fa == 0) + return paint_affine_near_sa_3_fa0; + else if (fb == 0) + return paint_affine_near_sa_3_fb0; + else + return paint_affine_near_sa_3; } - else if (fb == 0) + else if (alpha > 0) { - switch (n) - { - case 1: return fz_paint_affine_near_sa_1_fb0; - case 3: return fz_paint_affine_near_sa_3_fb0; - case 4: return fz_paint_affine_near_sa_4_fb0; - default: return fz_paint_affine_near_sa_N_fb0; - } + if (fa == 0) + return paint_affine_near_sa_alpha_3_fa0; + else if (fb == 0) + return paint_affine_near_sa_alpha_3_fb0; + else + return paint_affine_near_sa_alpha_3; } - else + } + else + { + if (alpha == 255) { - switch (n) - { - case 1: return fz_paint_affine_near_sa_1; - case 3: return fz_paint_affine_near_sa_3; - case 4: return fz_paint_affine_near_sa_4; - default: return fz_paint_affine_near_sa_N; - } + if (fa == 0) + return paint_affine_near_3_fa0; + else if (fb == 0) + return paint_affine_near_3_fb0; + else + return paint_affine_near_3; + } + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_alpha_3_fa0; + else if (fb == 0) + return paint_affine_near_alpha_3_fb0; + else + return paint_affine_near_alpha_3; } } - else if (alpha > 0) +#endif /* FZ_PLOTTERS_RGB */ + break; +#if FZ_PLOTTERS_CMYK + case 4: + if (da) + if (sa) { - if (fa == 0) + if (alpha == 255) { - switch (n) - { - case 1: return fz_paint_affine_near_sa_alpha_1_fa0; - case 3: return fz_paint_affine_near_sa_alpha_3_fa0; - case 4: return fz_paint_affine_near_sa_alpha_4_fa0; - default: return fz_paint_affine_near_sa_alpha_N_fa0; - } + if (fa == 0) + return paint_affine_near_da_sa_4_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_4_fb0; + else + return paint_affine_near_da_sa_4; } - else if (fb == 0) + else if (alpha > 0) { - switch (n) - { - case 1: return fz_paint_affine_near_sa_alpha_1_fb0; - case 3: return fz_paint_affine_near_sa_alpha_3_fb0; - case 4: return fz_paint_affine_near_sa_alpha_4_fb0; - default: return fz_paint_affine_near_sa_alpha_N_fb0; - } + if (fa == 0) + return paint_affine_near_da_sa_alpha_4_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_alpha_4_fb0; + else + return paint_affine_near_da_sa_alpha_4; } - else + } + else + { + if (alpha == 255) { - switch (n) - { - case 1: return fz_paint_affine_near_sa_alpha_1; - case 3: return fz_paint_affine_near_sa_alpha_3; - case 4: return fz_paint_affine_near_sa_alpha_4; - default: return fz_paint_affine_near_sa_alpha_N; - } + if (fa == 0) + return paint_affine_near_da_4_fa0; + else if (fb == 0) + return paint_affine_near_da_4_fb0; + else + return paint_affine_near_da_4; + } + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_da_alpha_4_fa0; + else if (fb == 0) + return paint_affine_near_da_alpha_4_fb0; + else + return paint_affine_near_da_alpha_4; } } - } else - { - if (alpha == 255) + if (sa) { - if (fa == 0) + if (alpha == 255) { - switch (n) - { - case 1: return fz_paint_affine_near_1_fa0; - case 3: return fz_paint_affine_near_3_fa0; - case 4: return fz_paint_affine_near_4_fa0; - default: return fz_paint_affine_near_N_fa0; - } + if (fa == 0) + return paint_affine_near_sa_4_fa0; + else if (fb == 0) + return paint_affine_near_sa_4_fb0; + else + return paint_affine_near_sa_4; } - else if (fb == 0) + else if (alpha > 0) { - switch (n) - { - case 1: return fz_paint_affine_near_1_fb0; - case 3: return fz_paint_affine_near_3_fb0; - case 4: return fz_paint_affine_near_4_fb0; - default: return fz_paint_affine_near_N_fb0; - } + if (fa == 0) + return paint_affine_near_sa_alpha_4_fa0; + else if (fb == 0) + return paint_affine_near_sa_alpha_4_fb0; + else + return paint_affine_near_sa_alpha_4; } - else + } + else + { + if (alpha == 255) { - switch (n) - { - case 1: return fz_paint_affine_near_1; - case 3: return fz_paint_affine_near_3; - case 4: return fz_paint_affine_near_4; - default: return fz_paint_affine_near_N; - } + if (fa == 0) + return paint_affine_near_4_fa0; + else if (fb == 0) + return paint_affine_near_4_fb0; + else + return paint_affine_near_4; + } + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_alpha_4_fa0; + else if (fb == 0) + return paint_affine_near_alpha_4_fb0; + else + return paint_affine_near_alpha_4; } } - else if (alpha > 0) +#endif /* FZ_PLOTTERS_CMYK */ + break; +#if FZ_PLOTTERS_N + default: + if (da) + if (sa) { - if (fa == 0) + if (alpha == 255) { - switch (n) - { - case 1: return fz_paint_affine_near_alpha_1_fa0; - case 3: return fz_paint_affine_near_alpha_3_fa0; - case 4: return fz_paint_affine_near_alpha_4_fa0; - default: return fz_paint_affine_near_alpha_N_fa0; - } + if (fa == 0) + return paint_affine_near_da_sa_N_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_N_fb0; + else + return paint_affine_near_da_sa_N; } - else if (fb == 0) + else if (alpha > 0) { - switch (n) - { - case 1: return fz_paint_affine_near_alpha_1_fb0; - case 3: return fz_paint_affine_near_alpha_3_fb0; - case 4: return fz_paint_affine_near_alpha_4_fb0; - default: return fz_paint_affine_near_alpha_N_fb0; - } + if (fa == 0) + return paint_affine_near_da_sa_alpha_N_fa0; + else if (fb == 0) + return paint_affine_near_da_sa_alpha_N_fb0; + else + return paint_affine_near_da_sa_alpha_N; } - else + } + else + { + if (alpha == 255) { - switch (n) - { - case 1: return fz_paint_affine_near_alpha_1; - case 3: return fz_paint_affine_near_alpha_3; - case 4: return fz_paint_affine_near_alpha_4; - default: return fz_paint_affine_near_alpha_N; - } + if (fa == 0) + return paint_affine_near_da_N_fa0; + else if (fb == 0) + return paint_affine_near_da_N_fb0; + else + return paint_affine_near_da_N; + } + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_da_alpha_N_fa0; + else if (fb == 0) + return paint_affine_near_da_alpha_N_fb0; + else + return paint_affine_near_da_alpha_N; } } - } + else + if (sa) + { + if (alpha == 255) + { + if (fa == 0) + return paint_affine_near_sa_N_fa0; + else if (fb == 0) + return paint_affine_near_sa_N_fb0; + else + return paint_affine_near_sa_N; + } + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_sa_alpha_N_fa0; + else if (fb == 0) + return paint_affine_near_sa_alpha_N_fb0; + else + return paint_affine_near_sa_alpha_N; + } + } + else + { + if (alpha == 255) + { + if (fa == 0) + return paint_affine_near_N_fa0; + else if (fb == 0) + return paint_affine_near_N_fb0; + else + return paint_affine_near_N; + } + else if (alpha > 0) + { + if (fa == 0) + return paint_affine_near_alpha_N_fa0; + else if (fb == 0) + return paint_affine_near_alpha_N_fb0; + else + return paint_affine_near_alpha_N; + } + } +#endif /* FZ_PLOTTERS_N */ + break; } return NULL; } +#if FZ_PLOTTERS_RGB static void -fz_paint_affine_near_da_sa_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_da_sa_alpha_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near_fa0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_da_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_da_alpha_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near_fa0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_sa_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_sa_alpha_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near_fa0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_alpha_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_g2rgb_fa0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near_fa0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_da_sa_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_da_sa_alpha_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near_fb0(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_da_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_da_alpha_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near_fb0(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_sa_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_sa_alpha_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near_fb0(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_alpha_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_g2rgb_fb0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near_fb0(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_da_sa_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_da_sa_alpha_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_sa_alpha_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near(dp, 1, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_da_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_da_alpha_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_da_alpha_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near(dp, 1, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_sa_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_sa_alpha_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_sa_alpha_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near(dp, 0, sp, sw, sh, ss, 1, u, v, fa, fb, w, alpha, hp); } static void -fz_paint_affine_near_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_solid_g2rgb_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); + template_affine_solid_g2rgb_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, hp); } static void -fz_paint_affine_near_alpha_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_near_alpha_g2rgb(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n1, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_alpha_g2rgb_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); + template_affine_alpha_g2rgb_near(dp, 0, sp, sw, sh, ss, 0, u, v, fa, fb, w, alpha, hp); } +#endif /* FZ_PLOTTERS_RGB */ static paintfn_t * fz_paint_affine_g2rgb_near(int da, int sa, int fa, int fb, int n, int alpha) { +#if FZ_PLOTTERS_RGB if (da) { if (sa) @@ -2473,23 +2670,23 @@ fz_paint_affine_g2rgb_near(int da, int sa, int fa, int fb, int n, int alpha) if (fa == 0) { if (alpha == 255) - return fz_paint_affine_near_da_sa_g2rgb_fa0; + return paint_affine_near_da_sa_g2rgb_fa0; else if (alpha > 0) - return fz_paint_affine_near_da_sa_alpha_g2rgb_fa0; + return paint_affine_near_da_sa_alpha_g2rgb_fa0; } else if (fb == 0) { if (alpha == 255) - return fz_paint_affine_near_da_sa_g2rgb_fb0; + return paint_affine_near_da_sa_g2rgb_fb0; else if (alpha > 0) - return fz_paint_affine_near_da_sa_alpha_g2rgb_fb0; + return paint_affine_near_da_sa_alpha_g2rgb_fb0; } else { if (alpha == 255) - return fz_paint_affine_near_da_sa_g2rgb; + return paint_affine_near_da_sa_g2rgb; else if (alpha > 0) - return fz_paint_affine_near_da_sa_alpha_g2rgb; + return paint_affine_near_da_sa_alpha_g2rgb; } } else @@ -2497,23 +2694,23 @@ fz_paint_affine_g2rgb_near(int da, int sa, int fa, int fb, int n, int alpha) if (fa == 0) { if (alpha == 255) - return fz_paint_affine_near_da_g2rgb_fa0; + return paint_affine_near_da_g2rgb_fa0; else if (alpha > 0) - return fz_paint_affine_near_da_alpha_g2rgb_fa0; + return paint_affine_near_da_alpha_g2rgb_fa0; } else if (fb == 0) { if (alpha == 255) - return fz_paint_affine_near_da_g2rgb_fb0; + return paint_affine_near_da_g2rgb_fb0; else if (alpha > 0) - return fz_paint_affine_near_da_alpha_g2rgb_fb0; + return paint_affine_near_da_alpha_g2rgb_fb0; } else { if (alpha == 255) - return fz_paint_affine_near_da_g2rgb; + return paint_affine_near_da_g2rgb; else if (alpha > 0) - return fz_paint_affine_near_da_alpha_g2rgb; + return paint_affine_near_da_alpha_g2rgb; } } } @@ -2524,23 +2721,23 @@ fz_paint_affine_g2rgb_near(int da, int sa, int fa, int fb, int n, int alpha) if (fa == 0) { if (alpha == 255) - return fz_paint_affine_near_sa_g2rgb_fa0; + return paint_affine_near_sa_g2rgb_fa0; else if (alpha > 0) - return fz_paint_affine_near_sa_alpha_g2rgb_fa0; + return paint_affine_near_sa_alpha_g2rgb_fa0; } else if (fb == 0) { if (alpha == 255) - return fz_paint_affine_near_sa_g2rgb_fb0; + return paint_affine_near_sa_g2rgb_fb0; else if (alpha > 0) - return fz_paint_affine_near_sa_alpha_g2rgb_fb0; + return paint_affine_near_sa_alpha_g2rgb_fb0; } else { if (alpha == 255) - return fz_paint_affine_near_sa_g2rgb; + return paint_affine_near_sa_g2rgb; else if (alpha > 0) - return fz_paint_affine_near_sa_alpha_g2rgb; + return paint_affine_near_sa_alpha_g2rgb; } } else @@ -2548,191 +2745,215 @@ fz_paint_affine_g2rgb_near(int da, int sa, int fa, int fb, int n, int alpha) if (fa == 0) { if (alpha == 255) - return fz_paint_affine_near_g2rgb_fa0; + return paint_affine_near_g2rgb_fa0; else if (alpha > 0) - return fz_paint_affine_near_alpha_g2rgb_fa0; + return paint_affine_near_alpha_g2rgb_fa0; } else if (fb == 0) { if (alpha == 255) - return fz_paint_affine_near_g2rgb_fb0; + return paint_affine_near_g2rgb_fb0; else if (alpha > 0) - return fz_paint_affine_near_alpha_g2rgb_fb0; + return paint_affine_near_alpha_g2rgb_fb0; } else { if (alpha == 255) - return fz_paint_affine_near_g2rgb; + return paint_affine_near_g2rgb; else if (alpha > 0) - return fz_paint_affine_near_alpha_g2rgb; + return paint_affine_near_alpha_g2rgb; } } } +#endif /* FZ_PLOTTERS_G */ return NULL; } static void -fz_paint_affine_color_lerp_da_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_lerp_da_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +{ + TRACK_FN(); + template_affine_color_N_lerp(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 0, color, hp); +} + +#if FZ_PLOTTERS_G +static void +paint_affine_color_lerp_da_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_lerp(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 1, color, hp); + template_affine_color_N_lerp(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 1, color, hp); } static void -fz_paint_affine_color_lerp_da_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_lerp_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_lerp(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 3, color, hp); + template_affine_color_N_lerp(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 1, color, hp); } +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_RGB static void -fz_paint_affine_color_lerp_da_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_lerp_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_lerp(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 4, color, hp); + template_affine_color_N_lerp(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 3, color, hp); } static void -fz_paint_affine_color_lerp_da_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_lerp_da_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_lerp(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, n, color, hp); + template_affine_color_N_lerp(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 3, color, hp); } +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK static void -fz_paint_affine_color_lerp_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_lerp_da_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_lerp(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 1, color, hp); + template_affine_color_N_lerp(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 4, color, hp); } static void -fz_paint_affine_color_lerp_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_lerp_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_lerp(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 3, color, hp); + template_affine_color_N_lerp(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 4, color, hp); } +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_N static void -fz_paint_affine_color_lerp_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_lerp_da_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_lerp(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 4, color, hp); + template_affine_color_N_lerp(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, n, color, hp); } static void -fz_paint_affine_color_lerp_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_lerp_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_lerp(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, n, color, hp); + template_affine_color_N_lerp(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, n, color, hp); } +#endif /* FZ_PLOTTERS_CMYK */ static paintfn_t * fz_paint_affine_color_lerp(int da, int sa, int fa, int fb, int n, int alpha) { - if (da) + switch (n) { - switch (n) - { - case 1: return fz_paint_affine_color_lerp_da_1; - case 3: return fz_paint_affine_color_lerp_da_3; - case 4: return fz_paint_affine_color_lerp_da_4; - default: return fz_paint_affine_color_lerp_da_N; - } - } - else - { - switch (n) - { - case 1: return fz_paint_affine_color_lerp_1; - case 3: return fz_paint_affine_color_lerp_3; - case 4: return fz_paint_affine_color_lerp_4; - default: return fz_paint_affine_color_lerp_N; - } + case 0: return da ? paint_affine_color_lerp_da_0 : NULL; +#if FZ_PLOTTERS_G + case 1: return da ? paint_affine_color_lerp_da_1 : paint_affine_color_lerp_1; +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_RGB + case 3: return da ? paint_affine_color_lerp_da_3 : paint_affine_color_lerp_3; +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK + case 4: return da ? paint_affine_color_lerp_da_4 : paint_affine_color_lerp_4; +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N + default: return da ? paint_affine_color_lerp_da_N : paint_affine_color_lerp_N; +#endif /* FZ_PLOTTERS_N */ } return NULL; } static void -fz_paint_affine_color_near_da_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_near_da_0(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +{ + TRACK_FN(); + template_affine_color_N_near(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 0, color, hp); +} + +#if FZ_PLOTTERS_G +static void +paint_affine_color_near_da_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_near(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 1, color, hp); + template_affine_color_N_near(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 1, color, hp); } static void -fz_paint_affine_color_near_da_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_near_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_near(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 3, color, hp); + template_affine_color_N_near(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 1, color, hp); } +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_RGB static void -fz_paint_affine_color_near_da_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_near_da_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_near(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 4, color, hp); + template_affine_color_N_near(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 3, color, hp); } static void -fz_paint_affine_color_near_da_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_near_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_near(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, n, color, hp); + template_affine_color_N_near(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 3, color, hp); } +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK static void -fz_paint_affine_color_near_1(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_near_da_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_near(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 1, color, hp); + template_affine_color_N_near(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, 4, color, hp); } static void -fz_paint_affine_color_near_3(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_near_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_near(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 3, color, hp); + template_affine_color_N_near(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 4, color, hp); } +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N static void -fz_paint_affine_color_near_4(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_near_da_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_near(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, 4, color, hp); + template_affine_color_N_near(dp, 1, sp, sw, sh, ss, u, v, fa, fb, w, n, color, hp); } static void -fz_paint_affine_color_near_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) +paint_affine_color_near_N(byte * restrict dp, int da, const byte * restrict sp, int sw, int sh, int ss, int sa, int u, int v, int fa, int fb, int w, int n, int alpha, const byte * restrict color, byte * restrict hp) { TRACK_FN(); - fz_paint_affine_color_N_near(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, n, color, hp); + template_affine_color_N_near(dp, 0, sp, sw, sh, ss, u, v, fa, fb, w, n, color, hp); } +#endif /* FZ_PLOTTERS_N */ static paintfn_t * fz_paint_affine_color_near(int da, int sa, int fa, int fb, int n, int alpha) { - if (da) - { - switch (n) - { - case 1: return fz_paint_affine_color_near_da_1; - case 3: return fz_paint_affine_color_near_da_3; - case 4: return fz_paint_affine_color_near_da_4; - default: return fz_paint_affine_color_near_da_N; - } - } - else + switch (n) { - switch (n) - { - case 1: return fz_paint_affine_color_near_1; - case 3: return fz_paint_affine_color_near_3; - case 4: return fz_paint_affine_color_near_4; - default: return fz_paint_affine_color_near_N; - } + case 0: return da ? paint_affine_color_near_da_0 : NULL; +#if FZ_PLOTTERS_G + case 1: return da ? paint_affine_color_near_da_1 : paint_affine_color_near_1; +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_RGB + case 3: return da ? paint_affine_color_near_da_3 : paint_affine_color_near_3; +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK + case 4: return da ? paint_affine_color_near_da_4 : paint_affine_color_near_4; +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N + default: return da ? paint_affine_color_near_da_N : paint_affine_color_near_N; +#else + default: return NULL; +#endif /* FZ_PLOTTERS_N */ } - return NULL; } /* RJW: The following code was originally written to be sensitive to diff --git a/source/fitz/draw-device.c b/source/fitz/draw-device.c index 202e24dd..99032df9 100644 --- a/source/fitz/draw-device.c +++ b/source/fitz/draw-device.c @@ -577,6 +577,7 @@ draw_glyph(unsigned char *colorbv, fz_pixmap *dst, fz_glyph *glyph, fz_span_color_painter_t *fn; fn = fz_get_span_color_painter(dst->n, da, colorbv); + assert(fn); if (fn == NULL) return; while (h--) @@ -591,6 +592,7 @@ draw_glyph(unsigned char *colorbv, fz_pixmap *dst, fz_glyph *glyph, fz_span_painter_t *fn; fn = fz_get_span_painter(da, 1, 0, 255); + assert(fn); if (fn == NULL) return; while (h--) diff --git a/source/fitz/draw-edge.c b/source/fitz/draw-edge.c index 859d1ef1..03739ee1 100644 --- a/source/fitz/draw-edge.c +++ b/source/fitz/draw-edge.c @@ -1147,11 +1147,17 @@ fz_scan_convert(fz_context *ctx, fz_gel *gel, int eofill, const fz_irect *clip, fn = (void *)fz_get_span_color_painter(dst->n, dst->alpha, color); else fn = (void *)fz_get_span_painter(dst->alpha, 1, 0, 255); + assert(fn); + if (fn == NULL) + return; fz_scan_convert_aa(ctx, gel, eofill, &local_clip, dst, color, fn); } else { fz_solid_color_painter_t *fn = fz_get_solid_color_painter(dst->n, color, dst->alpha); + assert(fn); + if (fn == NULL) + return; fz_scan_convert_sharp(ctx, gel, eofill, &local_clip, dst, color, (fz_solid_color_painter_t *)fn); } } diff --git a/source/fitz/draw-paint.c b/source/fitz/draw-paint.c index ef08dc98..51a84bc2 100644 --- a/source/fitz/draw-paint.c +++ b/source/fitz/draw-paint.c @@ -76,7 +76,7 @@ typedef unsigned char byte; /* These are used by the non-aa scan converter */ static inline void -fz_paint_solid_color_2_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) +template_solid_color_1_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) { int sa = FZ_EXPAND(color[1]); TRACK_FN(); @@ -111,7 +111,7 @@ static inline int isbigendian(void) } static inline void -fz_paint_solid_color_4_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) +template_solid_color_3_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) { unsigned int rgba = *(int *)color; int sa = FZ_EXPAND(color[3]); @@ -153,7 +153,7 @@ fz_paint_solid_color_4_da(byte * restrict dp, int n, int w, const byte * restric } static inline void -fz_paint_solid_color_5_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) +template_solid_color_4_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) { int sa = FZ_EXPAND(color[4]); TRACK_FN(); @@ -236,64 +236,97 @@ fz_paint_solid_color_5_da(byte * restrict dp, int n, int w, const byte * restric } static inline void -fz_paint_solid_color_N_general(byte * restrict dp, int n, int w, const byte * restrict color, int da) +template_solid_color_N_256(byte * restrict dp, int n, int w, const byte * restrict color, int da) { int k; int n1 = n - da; - int sa = FZ_EXPAND(color[n1]); - TRACK_FN(); - if (sa == 0) - return; - if (sa == 256) + if (n == 3 && da == 0 && w >= 8) { - if (n == 3 && w >= 8) - { - union {uint32_t w[3]; byte b[12];} u; + union {uint32_t w[3]; byte b[12];} u; - u.b[0] = u.b[3] = u.b[6] = u.b[9] = color[0]; - u.b[1] = u.b[4] = u.b[7] = u.b[10] = color[1]; - u.b[2] = u.b[5] = u.b[8] = u.b[11] = color[2]; + u.b[0] = u.b[3] = u.b[6] = u.b[9] = color[0]; + u.b[1] = u.b[4] = u.b[7] = u.b[10] = color[1]; + u.b[2] = u.b[5] = u.b[8] = u.b[11] = color[2]; - switch (((intptr_t)dp) & 3) - { - case 3: - *dp++ = color[0]; - *(uint32_t *)dp = u.w[1]; - dp += 4; - *(uint32_t *)dp = u.w[2]; - dp += 4; - w -= 3; - break; - case 2: - *dp++ = color[0]; - *dp++ = color[1]; - *(uint32_t *)dp = u.w[2]; - dp += 4; - w -= 2; - break; - case 1: - *dp++ = color[0]; - *dp++ = color[1]; - *dp++ = color[2]; - w -= 1; - break; - } + switch (((intptr_t)dp) & 3) + { + case 3: + *dp++ = color[0]; + *(uint32_t *)dp = u.w[1]; + dp += 4; + *(uint32_t *)dp = u.w[2]; + dp += 4; + w -= 3; + break; + case 2: + *dp++ = color[0]; + *dp++ = color[1]; + *(uint32_t *)dp = u.w[2]; + dp += 4; + w -= 2; + break; + case 1: + *dp++ = color[0]; + *dp++ = color[1]; + *dp++ = color[2]; + w -= 1; + break; + } + w -= 4; + do + { + *(uint32_t *)dp = u.w[0]; + dp += 4; + *(uint32_t *)dp = u.w[1]; + dp += 4; + *(uint32_t *)dp = u.w[2]; + dp += 4; w -= 4; - do - { - *(uint32_t *)dp = u.w[0]; - dp += 4; - *(uint32_t *)dp = u.w[1]; - dp += 4; - *(uint32_t *)dp = u.w[2]; - dp += 4; - w -= 4; - } - while (w > 0); - w += 4; - if (w == 0) - return; } + while (w > 0); + w += 4; + if (w == 0) + return; + } + do + { + dp[0] = color[0]; + if (n1 > 1) + dp[1] = color[1]; + if (n1 > 2) + dp[2] = color[2]; + for (k = 3; k < n1; k++) + dp[k] = color[k]; + if (da) + dp[n1] = 255; + dp += n; + } + while (--w); +} + +static inline void +template_solid_color_N_sa(byte * restrict dp, int n, int w, const byte * restrict color, int da, int sa) +{ + int k; + int n1 = n - da; + do + { + for (k = 0; k < n1; k++) + dp[k] = FZ_BLEND(color[k], dp[k], sa); + if (da) + dp[k] = FZ_BLEND(255, dp[k], sa); + dp += n; + } + while (--w); +} + +static inline void +template_solid_color_N_general(byte * restrict dp, int n, int w, const byte * restrict color, int da, int sa) +{ + int k; + int n1 = n - da; + if (sa == 256) + { do { dp[0] = color[0]; @@ -323,70 +356,139 @@ fz_paint_solid_color_N_general(byte * restrict dp, int n, int w, const byte * re } } -static void fz_paint_solid_color_N_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) +#if FZ_PLOTTERS_G +static void paint_solid_color_1_alpha(byte * restrict dp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_solid_color_N_sa(dp, 1, w, color, 0, FZ_EXPAND(color[1])); +} + +static void paint_solid_color_1(byte * restrict dp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_solid_color_N_256(dp, 1, w, color, 0); +} + +static void paint_solid_color_1_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_solid_color_1_da(dp, 2, w, color, 1); +} +#endif /* FZ_PLOTTERS_G */ + +#if FZ_PLOTTERS_RGB +static void paint_solid_color_3_alpha(byte * restrict dp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_solid_color_N_sa(dp, 3, w, color, 0, FZ_EXPAND(color[3])); +} + +static void paint_solid_color_3(byte * restrict dp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_solid_color_N_256(dp, 3, w, color, 0); +} + +static void paint_solid_color_3_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_solid_color_3_da(dp, 4, w, color, 1); +} +#endif /* FZ_PLOTTERS_RGB */ + +#if FZ_PLOTTERS_CMYK +static void paint_solid_color_4_alpha(byte * restrict dp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_solid_color_N_general(dp, 1, w, color, 1); + template_solid_color_N_sa(dp, 4, w, color, 0, FZ_EXPAND(color[4])); } -static void fz_paint_solid_color_1(byte * restrict dp, int n, int w, const byte * restrict color, int da) +static void paint_solid_color_4(byte * restrict dp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_solid_color_N_general(dp, 1, w, color, 0); + template_solid_color_N_256(dp, 4, w, color, 0); } -static void fz_paint_solid_color_3(byte * restrict dp, int n, int w, const byte * restrict color, int da) +static void paint_solid_color_4_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_solid_color_N_general(dp, 3, w, color, 0); + template_solid_color_4_da(dp, 5, w, color, 1); } +#endif /* FZ_PLOTTERS_CMYK */ -static void fz_paint_solid_color_4(byte * restrict dp, int n, int w, const byte * restrict color, int da) +#if FZ_PLOTTERS_N +static void paint_solid_color_N_alpha(byte * restrict dp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_solid_color_N_general(dp, 4, w, color, 0); + template_solid_color_N_sa(dp, n, w, color, 0, FZ_EXPAND(color[n])); } -static void fz_paint_solid_color_N(byte * restrict dp, int n, int w, const byte * restrict color, int da) +static void paint_solid_color_N(byte * restrict dp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_solid_color_N_general(dp, n, w, color, 0); + template_solid_color_N_256(dp, n, w, color, 0); } +static void paint_solid_color_N_da(byte * restrict dp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_solid_color_N_general(dp, n, w, color, 1, FZ_EXPAND(color[1])); +} +#endif /* FZ_PLOTTERS_N */ + fz_solid_color_painter_t * fz_get_solid_color_painter(int n, const byte * restrict color, int da) { - if (da) - { - switch (n) - { - case 2: return fz_paint_solid_color_2_da; - case 4: return fz_paint_solid_color_4_da; - case 5: return fz_paint_solid_color_5_da; - default: return fz_paint_solid_color_N_da; - } - } - else + switch (n-da) { - switch (n) - { - case 1: return fz_paint_solid_color_1; - case 3: return fz_paint_solid_color_3; - case 4: return fz_paint_solid_color_4; - default: return fz_paint_solid_color_N; - } +#if FZ_PLOTTERS_G + case 1: + if (da) + return paint_solid_color_1_da; + else if (color[1] == 255) + return paint_solid_color_1; + else + return paint_solid_color_1_alpha; +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_RGB + case 3: + if (da) + return paint_solid_color_3_da; + else if (color[3] == 255) + return paint_solid_color_3; + else + return paint_solid_color_3_alpha; +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK + case 4: + if (da) + return paint_solid_color_4_da; + else if (color[4] == 255) + return paint_solid_color_4; + else + return paint_solid_color_4_alpha; +#endif /* FZ_PLOTTERS_CMYK */ + default: +#if FZ_PLOTTERS_N + if (da) + return paint_solid_color_N_da; + else if (color[n] == 255) + return paint_solid_color_N; + else + return paint_solid_color_N_alpha; +#else + return NULL; +#endif /* FZ_PLOTTERS_N */ } - return NULL; } /* Blend a non-premultiplied color in mask over destination */ -static void -fz_paint_span_with_color_2_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +static inline void +template_span_with_color_1_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) { int sa = FZ_EXPAND(color[1]); int g = color[0]; - TRACK_FN(); if (sa == 256) { do @@ -431,13 +533,12 @@ fz_paint_span_with_color_2_da(byte * restrict dp, const byte * restrict mp, int } } -static void -fz_paint_span_with_color_4_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +static inline void +template_span_with_color_3_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) { unsigned int rgba = *((const unsigned int *)color); unsigned int mask, rb, ga; int sa = FZ_EXPAND(color[3]); - TRACK_FN(); if (sa == 0) return; if (isbigendian()) @@ -498,8 +599,8 @@ fz_paint_span_with_color_4_da(byte * restrict dp, const byte * restrict mp, int } } -static void -fz_paint_span_with_color_5_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +static inline void +template_span_with_color_4_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) { int sa = FZ_EXPAND(color[4]); int c = color[0]; @@ -561,7 +662,7 @@ fz_paint_span_with_color_5_da(byte * restrict dp, const byte * restrict mp, int } static inline void -fz_paint_span_with_color_N_general(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +template_span_with_color_N_general(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) { int k; int n1 = n - da; @@ -618,71 +719,100 @@ fz_paint_span_with_color_N_general(byte * restrict dp, const byte * restrict mp, } static void -fz_paint_span_with_color_N_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +paint_span_with_color_0_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_span_with_color_N_general(dp, mp, 1, w, color, 1); +} + +static void +paint_span_with_color_1(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_span_with_color_N_general(dp, mp, n, w, color, 1); + template_span_with_color_N_general(dp, mp, 1, w, color, 0); } static void -fz_paint_span_with_color_1(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +paint_span_with_color_1_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_span_with_color_N_general(dp, mp, 1, w, color, 0); + template_span_with_color_1_da(dp, mp, 2, w, color, 1); } +#if FZ_PLOTTERS_RGB static void -fz_paint_span_with_color_3(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +paint_span_with_color_3(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_span_with_color_N_general(dp, mp, 3, w, color, 0); + template_span_with_color_N_general(dp, mp, 3, w, color, 0); } static void -fz_paint_span_with_color_4(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +paint_span_with_color_3_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_span_with_color_N_general(dp, mp, 4, w, color, 0); + template_span_with_color_3_da(dp, mp, 4, w, color, 1); } +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK static void -fz_paint_span_with_color_N(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +paint_span_with_color_4(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) { TRACK_FN(); - fz_paint_span_with_color_N_general(dp, mp, n, w, color, 0); + template_span_with_color_N_general(dp, mp, 4, w, color, 0); } +static void +paint_span_with_color_4_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_span_with_color_4_da(dp, mp, 5, w, color, 1); +} +#endif /* FZ_PLOTTERS_CMYK */ + +#if FZ_PLOTTERS_N +static void +paint_span_with_color_N(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_span_with_color_N_general(dp, mp, n, w, color, 0); +} + +static void +paint_span_with_color_N_da(byte * restrict dp, const byte * restrict mp, int n, int w, const byte * restrict color, int da) +{ + TRACK_FN(); + template_span_with_color_N_general(dp, mp, n, w, color, 1); +} +#endif /* FZ_PLOTTERS_N */ + fz_span_color_painter_t * fz_get_span_color_painter(int n, int da, const byte * restrict color) { - if (da) - { - switch (n) - { - case 2: return fz_paint_span_with_color_2_da; - case 4: return fz_paint_span_with_color_4_da; - case 5: return fz_paint_span_with_color_5_da; - default: return fz_paint_span_with_color_N_da; - } - } - else + switch(n-da) { - switch (n) - { - case 1: return fz_paint_span_with_color_1; - case 3: return fz_paint_span_with_color_3; - case 4: return fz_paint_span_with_color_4; - default: return fz_paint_span_with_color_N; - } + case 0: return da ? paint_span_with_color_0_da : NULL; + case 1: return da ? paint_span_with_color_1_da : paint_span_with_color_1; +#if FZ_PLOTTERS_RGB + case 3: return da ? paint_span_with_color_3_da : paint_span_with_color_3; +#endif/* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK + case 4: return da ? paint_span_with_color_4_da : paint_span_with_color_4; +#endif/* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N + default: return da ? paint_span_with_color_N_da : paint_span_with_color_N; +#else + default: return NULL; +#endif /* FZ_PLOTTERS_N */ } - return NULL; } /* Blend source in mask over destination */ /* FIXME: There is potential for SWAR optimisation here */ static inline void -fz_paint_span_with_mask_1_general(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int w) +template_span_with_mask_1_general(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int w) { do { @@ -750,7 +880,7 @@ fz_paint_span_with_mask_1_general(byte * restrict dp, int da, const byte * restr /* FIXME: There is potential for SWAR optimisation here */ static inline void -fz_paint_span_with_mask_3_general(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int w) +template_span_with_mask_3_general(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int w) { do { @@ -843,7 +973,7 @@ fz_paint_span_with_mask_3_general(byte * restrict dp, int da, const byte * restr /* FIXME: There is potential for SWAR optimisation here */ static inline void -fz_paint_span_with_mask_4_general(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int w) +template_span_with_mask_4_general(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int w) { do { @@ -933,7 +1063,7 @@ fz_paint_span_with_mask_4_general(byte * restrict dp, int da, const byte * restr } static inline void -fz_paint_span_with_mask_N_general(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +template_span_with_mask_N_general(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { do { @@ -1016,175 +1146,220 @@ fz_paint_span_with_mask_N_general(byte * restrict dp, int da, const byte * restr } static void -fz_paint_span_with_mask_1_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_0_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +{ + TRACK_FN(); + template_span_with_mask_N_general(dp, 1, sp, 1, mp, 0, w); +} + +static void +paint_span_with_mask_0_da(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_1_general(dp, 1, sp, 1, mp, w); + template_span_with_mask_N_general(dp, 1, sp, 0, mp, 0, w); } static void -fz_paint_span_with_mask_3_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_1_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_3_general(dp, 1, sp, 1, mp, w); + template_span_with_mask_1_general(dp, 1, sp, 1, mp, w); } static void -fz_paint_span_with_mask_4_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_1(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_4_general(dp, 1, sp, 1, mp, w); + template_span_with_mask_1_general(dp, 0, sp, 0, mp, w); } +#if FZ_PLOTTERS_G static void -fz_paint_span_with_mask_N_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_1_da(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_N_general(dp, 1, sp, 1, mp, n, w); + template_span_with_mask_1_general(dp, 1, sp, 0, mp, w); } static void -fz_paint_span_with_mask_1_da(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_1_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_1_general(dp, 1, sp, 0, mp, w); + template_span_with_mask_1_general(dp, 0, sp, 1, mp, w); } +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_RGB static void -fz_paint_span_with_mask_3_da(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_3_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_3_general(dp, 1, sp, 0, mp, w); + template_span_with_mask_3_general(dp, 1, sp, 1, mp, w); } static void -fz_paint_span_with_mask_4_da(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_3_da(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_4_general(dp, 1, sp, 0, mp, w); + template_span_with_mask_3_general(dp, 1, sp, 0, mp, w); } static void -fz_paint_span_with_mask_N_da(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_3_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_N_general(dp, 1, sp, 0, mp, n, w); + template_span_with_mask_3_general(dp, 0, sp, 1, mp, w); } static void -fz_paint_span_with_mask_1_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_3(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_1_general(dp, 0, sp, 1, mp, w); + template_span_with_mask_3_general(dp, 0, sp, 0, mp, w); } +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK static void -fz_paint_span_with_mask_3_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_4_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_3_general(dp, 0, sp, 1, mp, w); + template_span_with_mask_4_general(dp, 1, sp, 1, mp, w); } static void -fz_paint_span_with_mask_4_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_4_da(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_4_general(dp, 0, sp, 1, mp, w); + template_span_with_mask_4_general(dp, 1, sp, 0, mp, w); } static void -fz_paint_span_with_mask_N_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_4_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_N_general(dp, 0, sp, 1, mp, n, w); + template_span_with_mask_4_general(dp, 0, sp, 1, mp, w); } static void -fz_paint_span_with_mask_1(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_4(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_1_general(dp, 0, sp, 0, mp, w); + template_span_with_mask_4_general(dp, 0, sp, 0, mp, w); } +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N static void -fz_paint_span_with_mask_3(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_N_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_3_general(dp, 0, sp, 0, mp, w); + template_span_with_mask_N_general(dp, 1, sp, 1, mp, n, w); } static void -fz_paint_span_with_mask_4(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_N_da(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_4_general(dp, 0, sp, 0, mp, w); + template_span_with_mask_N_general(dp, 1, sp, 0, mp, n, w); } static void -fz_paint_span_with_mask_N(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +paint_span_with_mask_N_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) { TRACK_FN(); - fz_paint_span_with_mask_N_general(dp, 0, sp, 0, mp, n, w); + template_span_with_mask_N_general(dp, 0, sp, 1, mp, n, w); } +static void +paint_span_with_mask_N(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w) +{ + TRACK_FN(); + template_span_with_mask_N_general(dp, 0, sp, 0, mp, n, w); +} +#endif /* FZ_PLOTTERS_N */ + typedef void (fz_span_mask_painter_t)(byte * restrict dp, int da, const byte * restrict sp, int sa, const byte * restrict mp, int n, int w); static fz_span_mask_painter_t * fz_get_span_mask_painter(int da, int sa, int n) { - if (da) - { - if (sa) - { - switch (n) - { - case 1: return fz_paint_span_with_mask_1_da_sa; - case 3: return fz_paint_span_with_mask_3_da_sa; - case 4: return fz_paint_span_with_mask_4_da_sa; - default: return fz_paint_span_with_mask_N_da_sa; - } - } - else - { - switch (n) - { - case 1: return fz_paint_span_with_mask_1_da; - case 3: return fz_paint_span_with_mask_3_da; - case 4: return fz_paint_span_with_mask_4_da; - default: return fz_paint_span_with_mask_N_da; - } - } - } - else + switch(n) { - if (sa) - { - switch (n) - { - case 1: return fz_paint_span_with_mask_1_sa; - case 3: return fz_paint_span_with_mask_3_sa; - case 4: return fz_paint_span_with_mask_4_sa; - default: return fz_paint_span_with_mask_N_sa; - } - } - else - { - switch (n) - { - case 1: return fz_paint_span_with_mask_1; - case 3: return fz_paint_span_with_mask_3; - case 4: return fz_paint_span_with_mask_4; - default: return fz_paint_span_with_mask_N; - } - } + case 0: + if (!da) + return NULL; + if (sa) + return paint_span_with_mask_0_da_sa; + else + return paint_span_with_mask_0_da; + case 1: +#if FZ_PLOTTERS_G + if (da) + if (sa) + return paint_span_with_mask_1_da_sa; + else + return paint_span_with_mask_1_da; + else + if (sa) + return paint_span_with_mask_1_sa; + else + return paint_span_with_mask_1; +#else + if (da && sa) + return paint_span_with_mask_1_da_sa; + if (!da & !sa) + return paint_span_with_mask_1; + return NULL; +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_RGB + case 3: + if (da) + if (sa) + return paint_span_with_mask_3_da_sa; + else + return paint_span_with_mask_3_da; + else + if (sa) + return paint_span_with_mask_3_sa; + else + return paint_span_with_mask_3; +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK + case 4: + if (da) + if (sa) + return paint_span_with_mask_4_da_sa; + else + return paint_span_with_mask_4_da; + else + if (sa) + return paint_span_with_mask_4_sa; + else + return paint_span_with_mask_4; +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N + default: + if (da) + if (sa) + return paint_span_with_mask_N_da_sa; + else + return paint_span_with_mask_N_da; + else + if (sa) + return paint_span_with_mask_N_sa; + else + return paint_span_with_mask_N; +#else + default: return NULL; +#endif /* FZ_PLOTTERS_N */ } - return NULL; } /* Blend source in constant alpha over destination */ static inline void -fz_paint_span_1_with_alpha_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w, int alpha) +template_span_1_with_alpha_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w, int alpha) { if (sa) alpha = FZ_EXPAND(alpha); @@ -1205,7 +1380,7 @@ fz_paint_span_1_with_alpha_general(byte * restrict dp, int da, const byte * rest } static inline void -fz_paint_span_3_with_alpha_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w, int alpha) +template_span_3_with_alpha_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w, int alpha) { if (sa) alpha = FZ_EXPAND(alpha); @@ -1230,7 +1405,7 @@ fz_paint_span_3_with_alpha_general(byte * restrict dp, int da, const byte * rest } static inline void -fz_paint_span_4_with_alpha_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w, int alpha) +template_span_4_with_alpha_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w, int alpha) { if (sa) alpha = FZ_EXPAND(alpha); @@ -1257,7 +1432,7 @@ fz_paint_span_4_with_alpha_general(byte * restrict dp, int da, const byte * rest } static inline void -fz_paint_span_N_with_alpha_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int n1, int w, int alpha) +template_span_N_with_alpha_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int n1, int w, int alpha) { if (sa) alpha = FZ_EXPAND(alpha); @@ -1284,7 +1459,7 @@ fz_paint_span_N_with_alpha_general(byte * restrict dp, int da, const byte * rest /* Blend source over destination */ static inline void -fz_paint_span_1_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w) +template_span_1_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w) { do { @@ -1322,7 +1497,7 @@ fz_paint_span_1_general(byte * restrict dp, int da, const byte * restrict sp, in } static inline void -fz_paint_span_3_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w) +template_span_3_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w) { do { @@ -1370,7 +1545,7 @@ fz_paint_span_3_general(byte * restrict dp, int da, const byte * restrict sp, in } static inline void -fz_paint_span_4_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w) +template_span_4_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int w) { do { @@ -1416,7 +1591,7 @@ fz_paint_span_4_general(byte * restrict dp, int da, const byte * restrict sp, in } static inline void -fz_paint_span_N_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int n1, int w) +template_span_N_general(byte * restrict dp, int da, const byte * restrict sp, int sa, int n1, int w) { do { @@ -1462,342 +1637,415 @@ fz_paint_span_N_general(byte * restrict dp, int da, const byte * restrict sp, in } static void -fz_paint_span_0_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_0_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { + TRACK_FN(); do { - int t = FZ_EXPAND(255 - sp[0]); - *dp = *sp++ + FZ_COMBINE(*dp, t); + int s = *sp++; + int t = FZ_EXPAND(255 - s); + *dp = s + FZ_COMBINE(*dp, t); dp ++; } while (--w); } static void -fz_paint_span_1_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_0_da_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_1_general(dp, 1, sp, 1, w); + alpha = FZ_EXPAND(alpha); + do + { + int masa = FZ_COMBINE(sp[0], alpha); + *dp = FZ_BLEND(*sp, *dp, masa); + dp++; + sp++; + } + while (--w); +} + +static void +paint_span_1_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +{ + TRACK_FN(); + template_span_1_general(dp, 0, sp, 1, w); } static void -fz_paint_span_3_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_1_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_3_general(dp, 1, sp, 1, w); + template_span_1_with_alpha_general(dp, 0, sp, 1, w, alpha); } static void -fz_paint_span_4_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_1_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_4_general(dp, 1, sp, 1, w); + template_span_1_general(dp, 1, sp, 1, w); } static void -fz_paint_span_N_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_1_da_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_N_general(dp, 1, sp, 1, n, w); + template_span_1_with_alpha_general(dp, 1, sp, 1, w, alpha); } +#if FZ_PLOTTERS_G static void -fz_paint_span_1_da_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_1_da(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_1_with_alpha_general(dp, 1, sp, 1, w, alpha); + template_span_1_general(dp, 1, sp, 0, w); } static void -fz_paint_span_3_da_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_1_da_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_3_with_alpha_general(dp, 1, sp, 1, w, alpha); + template_span_1_with_alpha_general(dp, 1, sp, 0, w, alpha); } static void -fz_paint_span_4_da_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_1(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_4_with_alpha_general(dp, 1, sp, 1, w, alpha); + template_span_1_general(dp, 0, sp, 0, w); } static void -fz_paint_span_N_da_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_1_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_N_with_alpha_general(dp, 1, sp, 1, n, w, alpha); + template_span_1_with_alpha_general(dp, 0, sp, 0, w, alpha); } +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_RGB static void -fz_paint_span_1_da(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_3_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_1_general(dp, 1, sp, 0, w); + template_span_3_general(dp, 1, sp, 1, w); } static void -fz_paint_span_3_da(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_3_da_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_3_general(dp, 1, sp, 0, w); + template_span_3_with_alpha_general(dp, 1, sp, 1, w, alpha); } static void -fz_paint_span_4_da(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_3_da(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_4_general(dp, 1, sp, 0, w); + template_span_3_general(dp, 1, sp, 0, w); } static void -fz_paint_span_N_da(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_3_da_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_N_general(dp, 1, sp, 0, n, w); + template_span_3_with_alpha_general(dp, 1, sp, 0, w, alpha); } static void -fz_paint_span_1_da_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_3_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_1_with_alpha_general(dp, 1, sp, 0, w, alpha); + template_span_3_general(dp, 0, sp, 1, w); } static void -fz_paint_span_3_da_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_3_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_3_with_alpha_general(dp, 1, sp, 0, w, alpha); + template_span_3_with_alpha_general(dp, 0, sp, 1, w, alpha); } static void -fz_paint_span_4_da_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_3(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_4_with_alpha_general(dp, 1, sp, 0, w, alpha); + template_span_3_general(dp, 0, sp, 0, w); } static void -fz_paint_span_N_da_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_3_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_N_with_alpha_general(dp, 1, sp, 0, n, w, alpha); + template_span_3_with_alpha_general(dp, 0, sp, 0, w, alpha); } +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK static void -fz_paint_span_1_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_4_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_1_general(dp, 0, sp, 1, w); + template_span_4_general(dp, 1, sp, 1, w); } static void -fz_paint_span_3_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_4_da_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_3_general(dp, 0, sp, 1, w); + template_span_4_with_alpha_general(dp, 1, sp, 1, w, alpha); } static void -fz_paint_span_4_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_4_da(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_4_general(dp, 0, sp, 1, w); + template_span_4_general(dp, 1, sp, 0, w); } static void -fz_paint_span_N_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_4_da_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_N_general(dp, 0, sp, 1, n, w); + template_span_4_with_alpha_general(dp, 1, sp, 0, w, alpha); } static void -fz_paint_span_1_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_4_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_1_with_alpha_general(dp, 0, sp, 1, w, alpha); + template_span_4_general(dp, 0, sp, 1, w); } static void -fz_paint_span_3_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_4_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_3_with_alpha_general(dp, 0, sp, 1, w, alpha); + template_span_4_with_alpha_general(dp, 0, sp, 1, w, alpha); } static void -fz_paint_span_4_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_4(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_4_with_alpha_general(dp, 0, sp, 1, w, alpha); + template_span_4_general(dp, 0, sp, 0, w); } static void -fz_paint_span_N_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_4_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_N_with_alpha_general(dp, 0, sp, 1, n, w, alpha); + template_span_4_with_alpha_general(dp, 0, sp, 0, w, alpha); } +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N static void -fz_paint_span_1(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_N_da_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_1_general(dp, 0, sp, 0, w); + template_span_N_general(dp, 1, sp, 1, n, w); } static void -fz_paint_span_3(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_N_da_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_3_general(dp, 0, sp, 0, w); + template_span_N_with_alpha_general(dp, 1, sp, 1, n, w, alpha); } static void -fz_paint_span_4(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_N_da(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_4_general(dp, 0, sp, 0, w); + template_span_N_general(dp, 1, sp, 0, n, w); } static void -fz_paint_span_N(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_N_da_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_N_general(dp, 0, sp, 0, n, w); + template_span_N_with_alpha_general(dp, 1, sp, 0, n, w, alpha); } static void -fz_paint_span_1_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_N_sa(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_1_with_alpha_general(dp, 0, sp, 0, w, alpha); + template_span_N_general(dp, 0, sp, 1, n, w); } static void -fz_paint_span_3_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_N_sa_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_3_with_alpha_general(dp, 0, sp, 0, w, alpha); + template_span_N_with_alpha_general(dp, 0, sp, 1, n, w, alpha); } static void -fz_paint_span_4_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_N(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_4_with_alpha_general(dp, 0, sp, 0, w, alpha); + template_span_N_general(dp, 0, sp, 0, n, w); } static void -fz_paint_span_N_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) +paint_span_N_alpha(byte * restrict dp, int da, const byte * restrict sp, int sa, int n, int w, int alpha) { TRACK_FN(); - fz_paint_span_N_with_alpha_general(dp, 0, sp, 0, n, w, alpha); + template_span_N_with_alpha_general(dp, 0, sp, 0, n, w, alpha); } +#endif /* FZ_PLOTTERS_N */ fz_span_painter_t * fz_get_span_painter(int da, int sa, int n, int alpha) { - if (da) + switch (n) { + case 0: + if (alpha == 255) + return paint_span_0_da_sa; + else if (alpha > 0) + return paint_span_0_da_sa_alpha; + break; + case 1: if (sa) - { - if (alpha == 255) + if (da) { - switch (n) - { - case 0: return fz_paint_span_0_da_sa; - case 1: return fz_paint_span_1_da_sa; - case 3: return fz_paint_span_3_da_sa; - case 4: return fz_paint_span_4_da_sa; - default: return fz_paint_span_N_da_sa; - } + if (alpha == 255) + return paint_span_1_da_sa; + else if (alpha > 0) + return paint_span_1_da_sa_alpha; } - else if (alpha > 0) + else { - switch (n) - { - case 1: return fz_paint_span_1_da_sa_alpha; - case 3: return fz_paint_span_3_da_sa_alpha; - case 4: return fz_paint_span_4_da_sa_alpha; - default: return fz_paint_span_N_da_sa_alpha; - } + if (alpha == 255) + return paint_span_1_sa; + else if (alpha > 0) + return paint_span_1_sa_alpha; } - } else - { - if (alpha == 255) +#if FZ_PLOTTERS_G + if (da) { - switch (n) - { - case 1: return fz_paint_span_1_da; - case 3: return fz_paint_span_3_da; - case 4: return fz_paint_span_4_da; - default: return fz_paint_span_N_da; - } + if (alpha == 255) + return paint_span_1_da; + else if (alpha > 0) + return paint_span_1_da_alpha; } - else if (alpha > 0) + else { - switch (n) - { - case 1: return fz_paint_span_1_da_alpha; - case 3: return fz_paint_span_3_da_alpha; - case 4: return fz_paint_span_4_da_alpha; - default: return fz_paint_span_N_da_alpha; - } + if (alpha == 255) + return paint_span_1; + else if (alpha > 0) + return paint_span_1_alpha; } - } - } - else - { - if (sa) - { - if (alpha == 255) +#else + return NULL; +#endif /* FZ_PLOTTERS_G */ + break; +#if FZ_PLOTTERS_RGB + case 3: + if (da) + if (sa) { - switch (n) - { - case 1: return fz_paint_span_1_sa; - case 3: return fz_paint_span_3_sa; - case 4: return fz_paint_span_4_sa; - default: return fz_paint_span_N_sa; - } + if (alpha == 255) + return paint_span_3_da_sa; + else if (alpha > 0) + return paint_span_3_da_sa_alpha; } - else if (alpha > 0) + else { - switch (n) - { - case 1: return fz_paint_span_1_sa_alpha; - case 3: return fz_paint_span_3_sa_alpha; - case 4: return fz_paint_span_4_sa_alpha; - default: return fz_paint_span_N_sa_alpha; - } + if (alpha == 255) + return paint_span_3_da; + else if (alpha > 0) + return paint_span_3_da_alpha; } - } else - { - if (alpha == 255) + if (sa) { - switch (n) - { - case 1: return fz_paint_span_1; - case 3: return fz_paint_span_3; - case 4: return fz_paint_span_4; - default: return fz_paint_span_N; - } + if (alpha == 255) + return paint_span_3_sa; + else if (alpha > 0) + return paint_span_3_sa_alpha; } - else if (alpha > 0) + else { - switch (n) - { - case 1: return fz_paint_span_1_alpha; - case 3: return fz_paint_span_3_alpha; - case 4: return fz_paint_span_4_alpha; - default: return fz_paint_span_N_alpha; - } + if (alpha == 255) + return paint_span_3; + else if (alpha > 0) + return paint_span_3_alpha; } - } + break; +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK + case 4: + if (da) + if (sa) + { + if (alpha == 255) + return paint_span_4_da_sa; + else if (alpha > 0) + return paint_span_4_da_sa_alpha; + } + else + { + if (alpha == 255) + return paint_span_4_da; + else if (alpha > 0) + return paint_span_4_da_alpha; + } + else + if (sa) + { + if (alpha == 255) + return paint_span_4_sa; + else if (alpha > 0) + return paint_span_4_sa_alpha; + } + else + { + if (alpha == 255) + return paint_span_4; + else if (alpha > 0) + return paint_span_4_alpha; + } + break; +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N + default: + if (da) + if (sa) + { + if (alpha == 255) + return paint_span_N_da_sa; + else if (alpha > 0) + return paint_span_N_da_sa_alpha; + } + else + { + if (alpha == 255) + return paint_span_N_da; + else if (alpha > 0) + return paint_span_N_da_alpha; + } + else + if (sa) + { + if (alpha == 255) + return paint_span_N_sa; + else if (alpha > 0) + return paint_span_N_sa_alpha; + } + else + { + if (alpha == 255) + return paint_span_N; + else if (alpha > 0) + return paint_span_N_alpha; + } + break; +#endif /* FZ_PLOTTERS_N */ } return NULL; } @@ -1837,6 +2085,7 @@ fz_paint_pixmap_with_bbox(fz_pixmap * restrict dst, const fz_pixmap * restrict s n -= sa; fn = fz_get_span_painter(da, sa, n, alpha); + assert(fn); if (fn == NULL) return; @@ -1879,6 +2128,7 @@ fz_paint_pixmap(fz_pixmap * restrict dst, const fz_pixmap * restrict src, int al n -= sa; fn = fz_get_span_painter(da, sa, n, alpha); + assert(fn); if (fn == NULL) return; @@ -2065,161 +2315,161 @@ intermediate_run: } } -#define DA #define N 1 #include "paint-glyph.h" -#define DA -#define N 3 -#include "paint-glyph.h" - -#define DA -#define N 4 +#define ALPHA +#define N 1 #include "paint-glyph.h" +#if FZ_PLOTTERS_G #define DA +#define N 1 #include "paint-glyph.h" #define DA #define ALPHA #define N 1 #include "paint-glyph.h" +#endif /* FZ_PLOTTERS_G */ +#if FZ_PLOTTERS_RGB #define DA -#define ALPHA #define N 3 #include "paint-glyph.h" #define DA #define ALPHA -#define N 4 +#define N 3 +#include "paint-glyph.h" + +#define N 3 #include "paint-glyph.h" -#define DA #define ALPHA +#define N 3 #include "paint-glyph.h" +#endif /* FZ_PLOTTERS_RGB */ -#define N 1 +#if FZ_PLOTTERS_CMYK +#define DA +#define N 4 #include "paint-glyph.h" -#define N 3 +#define DA +#define ALPHA +#define N 4 #include "paint-glyph.h" +#define ALPHA #define N 4 #include "paint-glyph.h" +#define N 4 #include "paint-glyph.h" +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N #define ALPHA -#define N 1 #include "paint-glyph.h" -#define ALPHA -#define N 3 +#define DA #include "paint-glyph.h" +#define DA #define ALPHA -#define N 4 #include "paint-glyph.h" -#define ALPHA #include "paint-glyph.h" +#endif /* FZ_PLOTTERS_N */ static inline void fz_paint_glyph_alpha(const unsigned char * restrict colorbv, int n, int span, unsigned char * restrict dp, int da, const fz_glyph *glyph, int w, int h, int skip_x, int skip_y) { - if (da) + switch (n) { - switch (n) - { - case 1: - TRACK_LABEL("pgda1"); + case 1: + if (da) +#if FZ_PLOTTERS_G fz_paint_glyph_alpha_1_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - case 3: - TRACK_LABEL("pgda3"); - fz_paint_glyph_alpha_3_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - case 4: - TRACK_LABEL("pgda4"); - fz_paint_glyph_alpha_4_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - default: - TRACK_LABEL("pgdan"); - fz_paint_glyph_alpha_N_da(colorbv, n, span, dp, glyph, w, h, skip_x, skip_y); - break; - } - } - else - { - switch (n) +#else { - case 1: - TRACK_LABEL("pga1"); + assert("Unexpected plotter" == NULL); + return; + } +#endif /* FZ_PLOTTERS_G */ + else fz_paint_glyph_alpha_1(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - case 3: - TRACK_LABEL("pga3"); + break; +#if FZ_PLOTTERS_RGB + case 3: + if (da) + fz_paint_glyph_alpha_3_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); + else fz_paint_glyph_alpha_3(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - case 4: - TRACK_LABEL("pga4"); + break; +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK + case 4: + if (da) + fz_paint_glyph_alpha_4_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); + else fz_paint_glyph_alpha_4(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - default: - TRACK_LABEL("pgan"); + break; +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N + default: + if (da) + fz_paint_glyph_alpha_N_da(colorbv, n, span, dp, glyph, w, h, skip_x, skip_y); + else fz_paint_glyph_alpha_N(colorbv, n, span, dp, glyph, w, h, skip_x, skip_y); - break; - } + break; +#endif /* FZ_PLOTTERS_N */ } } static inline void fz_paint_glyph_solid(const unsigned char * restrict colorbv, int n, int span, unsigned char * restrict dp, int da, const fz_glyph * restrict glyph, int w, int h, int skip_x, int skip_y) { - if (da) + switch (n) { - switch (n) - { - case 1: - TRACK_LABEL("pg1d1"); + case 1: + if (da) +#if FZ_PLOTTERS_G fz_paint_glyph_solid_1_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - case 3: - TRACK_LABEL("pg1d3"); - fz_paint_glyph_solid_3_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - case 4: - TRACK_LABEL("pg1d4"); - fz_paint_glyph_solid_4_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - default: - TRACK_LABEL("pg1dn"); - fz_paint_glyph_solid_N_da(colorbv, n, span, dp, glyph, w, h, skip_x, skip_y); - break; - } - } - else - { - switch (n) +#else { - case 1: - TRACK_LABEL("pg11"); + assert("Unexpected plotter" == NULL); + return; + } +#endif /* FZ_PLOTTERS_G */ + else fz_paint_glyph_solid_1(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - case 3: - TRACK_LABEL("pg13"); + break; +#if FZ_PLOTTERS_RGB + case 3: + if (da) + fz_paint_glyph_solid_3_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); + else fz_paint_glyph_solid_3(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - case 4: - TRACK_LABEL("pg14"); + break; +#endif /* FZ_PLOTTERS_RGB */ +#if FZ_PLOTTERS_CMYK + case 4: + if (da) + fz_paint_glyph_solid_4_da(colorbv, span, dp, glyph, w, h, skip_x, skip_y); + else fz_paint_glyph_solid_4(colorbv, span, dp, glyph, w, h, skip_x, skip_y); - break; - default: - TRACK_LABEL("pg1n"); + break; +#endif /* FZ_PLOTTERS_CMYK */ +#if FZ_PLOTTERS_N + default: + if (da) + fz_paint_glyph_solid_N_da(colorbv, n, span, dp, glyph, w, h, skip_x, skip_y); + else fz_paint_glyph_solid_N(colorbv, n, span, dp, glyph, w, h, skip_x, skip_y); - break; - } + break; +#endif /* FZ_PLOTTERS_N */ } } diff --git a/source/fitz/paint-glyph.h b/source/fitz/paint-glyph.h index 824adaf2..748e6b19 100644 --- a/source/fitz/paint-glyph.h +++ b/source/fitz/paint-glyph.h @@ -44,6 +44,7 @@ FUNCTION_NAME(NAME,N,NAME2)(const unsigned char * restrict colorbv, const uint32_t color = *(const uint32_t *)colorbv; #endif #endif + TRACK_FN(); while (h--) { int skip_xx, ww, len, extend; @@ -169,7 +170,7 @@ solid_run: *ddp = FZ_BLEND(colorbv[k++], *ddp, sa); ddp++; } - while (k != n); + while (k != n1); #ifdef DA *ddp = FZ_BLEND(0xFF, *ddp, sa); ddp++; |