diff options
Diffstat (limited to 'source/fitz/paint-glyph.h')
-rw-r--r-- | source/fitz/paint-glyph.h | 97 |
1 files changed, 78 insertions, 19 deletions
diff --git a/source/fitz/paint-glyph.h b/source/fitz/paint-glyph.h index 42b58b97..824adaf2 100644 --- a/source/fitz/paint-glyph.h +++ b/source/fitz/paint-glyph.h @@ -9,25 +9,38 @@ #define NAME solid #endif -#define FUNCTION_NAMER(NAME,N) fz_paint_glyph_##NAME##_##N -#define FUNCTION_NAME(NAME,N) FUNCTION_NAMER(NAME,N) +#ifdef DA +#define NAME2 _da +#else +#define NAME2 +#endif + +#define FUNCTION_NAMER(NAME,N,NAME2) fz_paint_glyph_##NAME##_##N##NAME2 +#define FUNCTION_NAME(NAME,N,NAME2) FUNCTION_NAMER(NAME,N,NAME2) static inline void -FUNCTION_NAME(NAME,N)(const unsigned char * restrict colorbv, +FUNCTION_NAME(NAME,N,NAME2)(const unsigned char * restrict colorbv, #ifndef N - int n, + const int n1, #endif int span, unsigned char * restrict dp, const fz_glyph * restrict glyph, int w, int h, int skip_x, int skip_y) { #ifdef N - const int n = N; + const int n1 = N; +#endif +#ifdef DA + const int n = n1 + 1; +#else + const int n = n1; #endif #ifdef ALPHA - int sa = FZ_EXPAND(colorbv[n-1]); + int sa = FZ_EXPAND(colorbv[n1]); #else -#if defined(N) && N == 2 +#if defined(N) && N == 1 && defined(DA) const uint16_t color = *(const uint16_t *)colorbv; -#elif defined(N) && N == 4 +#elif defined(N) && N == 3 && defined(DA) + const uint32_t color = *(const uint32_t *)colorbv; +#elif defined(N) && N == 4 && !defined(DA) const uint32_t color = *(const uint32_t *)colorbv; #endif #endif @@ -120,42 +133,68 @@ solid_run: do { #ifdef ALPHA -#if defined(N) && N == 2 +#if defined(N) && N == 1 ddp[0] = FZ_BLEND(colorbv[0], ddp[0], sa); +#ifdef DA ddp[1] = FZ_BLEND(0xFF, ddp[1], sa); ddp += 2; -#elif defined(N) && N == 4 +#else + ddp++; +#endif +#elif defined(N) && N == 3 ddp[0] = FZ_BLEND(colorbv[0], ddp[0], sa); ddp[1] = FZ_BLEND(colorbv[1], ddp[1], sa); ddp[2] = FZ_BLEND(colorbv[2], ddp[2], sa); +#ifdef DA ddp[3] = FZ_BLEND(0xFF, ddp[3], sa); ddp += 4; -#elif defined(N) && N == 5 +#else + ddp += 3; +#endif +#elif defined(N) && N == 4 ddp[0] = FZ_BLEND(colorbv[0], ddp[0], sa); ddp[1] = FZ_BLEND(colorbv[1], ddp[1], sa); ddp[2] = FZ_BLEND(colorbv[2], ddp[2], sa); ddp[3] = FZ_BLEND(colorbv[3], ddp[3], sa); +#ifdef DA ddp[4] = FZ_BLEND(0xFF, ddp[4], sa); ddp += 5; #else + ddp += 4; +#endif +#else int k = 0; do { *ddp = FZ_BLEND(colorbv[k++], *ddp, sa); ddp++; } - while (k != n-1); + while (k != n); +#ifdef DA *ddp = FZ_BLEND(0xFF, *ddp, sa); ddp++; #endif +#endif #else -#if defined(N) && N == 2 +#if defined(N) && N == 1 +#ifdef DA *(uint16_t *)ddp = color; ddp += 2; -#elif defined(N) && N == 4 +#else + *ddp++ = colorbv[0]; +#endif +#elif defined(N) && N == 3 +#ifdef DA *(uint32_t *)ddp = color; ddp += 4; -#elif defined(N) && N == 5 +#else + ddp[0] = colorbv[0]; + ddp[1] = colorbv[1]; + ddp[2] = colorbv[2]; + ddp += 3; +#endif +#elif defined(N) && N == 4 +#ifdef DA ddp[0] = colorbv[0]; ddp[1] = colorbv[1]; ddp[2] = colorbv[2]; @@ -163,6 +202,10 @@ solid_run: ddp[4] = colorbv[4]; ddp += 5; #else + *(uint32_t *)ddp = color; + ddp += 4; +#endif +#else int k = 0; do { @@ -192,33 +235,47 @@ intermediate_run: a = FZ_EXPAND(a); #endif (void)k; -#if defined(N) && N == 2 +#if defined(N) && N == 1 ddp[0] = FZ_BLEND(colorbv[0], ddp[0], a); +#ifdef DA ddp[1] = FZ_BLEND(0xFF, ddp[1], a); ddp += 2; -#elif defined(N) && N == 4 +#else + ddp++; +#endif +#elif defined(N) && N == 3 ddp[0] = FZ_BLEND(colorbv[0], ddp[0], a); ddp[1] = FZ_BLEND(colorbv[1], ddp[1], a); ddp[2] = FZ_BLEND(colorbv[2], ddp[2], a); +#ifdef DA ddp[3] = FZ_BLEND(0xFF, ddp[3], a); ddp += 4; -#elif defined(N) && N == 5 +#else + ddp += 3; +#endif +#elif defined(N) && N == 4 ddp[0] = FZ_BLEND(colorbv[0], ddp[0], a); ddp[1] = FZ_BLEND(colorbv[1], ddp[1], a); ddp[2] = FZ_BLEND(colorbv[2], ddp[2], a); ddp[3] = FZ_BLEND(colorbv[3], ddp[3], a); +#ifdef DA ddp[4] = FZ_BLEND(0xFF, ddp[4], a); ddp += 5; #else + ddp += 4; +#endif +#else do { *ddp = FZ_BLEND(colorbv[k++], *ddp, a); ddp++; } - while (k != n-1); + while (k != n1); +#ifdef DA *ddp = FZ_BLEND(0xFF, *ddp, a); ddp++; #endif +#endif } while (--len); break; @@ -233,6 +290,8 @@ intermediate_run: #undef NAME #undef ALPHA +#undef NAME2 +#undef DA #undef N #undef FUNCTION_NAMER #undef FUNCTION_NAME |