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

Side by Side Diff: core/src/fpdfapi/fpdf_render/render_int.h

Issue 1800523005: Move core/src/ up to core/. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp ('k') | core/src/fpdfdoc/doc_action.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 <map>
11 #include <memory>
12
13 #include "core/include/fpdfapi/fpdf_pageobj.h"
14 #include "core/include/fpdfapi/fpdf_render.h"
15
16 class CFX_GlyphBitmap;
17 class CFX_ImageTransformer;
18 class CPDF_ImageCacheEntry;
19 class CPDF_ImageLoaderHandle;
20 class ICodec_ScanlineDecoder;
21
22 #define TYPE3_MAX_BLUES 16
23
24 class CPDF_Type3Glyphs {
25 public:
26 CPDF_Type3Glyphs() : m_TopBlueCount(0), m_BottomBlueCount(0) {}
27 ~CPDF_Type3Glyphs();
28 void AdjustBlue(FX_FLOAT top,
29 FX_FLOAT bottom,
30 int& top_line,
31 int& bottom_line);
32
33 std::map<FX_DWORD, CFX_GlyphBitmap*> m_GlyphMap;
34 int m_TopBlue[TYPE3_MAX_BLUES];
35 int m_BottomBlue[TYPE3_MAX_BLUES];
36 int m_TopBlueCount;
37 int m_BottomBlueCount;
38 };
39 class CPDF_Type3Cache {
40 public:
41 explicit CPDF_Type3Cache(CPDF_Type3Font* pFont) : m_pFont(pFont) {}
42 ~CPDF_Type3Cache();
43
44 CFX_GlyphBitmap* LoadGlyph(FX_DWORD charcode,
45 const CFX_Matrix* pMatrix,
46 FX_FLOAT retinaScaleX = 1.0f,
47 FX_FLOAT retinaScaleY = 1.0f);
48
49 protected:
50 CFX_GlyphBitmap* RenderGlyph(CPDF_Type3Glyphs* pSize,
51 FX_DWORD charcode,
52 const CFX_Matrix* pMatrix,
53 FX_FLOAT retinaScaleX = 1.0f,
54 FX_FLOAT retinaScaleY = 1.0f);
55 CPDF_Type3Font* const m_pFont;
56 std::map<CFX_ByteString, CPDF_Type3Glyphs*> m_SizeMap;
57 };
58
59 class CPDF_TransferFunc {
60 public:
61 explicit CPDF_TransferFunc(CPDF_Document* pDoc);
62
63 FX_COLORREF TranslateColor(FX_COLORREF src) const;
64 CFX_DIBSource* TranslateImage(const CFX_DIBSource* pSrc,
65 FX_BOOL bAutoDropSrc);
66
67 CPDF_Document* const m_pPDFDoc;
68 FX_BOOL m_bIdentity;
69 uint8_t m_Samples[256 * 3];
70 };
71
72 class CPDF_DocRenderData {
73 public:
74 CPDF_DocRenderData(CPDF_Document* pPDFDoc = NULL);
75 ~CPDF_DocRenderData();
76 CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont);
77 CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObj);
78 CFX_FontCache* GetFontCache() { return m_pFontCache; }
79 void Clear(FX_BOOL bRelease = FALSE);
80 void ReleaseCachedType3(CPDF_Type3Font* pFont);
81 void ReleaseTransferFunc(CPDF_Object* pObj);
82
83 private:
84 using CPDF_Type3CacheMap =
85 std::map<CPDF_Font*, CPDF_CountedObject<CPDF_Type3Cache>*>;
86 using CPDF_TransferFuncMap =
87 std::map<CPDF_Object*, CPDF_CountedObject<CPDF_TransferFunc>*>;
88
89 CPDF_Document* m_pPDFDoc;
90 CFX_FontCache* m_pFontCache;
91 CPDF_Type3CacheMap m_Type3FaceMap;
92 CPDF_TransferFuncMap m_TransferFuncMap;
93 };
94
95 class IPDF_ObjectRenderer {
96 public:
97 static IPDF_ObjectRenderer* Create();
98 virtual ~IPDF_ObjectRenderer() {}
99 virtual FX_BOOL Start(CPDF_RenderStatus* pRenderStatus,
100 const CPDF_PageObject* pObj,
101 const CFX_Matrix* pObj2Device,
102 FX_BOOL bStdCS,
103 int blendType = FXDIB_BLEND_NORMAL) = 0;
104 virtual FX_BOOL Continue(IFX_Pause* pPause) = 0;
105 FX_BOOL m_Result;
106 };
107
108 class CPDF_RenderStatus {
109 public:
110 CPDF_RenderStatus();
111 ~CPDF_RenderStatus();
112 FX_BOOL Initialize(class CPDF_RenderContext* pContext,
113 CFX_RenderDevice* pDevice,
114 const CFX_Matrix* pDeviceMatrix,
115 const CPDF_PageObject* pStopObj,
116 const CPDF_RenderStatus* pParentStatus,
117 const CPDF_GraphicStates* pInitialStates,
118 const CPDF_RenderOptions* pOptions,
119 int transparency,
120 FX_BOOL bDropObjects,
121 CPDF_Dictionary* pFormResource = NULL,
122 FX_BOOL bStdCS = FALSE,
123 CPDF_Type3Char* pType3Char = NULL,
124 FX_ARGB fill_color = 0,
125 FX_DWORD GroupFamily = 0,
126 FX_BOOL bLoadMask = FALSE);
127 void RenderObjectList(const CPDF_PageObjectHolder* pObjectHolder,
128 const CFX_Matrix* pObj2Device);
129 void RenderSingleObject(const CPDF_PageObject* pObj,
130 const CFX_Matrix* pObj2Device);
131 FX_BOOL ContinueSingleObject(const CPDF_PageObject* pObj,
132 const CFX_Matrix* pObj2Device,
133 IFX_Pause* pPause);
134 CPDF_RenderContext* GetContext() { return m_pContext; }
135
136 CPDF_RenderOptions m_Options;
137 CPDF_Dictionary* m_pFormResource;
138 CPDF_Dictionary* m_pPageResource;
139 CFX_ArrayTemplate<CPDF_Type3Font*> m_Type3FontCache;
140
141 protected:
142 friend class CPDF_ImageRenderer;
143 friend class CPDF_RenderContext;
144 void ProcessClipPath(CPDF_ClipPath ClipPath, const CFX_Matrix* pObj2Device);
145 void DrawClipPath(CPDF_ClipPath ClipPath, const CFX_Matrix* pObj2Device);
146 FX_BOOL ProcessTransparency(const CPDF_PageObject* PageObj,
147 const CFX_Matrix* pObj2Device);
148 void ProcessObjectNoClip(const CPDF_PageObject* PageObj,
149 const CFX_Matrix* pObj2Device);
150 void DrawObjWithBackground(const CPDF_PageObject* pObj,
151 const CFX_Matrix* pObj2Device);
152 FX_BOOL DrawObjWithBlend(const CPDF_PageObject* pObj,
153 const CFX_Matrix* pObj2Device);
154 FX_BOOL ProcessPath(const CPDF_PathObject* pPathObj,
155 const CFX_Matrix* pObj2Device);
156 void ProcessPathPattern(const CPDF_PathObject* pPathObj,
157 const CFX_Matrix* pObj2Device,
158 int& filltype,
159 FX_BOOL& bStroke);
160 void DrawPathWithPattern(const CPDF_PathObject* pPathObj,
161 const CFX_Matrix* pObj2Device,
162 CPDF_Color* pColor,
163 FX_BOOL bStroke);
164 void DrawTilingPattern(CPDF_TilingPattern* pPattern,
165 const CPDF_PageObject* pPageObj,
166 const CFX_Matrix* pObj2Device,
167 FX_BOOL bStroke);
168 void DrawShadingPattern(CPDF_ShadingPattern* pPattern,
169 const CPDF_PageObject* pPageObj,
170 const CFX_Matrix* pObj2Device,
171 FX_BOOL bStroke);
172 FX_BOOL SelectClipPath(const CPDF_PathObject* pPathObj,
173 const CFX_Matrix* pObj2Device,
174 FX_BOOL bStroke);
175 FX_BOOL ProcessImage(const CPDF_ImageObject* pImageObj,
176 const CFX_Matrix* pObj2Device);
177 FX_BOOL OutputBitmapAlpha(CPDF_ImageObject* pImageObj,
178 const CFX_Matrix* pImage2Device);
179 FX_BOOL OutputImage(CPDF_ImageObject* pImageObj,
180 const CFX_Matrix* pImage2Device);
181 FX_BOOL OutputDIBSource(const CFX_DIBSource* pOutputBitmap,
182 FX_ARGB fill_argb,
183 int bitmap_alpha,
184 const CFX_Matrix* pImage2Device,
185 CPDF_ImageCacheEntry* pImageCache,
186 FX_DWORD flags);
187 void CompositeDIBitmap(CFX_DIBitmap* pDIBitmap,
188 int left,
189 int top,
190 FX_ARGB mask_argb,
191 int bitmap_alpha,
192 int blend_mode,
193 int bIsolated);
194 FX_BOOL ProcessShading(const CPDF_ShadingObject* pShadingObj,
195 const CFX_Matrix* pObj2Device);
196 void DrawShading(CPDF_ShadingPattern* pPattern,
197 CFX_Matrix* pMatrix,
198 FX_RECT& clip_rect,
199 int alpha,
200 FX_BOOL bAlphaMode);
201 FX_BOOL ProcessType3Text(const CPDF_TextObject* textobj,
202 const CFX_Matrix* pObj2Device);
203 FX_BOOL ProcessText(const CPDF_TextObject* textobj,
204 const CFX_Matrix* pObj2Device,
205 CFX_PathData* pClippingPath);
206 void DrawTextPathWithPattern(const CPDF_TextObject* textobj,
207 const CFX_Matrix* pObj2Device,
208 CPDF_Font* pFont,
209 FX_FLOAT font_size,
210 const CFX_Matrix* pTextMatrix,
211 FX_BOOL bFill,
212 FX_BOOL bStroke);
213 FX_BOOL ProcessForm(const CPDF_FormObject* pFormObj,
214 const CFX_Matrix* pObj2Device);
215 CFX_DIBitmap* GetBackdrop(const CPDF_PageObject* pObj,
216 const FX_RECT& rect,
217 int& left,
218 int& top,
219 FX_BOOL bBackAlphaRequired);
220 CFX_DIBitmap* LoadSMask(CPDF_Dictionary* pSMaskDict,
221 FX_RECT* pClipRect,
222 const CFX_Matrix* pMatrix);
223 void Init(CPDF_RenderContext* pParent);
224 static class CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont);
225 static CPDF_GraphicStates* CloneObjStates(const CPDF_GraphicStates* pPathObj,
226 FX_BOOL bStroke);
227 CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObject) const;
228 FX_ARGB GetFillArgb(const CPDF_PageObject* pObj,
229 FX_BOOL bType3 = FALSE) const;
230 FX_ARGB GetStrokeArgb(const CPDF_PageObject* pObj) const;
231 CPDF_RenderContext* m_pContext;
232 FX_BOOL m_bStopped;
233 void DitherObjectArea(const CPDF_PageObject* pObj,
234 const CFX_Matrix* pObj2Device);
235 FX_BOOL GetObjectClippedRect(const CPDF_PageObject* pObj,
236 const CFX_Matrix* pObj2Device,
237 FX_BOOL bLogical,
238 FX_RECT& rect) const;
239 void GetScaledMatrix(CFX_Matrix& matrix) const;
240
241 protected:
242 static const int kRenderMaxRecursionDepth = 64;
243 static int s_CurrentRecursionDepth;
244
245 CFX_RenderDevice* m_pDevice;
246 CFX_Matrix m_DeviceMatrix;
247 CPDF_ClipPath m_LastClipPath;
248 const CPDF_PageObject* m_pCurObj;
249 const CPDF_PageObject* m_pStopObj;
250 CPDF_GraphicStates m_InitialStates;
251 int m_HalftoneLimit;
252 std::unique_ptr<IPDF_ObjectRenderer> m_pObjectRenderer;
253 FX_BOOL m_bPrint;
254 int m_Transparency;
255 int m_DitherBits;
256 FX_BOOL m_bDropObjects;
257 FX_BOOL m_bStdCS;
258 FX_DWORD m_GroupFamily;
259 FX_BOOL m_bLoadMask;
260 CPDF_Type3Char* m_pType3Char;
261 FX_ARGB m_T3FillColor;
262 int m_curBlend;
263 };
264 class CPDF_ImageLoader {
265 public:
266 CPDF_ImageLoader()
267 : m_pBitmap(nullptr),
268 m_pMask(nullptr),
269 m_MatteColor(0),
270 m_bCached(FALSE),
271 m_nDownsampleWidth(0),
272 m_nDownsampleHeight(0) {}
273 ~CPDF_ImageLoader();
274
275 FX_BOOL Start(const CPDF_ImageObject* pImage,
276 CPDF_PageRenderCache* pCache,
277 CPDF_ImageLoaderHandle*& LoadHandle,
278 FX_BOOL bStdCS = FALSE,
279 FX_DWORD GroupFamily = 0,
280 FX_BOOL bLoadMask = FALSE,
281 CPDF_RenderStatus* pRenderStatus = NULL,
282 int32_t nDownsampleWidth = 0,
283 int32_t nDownsampleHeight = 0);
284 FX_BOOL Continue(CPDF_ImageLoaderHandle* LoadHandle, IFX_Pause* pPause);
285
286 CFX_DIBSource* m_pBitmap;
287 CFX_DIBSource* m_pMask;
288 FX_DWORD m_MatteColor;
289 FX_BOOL m_bCached;
290
291 protected:
292 int32_t m_nDownsampleWidth;
293 int32_t m_nDownsampleHeight;
294 };
295 class CPDF_ImageLoaderHandle {
296 public:
297 CPDF_ImageLoaderHandle();
298 ~CPDF_ImageLoaderHandle();
299
300 FX_BOOL Start(CPDF_ImageLoader* pImageLoader,
301 const CPDF_ImageObject* pImage,
302 CPDF_PageRenderCache* pCache,
303 FX_BOOL bStdCS = FALSE,
304 FX_DWORD GroupFamily = 0,
305 FX_BOOL bLoadMask = FALSE,
306 CPDF_RenderStatus* pRenderStatus = NULL,
307 int32_t nDownsampleWidth = 0,
308 int32_t nDownsampleHeight = 0);
309 FX_BOOL Continue(IFX_Pause* pPause);
310
311 protected:
312 CPDF_ImageLoader* m_pImageLoader;
313 CPDF_PageRenderCache* m_pCache;
314 CPDF_ImageObject* m_pImage;
315 int32_t m_nDownsampleWidth;
316 int32_t m_nDownsampleHeight;
317 };
318
319 class CPDF_ImageRenderer : public IPDF_ObjectRenderer {
320 public:
321 CPDF_ImageRenderer();
322 ~CPDF_ImageRenderer() override;
323
324 // IPDF_ObjectRenderer
325 FX_BOOL Start(CPDF_RenderStatus* pStatus,
326 const CPDF_PageObject* pObj,
327 const CFX_Matrix* pObj2Device,
328 FX_BOOL bStdCS,
329 int blendType = FXDIB_BLEND_NORMAL) override;
330 FX_BOOL Continue(IFX_Pause* pPause) override;
331
332 FX_BOOL Start(CPDF_RenderStatus* pStatus,
333 const CFX_DIBSource* pDIBSource,
334 FX_ARGB bitmap_argb,
335 int bitmap_alpha,
336 const CFX_Matrix* pImage2Device,
337 FX_DWORD flags,
338 FX_BOOL bStdCS,
339 int blendType = FXDIB_BLEND_NORMAL);
340
341 protected:
342 CPDF_RenderStatus* m_pRenderStatus;
343 const CPDF_ImageObject* m_pImageObject;
344 int m_Status;
345 const CFX_Matrix* m_pObj2Device;
346 CFX_Matrix m_ImageMatrix;
347 CPDF_ImageLoader m_Loader;
348 const CFX_DIBSource* m_pDIBSource;
349 CFX_DIBitmap* m_pClone;
350 int m_BitmapAlpha;
351 FX_BOOL m_bPatternColor;
352 CPDF_Pattern* m_pPattern;
353 FX_ARGB m_FillArgb;
354 FX_DWORD m_Flags;
355 CFX_ImageTransformer* m_pTransformer;
356 void* m_DeviceHandle;
357 CPDF_ImageLoaderHandle* m_LoadHandle;
358 FX_BOOL m_bStdCS;
359 int m_BlendType;
360 FX_BOOL StartBitmapAlpha();
361 FX_BOOL StartDIBSource();
362 FX_BOOL StartRenderDIBSource();
363 FX_BOOL StartLoadDIBSource();
364 FX_BOOL DrawMaskedImage();
365 FX_BOOL DrawPatternImage(const CFX_Matrix* pObj2Device);
366 };
367
368 class CPDF_ScaledRenderBuffer {
369 public:
370 CPDF_ScaledRenderBuffer();
371 ~CPDF_ScaledRenderBuffer();
372
373 FX_BOOL Initialize(CPDF_RenderContext* pContext,
374 CFX_RenderDevice* pDevice,
375 const FX_RECT& pRect,
376 const CPDF_PageObject* pObj,
377 const CPDF_RenderOptions* pOptions = NULL,
378 int max_dpi = 0);
379 CFX_RenderDevice* GetDevice() {
380 return m_pBitmapDevice ? m_pBitmapDevice.get() : m_pDevice;
381 }
382 CFX_Matrix* GetMatrix() { return &m_Matrix; }
383 void OutputToDevice();
384
385 private:
386 CFX_RenderDevice* m_pDevice;
387 CPDF_RenderContext* m_pContext;
388 FX_RECT m_Rect;
389 const CPDF_PageObject* m_pObject;
390 std::unique_ptr<CFX_FxgeDevice> m_pBitmapDevice;
391 CFX_Matrix m_Matrix;
392 };
393
394 class CPDF_DeviceBuffer {
395 public:
396 CPDF_DeviceBuffer();
397 ~CPDF_DeviceBuffer();
398 FX_BOOL Initialize(CPDF_RenderContext* pContext,
399 CFX_RenderDevice* pDevice,
400 FX_RECT* pRect,
401 const CPDF_PageObject* pObj,
402 int max_dpi = 0);
403 void OutputToDevice();
404 CFX_DIBitmap* GetBitmap() const { return m_pBitmap.get(); }
405 const CFX_Matrix* GetMatrix() const { return &m_Matrix; }
406
407 private:
408 CFX_RenderDevice* m_pDevice;
409 CPDF_RenderContext* m_pContext;
410 FX_RECT m_Rect;
411 const CPDF_PageObject* m_pObject;
412 std::unique_ptr<CFX_DIBitmap> m_pBitmap;
413 CFX_Matrix m_Matrix;
414 };
415
416 class CPDF_ImageCacheEntry {
417 public:
418 CPDF_ImageCacheEntry(CPDF_Document* pDoc, CPDF_Stream* pStream);
419 ~CPDF_ImageCacheEntry();
420 void ClearImageData();
421 void Reset(const CFX_DIBitmap* pBitmap);
422 FX_BOOL GetCachedBitmap(CFX_DIBSource*& pBitmap,
423 CFX_DIBSource*& pMask,
424 FX_DWORD& MatteColor,
425 CPDF_Dictionary* pPageResources,
426 FX_BOOL bStdCS = FALSE,
427 FX_DWORD GroupFamily = 0,
428 FX_BOOL bLoadMask = FALSE,
429 CPDF_RenderStatus* pRenderStatus = NULL,
430 int32_t downsampleWidth = 0,
431 int32_t downsampleHeight = 0);
432 FX_DWORD EstimateSize() const { return m_dwCacheSize; }
433 FX_DWORD GetTimeCount() const { return m_dwTimeCount; }
434 CPDF_Stream* GetStream() const { return m_pStream; }
435 void SetTimeCount(FX_DWORD dwTimeCount) { m_dwTimeCount = dwTimeCount; }
436 int m_dwTimeCount;
437
438 public:
439 int StartGetCachedBitmap(CPDF_Dictionary* pFormResources,
440 CPDF_Dictionary* pPageResources,
441 FX_BOOL bStdCS = FALSE,
442 FX_DWORD GroupFamily = 0,
443 FX_BOOL bLoadMask = FALSE,
444 CPDF_RenderStatus* pRenderStatus = NULL,
445 int32_t downsampleWidth = 0,
446 int32_t downsampleHeight = 0);
447 int Continue(IFX_Pause* pPause);
448 CFX_DIBSource* DetachBitmap();
449 CFX_DIBSource* DetachMask();
450 CFX_DIBSource* m_pCurBitmap;
451 CFX_DIBSource* m_pCurMask;
452 FX_DWORD m_MatteColor;
453 CPDF_RenderStatus* m_pRenderStatus;
454
455 protected:
456 void ContinueGetCachedBitmap();
457
458 CPDF_Document* m_pDocument;
459 CPDF_Stream* m_pStream;
460 CFX_DIBSource* m_pCachedBitmap;
461 CFX_DIBSource* m_pCachedMask;
462 FX_DWORD m_dwCacheSize;
463 void CalcSize();
464 };
465 typedef struct {
466 FX_FLOAT m_DecodeMin;
467 FX_FLOAT m_DecodeStep;
468 int m_ColorKeyMin;
469 int m_ColorKeyMax;
470 } DIB_COMP_DATA;
471
472 class CPDF_DIBSource : public CFX_DIBSource {
473 public:
474 CPDF_DIBSource();
475 ~CPDF_DIBSource() override;
476
477 FX_BOOL Load(CPDF_Document* pDoc,
478 const CPDF_Stream* pStream,
479 CPDF_DIBSource** ppMask,
480 FX_DWORD* pMatteColor,
481 CPDF_Dictionary* pFormResources,
482 CPDF_Dictionary* pPageResources,
483 FX_BOOL bStdCS = FALSE,
484 FX_DWORD GroupFamily = 0,
485 FX_BOOL bLoadMask = FALSE);
486
487 // CFX_DIBSource
488 FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const override;
489 uint8_t* GetBuffer() const override;
490 const uint8_t* GetScanline(int line) const override;
491 void DownSampleScanline(int line,
492 uint8_t* dest_scan,
493 int dest_bpp,
494 int dest_width,
495 FX_BOOL bFlipX,
496 int clip_left,
497 int clip_width) const override;
498 void SetDownSampleSize(int dest_width, int dest_height) override;
499
500 CFX_DIBitmap* GetBitmap() const;
501 void ReleaseBitmap(CFX_DIBitmap* pBitmap) const;
502 void ClearImageData();
503 FX_DWORD GetMatteColor() const { return m_MatteColor; }
504
505 int StartLoadDIBSource(CPDF_Document* pDoc,
506 const CPDF_Stream* pStream,
507 FX_BOOL bHasMask,
508 CPDF_Dictionary* pFormResources,
509 CPDF_Dictionary* pPageResources,
510 FX_BOOL bStdCS = FALSE,
511 FX_DWORD GroupFamily = 0,
512 FX_BOOL bLoadMask = FALSE);
513 int ContinueLoadDIBSource(IFX_Pause* pPause);
514 int StratLoadMask();
515 int StartLoadMaskDIB();
516 int ContinueLoadMaskDIB(IFX_Pause* pPause);
517 int ContinueToLoadMask();
518 CPDF_DIBSource* DetachMask();
519
520 private:
521 bool LoadColorInfo(const CPDF_Dictionary* pFormResources,
522 const CPDF_Dictionary* pPageResources);
523 DIB_COMP_DATA* GetDecodeAndMaskArray(FX_BOOL& bDefaultDecode,
524 FX_BOOL& bColorKey);
525 CPDF_DIBSource* LoadMask(FX_DWORD& MatteColor);
526 CPDF_DIBSource* LoadMaskDIB(CPDF_Stream* pMask);
527 void LoadJpxBitmap();
528 void LoadPalette();
529 int CreateDecoder();
530 void TranslateScanline24bpp(uint8_t* dest_scan,
531 const uint8_t* src_scan) const;
532 void ValidateDictParam();
533 void DownSampleScanline1Bit(int orig_Bpp,
534 int dest_Bpp,
535 FX_DWORD src_width,
536 const uint8_t* pSrcLine,
537 uint8_t* dest_scan,
538 int dest_width,
539 FX_BOOL bFlipX,
540 int clip_left,
541 int clip_width) const;
542 void DownSampleScanline8Bit(int orig_Bpp,
543 int dest_Bpp,
544 FX_DWORD src_width,
545 const uint8_t* pSrcLine,
546 uint8_t* dest_scan,
547 int dest_width,
548 FX_BOOL bFlipX,
549 int clip_left,
550 int clip_width) const;
551 void DownSampleScanline32Bit(int orig_Bpp,
552 int dest_Bpp,
553 FX_DWORD src_width,
554 const uint8_t* pSrcLine,
555 uint8_t* dest_scan,
556 int dest_width,
557 FX_BOOL bFlipX,
558 int clip_left,
559 int clip_width) const;
560 FX_BOOL TransMask() const;
561
562 CPDF_Document* m_pDocument;
563 const CPDF_Stream* m_pStream;
564 std::unique_ptr<CPDF_StreamAcc> m_pStreamAcc;
565 const CPDF_Dictionary* m_pDict;
566 CPDF_ColorSpace* m_pColorSpace;
567 FX_DWORD m_Family;
568 FX_DWORD m_bpc;
569 FX_DWORD m_bpc_orig;
570 FX_DWORD m_nComponents;
571 FX_DWORD m_GroupFamily;
572 FX_DWORD m_MatteColor;
573 FX_BOOL m_bLoadMask;
574 FX_BOOL m_bDefaultDecode;
575 FX_BOOL m_bImageMask;
576 FX_BOOL m_bDoBpcCheck;
577 FX_BOOL m_bColorKey;
578 FX_BOOL m_bHasMask;
579 FX_BOOL m_bStdCS;
580 DIB_COMP_DATA* m_pCompData;
581 uint8_t* m_pLineBuf;
582 uint8_t* m_pMaskedLine;
583 std::unique_ptr<CFX_DIBitmap> m_pCachedBitmap;
584 std::unique_ptr<ICodec_ScanlineDecoder> m_pDecoder;
585 void* m_pJbig2Context;
586 CPDF_DIBSource* m_pMask;
587 std::unique_ptr<CPDF_StreamAcc> m_pGlobalStream;
588 CPDF_Stream* m_pMaskStream;
589 int m_Status;
590 };
591
592 #define FPDF_HUGE_IMAGE_SIZE 60000000
593 class CPDF_DIBTransferFunc : public CFX_FilteredDIB {
594 public:
595 CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFunc);
596 ~CPDF_DIBTransferFunc() override;
597
598 // CFX_FilteredDIB
599 FXDIB_Format GetDestFormat() override;
600 FX_ARGB* GetDestPalette() override { return NULL; }
601 void TranslateScanline(uint8_t* dest_buf,
602 const uint8_t* src_buf) const override;
603 void TranslateDownSamples(uint8_t* dest_buf,
604 const uint8_t* src_buf,
605 int pixels,
606 int Bpp) const override;
607
608 const uint8_t* m_RampR;
609 const uint8_t* m_RampG;
610 const uint8_t* m_RampB;
611 };
612
613 struct _CPDF_UniqueKeyGen {
614 void Generate(int count, ...);
615 FX_CHAR m_Key[128];
616 int m_KeyLen;
617 };
618
619 #endif // CORE_SRC_FPDFAPI_FPDF_RENDER_RENDER_INT_H_
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp ('k') | core/src/fpdfdoc/doc_action.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698