OLD | NEW |
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_ |
OLD | NEW |