Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(468)

Side by Side Diff: core/include/fpdfapi/fpdf_render.h

Issue 1265503005: clang-format all pdfium code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: sigh Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_RENDER_H_ 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_RENDER_H_
8 #define CORE_INCLUDE_FPDFAPI_FPDF_RENDER_H_ 8 #define CORE_INCLUDE_FPDFAPI_FPDF_RENDER_H_
9 9
10 #include "../../../third_party/base/nonstd_unique_ptr.h" 10 #include "../../../third_party/base/nonstd_unique_ptr.h"
11 #include "../../../public/fpdf_progressive.h" 11 #include "../../../public/fpdf_progressive.h"
12 #include "../fxge/fx_ge.h" 12 #include "../fxge/fx_ge.h"
13 #include "fpdf_page.h" 13 #include "fpdf_page.h"
14 14
15 class CFX_GraphStateData; 15 class CFX_GraphStateData;
16 class CFX_PathData; 16 class CFX_PathData;
17 class CFX_RenderDevice; 17 class CFX_RenderDevice;
18 class CPDF_FormObject; 18 class CPDF_FormObject;
19 class CPDF_ImageCache; 19 class CPDF_ImageCache;
20 class CPDF_ImageObject; 20 class CPDF_ImageObject;
21 class CPDF_PathObject; 21 class CPDF_PathObject;
22 class CPDF_QuickStretcher; 22 class CPDF_QuickStretcher;
23 class CPDF_RenderContext; 23 class CPDF_RenderContext;
24 class CPDF_RenderOptions; 24 class CPDF_RenderOptions;
25 class CPDF_RenderStatus; 25 class CPDF_RenderStatus;
26 class CPDF_ShadingObject; 26 class CPDF_ShadingObject;
27 class CPDF_TextObject; 27 class CPDF_TextObject;
28 class IFX_Pause; 28 class IFX_Pause;
29 29
30 class IPDF_OCContext 30 class IPDF_OCContext {
31 { 31 public:
32 public: 32 virtual ~IPDF_OCContext() {}
33 33
34 virtual ~IPDF_OCContext() {} 34 virtual FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCG) = 0;
35 35
36 virtual FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCG) = 0; 36 FX_BOOL CheckObjectVisible(const CPDF_PageObject* pObj);
37 37 };
38 FX_BOOL CheckObjectVisible(const CPDF_PageObject* pObj); 38 #define RENDER_COLOR_NORMAL 0
39 }; 39 #define RENDER_COLOR_GRAY 1
40 #define RENDER_COLOR_NORMAL 0 40 #define RENDER_COLOR_TWOCOLOR 2
41 #define RENDER_COLOR_GRAY 1 41 #define RENDER_COLOR_ALPHA 3
42 #define RENDER_COLOR_TWOCOLOR 2 42 #define RENDER_CLEARTYPE 0x00000001
43 #define RENDER_COLOR_ALPHA 3 43 #define RENDER_PRINTGRAPHICTEXT 0x00000002
44 #define RENDER_CLEARTYPE 0x00000001 44 #define RENDER_FORCE_DOWNSAMPLE 0x00000004
45 #define RENDER_PRINTGRAPHICTEXT 0x00000002 45 #define RENDER_PRINTPREVIEW 0x00000008
46 #define RENDER_FORCE_DOWNSAMPLE 0x00000004 46 #define RENDER_BGR_STRIPE 0x00000010
47 #define RENDER_PRINTPREVIEW 0x00000008 47 #define RENDER_NO_NATIVETEXT 0x00000020
48 #define RENDER_BGR_STRIPE 0x00000010 48 #define RENDER_FORCE_HALFTONE 0x00000040
49 #define RENDER_NO_NATIVETEXT 0x00000020 49 #define RENDER_RECT_AA 0x00000080
50 #define RENDER_FORCE_HALFTONE 0x00000040 50 #define RENDER_FILL_FULLCOVER 0x00000100
51 #define RENDER_RECT_AA 0x00000080 51 #define RENDER_PRINTIMAGETEXT 0x00000200
52 #define RENDER_FILL_FULLCOVER 0x00000100 52 #define RENDER_OVERPRINT 0x00000400
53 #define RENDER_PRINTIMAGETEXT 0x00000200 53 #define RENDER_THINLINE 0x00000800
54 #define RENDER_OVERPRINT 0x00000400 54 #define RENDER_NOTEXTSMOOTH 0x10000000
55 #define RENDER_THINLINE 0x00000800 55 #define RENDER_NOPATHSMOOTH 0x20000000
56 #define RENDER_NOTEXTSMOOTH 0x10000000 56 #define RENDER_NOIMAGESMOOTH 0x40000000
57 #define RENDER_NOPATHSMOOTH 0x20000000 57 #define RENDER_LIMITEDIMAGECACHE 0x80000000
58 #define RENDER_NOIMAGESMOOTH 0x40000000 58 class CPDF_RenderOptions {
59 #define RENDER_LIMITEDIMAGECACHE 0x80000000 59 public:
60 class CPDF_RenderOptions 60 CPDF_RenderOptions();
61 { 61
62 public: 62 int m_ColorMode;
63 63
64 CPDF_RenderOptions(); 64 FX_COLORREF m_BackColor;
65 65
66 int m_ColorMode; 66 FX_COLORREF m_ForeColor;
67 67
68 FX_COLORREF m_BackColor; 68 FX_DWORD m_Flags;
69 69
70 FX_COLORREF m_ForeColor; 70 int m_Interpolation;
71 71
72 FX_DWORD m_Flags; 72 FX_DWORD m_AddFlags;
73 73
74 int m_Interpolation; 74 IPDF_OCContext* m_pOCContext;
75 75
76 FX_DWORD m_AddFlags; 76 FX_DWORD m_dwLimitCacheSize;
77 77
78 IPDF_OCContext* m_pOCContext; 78 int m_HalftoneLimit;
79 79
80 FX_DWORD m_dwLimitCacheSize; 80 FX_ARGB TranslateColor(FX_ARGB argb) const;
81 81 };
82 int m_HalftoneLimit; 82 class CPDF_RenderContext {
83 83 public:
84 FX_ARGB TranslateColor(FX_ARGB argb) const; 84 CPDF_RenderContext();
85 }; 85
86 class CPDF_RenderContext 86 void Create(CPDF_Page* pPage, FX_BOOL bFirstLayer = TRUE);
87 { 87
88 public: 88 void Create(CPDF_Document* pDoc = NULL,
89 89 CPDF_PageRenderCache* pPageCache = NULL,
90 CPDF_RenderContext(); 90 CPDF_Dictionary* pPageResources = NULL,
91 91 FX_BOOL bFirstLayer = TRUE);
92 void Create(CPDF_Page* pPage, FX_BOOL bFirstLayer = T RUE); 92
93 93 ~CPDF_RenderContext();
94 void Create(CPDF_Document* pDoc = NULL, CPDF_PageRend erCache* pPageCache = NULL, 94
95 CPDF_Dictionary* pPageResources = NULL, FX_BOOL bFirs tLayer = TRUE); 95 void Clear();
96 96
97 ~CPDF_RenderContext(); 97 void AppendObjectList(CPDF_PageObjects* pObjs,
98 98 const CFX_AffineMatrix* pObject2Device);
99 void Clear(); 99
100 100 void Render(CFX_RenderDevice* pDevice,
101 void AppendObjectList(CPDF_PageObjects* pObjs, const CFX_AffineMatrix* pObject2Device); 101 const CPDF_RenderOptions* pOptions = NULL,
102 102 const CFX_AffineMatrix* pFinalMatrix = NULL);
103 void Render(CFX_RenderDevice* pDevice, const CPDF_Ren derOptions* pOptions = NULL, 103
104 const CFX_AffineMatrix* pFinalMatrix = NULL); 104 void DrawObjectList(CFX_RenderDevice* pDevice,
105 105 CPDF_PageObjects* pObjs,
106 void DrawObjectList(CFX_RenderDevice* pDevice, CPDF_P ageObjects* pObjs, 106 const CFX_AffineMatrix* pObject2Device,
107 const CFX_AffineMatrix* pObject2Device, const CPDF_RenderOptions* pOptions); 107 const CPDF_RenderOptions* pOptions);
108 108
109 void GetBackground(CFX_DIBitmap* pBuffer, const CPDF_ PageObject* pObj, 109 void GetBackground(CFX_DIBitmap* pBuffer,
110 const CPDF_RenderOptions* pOptions, CFX_Affine Matrix* pFinalMatrix); 110 const CPDF_PageObject* pObj,
111 111 const CPDF_RenderOptions* pOptions,
112 CPDF_PageRenderCache* GetPageCache() const 112 CFX_AffineMatrix* pFinalMatrix);
113 { 113
114 return m_pPageCache; 114 CPDF_PageRenderCache* GetPageCache() const { return m_pPageCache; }
115 } 115
116 116 CPDF_Document* m_pDocument;
117 117
118 118 CPDF_Dictionary* m_pPageResources;
119 CPDF_Document* m_pDocument; 119
120 120 CPDF_PageRenderCache* m_pPageCache;
121 CPDF_Dictionary* m_pPageResources; 121
122 122 protected:
123 CPDF_PageRenderCache* m_pPageCache; 123 CFX_ArrayTemplate<struct _PDF_RenderItem> m_ContentList;
124 124
125 protected: 125 FX_BOOL m_bFirstLayer;
126 126
127 CFX_ArrayTemplate<struct _PDF_RenderItem> m_ContentList; 127 void Render(CFX_RenderDevice* pDevice,
128 128 const CPDF_PageObject* pStopObj,
129 FX_BOOL m_bFirstLayer; 129 const CPDF_RenderOptions* pOptions,
130 130 const CFX_AffineMatrix* pFinalMatrix);
131 void Render(CFX_RenderDevice* pDevice, const CPDF_Pag eObject* pStopObj, 131 friend class CPDF_RenderStatus;
132 const CPDF_RenderOptions* pOptions, const CFX_AffineM atrix* pFinalMatrix); 132 friend class CPDF_ProgressiveRenderer;
133 friend class CPDF_RenderStatus; 133 };
134 friend class CPDF_ProgressiveRenderer; 134
135 }; 135 class CPDF_ProgressiveRenderer {
136 136 public:
137 class CPDF_ProgressiveRenderer 137 // Must match FDF_RENDER_* definitions in fpdf_progressive.h.
138 { 138 enum Status {
139 public: 139 Ready = FPDF_RENDER_READER,
140 // Must match FDF_RENDER_* definitions in fpdf_progressive.h. 140 ToBeContinued = FPDF_RENDER_TOBECOUNTINUED,
141 enum Status { 141 Done = FPDF_RENDER_DONE,
142 Ready = FPDF_RENDER_READER, 142 Failed = FPDF_RENDER_FAILED
143 ToBeContinued = FPDF_RENDER_TOBECOUNTINUED, 143 };
144 Done = FPDF_RENDER_DONE, 144 static int ToFPDFStatus(Status status) { return static_cast<int>(status); }
145 Failed = FPDF_RENDER_FAILED 145
146 }; 146 CPDF_ProgressiveRenderer(CPDF_RenderContext* pContext,
147 static int ToFPDFStatus(Status status) { return static_cast<int>(status); } 147 CFX_RenderDevice* pDevice,
148 148 const CPDF_RenderOptions* pOptions);
149 CPDF_ProgressiveRenderer(CPDF_RenderContext* pContext, 149 ~CPDF_ProgressiveRenderer();
150 CFX_RenderDevice* pDevice, 150
151 const CPDF_RenderOptions* pOptions); 151 Status GetStatus() const { return m_Status; }
152 ~CPDF_ProgressiveRenderer(); 152 void Start(IFX_Pause* pPause);
153 153 void Continue(IFX_Pause* pPause);
154 Status GetStatus() const { return m_Status; } 154 int EstimateProgress();
155 void Start(IFX_Pause* pPause); 155
156 void Continue(IFX_Pause* pPause); 156 private:
157 int EstimateProgress(); 157 void RenderStep();
158 158
159 private: 159 Status m_Status;
160 void RenderStep(); 160 CPDF_RenderContext* const m_pContext;
161 161 CFX_RenderDevice* const m_pDevice;
162 Status m_Status; 162 const CPDF_RenderOptions* const m_pOptions;
163 CPDF_RenderContext* const m_pContext; 163 nonstd::unique_ptr<CPDF_RenderStatus> m_pRenderStatus;
164 CFX_RenderDevice* const m_pDevice; 164 CFX_FloatRect m_ClipRect;
165 const CPDF_RenderOptions* const m_pOptions; 165 FX_DWORD m_LayerIndex;
166 nonstd::unique_ptr<CPDF_RenderStatus> m_pRenderStatus; 166 FX_DWORD m_ObjectIndex;
167 CFX_FloatRect m_ClipRect; 167 FX_POSITION m_ObjectPos;
168 FX_DWORD m_LayerIndex; 168 FX_POSITION m_PrevLastPos;
169 FX_DWORD m_ObjectIndex; 169 };
170 FX_POSITION m_ObjectPos; 170
171 FX_POSITION m_PrevLastPos; 171 class CPDF_TextRenderer {
172 }; 172 public:
173 173 static void DrawTextString(CFX_RenderDevice* pDevice,
174 class CPDF_TextRenderer 174 int left,
175 { 175 int top,
176 public: 176 CPDF_Font* pFont,
177 177 int height,
178 static void DrawTextString(CFX_RenderDevice* pDevice, int left, int top, 178 const CFX_ByteString& str,
179 CPDF_Font* pFont, 179 FX_ARGB argb);
180 int height, 180
181 const CFX_ByteString& str, 181 static void DrawTextString(CFX_RenderDevice* pDevice,
182 FX_ARGB argb); 182 FX_FLOAT origin_x,
183 183 FX_FLOAT origin_y,
184 static void DrawTextString(CFX_RenderDevice* pDevice, FX_FLOAT origi n_x, FX_FLOAT origin_y, 184 CPDF_Font* pFont,
185 CPDF_Font* pFont, 185 FX_FLOAT font_size,
186 FX_FLOAT font_size, 186 const CFX_AffineMatrix* matrix,
187 const CFX_AffineMatrix* matrix, 187 const CFX_ByteString& str,
188 const CFX_ByteString& str, 188 FX_ARGB fill_argb,
189 FX_ARGB fill_argb, 189 FX_ARGB stroke_argb = 0,
190 FX_ARGB stroke_argb = 0, 190 const CFX_GraphStateData* pGraphState = NULL,
191 const CFX_GraphStateData* pGraphState = NULL, 191 const CPDF_RenderOptions* pOptions = NULL);
192 const CPDF_RenderOptions* pOptions = NULL 192
193 ); 193 static FX_BOOL DrawTextPath(CFX_RenderDevice* pDevice,
194 194 int nChars,
195 static FX_BOOL DrawTextPath(CFX_RenderDevice* pDevice, int nChars, FX_D WORD* pCharCodes, FX_FLOAT* pCharPos, 195 FX_DWORD* pCharCodes,
196 CPDF_Font* pFont, FX_FLOAT font_size, 196 FX_FLOAT* pCharPos,
197 const CFX_AffineMatrix* pText2User, const CFX_A ffineMatrix* pUser2Device, 197 CPDF_Font* pFont,
198 const CFX_GraphStateData* pGraphState, 198 FX_FLOAT font_size,
199 FX_ARGB fill_argb, FX_ARGB stroke_argb, CFX_Pat hData* pClippingPath, int nFlag = 0); 199 const CFX_AffineMatrix* pText2User,
200 200 const CFX_AffineMatrix* pUser2Device,
201 static FX_BOOL DrawNormalText(CFX_RenderDevice* pDevice, int nChars, FX _DWORD* pCharCodes, FX_FLOAT* pCharPos, 201 const CFX_GraphStateData* pGraphState,
202 CPDF_Font* pFont, FX_FLOAT font_size, const C FX_AffineMatrix* pText2Device, 202 FX_ARGB fill_argb,
203 FX_ARGB fill_argb, const CPDF_RenderOptions* pOptions); 203 FX_ARGB stroke_argb,
204 204 CFX_PathData* pClippingPath,
205 static FX_BOOL DrawType3Text(CFX_RenderDevice* pDevice, int nChars, FX_ DWORD* pCharCodes, FX_FLOAT* pCharPos, 205 int nFlag = 0);
206 CPDF_Font* pFont, FX_FLOAT font_size, const CF X_AffineMatrix* pText2Device, 206
207 FX_ARGB fill_argb); 207 static FX_BOOL DrawNormalText(CFX_RenderDevice* pDevice,
208 }; 208 int nChars,
209 class CPDF_PageRenderCache 209 FX_DWORD* pCharCodes,
210 { 210 FX_FLOAT* pCharPos,
211 public: 211 CPDF_Font* pFont,
212 CPDF_PageRenderCache(CPDF_Page* pPage) 212 FX_FLOAT font_size,
213 { 213 const CFX_AffineMatrix* pText2Device,
214 m_pPage = pPage; 214 FX_ARGB fill_argb,
215 m_nTimeCount = 0; 215 const CPDF_RenderOptions* pOptions);
216 m_nCacheSize = 0; 216
217 m_pCurImageCache = NULL; 217 static FX_BOOL DrawType3Text(CFX_RenderDevice* pDevice,
218 m_bCurFindCache = FALSE; 218 int nChars,
219 m_pCurImageCaches = NULL; 219 FX_DWORD* pCharCodes,
220 } 220 FX_FLOAT* pCharPos,
221 ~CPDF_PageRenderCache() 221 CPDF_Font* pFont,
222 { 222 FX_FLOAT font_size,
223 ClearAll(); 223 const CFX_AffineMatrix* pText2Device,
224 } 224 FX_ARGB fill_argb);
225 void ClearAll(); 225 };
226 void ClearImageData(); 226 class CPDF_PageRenderCache {
227 227 public:
228 FX_DWORD EstimateSize(); 228 CPDF_PageRenderCache(CPDF_Page* pPage) {
229 void CacheOptimization(int32_t dwLimitCacheSi ze); 229 m_pPage = pPage;
230 FX_DWORD GetCachedSize(CPDF_Stream* pStream) const; 230 m_nTimeCount = 0;
231 FX_DWORD GetTimeCount() const 231 m_nCacheSize = 0;
232 { 232 m_pCurImageCache = NULL;
233 return m_nTimeCount; 233 m_bCurFindCache = FALSE;
234 } 234 m_pCurImageCaches = NULL;
235 void SetTimeCount(FX_DWORD dwTimeCount) 235 }
236 { 236 ~CPDF_PageRenderCache() { ClearAll(); }
237 m_nTimeCount = dwTimeCount; 237 void ClearAll();
238 } 238 void ClearImageData();
239 239
240 void GetCachedBitmap(CPDF_Stream* pStream, CF X_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor, 240 FX_DWORD EstimateSize();
241 FX_BOOL bStdCS = FALSE, FX_DWORD GroupFa mily = 0, FX_BOOL bLoadMask = FALSE, 241 void CacheOptimization(int32_t dwLimitCacheSize);
242 CPDF_RenderStatus* pRenderStatus = NULL, int32_t downsampleWidth = 0, int32_t downsampleHeight = 0); 242 FX_DWORD GetCachedSize(CPDF_Stream* pStream) const;
243 243 FX_DWORD GetTimeCount() const { return m_nTimeCount; }
244 void ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap); 244 void SetTimeCount(FX_DWORD dwTimeCount) { m_nTimeCount = dwTimeCount; }
245 void ClearImageCache(CPDF_Stream* pStream); 245
246 CPDF_Page* GetPage() 246 void GetCachedBitmap(CPDF_Stream* pStream,
247 { 247 CFX_DIBSource*& pBitmap,
248 return m_pPage; 248 CFX_DIBSource*& pMask,
249 } 249 FX_DWORD& MatteColor,
250 CFX_MapPtrToPtr m_ImageCaches; 250 FX_BOOL bStdCS = FALSE,
251 public: 251 FX_DWORD GroupFamily = 0,
252 FX_BOOL StartGetCachedBitmap(CPDF_Stream* pStrea m, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, 252 FX_BOOL bLoadMask = FALSE,
253 FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, 253 CPDF_RenderStatus* pRenderStatus = NULL,
254 int32_t downsampleWidth = 0, int32_t downsampleHeight = 0); 254 int32_t downsampleWidth = 0,
255 255 int32_t downsampleHeight = 0);
256 FX_BOOL Continue(IFX_Pause* pPause); 256
257 CPDF_ImageCache* m_pCurImageCache; 257 void ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap);
258 CFX_PtrArray* m_pCurImageCaches; 258 void ClearImageCache(CPDF_Stream* pStream);
259 protected: 259 CPDF_Page* GetPage() { return m_pPage; }
260 friend class CPDF_Page; 260 CFX_MapPtrToPtr m_ImageCaches;
261 CPDF_Page* m_pPage; 261
262 262 public:
263 FX_DWORD m_nTimeCount; 263 FX_BOOL StartGetCachedBitmap(CPDF_Stream* pStream,
264 FX_DWORD m_nCacheSize; 264 FX_BOOL bStdCS = FALSE,
265 FX_BOOL m_bCurFindCache; 265 FX_DWORD GroupFamily = 0,
266 }; 266 FX_BOOL bLoadMask = FALSE,
267 class CPDF_RenderConfig 267 CPDF_RenderStatus* pRenderStatus = NULL,
268 { 268 int32_t downsampleWidth = 0,
269 public: 269 int32_t downsampleHeight = 0);
270 CPDF_RenderConfig(); 270
271 ~CPDF_RenderConfig(); 271 FX_BOOL Continue(IFX_Pause* pPause);
272 int m_HalftoneLimit; 272 CPDF_ImageCache* m_pCurImageCache;
273 int m_RenderStepLimit; 273 CFX_PtrArray* m_pCurImageCaches;
274
275 protected:
276 friend class CPDF_Page;
277 CPDF_Page* m_pPage;
278
279 FX_DWORD m_nTimeCount;
280 FX_DWORD m_nCacheSize;
281 FX_BOOL m_bCurFindCache;
282 };
283 class CPDF_RenderConfig {
284 public:
285 CPDF_RenderConfig();
286 ~CPDF_RenderConfig();
287 int m_HalftoneLimit;
288 int m_RenderStepLimit;
274 }; 289 };
275 290
276 #endif // CORE_INCLUDE_FPDFAPI_FPDF_RENDER_H_ 291 #endif // CORE_INCLUDE_FPDFAPI_FPDF_RENDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698