summaryrefslogtreecommitdiffstats
path: root/gfx/skia/skia/include/core/SkBlitRow.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/skia/skia/include/core/SkBlitRow.h')
-rw-r--r--gfx/skia/skia/include/core/SkBlitRow.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/gfx/skia/skia/include/core/SkBlitRow.h b/gfx/skia/skia/include/core/SkBlitRow.h
new file mode 100644
index 000000000..56121eba7
--- /dev/null
+++ b/gfx/skia/skia/include/core/SkBlitRow.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkBlitRow_DEFINED
+#define SkBlitRow_DEFINED
+
+#include "SkBitmap.h"
+#include "SkColor.h"
+
+class SkBlitRow {
+public:
+ enum Flags16 {
+ //! If set, the alpha parameter will be != 255
+ kGlobalAlpha_Flag = 0x01,
+ //! If set, the src colors may have alpha != 255
+ kSrcPixelAlpha_Flag = 0x02,
+ //! If set, the resulting 16bit colors should be dithered
+ kDither_Flag = 0x04
+ };
+
+ /** Function pointer that reads a scanline of src SkPMColors, and writes
+ a corresponding scanline of 16bit colors (specific format based on the
+ config passed to the Factory.
+
+ The x,y params provide the dithering phase for the start of the scanline
+
+ @param alpha A global alpha to be applied to all of the src colors
+ @param x The x coordinate of the beginning of the scanline
+ @param y THe y coordinate of the scanline
+ */
+ typedef void (*Proc16)(uint16_t dst[], const SkPMColor src[], int count,
+ U8CPU alpha, int x, int y);
+
+ static Proc16 Factory16(unsigned flags);
+
+ /**
+ * Function pointer that blends a single src color onto a scaline of dst colors.
+ *
+ * The x,y params provide the dithering phase for the start of the scanline
+ */
+ typedef void (*ColorProc16)(uint16_t dst[], SkPMColor src, int count, int x, int y);
+
+ // Note : we ignore the kGlobalAlpha_Flag setting, but do respect kSrcPixelAlpha_Flag
+ static ColorProc16 ColorFactory16(unsigned flags);
+
+ ///////////// D32 version
+
+ enum Flags32 {
+ kGlobalAlpha_Flag32 = 1 << 0,
+ kSrcPixelAlpha_Flag32 = 1 << 1
+ };
+
+ /** Function pointer that blends 32bit colors onto a 32bit destination.
+ @param dst array of dst 32bit colors
+ @param src array of src 32bit colors (w/ or w/o alpha)
+ @param count number of colors to blend
+ @param alpha global alpha to be applied to all src colors
+ */
+ typedef void (*Proc32)(uint32_t dst[], const SkPMColor src[], int count, U8CPU alpha);
+
+ static Proc32 Factory32(unsigned flags32);
+
+ /** Blend a single color onto a row of S32 pixels, writing the result
+ into a row of D32 pixels. src and dst may be the same memory, but
+ if they are not, they may not overlap.
+ */
+ static void Color32(SkPMColor dst[], const SkPMColor src[], int count, SkPMColor color);
+
+ /** These static functions are called by the Factory and Factory32
+ functions, and should return either NULL, or a
+ platform-specific function-ptr to be used in place of the
+ system default.
+ */
+
+ static Proc32 PlatformProcs32(unsigned flags);
+
+ static Proc16 PlatformFactory565(unsigned flags);
+ static ColorProc16 PlatformColorFactory565(unsigned flags);
+
+private:
+ enum {
+ kFlags16_Mask = 7,
+ kFlags32_Mask = 3
+ };
+};
+
+#endif