#ifndef _FX_SKIABLITTER_H_ #define _FX_SKIABLITTER_H_ //#define _SKIA_SUPPORT_ #if defined(_SKIA_SUPPORT_) class CFX_SkiaRenderer : public SkBlitter, public CFX_Object { protected: int m_Alpha, m_Red, // Or the complementary-color, Cyan m_Green, // Magenta m_Blue, // Yellow m_Gray; // Black FX_DWORD m_Color; // FX_ARGB or FX_CMYK FX_BOOL m_bFullCover; int m_ProcessFilter; FX_BOOL m_bRgbByteOrder; FX_RECT m_ClipBox; CFX_DIBitmap* m_pDevice; CFX_DIBitmap* m_pOriDevice; const CFX_ClipRgn* m_pClipRgn; const CFX_DIBitmap* m_pClipMask; FX_LPBYTE m_pDestScan; FX_LPBYTE m_pDestExtraAlphaScan; FX_LPBYTE m_pOriScan; FX_LPBYTE m_pClipScan; void (CFX_SkiaRenderer::*composite_span)(FX_LPBYTE,FX_LPBYTE,int,int,int,int,FX_BYTE,int,int,int,FX_LPBYTE,FX_LPBYTE); public: //-------------------------------------------------------------------- virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]); virtual void blitH(int x, int y, int width); virtual void blitV(int x, int y, int height, SkAlpha alpha); virtual void blitRect(int x, int y, int width, int height); virtual void blitAntiRect(int x, int y, int width, int height, SkAlpha leftAlpha, SkAlpha rightAlpha); /*------------------------------------------------------------------------------------------------------*/ // A general alpha merge function (with clipping mask). Gray device. void CompositeSpan1bpp_0(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpan1bpp_1(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpan1bpp_4(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpan1bpp_5(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpan1bpp_8(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpan1bpp_9(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpan1bpp_12(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpan1bpp_13(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); /*--------------------------------------------------------------------------------------------------------*/ // A general alpha merge function (with clipping mask). Gray device. void CompositeSpanGray_2(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanGray_3(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanGray_6(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanGray_7(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanGray_10(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanGray_11(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanGray_14(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanGray_15(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); /*--------------------------------------------------------------------------------------------------------*/ void CompositeSpanARGB_2(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanARGB_3(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanARGB_6(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanARGB_7(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); // ... /*--------------------------------------------------------------------------------------------------------*/ void CompositeSpanRGB32_2(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB32_3(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB32_6(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB32_7(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); /*---------------------------------------------------------------------------------------------------------*/ void CompositeSpanRGB24_2(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB24_3(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB24_6(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB24_7(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB24_10(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB24_11(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB24_14(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); void CompositeSpanRGB24_15(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); /*----------------------------------------------------------------------------------------------------------*/ // A general alpha merge function (with clipping mask). Cmyka/Cmyk device. void CompositeSpanCMYK(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, int span_left, int span_len, int span_top, FX_BYTE cover_scan, int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, FX_LPBYTE dest_extra_alpha_scan); //-------------------------------------------------------------------- FX_BOOL Init(CFX_DIBitmap* pDevice, CFX_DIBitmap* pOriDevice, const CFX_ClipRgn* pClipRgn, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bRgbByteOrder, int alpha_flag = 0, void* pIccTransform = NULL); //The alpha flag must be fill_flag if exist. }; class CFX_SkiaA8Renderer : public SkBlitter, public CFX_Object { public: //-------------------------------------------------------------------- virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]); virtual void blitH(int x, int y, int width); virtual void blitV(int x, int y, int height, SkAlpha alpha); virtual void blitRect(int x, int y, int width, int height); virtual void blitAntiRect(int x, int y, int width, int height, SkAlpha leftAlpha, SkAlpha rightAlpha); //-------------------------------------------------------------------- FX_BOOL Init(CFX_DIBitmap* pDevice, int Left, int Top); CFX_DIBitmap* m_pDevice; int m_Left; int m_Top; int m_dstWidth; int m_dstHeight; }; #endif #endif