summaryrefslogtreecommitdiff
path: root/fitzdraw/porterduff.c
diff options
context:
space:
mode:
Diffstat (limited to 'fitzdraw/porterduff.c')
-rw-r--r--fitzdraw/porterduff.c359
1 files changed, 0 insertions, 359 deletions
diff --git a/fitzdraw/porterduff.c b/fitzdraw/porterduff.c
deleted file mode 100644
index 59e41ccc..00000000
--- a/fitzdraw/porterduff.c
+++ /dev/null
@@ -1,359 +0,0 @@
-#include "fitz.h"
-
-typedef unsigned char byte;
-
-/*
- * Blend pixmap regions
- */
-
-/* dst = src over dst */
-static void
-duff_non(byte * restrict sp0, int sw, int sn, byte * restrict dp0, int dw, int w0, int h)
-{
- int k;
- while (h--)
- {
- byte *sp = sp0;
- byte *dp = dp0;
- int w = w0;
- while (w--)
- {
- byte sa = sp[0];
- byte ssa = 255 - sa;
- for (k = 0; k < sn; k++)
- {
- dp[k] = sp[k] + fz_mul255(dp[k], ssa);
- }
- sp += sn;
- dp += sn;
- }
- sp0 += sw;
- dp0 += dw;
- }
-}
-
-/* dst = src in msk */
-static void
-duff_nimcn(byte * restrict sp0, int sw, int sn, byte * restrict mp0, int mw, int mn, byte * restrict dp0, int dw, int w0, int h)
-{
- int k;
- while (h--)
- {
- byte *sp = sp0;
- byte *mp = mp0;
- byte *dp = dp0;
- int w = w0;
- while (w--)
- {
- byte ma = mp[0];
- for (k = 0; k < sn; k++)
- dp[k] = fz_mul255(sp[k], ma);
- sp += sn;
- mp += mn;
- dp += sn;
- }
- sp0 += sw;
- mp0 += mw;
- dp0 += dw;
- }
-}
-
-/* dst = src in msk over dst */
-static void
-duff_nimon(byte * restrict sp0, int sw, int sn, byte * restrict mp0, int mw, int mn, byte * restrict dp0, int dw, int w0, int h)
-{
- int k;
- while (h--)
- {
- byte *sp = sp0;
- byte *mp = mp0;
- byte *dp = dp0;
- int w = w0;
- while (w--)
- {
- /* TODO: validate this */
- byte ma = mp[0];
- byte sa = fz_mul255(sp[0], ma);
- byte ssa = 255 - sa;
- for (k = 0; k < sn; k++)
- {
- dp[k] = fz_mul255(sp[k], ma) + fz_mul255(dp[k], ssa);
- }
- sp += sn;
- mp += mn;
- dp += sn;
- }
- sp0 += sw;
- mp0 += mw;
- dp0 += dw;
- }
-}
-
-static void duff_1o1(byte * restrict sp0, int sw, byte * restrict dp0, int dw, int w0, int h)
-{
- /* duff_non(sp0, sw, 1, dp0, dw, w0, h); */
- while (h--)
- {
- byte *sp = sp0;
- byte *dp = dp0;
- int w = w0;
- while (w--)
- {
- dp[0] = sp[0] + fz_mul255(dp[0], 255 - sp[0]);
- sp ++;
- dp ++;
- }
- sp0 += sw;
- dp0 += dw;
- }
-}
-
-static void duff_4o4(byte *sp0, int sw, byte *dp0, int dw, int w0, int h)
-{
- /* duff_non(sp0, sw, 4, dp0, dw, w0, h); */
- while (h--)
- {
- byte *sp = sp0;
- byte *dp = dp0;
- int w = w0;
- while (w--)
- {
- byte ssa = 255 - sp[0];
- dp[0] = sp[0] + fz_mul255(dp[0], ssa);
- dp[1] = sp[1] + fz_mul255(dp[1], ssa);
- dp[2] = sp[2] + fz_mul255(dp[2], ssa);
- dp[3] = sp[3] + fz_mul255(dp[3], ssa);
- sp += 4;
- dp += 4;
- }
- sp0 += sw;
- dp0 += dw;
- }
-}
-
-static void duff_1i1c1(byte * restrict sp0, int sw, byte * restrict mp0, int mw, byte * restrict dp0, int dw, int w0, int h)
-{
- /* duff_nimcn(sp0, sw, 1, mp0, mw, 1, dp0, dw, w0, h); */
- while (h--)
- {
- byte *sp = sp0;
- byte *mp = mp0;
- byte *dp = dp0;
- int w = w0;
- while (w--)
- {
- dp[0] = fz_mul255(sp[0], mp[0]);
- sp ++;
- mp ++;
- dp ++;
- }
- sp0 += sw;
- mp0 += mw;
- dp0 += dw;
- }
-}
-
-static void duff_4i1c4(byte * restrict sp0, int sw, byte * restrict mp0, int mw, byte * restrict dp0, int dw, int w0, int h)
-{
- /* duff_nimcn(sp0, sw, 4, mp0, mw, 1, dp0, dw, w0, h); */
- while (h--)
- {
- byte *sp = sp0;
- byte *mp = mp0;
- byte *dp = dp0;
- int w = w0;
- while (w--)
- {
- byte ma = mp[0];
- dp[0] = fz_mul255(sp[0], ma);
- dp[1] = fz_mul255(sp[1], ma);
- dp[2] = fz_mul255(sp[2], ma);
- dp[3] = fz_mul255(sp[3], ma);
- sp += 4;
- mp += 1;
- dp += 4;
- }
- sp0 += sw;
- mp0 += mw;
- dp0 += dw;
- }
-}
-
-static void duff_1i1o1(byte * restrict sp0, int sw, byte * restrict mp0, int mw, byte * restrict dp0, int dw, int w0, int h)
-{
- /* duff_nimon(sp0, sw, 1, mp0, mw, 1, dp0, dw, w0, h); */
- while (h--)
- {
- byte *sp = sp0;
- byte *mp = mp0;
- byte *dp = dp0;
- int w = w0;
- while (w--)
- {
- byte ma = mp[0];
- byte sa = fz_mul255(sp[0], ma);
- byte ssa = 255 - sa;
- dp[0] = fz_mul255(sp[0], ma) + fz_mul255(dp[0], ssa);
- sp ++;
- mp ++;
- dp ++;
- }
- sp0 += sw;
- mp0 += mw;
- dp0 += dw;
- }
-}
-
-static void duff_4i1o4(byte * restrict sp0, int sw, byte * restrict mp0, int mw, byte * restrict dp0, int dw, int w0, int h)
-{
- /* duff_nimon(sp0, sw, 4, mp0, mw, 1, dp0, dw, w0, h); */
- while (h--)
- {
- byte *sp = sp0;
- byte *mp = mp0;
- byte *dp = dp0;
- int w = w0;
- while (w--)
- {
- byte ma = mp[0];
- byte sa = fz_mul255(sp[0], ma);
- byte ssa = 255 - sa;
- dp[0] = fz_mul255(sp[0], ma) + fz_mul255(dp[0], ssa);
- dp[1] = fz_mul255(sp[1], ma) + fz_mul255(dp[1], ssa);
- dp[2] = fz_mul255(sp[2], ma) + fz_mul255(dp[2], ssa);
- dp[3] = fz_mul255(sp[3], ma) + fz_mul255(dp[3], ssa);
- sp += 4;
- mp += 1;
- dp += 4;
- }
- sp0 += sw;
- mp0 += mw;
- dp0 += dw;
- }
-}
-
-/*
- * Path and text masks
- */
-
-static void path_1c1(byte * restrict src, byte cov, int len, byte * restrict dst)
-{
- while (len--)
- {
- cov += *src; *src = 0; src++;
- *dst++ = cov;
- }
-}
-
-static void path_1o1(byte * restrict src, byte cov, int len, byte * restrict dst)
-{
- while (len--)
- {
- cov += *src; *src = 0; src++;
- dst[0] = cov + fz_mul255(dst[0], 255 - cov);
- dst++;
- }
-}
-
-// With 4 In 1 Over 4
-static void path_w4i1o4(byte * restrict argb, byte * restrict src, byte cov, int len, byte * restrict dst)
-{
- byte alpha = argb[0];
- byte r = argb[1];
- byte g = argb[2];
- byte b = argb[3];
- while (len--)
- {
- byte ca;
- cov += *src; *src = 0; src++;
- ca = fz_mul255(cov, alpha);
- dst[0] = ca + fz_mul255(dst[0], 255 - ca);
- dst[1] = fz_mul255((short)r - dst[1], ca) + dst[1];
- dst[2] = fz_mul255((short)g - dst[2], ca) + dst[2];
- dst[3] = fz_mul255((short)b - dst[3], ca) + dst[3];
- dst += 4;
- }
-}
-
-static void text_1c1(byte * restrict src0, int srcw, byte * restrict dst0, int dstw, int w0, int h)
-{
- while (h--)
- {
- byte * restrict src = src0;
- byte * restrict dst = dst0;
- int w = w0;
- while (w--)
- {
- *dst++ = *src++;
- }
- src0 += srcw;
- dst0 += dstw;
- }
-}
-
-static void text_1o1(byte * restrict src0, int srcw, byte * restrict dst0, int dstw, int w0, int h)
-{
- while (h--)
- {
- byte *src = src0;
- byte *dst = dst0;
- int w = w0;
- while (w--)
- {
- dst[0] = src[0] + fz_mul255(dst[0], 255 - src[0]);
- src++;
- dst++;
- }
- src0 += srcw;
- dst0 += dstw;
- }
-}
-
-static void text_w4i1o4(byte * restrict argb, byte * restrict src0, int srcw, byte * restrict dst0, int dstw, int w0, int h)
-{
- unsigned char alpha = argb[0];
- unsigned char r = argb[4];
- unsigned char g = argb[5];
- unsigned char b = argb[6];
- while (h--)
- {
- byte *src = src0;
- byte *dst = dst0;
- int w = w0;
- while (w--)
- {
- byte ca = fz_mul255(src[0], alpha);
- dst[0] = ca + fz_mul255(dst[0], 255 - ca);
- dst[1] = fz_mul255((short)r - dst[1], ca) + dst[1];
- dst[2] = fz_mul255((short)g - dst[2], ca) + dst[2];
- dst[3] = fz_mul255((short)b - dst[3], ca) + dst[3];
- src ++;
- dst += 4;
- }
- src0 += srcw;
- dst0 += dstw;
- }
-}
-
-/*
- * ... and the function pointers
- */
-
-void (*fz_duff_non)(byte*,int,int,byte*,int,int,int) = duff_non;
-void (*fz_duff_nimcn)(byte*,int,int,byte*,int,int,byte*,int,int,int) = duff_nimcn;
-void (*fz_duff_nimon)(byte*,int,int,byte*,int,int,byte*,int,int,int) = duff_nimon;
-void (*fz_duff_1o1)(byte*,int,byte*,int,int,int) = duff_1o1;
-void (*fz_duff_4o4)(byte*,int,byte*,int,int,int) = duff_4o4;
-void (*fz_duff_1i1c1)(byte*,int,byte*,int,byte*,int,int,int) = duff_1i1c1;
-void (*fz_duff_4i1c4)(byte*,int,byte*,int,byte*,int,int,int) = duff_4i1c4;
-void (*fz_duff_1i1o1)(byte*,int,byte*,int,byte*,int,int,int) = duff_1i1o1;
-void (*fz_duff_4i1o4)(byte*,int,byte*,int,byte*,int,int,int) = duff_4i1o4;
-
-void (*fz_path_1c1)(byte*,byte,int,byte*) = path_1c1;
-void (*fz_path_1o1)(byte*,byte,int,byte*) = path_1o1;
-void (*fz_path_w4i1o4)(byte*,byte*,byte,int,byte*) = path_w4i1o4;
-
-void (*fz_text_1c1)(byte*,int,byte*,int,int,int) = text_1c1;
-void (*fz_text_1o1)(byte*,int,byte*,int,int,int) = text_1o1;
-void (*fz_text_w4i1o4)(byte*,byte*,int,byte*,int,int,int) = text_w4i1o4;
-