1// Copyright 2014 PDFium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CORE_SRC_FXGE_SKIA_FX_SKIA_BLITTER_NEW_H_ 6#define CORE_SRC_FXGE_SKIA_FX_SKIA_BLITTER_NEW_H_ 7 8#if defined(_SKIA_SUPPORT_) 9class CFX_SkiaRenderer : public SkBlitter 10{ 11protected: 12 int m_Alpha, 13 m_Red, // Or the complementary-color, Cyan 14 m_Green, // Magenta 15 m_Blue, // Yellow 16 m_Gray; // Black 17 FX_DWORD m_Color; // FX_ARGB or FX_CMYK 18 FX_BOOL m_bFullCover; 19 int m_ProcessFilter; 20 FX_BOOL m_bRgbByteOrder; 21 22 FX_RECT m_ClipBox; 23 CFX_DIBitmap* m_pDevice; 24 CFX_DIBitmap* m_pOriDevice; 25 const CFX_ClipRgn* m_pClipRgn; 26 const CFX_DIBitmap* m_pClipMask; 27 28 FX_LPBYTE m_pDestScan; 29 FX_LPBYTE m_pDestExtraAlphaScan; 30 FX_LPBYTE m_pOriScan; 31 FX_LPBYTE m_pClipScan; 32 33 void (CFX_SkiaRenderer::*composite_span)(FX_LPBYTE,FX_LPBYTE,int,int,int,int,FX_BYTE,int,int,int,FX_LPBYTE,FX_LPBYTE); 34public: 35 36 //-------------------------------------------------------------------- 37 virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]); 38 virtual void blitH(int x, int y, int width); 39 virtual void blitV(int x, int y, int height, SkAlpha alpha); 40 virtual void blitRect(int x, int y, int width, int height); 41 virtual void blitAntiRect(int x, int y, int width, int height, SkAlpha leftAlpha, SkAlpha rightAlpha); 42 43 /*------------------------------------------------------------------------------------------------------*/ 44 // A general alpha merge function (with clipping mask). Gray device. 45 void CompositeSpan1bpp_0(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 46 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 47 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 48 FX_LPBYTE dest_extra_alpha_scan); 49 void CompositeSpan1bpp_1(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 50 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 51 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 52 FX_LPBYTE dest_extra_alpha_scan); 53 void CompositeSpan1bpp_4(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 54 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 55 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 56 FX_LPBYTE dest_extra_alpha_scan); 57 void CompositeSpan1bpp_5(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 58 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 59 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 60 FX_LPBYTE dest_extra_alpha_scan); 61 void CompositeSpan1bpp_8(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 62 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 63 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 64 FX_LPBYTE dest_extra_alpha_scan); 65 void CompositeSpan1bpp_9(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 66 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 67 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 68 FX_LPBYTE dest_extra_alpha_scan); 69 void CompositeSpan1bpp_12(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 70 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 71 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 72 FX_LPBYTE dest_extra_alpha_scan); 73 void CompositeSpan1bpp_13(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 74 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 75 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 76 FX_LPBYTE dest_extra_alpha_scan); 77 78 /*--------------------------------------------------------------------------------------------------------*/ 79 80 // A general alpha merge function (with clipping mask). Gray device. 81 void CompositeSpanGray_2(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 82 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 83 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 84 FX_LPBYTE dest_extra_alpha_scan); 85 86 void CompositeSpanGray_3(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 87 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 88 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 89 FX_LPBYTE dest_extra_alpha_scan); 90 91 void CompositeSpanGray_6(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 92 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 93 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 94 FX_LPBYTE dest_extra_alpha_scan); 95 96 void CompositeSpanGray_7(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 97 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 98 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 99 FX_LPBYTE dest_extra_alpha_scan); 100 101 void CompositeSpanGray_10(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 102 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 103 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 104 FX_LPBYTE dest_extra_alpha_scan); 105 106 107 void CompositeSpanGray_11(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 108 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 109 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 110 FX_LPBYTE dest_extra_alpha_scan); 111 112 void CompositeSpanGray_14(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 113 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 114 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 115 FX_LPBYTE dest_extra_alpha_scan); 116 117 void CompositeSpanGray_15(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 118 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 119 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 120 FX_LPBYTE dest_extra_alpha_scan); 121 122 /*--------------------------------------------------------------------------------------------------------*/ 123 void CompositeSpanARGB_2(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 124 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 125 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 126 FX_LPBYTE dest_extra_alpha_scan); 127 128 void CompositeSpanARGB_3(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 129 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 130 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 131 FX_LPBYTE dest_extra_alpha_scan); 132 133 134 void CompositeSpanARGB_6(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 135 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 136 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 137 FX_LPBYTE dest_extra_alpha_scan); 138 139 140 void CompositeSpanARGB_7(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 141 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 142 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 143 FX_LPBYTE dest_extra_alpha_scan); 144 // ... 145 /*--------------------------------------------------------------------------------------------------------*/ 146 void CompositeSpanRGB32_2(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 147 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 148 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 149 FX_LPBYTE dest_extra_alpha_scan); 150 void CompositeSpanRGB32_3(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 151 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 152 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 153 FX_LPBYTE dest_extra_alpha_scan); 154 void CompositeSpanRGB32_6(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 155 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 156 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 157 FX_LPBYTE dest_extra_alpha_scan); 158 void CompositeSpanRGB32_7(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 159 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 160 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 161 FX_LPBYTE dest_extra_alpha_scan); 162 163 /*---------------------------------------------------------------------------------------------------------*/ 164 165 void CompositeSpanRGB24_2(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 166 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 167 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 168 FX_LPBYTE dest_extra_alpha_scan); 169 void CompositeSpanRGB24_3(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 170 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 171 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 172 FX_LPBYTE dest_extra_alpha_scan); 173 void CompositeSpanRGB24_6(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 174 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 175 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 176 FX_LPBYTE dest_extra_alpha_scan); 177 void CompositeSpanRGB24_7(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 178 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 179 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 180 FX_LPBYTE dest_extra_alpha_scan); 181 void CompositeSpanRGB24_10(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 182 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 183 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 184 FX_LPBYTE dest_extra_alpha_scan); 185 void CompositeSpanRGB24_11(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 186 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 187 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 188 FX_LPBYTE dest_extra_alpha_scan); 189 void CompositeSpanRGB24_14(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 190 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 191 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 192 FX_LPBYTE dest_extra_alpha_scan); 193 void CompositeSpanRGB24_15(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 194 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 195 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 196 FX_LPBYTE dest_extra_alpha_scan); 197 198 /*----------------------------------------------------------------------------------------------------------*/ 199 200 // A general alpha merge function (with clipping mask). Cmyka/Cmyk device. 201 void CompositeSpanCMYK(FX_LPBYTE dest_scan, FX_LPBYTE ori_scan,int Bpp, 202 int span_left, int span_len, int span_top, FX_BYTE cover_scan, 203 int clip_top, int clip_left, int clip_right, FX_LPBYTE clip_scan, 204 FX_LPBYTE dest_extra_alpha_scan); 205 206 207 //-------------------------------------------------------------------- 208 FX_BOOL Init(CFX_DIBitmap* pDevice, CFX_DIBitmap* pOriDevice, const CFX_ClipRgn* pClipRgn, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bRgbByteOrder, 209 int alpha_flag = 0, void* pIccTransform = NULL); //The alpha flag must be fill_flag if exist. 210}; 211class CFX_SkiaA8Renderer : public SkBlitter 212{ 213public: 214 //-------------------------------------------------------------------- 215 virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]); 216 virtual void blitH(int x, int y, int width); 217 virtual void blitV(int x, int y, int height, SkAlpha alpha); 218 virtual void blitRect(int x, int y, int width, int height); 219 virtual void blitAntiRect(int x, int y, int width, int height, SkAlpha leftAlpha, SkAlpha rightAlpha); 220 //-------------------------------------------------------------------- 221 FX_BOOL Init(CFX_DIBitmap* pDevice, int Left, int Top); 222 CFX_DIBitmap* m_pDevice; 223 int m_Left; 224 int m_Top; 225 int m_dstWidth; 226 int m_dstHeight; 227}; 228#endif 229 230#endif // CORE_SRC_FXGE_SKIA_FX_SKIA_BLITTER_NEW_H_ 231