| // Copyright 2014 PDFium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
| #ifndef CORE_SRC_FPDFAPI_FPDF_RENDER_RENDER_INT_H_ | |
| #define CORE_SRC_FPDFAPI_FPDF_RENDER_RENDER_INT_H_ | |
| #include <map> | |
| #include "core/include/fpdfapi/fpdf_pageobj.h" | |
| #include "core/include/fpdfapi/fpdf_render.h" | |
| #include "third_party/base/nonstd_unique_ptr.h" | |
| class CFX_GlyphBitmap; | |
| class CPDF_ImageCache; | |
| class CPDF_QuickStretcher; | |
| #define TYPE3_MAX_BLUES 16 | |
| class CPDF_Type3Glyphs { | |
| public: | |
| CPDF_Type3Glyphs() { | |
| m_GlyphMap.InitHashTable(253); | |
| m_TopBlueCount = m_BottomBlueCount = 0; | |
| } | |
| ~CPDF_Type3Glyphs(); | |
| CFX_MapPtrToPtr m_GlyphMap; | |
| void AdjustBlue(FX_FLOAT top, | |
| FX_FLOAT bottom, | |
| int& top_line, | |
| int& bottom_line); | |
| int m_TopBlue[TYPE3_MAX_BLUES], m_BottomBlue[TYPE3_MAX_BLUES]; | |
| int m_TopBlueCount, m_BottomBlueCount; | |
| }; | |
| class CPDF_Type3Cache { | |
| public: | |
| explicit CPDF_Type3Cache(CPDF_Type3Font* pFont) : m_pFont(pFont) {} | |
| ~CPDF_Type3Cache(); | |
| CFX_GlyphBitmap* LoadGlyph(FX_DWORD charcode, | |
| const CFX_AffineMatrix* pMatrix, | |
| FX_FLOAT retinaScaleX = 1.0f, | |
| FX_FLOAT retinaScaleY = 1.0f); | |
| protected: | |
| CFX_GlyphBitmap* RenderGlyph(CPDF_Type3Glyphs* pSize, | |
| FX_DWORD charcode, | |
| const CFX_AffineMatrix* pMatrix, | |
| FX_FLOAT retinaScaleX = 1.0f, | |
| FX_FLOAT retinaScaleY = 1.0f); | |
| CPDF_Type3Font* const m_pFont; | |
| std::map<CFX_ByteString, CPDF_Type3Glyphs*> m_SizeMap; | |
| }; | |
| class CPDF_TransferFunc { | |
| public: | |
| explicit CPDF_TransferFunc(CPDF_Document* pDoc); | |
| FX_COLORREF TranslateColor(FX_COLORREF src) const; | |
| CFX_DIBSource* TranslateImage(const CFX_DIBSource* pSrc, | |
| FX_BOOL bAutoDropSrc); | |
| CPDF_Document* const m_pPDFDoc; | |
| FX_BOOL m_bIdentity; | |
| uint8_t m_Samples[256 * 3]; | |
| }; | |
| class CPDF_DocRenderData { | |
| public: | |
| CPDF_DocRenderData(CPDF_Document* pPDFDoc = NULL); | |
| ~CPDF_DocRenderData(); | |
| CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont); | |
| CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObj); | |
| CFX_FontCache* GetFontCache() { return m_pFontCache; } | |
| void Clear(FX_BOOL bRelease = FALSE); | |
| void ReleaseCachedType3(CPDF_Type3Font* pFont); | |
| void ReleaseTransferFunc(CPDF_Object* pObj); | |
| private: | |
| using CPDF_Type3CacheMap = | |
| std::map<CPDF_Font*, CPDF_CountedObject<CPDF_Type3Cache>*>; | |
| using CPDF_TransferFuncMap = | |
| std::map<CPDF_Object*, CPDF_CountedObject<CPDF_TransferFunc>*>; | |
| CPDF_Document* m_pPDFDoc; | |
| CFX_FontCache* m_pFontCache; | |
| CPDF_Type3CacheMap m_Type3FaceMap; | |
| CPDF_TransferFuncMap m_TransferFuncMap; | |
| }; | |
| struct _PDF_RenderItem { | |
| public: | |
| CPDF_PageObjects* m_pObjectList; | |
| CFX_AffineMatrix m_Matrix; | |
| }; | |
| typedef CFX_ArrayTemplate<_PDF_RenderItem> CPDF_RenderLayer; | |
| class IPDF_ObjectRenderer { | |
| public: | |
| static IPDF_ObjectRenderer* Create(int type); | |
| virtual ~IPDF_ObjectRenderer() {} | |
| virtual FX_BOOL Start(CPDF_RenderStatus* pRenderStatus, | |
| const CPDF_PageObject* pObj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| FX_BOOL bStdCS, | |
| int blendType = FXDIB_BLEND_NORMAL) = 0; | |
| virtual FX_BOOL Continue(IFX_Pause* pPause) = 0; | |
| FX_BOOL m_Result; | |
| }; | |
| class CPDF_RenderStatus { | |
| public: | |
| CPDF_RenderStatus(); | |
| ~CPDF_RenderStatus(); | |
| FX_BOOL Initialize(class CPDF_RenderContext* pContext, | |
| CFX_RenderDevice* pDevice, | |
| const CFX_AffineMatrix* pDeviceMatrix, | |
| const CPDF_PageObject* pStopObj, | |
| const CPDF_RenderStatus* pParentStatus, | |
| const CPDF_GraphicStates* pInitialStates, | |
| const CPDF_RenderOptions* pOptions, | |
| int transparency, | |
| FX_BOOL bDropObjects, | |
| CPDF_Dictionary* pFormResource = NULL, | |
| FX_BOOL bStdCS = FALSE, | |
| CPDF_Type3Char* pType3Char = NULL, | |
| FX_ARGB fill_color = 0, | |
| FX_DWORD GroupFamily = 0, | |
| FX_BOOL bLoadMask = FALSE); | |
| void RenderObjectList(const CPDF_PageObjects* pObjs, | |
| const CFX_AffineMatrix* pObj2Device); | |
| void RenderSingleObject(const CPDF_PageObject* pObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| FX_BOOL ContinueSingleObject(const CPDF_PageObject* pObj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| IFX_Pause* pPause); | |
| CPDF_RenderOptions m_Options; | |
| CPDF_Dictionary* m_pFormResource; | |
| CPDF_Dictionary* m_pPageResource; | |
| CFX_PtrArray m_Type3FontCache; | |
| CPDF_RenderContext* GetContext() { return m_pContext; } | |
| protected: | |
| friend class CPDF_ImageRenderer; | |
| friend class CPDF_RenderContext; | |
| void ProcessClipPath(CPDF_ClipPath ClipPath, | |
| const CFX_AffineMatrix* pObj2Device); | |
| void DrawClipPath(CPDF_ClipPath ClipPath, | |
| const CFX_AffineMatrix* pObj2Device); | |
| FX_BOOL ProcessTransparency(const CPDF_PageObject* PageObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| void ProcessObjectNoClip(const CPDF_PageObject* PageObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| void DrawObjWithBackground(const CPDF_PageObject* pObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| FX_BOOL DrawObjWithBlend(const CPDF_PageObject* pObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| FX_BOOL ProcessPath(CPDF_PathObject* pPathObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| void ProcessPathPattern(CPDF_PathObject* pPathObj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| int& filltype, | |
| FX_BOOL& bStroke); | |
| void DrawPathWithPattern(CPDF_PathObject* pPathObj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| CPDF_Color* pColor, | |
| FX_BOOL bStroke); | |
| void DrawTilingPattern(CPDF_TilingPattern* pPattern, | |
| CPDF_PageObject* pPageObj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| FX_BOOL bStroke); | |
| void DrawShadingPattern(CPDF_ShadingPattern* pPattern, | |
| CPDF_PageObject* pPageObj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| FX_BOOL bStroke); | |
| FX_BOOL SelectClipPath(CPDF_PathObject* pPathObj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| FX_BOOL bStroke); | |
| FX_BOOL ProcessImage(CPDF_ImageObject* pImageObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| FX_BOOL OutputBitmapAlpha(CPDF_ImageObject* pImageObj, | |
| const CFX_AffineMatrix* pImage2Device); | |
| FX_BOOL OutputImage(CPDF_ImageObject* pImageObj, | |
| const CFX_AffineMatrix* pImage2Device); | |
| FX_BOOL OutputDIBSource(const CFX_DIBSource* pOutputBitmap, | |
| FX_ARGB fill_argb, | |
| int bitmap_alpha, | |
| const CFX_AffineMatrix* pImage2Device, | |
| CPDF_ImageCache* pImageCache, | |
| FX_DWORD flags); | |
| void CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, | |
| int left, | |
| int top, | |
| FX_ARGB mask_argb, | |
| int bitmap_alpha, | |
| int blend_mode, | |
| int bIsolated); | |
| FX_BOOL ProcessShading(CPDF_ShadingObject* pShadingObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| void DrawShading(CPDF_ShadingPattern* pPattern, | |
| CFX_AffineMatrix* pMatrix, | |
| FX_RECT& clip_rect, | |
| int alpha, | |
| FX_BOOL bAlphaMode); | |
| FX_BOOL ProcessType3Text(const CPDF_TextObject* textobj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| FX_BOOL ProcessText(const CPDF_TextObject* textobj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| CFX_PathData* pClippingPath); | |
| void DrawTextPathWithPattern(const CPDF_TextObject* textobj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| CPDF_Font* pFont, | |
| FX_FLOAT font_size, | |
| const CFX_AffineMatrix* pTextMatrix, | |
| FX_BOOL bFill, | |
| FX_BOOL bStroke); | |
| FX_BOOL ProcessForm(CPDF_FormObject* pFormObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| CFX_DIBitmap* GetBackdrop(const CPDF_PageObject* pObj, | |
| const FX_RECT& rect, | |
| int& left, | |
| int& top, | |
| FX_BOOL bBackAlphaRequired); | |
| CFX_DIBitmap* LoadSMask(CPDF_Dictionary* pSMaskDict, | |
| FX_RECT* pClipRect, | |
| const CFX_AffineMatrix* pMatrix); | |
| void Init(CPDF_RenderContext* pParent); | |
| static class CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont); | |
| static CPDF_GraphicStates* CloneObjStates(const CPDF_GraphicStates* pPathObj, | |
| FX_BOOL bStroke); | |
| CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObject) const; | |
| FX_ARGB GetFillArgb(const CPDF_PageObject* pObj, | |
| FX_BOOL bType3 = FALSE) const; | |
| FX_ARGB GetStrokeArgb(const CPDF_PageObject* pObj) const; | |
| CPDF_RenderContext* m_pContext; | |
| FX_BOOL m_bStopped; | |
| void DitherObjectArea(const CPDF_PageObject* pObj, | |
| const CFX_AffineMatrix* pObj2Device); | |
| FX_BOOL GetObjectClippedRect(const CPDF_PageObject* pObj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| FX_BOOL bLogical, | |
| FX_RECT& rect) const; | |
| void GetScaledMatrix(CFX_Matrix& matrix) const; | |
| protected: | |
| static const int kRenderMaxRecursionDepth = 64; | |
| static int s_CurrentRecursionDepth; | |
| CFX_RenderDevice* m_pDevice; | |
| CFX_AffineMatrix m_DeviceMatrix; | |
| CPDF_ClipPath m_LastClipPath; | |
| const CPDF_PageObject* m_pCurObj; | |
| const CPDF_PageObject* m_pStopObj; | |
| CPDF_GraphicStates m_InitialStates; | |
| int m_HalftoneLimit; | |
| nonstd::unique_ptr<IPDF_ObjectRenderer> m_pObjectRenderer; | |
| FX_BOOL m_bPrint; | |
| int m_Transparency; | |
| int m_DitherBits; | |
| FX_BOOL m_bDropObjects; | |
| FX_BOOL m_bStdCS; | |
| FX_DWORD m_GroupFamily; | |
| FX_BOOL m_bLoadMask; | |
| CPDF_Type3Char* m_pType3Char; | |
| FX_ARGB m_T3FillColor; | |
| int m_curBlend; | |
| }; | |
| class CPDF_ImageLoader { | |
| public: | |
| CPDF_ImageLoader() { | |
| m_pBitmap = NULL; | |
| m_pMask = NULL; | |
| m_MatteColor = 0; | |
| m_bCached = FALSE; | |
| m_nDownsampleWidth = 0; | |
| m_nDownsampleHeight = 0; | |
| } | |
| 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); | |
| FX_BOOL StartLoadImage(const CPDF_ImageObject* pImage, | |
| CPDF_PageRenderCache* pCache, | |
| void*& LoadHandle, | |
| FX_BOOL bStdCS = FALSE, | |
| FX_DWORD GroupFamily = 0, | |
| FX_BOOL bLoadMask = FALSE, | |
| CPDF_RenderStatus* pRenderStatus = NULL, | |
| int32_t nDownsampleWidth = 0, | |
| int32_t nDownsampleHeight = 0); | |
| FX_BOOL Continue(void* LoadHandle, IFX_Pause* pPause); | |
| ~CPDF_ImageLoader(); | |
| CFX_DIBSource* m_pBitmap; | |
| CFX_DIBSource* m_pMask; | |
| FX_DWORD m_MatteColor; | |
| FX_BOOL m_bCached; | |
| protected: | |
| int32_t m_nDownsampleWidth; | |
| int32_t m_nDownsampleHeight; | |
| }; | |
| class CPDF_ProgressiveImageLoaderHandle { | |
| public: | |
| CPDF_ProgressiveImageLoaderHandle(); | |
| ~CPDF_ProgressiveImageLoaderHandle(); | |
| 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, | |
| int32_t nDownsampleWidth = 0, | |
| int32_t nDownsampleHeight = 0); | |
| FX_BOOL Continue(IFX_Pause* pPause); | |
| protected: | |
| CPDF_ImageLoader* m_pImageLoader; | |
| CPDF_PageRenderCache* m_pCache; | |
| CPDF_ImageObject* m_pImage; | |
| int32_t m_nDownsampleWidth; | |
| int32_t m_nDownsampleHeight; | |
| }; | |
| class CFX_ImageTransformer; | |
| class CPDF_ImageRenderer : public IPDF_ObjectRenderer { | |
| public: | |
| CPDF_ImageRenderer(); | |
| ~CPDF_ImageRenderer() override; | |
| // IPDF_ObjectRenderer | |
| FX_BOOL Start(CPDF_RenderStatus* pStatus, | |
| const CPDF_PageObject* pObj, | |
| const CFX_AffineMatrix* pObj2Device, | |
| FX_BOOL bStdCS, | |
| int blendType = FXDIB_BLEND_NORMAL) override; | |
| FX_BOOL Continue(IFX_Pause* pPause) override; | |
| FX_BOOL Start(CPDF_RenderStatus* pStatus, | |
| const CFX_DIBSource* pDIBSource, | |
| FX_ARGB bitmap_argb, | |
| int bitmap_alpha, | |
| const CFX_AffineMatrix* pImage2Device, | |
| FX_DWORD flags, | |
| FX_BOOL bStdCS, | |
| int blendType = FXDIB_BLEND_NORMAL); | |
| protected: | |
| CPDF_RenderStatus* m_pRenderStatus; | |
| CPDF_ImageObject* m_pImageObject; | |
| int m_Status; | |
| const CFX_AffineMatrix* m_pObj2Device; | |
| CFX_AffineMatrix m_ImageMatrix; | |
| CPDF_ImageLoader m_Loader; | |
| const CFX_DIBSource* m_pDIBSource; | |
| CFX_DIBitmap* m_pClone; | |
| int m_BitmapAlpha; | |
| FX_BOOL m_bPatternColor; | |
| CPDF_Pattern* m_pPattern; | |
| FX_ARGB m_FillArgb; | |
| FX_DWORD m_Flags; | |
| CPDF_QuickStretcher* m_pQuickStretcher; | |
| CFX_ImageTransformer* m_pTransformer; | |
| void* m_DeviceHandle; | |
| void* m_LoadHandle; | |
| FX_BOOL m_bStdCS; | |
| int m_BlendType; | |
| FX_BOOL StartBitmapAlpha(); | |
| FX_BOOL StartDIBSource(); | |
| FX_BOOL StartRenderDIBSource(); | |
| FX_BOOL StartLoadDIBSource(); | |
| FX_BOOL DrawMaskedImage(); | |
| FX_BOOL DrawPatternImage(const CFX_Matrix* pObj2Device); | |
| }; | |
| class CPDF_ScaledRenderBuffer { | |
| public: | |
| CPDF_ScaledRenderBuffer(); | |
| ~CPDF_ScaledRenderBuffer(); | |
| FX_BOOL Initialize(CPDF_RenderContext* pContext, | |
| CFX_RenderDevice* pDevice, | |
| FX_RECT* pRect, | |
| const CPDF_PageObject* pObj, | |
| const CPDF_RenderOptions* pOptions = NULL, | |
| int max_dpi = 0); | |
| CFX_RenderDevice* GetDevice() { | |
| return m_pBitmapDevice ? m_pBitmapDevice.get() : m_pDevice; | |
| } | |
| CFX_AffineMatrix* GetMatrix() { return &m_Matrix; } | |
| void OutputToDevice(); | |
| private: | |
| CFX_RenderDevice* m_pDevice; | |
| CPDF_RenderContext* m_pContext; | |
| FX_RECT m_Rect; | |
| const CPDF_PageObject* m_pObject; | |
| nonstd::unique_ptr<CFX_FxgeDevice> m_pBitmapDevice; | |
| CFX_AffineMatrix m_Matrix; | |
| }; | |
| class ICodec_ScanlineDecoder; | |
| class CPDF_QuickStretcher { | |
| public: | |
| CPDF_QuickStretcher(); | |
| ~CPDF_QuickStretcher(); | |
| FX_BOOL Start(CPDF_ImageObject* pImageObj, | |
| CFX_AffineMatrix* pImage2Device, | |
| const FX_RECT* pClipBox); | |
| FX_BOOL Continue(IFX_Pause* pPause); | |
| CFX_DIBitmap* m_pBitmap; | |
| int m_ResultLeft, m_ResultTop, m_ClipLeft, m_ClipTop; | |
| int m_DestWidth, m_DestHeight, m_ResultWidth, m_ResultHeight; | |
| int m_Bpp, m_SrcWidth, m_SrcHeight; | |
| FX_BOOL m_bFlipX, m_bFlipY; | |
| CPDF_ColorSpace* m_pCS; | |
| ICodec_ScanlineDecoder* m_pDecoder; | |
| CPDF_StreamAcc m_StreamAcc; | |
| int m_LineIndex; | |
| }; | |
| class CPDF_DeviceBuffer { | |
| public: | |
| CPDF_DeviceBuffer(); | |
| ~CPDF_DeviceBuffer(); | |
| FX_BOOL Initialize(CPDF_RenderContext* pContext, | |
| CFX_RenderDevice* pDevice, | |
| FX_RECT* pRect, | |
| const CPDF_PageObject* pObj, | |
| int max_dpi = 0); | |
| void OutputToDevice(); | |
| CFX_DIBitmap* GetBitmap() const { return m_pBitmap.get(); } | |
| const CFX_AffineMatrix* GetMatrix() const { return &m_Matrix; } | |
| private: | |
| CFX_RenderDevice* m_pDevice; | |
| CPDF_RenderContext* m_pContext; | |
| FX_RECT m_Rect; | |
| const CPDF_PageObject* m_pObject; | |
| nonstd::unique_ptr<CFX_DIBitmap> m_pBitmap; | |
| CFX_AffineMatrix m_Matrix; | |
| }; | |
| class CPDF_ImageCache { | |
| public: | |
| CPDF_ImageCache(CPDF_Document* pDoc, CPDF_Stream* pStream); | |
| ~CPDF_ImageCache(); | |
| void ClearImageData(); | |
| void Reset(const CFX_DIBitmap* pBitmap); | |
| FX_BOOL GetCachedBitmap(CFX_DIBSource*& pBitmap, | |
| CFX_DIBSource*& pMask, | |
| FX_DWORD& MatteColor, | |
| CPDF_Dictionary* pPageResources, | |
| FX_BOOL bStdCS = FALSE, | |
| FX_DWORD GroupFamily = 0, | |
| FX_BOOL bLoadMask = FALSE, | |
| CPDF_RenderStatus* pRenderStatus = NULL, | |
| int32_t downsampleWidth = 0, | |
| int32_t downsampleHeight = 0); | |
| FX_DWORD EstimateSize() const { return m_dwCacheSize; } | |
| FX_DWORD GetTimeCount() const { return m_dwTimeCount; } | |
| CPDF_Stream* GetStream() const { return m_pStream; } | |
| void SetTimeCount(FX_DWORD dwTimeCount) { m_dwTimeCount = dwTimeCount; } | |
| int m_dwTimeCount; | |
| public: | |
| int StartGetCachedBitmap(CPDF_Dictionary* pFormResources, | |
| CPDF_Dictionary* pPageResources, | |
| FX_BOOL bStdCS = FALSE, | |
| FX_DWORD GroupFamily = 0, | |
| FX_BOOL bLoadMask = FALSE, | |
| CPDF_RenderStatus* pRenderStatus = NULL, | |
| int32_t downsampleWidth = 0, | |
| int32_t downsampleHeight = 0); | |
| int Continue(IFX_Pause* pPause); | |
| int ContinueGetCachedBitmap(); | |
| CFX_DIBSource* DetachBitmap(); | |
| CFX_DIBSource* DetachMask(); | |
| CFX_DIBSource* m_pCurBitmap; | |
| CFX_DIBSource* m_pCurMask; | |
| FX_DWORD m_MatteColor; | |
| CPDF_RenderStatus* m_pRenderStatus; | |
| protected: | |
| CPDF_Document* m_pDocument; | |
| CPDF_Stream* m_pStream; | |
| CFX_DIBSource* m_pCachedBitmap; | |
| CFX_DIBSource* m_pCachedMask; | |
| FX_DWORD m_dwCacheSize; | |
| void CalcSize(); | |
| }; | |
| typedef struct { | |
| FX_FLOAT m_DecodeMin; | |
| FX_FLOAT m_DecodeStep; | |
| int m_ColorKeyMin; | |
| int m_ColorKeyMax; | |
| } DIB_COMP_DATA; | |
| class CPDF_DIBSource : public CFX_DIBSource { | |
| public: | |
| CPDF_DIBSource(); | |
| ~CPDF_DIBSource() override; | |
| FX_BOOL Load(CPDF_Document* pDoc, | |
| const CPDF_Stream* pStream, | |
| CPDF_DIBSource** ppMask, | |
| FX_DWORD* pMatteColor, | |
| CPDF_Dictionary* pFormResources, | |
| CPDF_Dictionary* pPageResources, | |
| FX_BOOL bStdCS = FALSE, | |
| FX_DWORD GroupFamily = 0, | |
| FX_BOOL bLoadMask = FALSE); | |
| // CFX_DIBSource | |
| FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const override; | |
| uint8_t* GetBuffer() const override; | |
| const uint8_t* GetScanline(int line) const override; | |
| void DownSampleScanline(int line, | |
| uint8_t* dest_scan, | |
| int dest_bpp, | |
| int dest_width, | |
| FX_BOOL bFlipX, | |
| int clip_left, | |
| int clip_width) const override; | |
| void SetDownSampleSize(int dest_width, int dest_height) const override; | |
| CFX_DIBitmap* GetBitmap() const; | |
| void ReleaseBitmap(CFX_DIBitmap*) const; | |
| void ClearImageData(); | |
| int StartLoadDIBSource(CPDF_Document* pDoc, | |
| const CPDF_Stream* pStream, | |
| FX_BOOL bHasMask, | |
| CPDF_Dictionary* pFormResources, | |
| CPDF_Dictionary* pPageResources, | |
| FX_BOOL bStdCS = FALSE, | |
| FX_DWORD GroupFamily = 0, | |
| FX_BOOL bLoadMask = FALSE); | |
| int ContinueLoadDIBSource(IFX_Pause* pPause); | |
| int StratLoadMask(); | |
| int StartLoadMaskDIB(); | |
| int ContinueLoadMaskDIB(IFX_Pause* pPause); | |
| int ContinueToLoadMask(); | |
| CPDF_DIBSource* DetachMask(); | |
| CPDF_DIBSource* m_pMask; | |
| FX_DWORD m_MatteColor; | |
| void* m_pJbig2Context; | |
| CPDF_StreamAcc* m_pGlobalStream; | |
| FX_BOOL m_bStdCS; | |
| int m_Status; | |
| CPDF_Stream* m_pMaskStream; | |
| FX_BOOL m_bHasMask; | |
| private: | |
| FX_BOOL LoadColorInfo(CPDF_Dictionary* pFormResources, | |
| CPDF_Dictionary* pPageResources); | |
| DIB_COMP_DATA* GetDecodeAndMaskArray(FX_BOOL& bDefaultDecode, | |
| FX_BOOL& bColorKey); | |
| CPDF_DIBSource* LoadMask(FX_DWORD& MatteColor); | |
| CPDF_DIBSource* LoadMaskDIB(CPDF_Stream* pMask); | |
| void LoadJpxBitmap(); | |
| void LoadPalette(); | |
| int CreateDecoder(); | |
| void TranslateScanline24bpp(uint8_t* dest_scan, | |
| const uint8_t* src_scan) const; | |
| void ValidateDictParam(); | |
| void DownSampleScanline1Bit(int orig_Bpp, | |
| int dest_Bpp, | |
| FX_DWORD src_width, | |
| const uint8_t* pSrcLine, | |
| uint8_t* dest_scan, | |
| int dest_width, | |
| FX_BOOL bFlipX, | |
| int clip_left, | |
| int clip_width) const; | |
| void DownSampleScanline8Bit(int orig_Bpp, | |
| int dest_Bpp, | |
| FX_DWORD src_width, | |
| const uint8_t* pSrcLine, | |
| uint8_t* dest_scan, | |
| int dest_width, | |
| FX_BOOL bFlipX, | |
| int clip_left, | |
| int clip_width) const; | |
| void DownSampleScanline32Bit(int orig_Bpp, | |
| int dest_Bpp, | |
| FX_DWORD src_width, | |
| const uint8_t* pSrcLine, | |
| uint8_t* dest_scan, | |
| int dest_width, | |
| FX_BOOL bFlipX, | |
| int clip_left, | |
| int clip_width) const; | |
| FX_BOOL TransMask() const; | |
| CPDF_Document* m_pDocument; | |
| const CPDF_Stream* m_pStream; | |
| CPDF_StreamAcc* m_pStreamAcc; | |
| const CPDF_Dictionary* m_pDict; | |
| CPDF_ColorSpace* m_pColorSpace; | |
| FX_DWORD m_Family; | |
| FX_DWORD m_bpc; | |
| FX_DWORD m_bpc_orig; | |
| FX_DWORD m_nComponents; | |
| FX_DWORD m_GroupFamily; | |
| FX_BOOL m_bLoadMask; | |
| FX_BOOL m_bDefaultDecode; | |
| FX_BOOL m_bImageMask; | |
| FX_BOOL m_bDoBpcCheck; | |
| FX_BOOL m_bColorKey; | |
| DIB_COMP_DATA* m_pCompData; | |
| uint8_t* m_pLineBuf; | |
| uint8_t* m_pMaskedLine; | |
| nonstd::unique_ptr<CFX_DIBitmap> m_pCachedBitmap; | |
| ICodec_ScanlineDecoder* m_pDecoder; | |
| }; | |
| #define FPDF_HUGE_IMAGE_SIZE 60000000 | |
| class CPDF_DIBTransferFunc : public CFX_FilteredDIB { | |
| public: | |
| CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFunc); | |
| ~CPDF_DIBTransferFunc() override; | |
| // CFX_FilteredDIB | |
| FXDIB_Format GetDestFormat() override; | |
| FX_ARGB* GetDestPalette() override { return NULL; } | |
| void TranslateScanline(uint8_t* dest_buf, | |
| const uint8_t* src_buf) const override; | |
| void TranslateDownSamples(uint8_t* dest_buf, | |
| const uint8_t* src_buf, | |
| int pixels, | |
| int Bpp) const override; | |
| const uint8_t* m_RampR; | |
| const uint8_t* m_RampG; | |
| const uint8_t* m_RampB; | |
| }; | |
| struct _CPDF_UniqueKeyGen { | |
| void Generate(int count, ...); | |
| FX_CHAR m_Key[128]; | |
| int m_KeyLen; | |
| }; | |
| #endif // CORE_SRC_FPDFAPI_FPDF_RENDER_RENDER_INT_H_ |