diff options
Diffstat (limited to 'gfx/skia/skia/include/core/SkBlitRow.h')
-rw-r--r-- | gfx/skia/skia/include/core/SkBlitRow.h | 91 |
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 |