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 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_SRC_FPDFAPI_FPDF_RENDER_RENDER_INT_H_ 8 #define CORE_SRC_FPDFAPI_FPDF_RENDER_RENDER_INT_H_ 9 10 #include "../../../include/fpdfapi/fpdf_pageobj.h" 11 12 class CPDF_QuickStretcher; 13 #define TYPE3_MAX_BLUES 16 14 class CPDF_Type3Glyphs 15 { 16 public: CPDF_Type3Glyphs()17 CPDF_Type3Glyphs() 18 { 19 m_GlyphMap.InitHashTable(253); 20 m_TopBlueCount = m_BottomBlueCount = 0; 21 } 22 ~CPDF_Type3Glyphs(); 23 CFX_MapPtrToPtr m_GlyphMap; 24 void AdjustBlue(FX_FLOAT top, FX_FLOAT bottom, int& top_line, int& bottom_line); 25 26 int m_TopBlue[TYPE3_MAX_BLUES], m_BottomBlue[TYPE3_MAX_BLUES]; 27 int m_TopBlueCount, m_BottomBlueCount; 28 }; 29 class CFX_GlyphBitmap; 30 class CPDF_Type3Cache 31 { 32 public: CPDF_Type3Cache(CPDF_Type3Font * pFont)33 CPDF_Type3Cache(CPDF_Type3Font* pFont) 34 { 35 m_pFont = pFont; 36 } 37 ~CPDF_Type3Cache(); 38 CFX_GlyphBitmap* LoadGlyph(FX_DWORD charcode, const CFX_AffineMatrix* pMatrix, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f); 39 protected: 40 CFX_GlyphBitmap* RenderGlyph(CPDF_Type3Glyphs* pSize, FX_DWORD charcode, const CFX_AffineMatrix* pMatrix, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f); 41 CPDF_Type3Font* m_pFont; 42 CFX_MapByteStringToPtr m_SizeMap; 43 }; 44 class CPDF_TransferFunc 45 { 46 public: 47 CPDF_Document* m_pPDFDoc; 48 FX_BYTE m_Samples[256 * 3]; 49 FX_BOOL m_bIdentity; 50 51 CFX_DIBSource* TranslateImage(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc); 52 FX_COLORREF TranslateColor(FX_COLORREF src); 53 }; 54 typedef CFX_MapPtrTemplate<CPDF_Font*, CPDF_CountedObject<CPDF_Type3Cache*>*> CPDF_Type3CacheMap; 55 typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedObject<CPDF_TransferFunc*>*> CPDF_TransferFuncMap; 56 class CPDF_DocRenderData 57 { 58 public: 59 CPDF_DocRenderData(CPDF_Document* pPDFDoc = NULL); 60 ~CPDF_DocRenderData(); 61 FX_BOOL Initialize(); 62 CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont); 63 CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObj); GetFontCache()64 CFX_FontCache* GetFontCache() 65 { 66 return m_pFontCache; 67 } 68 void Clear(FX_BOOL bRelease = FALSE); 69 void ReleaseCachedType3(CPDF_Type3Font* pFont); 70 void ReleaseTransferFunc(CPDF_Object* pObj); 71 private: 72 CPDF_Document* m_pPDFDoc; 73 CFX_FontCache* m_pFontCache; 74 CPDF_Type3CacheMap m_Type3FaceMap; 75 CPDF_TransferFuncMap m_TransferFuncMap; 76 }; 77 struct _PDF_RenderItem { 78 public: 79 CPDF_PageObjects* m_pObjectList; 80 CFX_AffineMatrix m_Matrix; 81 }; 82 typedef CFX_ArrayTemplate<_PDF_RenderItem> CPDF_RenderLayer; 83 class IPDF_ObjectRenderer 84 { 85 public: 86 static IPDF_ObjectRenderer* Create(int type); ~IPDF_ObjectRenderer()87 virtual ~IPDF_ObjectRenderer() {} 88 virtual FX_BOOL Start(CPDF_RenderStatus* pRenderStatus, const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStdCS, int blendType = FXDIB_BLEND_NORMAL) = 0; 89 virtual FX_BOOL Continue(IFX_Pause* pPause) = 0; 90 FX_BOOL m_Result; 91 }; 92 class CPDF_RenderStatus 93 { 94 public: 95 CPDF_RenderStatus(); 96 ~CPDF_RenderStatus(); 97 FX_BOOL Initialize(class CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pDeviceMatrix, 98 const CPDF_PageObject* pStopObj, const CPDF_RenderStatus* pParentStatus, 99 const CPDF_GraphicStates* pInitialStates, const CPDF_RenderOptions* pOptions, 100 int transparency, FX_BOOL bDropObjects, CPDF_Dictionary* pFormResource = NULL, 101 FX_BOOL bStdCS = FALSE, CPDF_Type3Char* pType3Char = NULL, FX_ARGB fill_color = 0, 102 FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE); 103 void RenderObjectList(const CPDF_PageObjects* pObjs, const CFX_AffineMatrix* pObj2Device); 104 void RenderSingleObject(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device); 105 FX_BOOL ContinueSingleObject(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, IFX_Pause* pPause); 106 CPDF_RenderOptions m_Options; 107 CPDF_Dictionary* m_pFormResource; 108 CPDF_Dictionary* m_pPageResource; 109 CFX_PtrArray m_Type3FontCache; GetContext()110 CPDF_RenderContext* GetContext() 111 { 112 return m_pContext; 113 } 114 protected: 115 friend class CPDF_ImageRenderer; 116 friend class CPDF_RenderContext; 117 void ProcessClipPath(CPDF_ClipPath ClipPath, const CFX_AffineMatrix* pObj2Device); 118 void DrawClipPath(CPDF_ClipPath ClipPath, const CFX_AffineMatrix* pObj2Device); 119 FX_BOOL ProcessTransparency(const CPDF_PageObject* PageObj, const CFX_AffineMatrix* pObj2Device); 120 void ProcessObjectNoClip(const CPDF_PageObject* PageObj, const CFX_AffineMatrix* pObj2Device); 121 void DrawObjWithBackground(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device); 122 FX_BOOL DrawObjWithBlend(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device); 123 FX_BOOL ProcessPath(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device); 124 void ProcessPathPattern(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, int& filltype, FX_BOOL& bStroke); 125 void DrawPathWithPattern(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, CPDF_Color* pColor, FX_BOOL bStroke); 126 void DrawTilingPattern(CPDF_TilingPattern* pPattern, CPDF_PageObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke); 127 void DrawShadingPattern(CPDF_ShadingPattern* pPattern, CPDF_PageObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke); 128 FX_BOOL SelectClipPath(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke); 129 FX_BOOL ProcessImage(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pObj2Device); 130 FX_BOOL OutputBitmapAlpha(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pImage2Device); 131 FX_BOOL OutputImage(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pImage2Device); 132 FX_BOOL OutputDIBSource(const CFX_DIBSource* pOutputBitmap, FX_ARGB fill_argb, int bitmap_alpha, 133 const CFX_AffineMatrix* pImage2Device, CPDF_ImageCache* pImageCache, FX_DWORD flags); 134 void CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, int left, int top, FX_ARGB mask_argb, 135 int bitmap_alpha, int blend_mode, int bIsolated); 136 FX_BOOL ProcessInlines(CPDF_InlineImages* pInlines, const CFX_AffineMatrix* pObj2Device); 137 FX_BOOL ProcessShading(CPDF_ShadingObject* pShadingObj, const CFX_AffineMatrix* pObj2Device); 138 void DrawShading(CPDF_ShadingPattern* pPattern, CFX_AffineMatrix* pMatrix, FX_RECT& clip_rect, 139 int alpha, FX_BOOL bAlphaMode); 140 FX_BOOL ProcessType3Text(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device); 141 FX_BOOL ProcessText(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device, CFX_PathData* pClippingPath); 142 void DrawTextPathWithPattern(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device, 143 CPDF_Font* pFont, FX_FLOAT font_size, 144 const CFX_AffineMatrix* pTextMatrix, FX_BOOL bFill, FX_BOOL bStroke); 145 FX_BOOL ProcessForm(CPDF_FormObject* pFormObj, const CFX_AffineMatrix* pObj2Device); 146 CFX_DIBitmap* GetBackdrop(const CPDF_PageObject* pObj, const FX_RECT& rect, int& left, int& top, 147 FX_BOOL bBackAlphaRequired); 148 CFX_DIBitmap* LoadSMask(CPDF_Dictionary* pSMaskDict, FX_RECT* pClipRect, const CFX_AffineMatrix* pMatrix); 149 void Init(CPDF_RenderContext* pParent); 150 static class CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont); 151 static CPDF_GraphicStates* CloneObjStates(const CPDF_GraphicStates* pPathObj, FX_BOOL bStroke); 152 CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObject) const; 153 FX_ARGB GetFillArgb(const CPDF_PageObject* pObj, FX_BOOL bType3 = FALSE) const; 154 FX_ARGB GetStrokeArgb(const CPDF_PageObject* pObj) const; 155 CPDF_RenderContext* m_pContext; 156 FX_BOOL m_bStopped; 157 void DitherObjectArea(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device); 158 FX_BOOL GetObjectClippedRect(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bLogical, FX_RECT &rect) const; 159 void GetScaledMatrix(CFX_Matrix &matrix) const; 160 161 protected: 162 static const int kRenderMaxRecursionDepth = 64; 163 static int s_CurrentRecursionDepth; 164 165 CFX_RenderDevice* m_pDevice; 166 CFX_AffineMatrix m_DeviceMatrix; 167 CPDF_ClipPath m_LastClipPath; 168 const CPDF_PageObject* m_pCurObj; 169 const CPDF_PageObject* m_pStopObj; 170 CPDF_GraphicStates m_InitialStates; 171 int m_HalftoneLimit; 172 IPDF_ObjectRenderer* m_pObjectRenderer; 173 FX_BOOL m_bPrint; 174 int m_Transparency; 175 int m_DitherBits; 176 FX_BOOL m_bDropObjects; 177 FX_BOOL m_bStdCS; 178 FX_DWORD m_GroupFamily; 179 FX_BOOL m_bLoadMask; 180 CPDF_Type3Char * m_pType3Char; 181 FX_ARGB m_T3FillColor; 182 int m_curBlend; 183 }; 184 class CPDF_ImageLoader 185 { 186 public: CPDF_ImageLoader()187 CPDF_ImageLoader() 188 { 189 m_pBitmap = NULL; 190 m_pMask = NULL; 191 m_MatteColor = 0; 192 m_bCached = FALSE; 193 m_nDownsampleWidth = 0; 194 m_nDownsampleHeight = 0; 195 } 196 197 FX_BOOL Load(const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL); 198 199 FX_BOOL StartLoadImage(const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_LPVOID& LoadHandle, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, FX_INT32 nDownsampleWidth = 0, FX_INT32 nDownsampleHeight = 0); 200 FX_BOOL Continue(FX_LPVOID LoadHandle, IFX_Pause* pPause); 201 ~CPDF_ImageLoader(); 202 CFX_DIBSource* m_pBitmap; 203 CFX_DIBSource* m_pMask; 204 FX_DWORD m_MatteColor; 205 FX_BOOL m_bCached; 206 protected: 207 FX_INT32 m_nDownsampleWidth; 208 FX_INT32 m_nDownsampleHeight; 209 }; 210 class CPDF_ProgressiveImageLoaderHandle 211 { 212 public: 213 CPDF_ProgressiveImageLoaderHandle(); 214 ~CPDF_ProgressiveImageLoaderHandle(); 215 216 FX_BOOL Start(CPDF_ImageLoader* pImageLoader, const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, FX_INT32 nDownsampleWidth = 0, FX_INT32 nDownsampleHeight = 0); 217 FX_BOOL Continue(IFX_Pause* pPause); 218 protected: 219 CPDF_ImageLoader* m_pImageLoader; 220 CPDF_PageRenderCache* m_pCache; 221 CPDF_ImageObject* m_pImage; 222 FX_INT32 m_nDownsampleWidth; 223 FX_INT32 m_nDownsampleHeight; 224 }; 225 class CFX_ImageTransformer; 226 class CPDF_ImageRenderer : public IPDF_ObjectRenderer 227 { 228 public: 229 CPDF_ImageRenderer(); 230 ~CPDF_ImageRenderer(); 231 FX_BOOL Start(CPDF_RenderStatus* pStatus, const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStdCS, int blendType = FXDIB_BLEND_NORMAL); 232 FX_BOOL Start(CPDF_RenderStatus* pStatus, const CFX_DIBSource* pDIBSource, FX_ARGB bitmap_argb, 233 int bitmap_alpha, const CFX_AffineMatrix* pImage2Device, FX_DWORD flags, FX_BOOL bStdCS, int blendType = FXDIB_BLEND_NORMAL); 234 FX_BOOL Continue(IFX_Pause* pPause); 235 protected: 236 CPDF_RenderStatus* m_pRenderStatus; 237 CPDF_ImageObject* m_pImageObject; 238 int m_Status; 239 const CFX_AffineMatrix* m_pObj2Device; 240 CFX_AffineMatrix m_ImageMatrix; 241 CPDF_ImageLoader m_Loader; 242 const CFX_DIBSource* m_pDIBSource; 243 CFX_DIBitmap* m_pClone; 244 int m_BitmapAlpha; 245 FX_BOOL m_bPatternColor; 246 CPDF_Pattern* m_pPattern; 247 FX_ARGB m_FillArgb; 248 FX_DWORD m_Flags; 249 CPDF_QuickStretcher* m_pQuickStretcher; 250 CFX_ImageTransformer* m_pTransformer; 251 CPDF_ImageRenderer* m_pRenderer2; 252 FX_LPVOID m_DeviceHandle; 253 FX_LPVOID m_LoadHandle; 254 FX_BOOL m_bStdCS; 255 int m_BlendType; 256 FX_BOOL StartBitmapAlpha(); 257 FX_BOOL StartDIBSource(); 258 FX_BOOL StartRenderDIBSource(); 259 FX_BOOL StartLoadDIBSource(); 260 FX_BOOL DrawMaskedImage(); 261 FX_BOOL DrawPatternImage(const CFX_Matrix* pObj2Device); 262 }; 263 class CPDF_ScaledRenderBuffer 264 { 265 public: 266 CPDF_ScaledRenderBuffer(); 267 ~CPDF_ScaledRenderBuffer(); 268 FX_BOOL Initialize(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, FX_RECT* pRect, 269 const CPDF_PageObject* pObj, const CPDF_RenderOptions *pOptions = NULL, int max_dpi = 0); GetDevice()270 CFX_RenderDevice* GetDevice() 271 { 272 return m_pBitmapDevice ? m_pBitmapDevice : m_pDevice; 273 } GetMatrix()274 CFX_AffineMatrix* GetMatrix() 275 { 276 return &m_Matrix; 277 } 278 void OutputToDevice(); 279 private: 280 CFX_RenderDevice* m_pDevice; 281 CPDF_RenderContext* m_pContext; 282 FX_RECT m_Rect; 283 const CPDF_PageObject* m_pObject; 284 CFX_FxgeDevice* m_pBitmapDevice; 285 CFX_AffineMatrix m_Matrix; 286 }; 287 class ICodec_ScanlineDecoder; 288 class CPDF_QuickStretcher 289 { 290 public: 291 CPDF_QuickStretcher(); 292 ~CPDF_QuickStretcher(); 293 FX_BOOL Start(CPDF_ImageObject* pImageObj, CFX_AffineMatrix* pImage2Device, const FX_RECT* pClipBox); 294 FX_BOOL Continue(IFX_Pause* pPause); 295 CFX_DIBitmap* m_pBitmap; 296 int m_ResultLeft, m_ResultTop, m_ClipLeft, m_ClipTop; 297 int m_DestWidth, m_DestHeight, m_ResultWidth, m_ResultHeight; 298 int m_Bpp, m_SrcWidth, m_SrcHeight; 299 FX_BOOL m_bFlipX, m_bFlipY; 300 CPDF_ColorSpace* m_pCS; 301 ICodec_ScanlineDecoder* m_pDecoder; 302 CPDF_StreamAcc m_StreamAcc; 303 int m_LineIndex; 304 }; 305 class CPDF_DeviceBuffer 306 { 307 public: 308 CPDF_DeviceBuffer(); 309 ~CPDF_DeviceBuffer(); 310 FX_BOOL Initialize(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, FX_RECT* pRect, 311 const CPDF_PageObject* pObj, int max_dpi = 0); 312 void OutputToDevice(); GetBitmap()313 CFX_DIBitmap* GetBitmap() const 314 { 315 return m_pBitmap; 316 } GetMatrix()317 const CFX_AffineMatrix* GetMatrix() const 318 { 319 return &m_Matrix; 320 } 321 private: 322 CFX_RenderDevice* m_pDevice; 323 CPDF_RenderContext* m_pContext; 324 FX_RECT m_Rect; 325 const CPDF_PageObject* m_pObject; 326 CFX_DIBitmap* m_pBitmap; 327 CFX_AffineMatrix m_Matrix; 328 }; 329 class CPDF_ImageCache 330 { 331 public: 332 CPDF_ImageCache(CPDF_Document* pDoc, CPDF_Stream* pStream); 333 ~CPDF_ImageCache(); 334 void ClearImageData(); 335 void Reset(const CFX_DIBitmap* pBitmap); 336 FX_BOOL GetCachedBitmap(CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor, CPDF_Dictionary* pPageResources, 337 FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, 338 CPDF_RenderStatus* pRenderStatus = NULL, FX_INT32 downsampleWidth = 0, FX_INT32 downsampleHeight = 0); EstimateSize()339 FX_DWORD EstimateSize() const 340 { 341 return m_dwCacheSize; 342 } GetTimeCount()343 FX_DWORD GetTimeCount() const 344 { 345 return m_dwTimeCount; 346 } GetStream()347 CPDF_Stream* GetStream() const 348 { 349 return m_pStream; 350 } SetTimeCount(FX_DWORD dwTimeCount)351 void SetTimeCount(FX_DWORD dwTimeCount) 352 { 353 m_dwTimeCount = dwTimeCount; 354 } 355 int m_dwTimeCount; 356 public: 357 int StartGetCachedBitmap(CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, 358 FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, 359 FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, FX_INT32 downsampleWidth = 0, FX_INT32 downsampleHeight = 0); 360 int Continue(IFX_Pause* pPause); 361 int ContinueGetCachedBitmap(); 362 CFX_DIBSource* DetachBitmap(); 363 CFX_DIBSource* DetachMask(); 364 CFX_DIBSource* m_pCurBitmap; 365 CFX_DIBSource* m_pCurMask; 366 FX_DWORD m_MatteColor; 367 CPDF_RenderStatus* m_pRenderStatus; 368 protected: 369 CPDF_Document* m_pDocument; 370 CPDF_Stream* m_pStream; 371 CFX_DIBSource* m_pCachedBitmap; 372 CFX_DIBSource* m_pCachedMask; 373 FX_DWORD m_dwCacheSize; 374 void CalcSize(); 375 }; 376 typedef struct { 377 FX_FLOAT m_DecodeMin; 378 FX_FLOAT m_DecodeStep; 379 int m_ColorKeyMin; 380 int m_ColorKeyMax; 381 } DIB_COMP_DATA; 382 class CPDF_DIBSource : public CFX_DIBSource 383 { 384 public: 385 CPDF_DIBSource(); 386 virtual ~CPDF_DIBSource(); 387 FX_BOOL Load(CPDF_Document* pDoc, const CPDF_Stream* pStream, 388 CPDF_DIBSource** ppMask, FX_DWORD* pMatteColor, 389 CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, 390 FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE); 391 virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const; 392 virtual FX_LPBYTE GetBuffer() const; 393 virtual FX_LPCBYTE GetScanline(int line) const; 394 virtual void DownSampleScanline(int line, FX_LPBYTE dest_scan, int dest_bpp, 395 int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const; 396 virtual void SetDownSampleSize(int dest_width, int dest_height) const; 397 CFX_DIBitmap* GetBitmap() const; 398 void ReleaseBitmap(CFX_DIBitmap*) const; 399 void ClearImageData(); 400 public: 401 int StartLoadDIBSource(CPDF_Document* pDoc, const CPDF_Stream* pStream, FX_BOOL bHasMask, 402 CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, 403 FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE); 404 int ContinueLoadDIBSource(IFX_Pause* pPause); 405 int StratLoadMask(); 406 int StartLoadMaskDIB(); 407 int ContinueLoadMaskDIB(IFX_Pause* pPause); 408 int ContinueToLoadMask(); 409 CPDF_DIBSource* DetachMask(); 410 CPDF_DIBSource* m_pMask; 411 FX_DWORD m_MatteColor; 412 FX_LPVOID m_pJbig2Context; 413 CPDF_StreamAcc* m_pGlobalStream; 414 FX_BOOL m_bStdCS; 415 int m_Status; 416 CPDF_Object* m_pMaskStream; 417 FX_BOOL m_bHasMask; 418 protected: 419 FX_BOOL LoadColorInfo(CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources); 420 DIB_COMP_DATA* GetDecodeAndMaskArray(FX_BOOL& bDefaultDecode, FX_BOOL& bColorKey); 421 CPDF_DIBSource* LoadMask(FX_DWORD& MatteColor); 422 CPDF_DIBSource* LoadMaskDIB(CPDF_Stream* pMask); 423 void LoadJpxBitmap(); 424 void LoadPalette(); 425 int CreateDecoder(); 426 void TranslateScanline24bpp(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan) const; 427 void ValidateDictParam(); 428 CPDF_Document* m_pDocument; 429 const CPDF_Stream* m_pStream; 430 CPDF_StreamAcc* m_pStreamAcc; 431 const CPDF_Dictionary* m_pDict; 432 CPDF_ColorSpace* m_pColorSpace; 433 FX_DWORD m_Family; 434 FX_DWORD m_bpc; 435 FX_DWORD m_bpc_orig; 436 FX_DWORD m_nComponents; 437 FX_DWORD m_GroupFamily; 438 FX_BOOL m_bLoadMask; 439 FX_BOOL m_bDefaultDecode; 440 FX_BOOL m_bImageMask; 441 FX_BOOL m_bDoBpcCheck; 442 FX_BOOL m_bColorKey; 443 DIB_COMP_DATA* m_pCompData; 444 FX_LPBYTE m_pLineBuf; 445 FX_LPBYTE m_pMaskedLine; 446 CFX_DIBitmap* m_pCachedBitmap; 447 ICodec_ScanlineDecoder* m_pDecoder; 448 }; 449 #define FPDF_HUGE_IMAGE_SIZE 60000000 450 class CPDF_DIBTransferFunc : public CFX_FilteredDIB 451 { 452 public: 453 CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFunc); 454 virtual FXDIB_Format GetDestFormat(); GetDestPalette()455 virtual FX_ARGB* GetDestPalette() 456 { 457 return NULL; 458 } 459 virtual void TranslateScanline(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf) const; 460 virtual void TranslateDownSamples(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf, int pixels, int Bpp) const; 461 FX_LPCBYTE m_RampR; 462 FX_LPCBYTE m_RampG; 463 FX_LPCBYTE m_RampB; 464 }; 465 struct _CPDF_UniqueKeyGen { 466 void Generate(int count, ...); 467 FX_CHAR m_Key[128]; 468 int m_KeyLen; 469 }; 470 471 #endif // CORE_SRC_FPDFAPI_FPDF_RENDER_RENDER_INT_H_ 472