| Index: core/include/fpdfapi/fpdf_render.h
|
| diff --git a/core/include/fpdfapi/fpdf_render.h b/core/include/fpdfapi/fpdf_render.h
|
| index f3590095ad517b1b6d7f7e06a2739ff4f9225340..ad2ca32fe78a4d7258831bec80bf178fe5f55b40 100644
|
| --- a/core/include/fpdfapi/fpdf_render.h
|
| +++ b/core/include/fpdfapi/fpdf_render.h
|
| @@ -27,250 +27,265 @@ class CPDF_ShadingObject;
|
| class CPDF_TextObject;
|
| class IFX_Pause;
|
|
|
| -class IPDF_OCContext
|
| -{
|
| -public:
|
| +class IPDF_OCContext {
|
| + public:
|
| + virtual ~IPDF_OCContext() {}
|
|
|
| - virtual ~IPDF_OCContext() {}
|
| + virtual FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCG) = 0;
|
|
|
| - virtual FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCG) = 0;
|
| -
|
| - FX_BOOL CheckObjectVisible(const CPDF_PageObject* pObj);
|
| + FX_BOOL CheckObjectVisible(const CPDF_PageObject* pObj);
|
| };
|
| -#define RENDER_COLOR_NORMAL 0
|
| -#define RENDER_COLOR_GRAY 1
|
| -#define RENDER_COLOR_TWOCOLOR 2
|
| -#define RENDER_COLOR_ALPHA 3
|
| -#define RENDER_CLEARTYPE 0x00000001
|
| -#define RENDER_PRINTGRAPHICTEXT 0x00000002
|
| -#define RENDER_FORCE_DOWNSAMPLE 0x00000004
|
| -#define RENDER_PRINTPREVIEW 0x00000008
|
| -#define RENDER_BGR_STRIPE 0x00000010
|
| -#define RENDER_NO_NATIVETEXT 0x00000020
|
| -#define RENDER_FORCE_HALFTONE 0x00000040
|
| -#define RENDER_RECT_AA 0x00000080
|
| -#define RENDER_FILL_FULLCOVER 0x00000100
|
| -#define RENDER_PRINTIMAGETEXT 0x00000200
|
| -#define RENDER_OVERPRINT 0x00000400
|
| -#define RENDER_THINLINE 0x00000800
|
| -#define RENDER_NOTEXTSMOOTH 0x10000000
|
| -#define RENDER_NOPATHSMOOTH 0x20000000
|
| -#define RENDER_NOIMAGESMOOTH 0x40000000
|
| -#define RENDER_LIMITEDIMAGECACHE 0x80000000
|
| -class CPDF_RenderOptions
|
| -{
|
| -public:
|
| -
|
| - CPDF_RenderOptions();
|
| +#define RENDER_COLOR_NORMAL 0
|
| +#define RENDER_COLOR_GRAY 1
|
| +#define RENDER_COLOR_TWOCOLOR 2
|
| +#define RENDER_COLOR_ALPHA 3
|
| +#define RENDER_CLEARTYPE 0x00000001
|
| +#define RENDER_PRINTGRAPHICTEXT 0x00000002
|
| +#define RENDER_FORCE_DOWNSAMPLE 0x00000004
|
| +#define RENDER_PRINTPREVIEW 0x00000008
|
| +#define RENDER_BGR_STRIPE 0x00000010
|
| +#define RENDER_NO_NATIVETEXT 0x00000020
|
| +#define RENDER_FORCE_HALFTONE 0x00000040
|
| +#define RENDER_RECT_AA 0x00000080
|
| +#define RENDER_FILL_FULLCOVER 0x00000100
|
| +#define RENDER_PRINTIMAGETEXT 0x00000200
|
| +#define RENDER_OVERPRINT 0x00000400
|
| +#define RENDER_THINLINE 0x00000800
|
| +#define RENDER_NOTEXTSMOOTH 0x10000000
|
| +#define RENDER_NOPATHSMOOTH 0x20000000
|
| +#define RENDER_NOIMAGESMOOTH 0x40000000
|
| +#define RENDER_LIMITEDIMAGECACHE 0x80000000
|
| +class CPDF_RenderOptions {
|
| + public:
|
| + CPDF_RenderOptions();
|
|
|
| - int m_ColorMode;
|
| + int m_ColorMode;
|
|
|
| - FX_COLORREF m_BackColor;
|
| + FX_COLORREF m_BackColor;
|
|
|
| - FX_COLORREF m_ForeColor;
|
| + FX_COLORREF m_ForeColor;
|
|
|
| - FX_DWORD m_Flags;
|
| + FX_DWORD m_Flags;
|
|
|
| - int m_Interpolation;
|
| + int m_Interpolation;
|
|
|
| - FX_DWORD m_AddFlags;
|
| + FX_DWORD m_AddFlags;
|
|
|
| - IPDF_OCContext* m_pOCContext;
|
| + IPDF_OCContext* m_pOCContext;
|
|
|
| - FX_DWORD m_dwLimitCacheSize;
|
| + FX_DWORD m_dwLimitCacheSize;
|
|
|
| - int m_HalftoneLimit;
|
| + int m_HalftoneLimit;
|
|
|
| - FX_ARGB TranslateColor(FX_ARGB argb) const;
|
| + FX_ARGB TranslateColor(FX_ARGB argb) const;
|
| };
|
| -class CPDF_RenderContext
|
| -{
|
| -public:
|
| -
|
| - CPDF_RenderContext();
|
| -
|
| - void Create(CPDF_Page* pPage, FX_BOOL bFirstLayer = TRUE);
|
| -
|
| - void Create(CPDF_Document* pDoc = NULL, CPDF_PageRenderCache* pPageCache = NULL,
|
| - CPDF_Dictionary* pPageResources = NULL, FX_BOOL bFirstLayer = TRUE);
|
| -
|
| - ~CPDF_RenderContext();
|
| +class CPDF_RenderContext {
|
| + public:
|
| + CPDF_RenderContext();
|
|
|
| - void Clear();
|
| + void Create(CPDF_Page* pPage, FX_BOOL bFirstLayer = TRUE);
|
|
|
| - void AppendObjectList(CPDF_PageObjects* pObjs, const CFX_AffineMatrix* pObject2Device);
|
| + void Create(CPDF_Document* pDoc = NULL,
|
| + CPDF_PageRenderCache* pPageCache = NULL,
|
| + CPDF_Dictionary* pPageResources = NULL,
|
| + FX_BOOL bFirstLayer = TRUE);
|
|
|
| - void Render(CFX_RenderDevice* pDevice, const CPDF_RenderOptions* pOptions = NULL,
|
| - const CFX_AffineMatrix* pFinalMatrix = NULL);
|
| + ~CPDF_RenderContext();
|
|
|
| - void DrawObjectList(CFX_RenderDevice* pDevice, CPDF_PageObjects* pObjs,
|
| - const CFX_AffineMatrix* pObject2Device, const CPDF_RenderOptions* pOptions);
|
| + void Clear();
|
|
|
| - void GetBackground(CFX_DIBitmap* pBuffer, const CPDF_PageObject* pObj,
|
| - const CPDF_RenderOptions* pOptions, CFX_AffineMatrix* pFinalMatrix);
|
| + void AppendObjectList(CPDF_PageObjects* pObjs,
|
| + const CFX_AffineMatrix* pObject2Device);
|
|
|
| - CPDF_PageRenderCache* GetPageCache() const
|
| - {
|
| - return m_pPageCache;
|
| - }
|
| + void Render(CFX_RenderDevice* pDevice,
|
| + const CPDF_RenderOptions* pOptions = NULL,
|
| + const CFX_AffineMatrix* pFinalMatrix = NULL);
|
|
|
| + void DrawObjectList(CFX_RenderDevice* pDevice,
|
| + CPDF_PageObjects* pObjs,
|
| + const CFX_AffineMatrix* pObject2Device,
|
| + const CPDF_RenderOptions* pOptions);
|
|
|
| + void GetBackground(CFX_DIBitmap* pBuffer,
|
| + const CPDF_PageObject* pObj,
|
| + const CPDF_RenderOptions* pOptions,
|
| + CFX_AffineMatrix* pFinalMatrix);
|
|
|
| - CPDF_Document* m_pDocument;
|
| + CPDF_PageRenderCache* GetPageCache() const { return m_pPageCache; }
|
|
|
| - CPDF_Dictionary* m_pPageResources;
|
| + CPDF_Document* m_pDocument;
|
|
|
| - CPDF_PageRenderCache* m_pPageCache;
|
| + CPDF_Dictionary* m_pPageResources;
|
|
|
| -protected:
|
| + CPDF_PageRenderCache* m_pPageCache;
|
|
|
| - CFX_ArrayTemplate<struct _PDF_RenderItem> m_ContentList;
|
| + protected:
|
| + CFX_ArrayTemplate<struct _PDF_RenderItem> m_ContentList;
|
|
|
| - FX_BOOL m_bFirstLayer;
|
| + FX_BOOL m_bFirstLayer;
|
|
|
| - void Render(CFX_RenderDevice* pDevice, const CPDF_PageObject* pStopObj,
|
| - const CPDF_RenderOptions* pOptions, const CFX_AffineMatrix* pFinalMatrix);
|
| - friend class CPDF_RenderStatus;
|
| - friend class CPDF_ProgressiveRenderer;
|
| + void Render(CFX_RenderDevice* pDevice,
|
| + const CPDF_PageObject* pStopObj,
|
| + const CPDF_RenderOptions* pOptions,
|
| + const CFX_AffineMatrix* pFinalMatrix);
|
| + friend class CPDF_RenderStatus;
|
| + friend class CPDF_ProgressiveRenderer;
|
| };
|
|
|
| -class CPDF_ProgressiveRenderer
|
| -{
|
| -public:
|
| - // Must match FDF_RENDER_* definitions in fpdf_progressive.h.
|
| - enum Status {
|
| - Ready = FPDF_RENDER_READER,
|
| - ToBeContinued = FPDF_RENDER_TOBECOUNTINUED,
|
| - Done = FPDF_RENDER_DONE,
|
| - Failed = FPDF_RENDER_FAILED
|
| - };
|
| - static int ToFPDFStatus(Status status) { return static_cast<int>(status); }
|
| -
|
| - CPDF_ProgressiveRenderer(CPDF_RenderContext* pContext,
|
| - CFX_RenderDevice* pDevice,
|
| - const CPDF_RenderOptions* pOptions);
|
| - ~CPDF_ProgressiveRenderer();
|
| -
|
| - Status GetStatus() const { return m_Status; }
|
| - void Start(IFX_Pause* pPause);
|
| - void Continue(IFX_Pause* pPause);
|
| - int EstimateProgress();
|
| -
|
| -private:
|
| - void RenderStep();
|
| -
|
| - Status m_Status;
|
| - CPDF_RenderContext* const m_pContext;
|
| - CFX_RenderDevice* const m_pDevice;
|
| - const CPDF_RenderOptions* const m_pOptions;
|
| - nonstd::unique_ptr<CPDF_RenderStatus> m_pRenderStatus;
|
| - CFX_FloatRect m_ClipRect;
|
| - FX_DWORD m_LayerIndex;
|
| - FX_DWORD m_ObjectIndex;
|
| - FX_POSITION m_ObjectPos;
|
| - FX_POSITION m_PrevLastPos;
|
| +class CPDF_ProgressiveRenderer {
|
| + public:
|
| + // Must match FDF_RENDER_* definitions in fpdf_progressive.h.
|
| + enum Status {
|
| + Ready = FPDF_RENDER_READER,
|
| + ToBeContinued = FPDF_RENDER_TOBECOUNTINUED,
|
| + Done = FPDF_RENDER_DONE,
|
| + Failed = FPDF_RENDER_FAILED
|
| + };
|
| + static int ToFPDFStatus(Status status) { return static_cast<int>(status); }
|
| +
|
| + CPDF_ProgressiveRenderer(CPDF_RenderContext* pContext,
|
| + CFX_RenderDevice* pDevice,
|
| + const CPDF_RenderOptions* pOptions);
|
| + ~CPDF_ProgressiveRenderer();
|
| +
|
| + Status GetStatus() const { return m_Status; }
|
| + void Start(IFX_Pause* pPause);
|
| + void Continue(IFX_Pause* pPause);
|
| + int EstimateProgress();
|
| +
|
| + private:
|
| + void RenderStep();
|
| +
|
| + Status m_Status;
|
| + CPDF_RenderContext* const m_pContext;
|
| + CFX_RenderDevice* const m_pDevice;
|
| + const CPDF_RenderOptions* const m_pOptions;
|
| + nonstd::unique_ptr<CPDF_RenderStatus> m_pRenderStatus;
|
| + CFX_FloatRect m_ClipRect;
|
| + FX_DWORD m_LayerIndex;
|
| + FX_DWORD m_ObjectIndex;
|
| + FX_POSITION m_ObjectPos;
|
| + FX_POSITION m_PrevLastPos;
|
| };
|
|
|
| -class CPDF_TextRenderer
|
| -{
|
| -public:
|
| -
|
| - static void DrawTextString(CFX_RenderDevice* pDevice, int left, int top,
|
| - CPDF_Font* pFont,
|
| - int height,
|
| - const CFX_ByteString& str,
|
| - FX_ARGB argb);
|
| -
|
| - static void DrawTextString(CFX_RenderDevice* pDevice, FX_FLOAT origin_x, FX_FLOAT origin_y,
|
| - CPDF_Font* pFont,
|
| - FX_FLOAT font_size,
|
| - const CFX_AffineMatrix* matrix,
|
| - const CFX_ByteString& str,
|
| - FX_ARGB fill_argb,
|
| - FX_ARGB stroke_argb = 0,
|
| - const CFX_GraphStateData* pGraphState = NULL,
|
| - const CPDF_RenderOptions* pOptions = NULL
|
| - );
|
| -
|
| - static FX_BOOL DrawTextPath(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,
|
| - CPDF_Font* pFont, FX_FLOAT font_size,
|
| - const CFX_AffineMatrix* pText2User, const CFX_AffineMatrix* pUser2Device,
|
| - const CFX_GraphStateData* pGraphState,
|
| - FX_ARGB fill_argb, FX_ARGB stroke_argb, CFX_PathData* pClippingPath, int nFlag = 0);
|
| -
|
| - static FX_BOOL DrawNormalText(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,
|
| - CPDF_Font* pFont, FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,
|
| - FX_ARGB fill_argb, const CPDF_RenderOptions* pOptions);
|
| -
|
| - static FX_BOOL DrawType3Text(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,
|
| - CPDF_Font* pFont, FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,
|
| - FX_ARGB fill_argb);
|
| +class CPDF_TextRenderer {
|
| + public:
|
| + static void DrawTextString(CFX_RenderDevice* pDevice,
|
| + int left,
|
| + int top,
|
| + CPDF_Font* pFont,
|
| + int height,
|
| + const CFX_ByteString& str,
|
| + FX_ARGB argb);
|
| +
|
| + static void DrawTextString(CFX_RenderDevice* pDevice,
|
| + FX_FLOAT origin_x,
|
| + FX_FLOAT origin_y,
|
| + CPDF_Font* pFont,
|
| + FX_FLOAT font_size,
|
| + const CFX_AffineMatrix* matrix,
|
| + const CFX_ByteString& str,
|
| + FX_ARGB fill_argb,
|
| + FX_ARGB stroke_argb = 0,
|
| + const CFX_GraphStateData* pGraphState = NULL,
|
| + const CPDF_RenderOptions* pOptions = NULL);
|
| +
|
| + static FX_BOOL DrawTextPath(CFX_RenderDevice* pDevice,
|
| + int nChars,
|
| + FX_DWORD* pCharCodes,
|
| + FX_FLOAT* pCharPos,
|
| + CPDF_Font* pFont,
|
| + FX_FLOAT font_size,
|
| + const CFX_AffineMatrix* pText2User,
|
| + const CFX_AffineMatrix* pUser2Device,
|
| + const CFX_GraphStateData* pGraphState,
|
| + FX_ARGB fill_argb,
|
| + FX_ARGB stroke_argb,
|
| + CFX_PathData* pClippingPath,
|
| + int nFlag = 0);
|
| +
|
| + static FX_BOOL DrawNormalText(CFX_RenderDevice* pDevice,
|
| + int nChars,
|
| + FX_DWORD* pCharCodes,
|
| + FX_FLOAT* pCharPos,
|
| + CPDF_Font* pFont,
|
| + FX_FLOAT font_size,
|
| + const CFX_AffineMatrix* pText2Device,
|
| + FX_ARGB fill_argb,
|
| + const CPDF_RenderOptions* pOptions);
|
| +
|
| + static FX_BOOL DrawType3Text(CFX_RenderDevice* pDevice,
|
| + int nChars,
|
| + FX_DWORD* pCharCodes,
|
| + FX_FLOAT* pCharPos,
|
| + CPDF_Font* pFont,
|
| + FX_FLOAT font_size,
|
| + const CFX_AffineMatrix* pText2Device,
|
| + FX_ARGB fill_argb);
|
| };
|
| -class CPDF_PageRenderCache
|
| -{
|
| -public:
|
| - CPDF_PageRenderCache(CPDF_Page* pPage)
|
| - {
|
| - m_pPage = pPage;
|
| - m_nTimeCount = 0;
|
| - m_nCacheSize = 0;
|
| - m_pCurImageCache = NULL;
|
| - m_bCurFindCache = FALSE;
|
| - m_pCurImageCaches = NULL;
|
| - }
|
| - ~CPDF_PageRenderCache()
|
| - {
|
| - ClearAll();
|
| - }
|
| - void ClearAll();
|
| - void ClearImageData();
|
| -
|
| - FX_DWORD EstimateSize();
|
| - void CacheOptimization(int32_t dwLimitCacheSize);
|
| - FX_DWORD GetCachedSize(CPDF_Stream* pStream) const;
|
| - FX_DWORD GetTimeCount() const
|
| - {
|
| - return m_nTimeCount;
|
| - }
|
| - void SetTimeCount(FX_DWORD dwTimeCount)
|
| - {
|
| - m_nTimeCount = dwTimeCount;
|
| - }
|
| -
|
| - void GetCachedBitmap(CPDF_Stream* pStream, CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor,
|
| - FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE,
|
| - CPDF_RenderStatus* pRenderStatus = NULL, int32_t downsampleWidth = 0, int32_t downsampleHeight = 0);
|
| -
|
| - void ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap);
|
| - void ClearImageCache(CPDF_Stream* pStream);
|
| - CPDF_Page* GetPage()
|
| - {
|
| - return m_pPage;
|
| - }
|
| - CFX_MapPtrToPtr m_ImageCaches;
|
| -public:
|
| - FX_BOOL StartGetCachedBitmap(CPDF_Stream* pStream, 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_BOOL Continue(IFX_Pause* pPause);
|
| - CPDF_ImageCache* m_pCurImageCache;
|
| - CFX_PtrArray* m_pCurImageCaches;
|
| -protected:
|
| - friend class CPDF_Page;
|
| - CPDF_Page* m_pPage;
|
| -
|
| - FX_DWORD m_nTimeCount;
|
| - FX_DWORD m_nCacheSize;
|
| - FX_BOOL m_bCurFindCache;
|
| +class CPDF_PageRenderCache {
|
| + public:
|
| + CPDF_PageRenderCache(CPDF_Page* pPage) {
|
| + m_pPage = pPage;
|
| + m_nTimeCount = 0;
|
| + m_nCacheSize = 0;
|
| + m_pCurImageCache = NULL;
|
| + m_bCurFindCache = FALSE;
|
| + m_pCurImageCaches = NULL;
|
| + }
|
| + ~CPDF_PageRenderCache() { ClearAll(); }
|
| + void ClearAll();
|
| + void ClearImageData();
|
| +
|
| + FX_DWORD EstimateSize();
|
| + void CacheOptimization(int32_t dwLimitCacheSize);
|
| + FX_DWORD GetCachedSize(CPDF_Stream* pStream) const;
|
| + FX_DWORD GetTimeCount() const { return m_nTimeCount; }
|
| + void SetTimeCount(FX_DWORD dwTimeCount) { m_nTimeCount = dwTimeCount; }
|
| +
|
| + void GetCachedBitmap(CPDF_Stream* pStream,
|
| + CFX_DIBSource*& pBitmap,
|
| + CFX_DIBSource*& pMask,
|
| + FX_DWORD& MatteColor,
|
| + FX_BOOL bStdCS = FALSE,
|
| + FX_DWORD GroupFamily = 0,
|
| + FX_BOOL bLoadMask = FALSE,
|
| + CPDF_RenderStatus* pRenderStatus = NULL,
|
| + int32_t downsampleWidth = 0,
|
| + int32_t downsampleHeight = 0);
|
| +
|
| + void ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap);
|
| + void ClearImageCache(CPDF_Stream* pStream);
|
| + CPDF_Page* GetPage() { return m_pPage; }
|
| + CFX_MapPtrToPtr m_ImageCaches;
|
| +
|
| + public:
|
| + FX_BOOL StartGetCachedBitmap(CPDF_Stream* pStream,
|
| + 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_BOOL Continue(IFX_Pause* pPause);
|
| + CPDF_ImageCache* m_pCurImageCache;
|
| + CFX_PtrArray* m_pCurImageCaches;
|
| +
|
| + protected:
|
| + friend class CPDF_Page;
|
| + CPDF_Page* m_pPage;
|
| +
|
| + FX_DWORD m_nTimeCount;
|
| + FX_DWORD m_nCacheSize;
|
| + FX_BOOL m_bCurFindCache;
|
| };
|
| -class CPDF_RenderConfig
|
| -{
|
| -public:
|
| - CPDF_RenderConfig();
|
| - ~CPDF_RenderConfig();
|
| - int m_HalftoneLimit;
|
| - int m_RenderStepLimit;
|
| +class CPDF_RenderConfig {
|
| + public:
|
| + CPDF_RenderConfig();
|
| + ~CPDF_RenderConfig();
|
| + int m_HalftoneLimit;
|
| + int m_RenderStepLimit;
|
| };
|
|
|
| #endif // CORE_INCLUDE_FPDFAPI_FPDF_RENDER_H_
|
|
|