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

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

Issue 1824033002: Split core/include/fpdfapi/fpdf_resource.h (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/fxcodec/codec/fx_codec_jpx_opj.cpp ('k') | core/include/fpdfdoc/fpdf_tagged.h » ('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_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_
8 #define CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_
9
10 #include <map>
11
12 #include "core/fpdfapi/fpdf_parser/include/cpdf_stream.h"
13 #include "core/fpdfapi/fpdf_parser/include/cpdf_stream_acc.h"
14 #include "core/fxcrt/include/fx_system.h"
15 #include "core/include/fxge/fx_font.h"
16
17 class CFX_CTTGSUBTable;
18 class CFX_DIBitmap;
19 class CFX_Font;
20 class CFX_SubstFont;
21 class CPDF_CID2UnicodeMap;
22 class CPDF_CIDFont;
23 class CPDF_CMap;
24 class CPDF_Color;
25 class CPDF_ColorSpace;
26 class CPDF_Document;
27 class CPDF_FontEncoding;
28 class CPDF_Form;
29 class CPDF_Function;
30 class CPDF_Image;
31 class CPDF_Page;
32 class CPDF_Pattern;
33 class CPDF_RenderContext;
34 class CPDF_ShadingPattern;
35 class CPDF_TilingPattern;
36 class CPDF_ToUnicodeMap;
37 class CPDF_TrueTypeFont;
38 class CPDF_Type1Font;
39 class CPDF_Type3Font;
40 typedef struct FT_FaceRec_* FXFT_Face;
41
42 FX_WCHAR PDF_UnicodeFromAdobeName(const FX_CHAR* name);
43 CFX_ByteString PDF_AdobeNameFromUnicode(FX_WCHAR unicode);
44 const FX_CHAR* FCS_GetAltStr(FX_WCHAR unicode);
45 const FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding,
46 uint8_t charcode);
47
48 FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode);
49 FX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode);
50 const uint16_t* PDF_UnicodesForPredefinedCharSet(int encoding);
51 const FX_CHAR* GetAdobeCharName(int iBaseEncoding,
52 const CFX_ByteString* pCharNames,
53 int charcode);
54
55 template <class T>
56 class CPDF_CountedObject {
57 public:
58 explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) {}
59 void reset(T* ptr) { // CAUTION: tosses prior ref counts.
60 m_nCount = 1;
61 m_pObj = ptr;
62 }
63 void clear() { // Now you're all weak ptrs ...
64 delete m_pObj;
65 m_pObj = nullptr;
66 }
67 T* get() const { return m_pObj; }
68 T* AddRef() {
69 FXSYS_assert(m_pObj);
70 ++m_nCount;
71 return m_pObj;
72 }
73 void RemoveRef() {
74 if (m_nCount)
75 --m_nCount;
76 }
77 size_t use_count() const { return m_nCount; }
78
79 protected:
80 size_t m_nCount;
81 T* m_pObj;
82 };
83 using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>;
84 using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>;
85
86 #define PDFFONT_FIXEDPITCH 1
87 #define PDFFONT_SERIF 2
88 #define PDFFONT_SYMBOLIC 4
89 #define PDFFONT_SCRIPT 8
90 #define PDFFONT_NONSYMBOLIC 32
91 #define PDFFONT_ITALIC 64
92 #define PDFFONT_ALLCAP 0x10000
93 #define PDFFONT_SMALLCAP 0x20000
94 #define PDFFONT_FORCEBOLD 0x40000
95 #define PDFFONT_USEEXTERNATTR 0x80000
96
97 class CPDF_Font {
98 public:
99 static CPDF_Font* CreateFontF(CPDF_Document* pDoc,
100 CPDF_Dictionary* pFontDict);
101 static CPDF_Font* GetStockFont(CPDF_Document* pDoc,
102 const CFX_ByteStringC& fontname);
103 static const FX_DWORD kInvalidCharCode = static_cast<FX_DWORD>(-1);
104
105 virtual ~CPDF_Font();
106
107 virtual bool IsType1Font() const;
108 virtual bool IsTrueTypeFont() const;
109 virtual bool IsType3Font() const;
110 virtual bool IsCIDFont() const;
111 virtual const CPDF_Type1Font* AsType1Font() const;
112 virtual CPDF_Type1Font* AsType1Font();
113 virtual const CPDF_TrueTypeFont* AsTrueTypeFont() const;
114 virtual CPDF_TrueTypeFont* AsTrueTypeFont();
115 virtual const CPDF_Type3Font* AsType3Font() const;
116 virtual CPDF_Type3Font* AsType3Font();
117 virtual const CPDF_CIDFont* AsCIDFont() const;
118 virtual CPDF_CIDFont* AsCIDFont();
119
120 virtual FX_BOOL IsVertWriting() const;
121 virtual FX_BOOL IsUnicodeCompatible() const;
122 virtual FX_DWORD GetNextChar(const FX_CHAR* pString,
123 int nStrLen,
124 int& offset) const;
125 virtual int CountChar(const FX_CHAR* pString, int size) const;
126 virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const;
127 virtual int GetCharSize(FX_DWORD charcode) const;
128 virtual int GlyphFromCharCode(FX_DWORD charcode,
129 FX_BOOL* pVertGlyph = nullptr);
130 virtual int GlyphFromCharCodeExt(FX_DWORD charcode);
131 virtual CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const;
132 virtual FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const;
133
134 const CFX_ByteString& GetBaseFont() const { return m_BaseFont; }
135 const CFX_SubstFont* GetSubstFont() const { return m_Font.GetSubstFont(); }
136 FX_DWORD GetFlags() const { return m_Flags; }
137 FX_BOOL IsEmbedded() const { return IsType3Font() || m_pFontFile != nullptr; }
138 CPDF_StreamAcc* GetFontFile() const { return m_pFontFile; }
139 CPDF_Dictionary* GetFontDict() const { return m_pFontDict; }
140 FX_BOOL IsStandardFont() const;
141 FXFT_Face GetFace() const { return m_Font.GetFace(); }
142 void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const;
143
144 void GetFontBBox(FX_RECT& rect) const { rect = m_FontBBox; }
145 int GetTypeAscent() const { return m_Ascent; }
146 int GetTypeDescent() const { return m_Descent; }
147 int GetItalicAngle() const { return m_ItalicAngle; }
148 int GetStemV() const { return m_StemV; }
149 int GetStringWidth(const FX_CHAR* pString, int size);
150
151 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0;
152 virtual FX_RECT GetCharBBox(FX_DWORD charcode, int level = 0) = 0;
153
154 CPDF_Document* m_pDocument;
155 CFX_Font m_Font;
156
157 protected:
158 CPDF_Font();
159
160 virtual FX_BOOL Load() = 0;
161
162 FX_BOOL Initialize();
163 void LoadUnicodeMap();
164 void LoadPDFEncoding(CPDF_Object* pEncoding,
165 int& iBaseEncoding,
166 CFX_ByteString*& pCharNames,
167 FX_BOOL bEmbedded,
168 FX_BOOL bTrueType);
169 void LoadFontDescriptor(CPDF_Dictionary* pDict);
170 void CheckFontMetrics();
171
172 CFX_ByteString m_BaseFont;
173 CPDF_StreamAcc* m_pFontFile;
174 CPDF_Dictionary* m_pFontDict;
175 CPDF_ToUnicodeMap* m_pToUnicodeMap;
176 FX_BOOL m_bToUnicodeLoaded;
177 int m_Flags;
178 FX_RECT m_FontBBox;
179 int m_StemV;
180 int m_Ascent;
181 int m_Descent;
182 int m_ItalicAngle;
183 };
184
185 #define PDFFONT_ENCODING_BUILTIN 0
186 #define PDFFONT_ENCODING_WINANSI 1
187 #define PDFFONT_ENCODING_MACROMAN 2
188 #define PDFFONT_ENCODING_MACEXPERT 3
189 #define PDFFONT_ENCODING_STANDARD 4
190 #define PDFFONT_ENCODING_ADOBE_SYMBOL 5
191 #define PDFFONT_ENCODING_ZAPFDINGBATS 6
192 #define PDFFONT_ENCODING_PDFDOC 7
193 #define PDFFONT_ENCODING_MS_SYMBOL 8
194 #define PDFFONT_ENCODING_UNICODE 9
195
196 class CPDF_FontEncoding {
197 public:
198 CPDF_FontEncoding();
199
200 CPDF_FontEncoding(int PredefinedEncoding);
201
202 void LoadEncoding(CPDF_Object* pEncoding);
203
204 FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const;
205
206 FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const {
207 return m_Unicodes[charcode];
208 }
209
210 int CharCodeFromUnicode(FX_WCHAR unicode) const;
211
212 void SetUnicode(uint8_t charcode, FX_WCHAR unicode) {
213 m_Unicodes[charcode] = unicode;
214 }
215
216 CPDF_Object* Realize();
217
218 public:
219 FX_WCHAR m_Unicodes[256];
220 };
221
222 class CPDF_SimpleFont : public CPDF_Font {
223 public:
224 CPDF_SimpleFont();
225 ~CPDF_SimpleFont() override;
226
227 // CPDF_Font:
228 int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
229 FX_RECT GetCharBBox(FX_DWORD charcode, int level = 0) override;
230 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override;
231 FX_BOOL IsUnicodeCompatible() const override;
232 CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const override;
233 FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const override;
234
235 CPDF_FontEncoding* GetEncoding() { return &m_Encoding; }
236
237 protected:
238 virtual void LoadGlyphMap() = 0;
239
240 FX_BOOL LoadCommon();
241 void LoadSubstFont();
242 void LoadFaceMetrics();
243 void LoadCharMetrics(int charcode);
244
245 CPDF_FontEncoding m_Encoding;
246 uint16_t m_GlyphIndex[256];
247 uint16_t m_ExtGID[256];
248 CFX_ByteString* m_pCharNames;
249 int m_BaseEncoding;
250 uint16_t m_CharWidth[256];
251 FX_SMALL_RECT m_CharBBox[256];
252 FX_BOOL m_bUseFontWidth;
253 };
254
255 class CPDF_Type1Font : public CPDF_SimpleFont {
256 public:
257 CPDF_Type1Font();
258
259 // CPDF_Font:
260 bool IsType1Font() const override;
261 const CPDF_Type1Font* AsType1Font() const override;
262 CPDF_Type1Font* AsType1Font() override;
263 int GlyphFromCharCodeExt(FX_DWORD charcode) override;
264
265 int GetBase14Font() const { return m_Base14Font; }
266
267 protected:
268 // CPDF_Font:
269 FX_BOOL Load() override;
270
271 // CPDF_SimpleFont:
272 void LoadGlyphMap() override;
273
274 int m_Base14Font;
275 };
276
277 class CPDF_TrueTypeFont : public CPDF_SimpleFont {
278 public:
279 CPDF_TrueTypeFont();
280
281 // CPDF_Font:
282 bool IsTrueTypeFont() const override;
283 const CPDF_TrueTypeFont* AsTrueTypeFont() const override;
284 CPDF_TrueTypeFont* AsTrueTypeFont() override;
285
286 protected:
287 // CPDF_Font:
288 FX_BOOL Load() override;
289
290 // CPDF_SimpleFont:
291 void LoadGlyphMap() override;
292 };
293
294 class CPDF_Type3Char {
295 public:
296 // Takes ownership of |pForm|.
297 explicit CPDF_Type3Char(CPDF_Form* pForm);
298 ~CPDF_Type3Char();
299
300 FX_BOOL LoadBitmap(CPDF_RenderContext* pContext);
301
302 CPDF_Form* m_pForm;
303 CFX_DIBitmap* m_pBitmap;
304 FX_BOOL m_bColored;
305 int m_Width;
306 CFX_Matrix m_ImageMatrix;
307 FX_RECT m_BBox;
308 };
309
310 class CPDF_Type3Font : public CPDF_SimpleFont {
311 public:
312 CPDF_Type3Font();
313 ~CPDF_Type3Font() override;
314
315 // CPDF_Font:
316 bool IsType3Font() const override;
317 const CPDF_Type3Font* AsType3Font() const override;
318 CPDF_Type3Font* AsType3Font() override;
319 int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
320 FX_RECT GetCharBBox(FX_DWORD charcode, int level = 0) override;
321
322 void SetPageResources(CPDF_Dictionary* pResources) {
323 m_pPageResources = pResources;
324 }
325 CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0);
326 void CheckType3FontMetrics();
327
328 CFX_Matrix& GetFontMatrix() { return m_FontMatrix; }
329
330 protected:
331 CFX_Matrix m_FontMatrix;
332
333 private:
334 // CPDF_Font:
335 FX_BOOL Load() override;
336
337 // CPDF_SimpleFont:
338 void LoadGlyphMap() override {}
339
340 int m_CharWidthL[256];
341 CPDF_Dictionary* m_pCharProcs;
342 CPDF_Dictionary* m_pPageResources;
343 CPDF_Dictionary* m_pFontResources;
344 std::map<FX_DWORD, CPDF_Type3Char*> m_CacheMap;
345 };
346
347 enum CIDSet : uint8_t {
348 CIDSET_UNKNOWN,
349 CIDSET_GB1,
350 CIDSET_CNS1,
351 CIDSET_JAPAN1,
352 CIDSET_KOREA1,
353 CIDSET_UNICODE,
354 CIDSET_NUM_SETS
355 };
356
357 class CPDF_CIDFont : public CPDF_Font {
358 public:
359 CPDF_CIDFont();
360 ~CPDF_CIDFont() override;
361
362 static FX_FLOAT CIDTransformToFloat(uint8_t ch);
363
364 // CPDF_Font:
365 bool IsCIDFont() const override;
366 const CPDF_CIDFont* AsCIDFont() const override;
367 CPDF_CIDFont* AsCIDFont() override;
368 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override;
369 int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
370 FX_RECT GetCharBBox(FX_DWORD charcode, int level = 0) override;
371 FX_DWORD GetNextChar(const FX_CHAR* pString,
372 int nStrLen,
373 int& offset) const override;
374 int CountChar(const FX_CHAR* pString, int size) const override;
375 int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override;
376 int GetCharSize(FX_DWORD charcode) const override;
377 FX_BOOL IsVertWriting() const override;
378 FX_BOOL IsUnicodeCompatible() const override;
379 FX_BOOL Load() override;
380 CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const override;
381 FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const override;
382
383 FX_BOOL LoadGB2312();
384 uint16_t CIDFromCharCode(FX_DWORD charcode) const;
385 const uint8_t* GetCIDTransform(uint16_t CID) const;
386 short GetVertWidth(uint16_t CID) const;
387 void GetVertOrigin(uint16_t CID, short& vx, short& vy) const;
388 virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const;
389
390 protected:
391 int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL* pVertGlyph);
392 void LoadMetricsArray(CPDF_Array* pArray,
393 CFX_DWordArray& result,
394 int nElements);
395 void LoadSubstFont();
396 FX_WCHAR GetUnicodeFromCharCode(FX_DWORD charcode) const;
397
398 CPDF_CMap* m_pCMap;
399 CPDF_CMap* m_pAllocatedCMap;
400 CPDF_CID2UnicodeMap* m_pCID2UnicodeMap;
401 CIDSet m_Charset;
402 FX_BOOL m_bType1;
403 CPDF_StreamAcc* m_pCIDToGIDMap;
404 FX_BOOL m_bCIDIsGID;
405 uint16_t m_DefaultWidth;
406 uint16_t* m_pAnsiWidths;
407 FX_SMALL_RECT m_CharBBox[256];
408 CFX_DWordArray m_WidthList;
409 short m_DefaultVY;
410 short m_DefaultW1;
411 CFX_DWordArray m_VertMetrics;
412 FX_BOOL m_bAdobeCourierStd;
413 CFX_CTTGSUBTable* m_pTTGSUBTable;
414 };
415
416 #define PDFCS_DEVICEGRAY 1
417 #define PDFCS_DEVICERGB 2
418 #define PDFCS_DEVICECMYK 3
419 #define PDFCS_CALGRAY 4
420 #define PDFCS_CALRGB 5
421 #define PDFCS_LAB 6
422 #define PDFCS_ICCBASED 7
423 #define PDFCS_SEPARATION 8
424 #define PDFCS_DEVICEN 9
425 #define PDFCS_INDEXED 10
426 #define PDFCS_PATTERN 11
427
428 class CPDF_ColorSpace {
429 public:
430 static CPDF_ColorSpace* GetStockCS(int Family);
431
432 static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj);
433
434 void ReleaseCS();
435
436 int GetBufSize() const;
437 FX_FLOAT* CreateBuf();
438 void GetDefaultColor(FX_FLOAT* buf) const;
439 FX_DWORD CountComponents() const { return m_nComponents; }
440 int GetFamily() const { return m_Family; }
441 virtual void GetDefaultValue(int iComponent,
442 FX_FLOAT& value,
443 FX_FLOAT& min,
444 FX_FLOAT& max) const {
445 value = 0;
446 min = 0;
447 max = 1.0f;
448 }
449
450 FX_BOOL sRGB() const;
451 virtual FX_BOOL GetRGB(FX_FLOAT* pBuf,
452 FX_FLOAT& R,
453 FX_FLOAT& G,
454 FX_FLOAT& B) const = 0;
455 virtual FX_BOOL SetRGB(FX_FLOAT* pBuf,
456 FX_FLOAT R,
457 FX_FLOAT G,
458 FX_FLOAT B) const {
459 return FALSE;
460 }
461
462 FX_BOOL GetCMYK(FX_FLOAT* pBuf,
463 FX_FLOAT& c,
464 FX_FLOAT& m,
465 FX_FLOAT& y,
466 FX_FLOAT& k) const;
467 FX_BOOL SetCMYK(FX_FLOAT* pBuf,
468 FX_FLOAT c,
469 FX_FLOAT m,
470 FX_FLOAT y,
471 FX_FLOAT k) const;
472
473 virtual void TranslateImageLine(uint8_t* dest_buf,
474 const uint8_t* src_buf,
475 int pixels,
476 int image_width,
477 int image_height,
478 FX_BOOL bTransMask = FALSE) const;
479
480 CPDF_Array*& GetArray() { return m_pArray; }
481 int GetMaxIndex() const;
482 virtual CPDF_ColorSpace* GetBaseCS() const { return NULL; }
483
484 virtual void EnableStdConversion(FX_BOOL bEnabled);
485
486 CPDF_Document* const m_pDocument;
487
488 protected:
489 CPDF_ColorSpace(CPDF_Document* pDoc, int family, FX_DWORD nComponents)
490 : m_pDocument(pDoc),
491 m_Family(family),
492 m_nComponents(nComponents),
493 m_pArray(nullptr),
494 m_dwStdConversion(0) {}
495 virtual ~CPDF_ColorSpace() {}
496 virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
497 return TRUE;
498 }
499 virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf,
500 FX_FLOAT& c,
501 FX_FLOAT& m,
502 FX_FLOAT& y,
503 FX_FLOAT& k) const {
504 return FALSE;
505 }
506 virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf,
507 FX_FLOAT c,
508 FX_FLOAT m,
509 FX_FLOAT y,
510 FX_FLOAT k) const {
511 return FALSE;
512 }
513
514 int m_Family;
515 FX_DWORD m_nComponents;
516 CPDF_Array* m_pArray;
517 FX_DWORD m_dwStdConversion;
518 };
519 class CPDF_Color {
520 public:
521 CPDF_Color() : m_pCS(NULL), m_pBuffer(NULL) {}
522
523 CPDF_Color(int family);
524
525 ~CPDF_Color();
526
527 FX_BOOL IsNull() const { return !m_pBuffer; }
528
529 FX_BOOL IsEqual(const CPDF_Color& other) const;
530
531 FX_BOOL IsPattern() const {
532 return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;
533 }
534
535 void Copy(const CPDF_Color* pSrc);
536
537 void SetColorSpace(CPDF_ColorSpace* pCS);
538
539 void SetValue(FX_FLOAT* comp);
540
541 void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);
542
543 FX_BOOL GetRGB(int& R, int& G, int& B) const;
544
545 CPDF_Pattern* GetPattern() const;
546
547 CPDF_ColorSpace* GetPatternCS() const;
548
549 FX_FLOAT* GetPatternColor() const;
550
551 CPDF_ColorSpace* m_pCS;
552
553 protected:
554 void ReleaseBuffer();
555 void ReleaseColorSpace();
556 FX_FLOAT* m_pBuffer;
557 };
558
559 class CPDF_Pattern {
560 public:
561 enum PatternType { TILING = 1, SHADING };
562
563 virtual ~CPDF_Pattern();
564
565 void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
566
567 const PatternType m_PatternType;
568 CPDF_Document* const m_pDocument;
569 CPDF_Object* const m_pPatternObj;
570 CFX_Matrix m_Pattern2Form;
571 CFX_Matrix m_ParentMatrix;
572
573 protected:
574 CPDF_Pattern(PatternType type,
575 CPDF_Document* pDoc,
576 CPDF_Object* pObj,
577 const CFX_Matrix* pParentMatrix);
578
579 FX_BOOL m_bForceClear;
580 };
581
582 class CPDF_TilingPattern : public CPDF_Pattern {
583 public:
584 CPDF_TilingPattern(CPDF_Document* pDoc,
585 CPDF_Object* pPatternObj,
586 const CFX_Matrix* parentMatrix);
587
588 ~CPDF_TilingPattern() override;
589
590 FX_BOOL Load();
591
592 FX_BOOL m_bColored;
593
594 CFX_FloatRect m_BBox;
595
596 FX_FLOAT m_XStep;
597
598 FX_FLOAT m_YStep;
599
600 CPDF_Form* m_pForm;
601 };
602
603 typedef enum {
604 kInvalidShading = 0,
605 kFunctionBasedShading = 1,
606 kAxialShading = 2,
607 kRadialShading = 3,
608 kFreeFormGouraudTriangleMeshShading = 4,
609 kLatticeFormGouraudTriangleMeshShading = 5,
610 kCoonsPatchMeshShading = 6,
611 kTensorProductPatchMeshShading = 7,
612 kMaxShading = 8
613 } ShadingType;
614
615 class CPDF_ShadingPattern : public CPDF_Pattern {
616 public:
617 CPDF_ShadingPattern(CPDF_Document* pDoc,
618 CPDF_Object* pPatternObj,
619 FX_BOOL bShading,
620 const CFX_Matrix* parentMatrix);
621
622 ~CPDF_ShadingPattern() override;
623
624 bool IsMeshShading() const {
625 return m_ShadingType == kFreeFormGouraudTriangleMeshShading ||
626 m_ShadingType == kLatticeFormGouraudTriangleMeshShading ||
627 m_ShadingType == kCoonsPatchMeshShading ||
628 m_ShadingType == kTensorProductPatchMeshShading;
629 }
630 FX_BOOL Load();
631
632 ShadingType m_ShadingType;
633 FX_BOOL m_bShadingObj;
634 CPDF_Object* m_pShadingObj;
635
636 // Still keep |m_pCS| as some CPDF_ColorSpace (name object) are not managed
637 // as counted objects. Refer to CPDF_DocPageData::GetColorSpace.
638 CPDF_ColorSpace* m_pCS;
639
640 CPDF_CountedColorSpace* m_pCountedCS;
641 CPDF_Function* m_pFunctions[4];
642 int m_nFuncs;
643 };
644
645 struct CPDF_MeshVertex {
646 FX_FLOAT x, y;
647 FX_FLOAT r, g, b;
648 };
649 class CPDF_MeshStream {
650 public:
651 FX_BOOL Load(CPDF_Stream* pShadingStream,
652 CPDF_Function** pFuncs,
653 int nFuncs,
654 CPDF_ColorSpace* pCS);
655
656 FX_DWORD GetFlag();
657
658 void GetCoords(FX_FLOAT& x, FX_FLOAT& y);
659
660 void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b);
661
662 FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_Matrix* pObject2Bitmap);
663
664 FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex,
665 int count,
666 CFX_Matrix* pObject2Bitmap);
667 CPDF_Function** m_pFuncs;
668 CPDF_ColorSpace* m_pCS;
669 FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps;
670 FX_DWORD m_CoordMax, m_CompMax;
671 FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax;
672 FX_FLOAT m_ColorMin[8], m_ColorMax[8];
673 CPDF_StreamAcc m_Stream;
674 CFX_BitStream m_BitStream;
675 };
676 #define PDF_IMAGE_NO_COMPRESS 0x0000
677 #define PDF_IMAGE_LOSSY_COMPRESS 0x0001
678 #define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002
679 #define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004
680 #define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008
681 class CPDF_ImageSetParam {
682 public:
683 CPDF_ImageSetParam() : pMatteColor(NULL), nQuality(80) {}
684 FX_ARGB* pMatteColor;
685 int32_t nQuality;
686 };
687 class CPDF_Image {
688 public:
689 CPDF_Image(CPDF_Document* pDoc);
690
691 ~CPDF_Image();
692
693 FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline);
694
695 void Release();
696
697 CPDF_Image* Clone();
698
699 FX_BOOL IsInline() { return m_bInline; }
700
701 void SetInlineDict(CPDF_Dictionary* pDict) { m_pInlineDict = pDict; }
702
703 CPDF_Dictionary* GetInlineDict() const { return m_pInlineDict; }
704
705 CPDF_Stream* GetStream() const { return m_pStream; }
706
707 CPDF_Dictionary* GetDict() const {
708 return m_pStream ? m_pStream->GetDict() : NULL;
709 }
710
711 CPDF_Dictionary* GetOC() const { return m_pOC; }
712
713 CPDF_Document* GetDocument() const { return m_pDocument; }
714
715 int32_t GetPixelHeight() const { return m_Height; }
716
717 int32_t GetPixelWidth() const { return m_Width; }
718
719 FX_BOOL IsMask() const { return m_bIsMask; }
720
721 FX_BOOL IsInterpol() const { return m_bInterpolate; }
722
723 CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL,
724 FX_DWORD* pMatteColor = NULL,
725 FX_BOOL bStdCS = FALSE,
726 FX_DWORD GroupFamily = 0,
727 FX_BOOL bLoadMask = FALSE) const;
728
729 void SetImage(const CFX_DIBitmap* pDIBitmap,
730 int32_t iCompress,
731 IFX_FileWrite* pFileWrite = NULL,
732 IFX_FileRead* pFileRead = NULL,
733 const CFX_DIBitmap* pMask = NULL,
734 const CPDF_ImageSetParam* pParam = NULL);
735
736 void SetJpegImage(uint8_t* pImageData, FX_DWORD size);
737
738 void SetJpegImage(IFX_FileRead* pFile);
739
740 void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);
741
742 public:
743 FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource,
744 CPDF_Dictionary* pPageResource,
745 FX_BOOL bStdCS = FALSE,
746 FX_DWORD GroupFamily = 0,
747 FX_BOOL bLoadMask = FALSE);
748 FX_BOOL Continue(IFX_Pause* pPause);
749 CFX_DIBSource* DetachBitmap();
750 CFX_DIBSource* DetachMask();
751 CFX_DIBSource* m_pDIBSource;
752 CFX_DIBSource* m_pMask;
753 FX_DWORD m_MatteColor;
754
755 private:
756 CPDF_Stream* m_pStream;
757 FX_BOOL m_bInline;
758 CPDF_Dictionary* m_pInlineDict;
759
760 int32_t m_Height;
761
762 int32_t m_Width;
763
764 FX_BOOL m_bIsMask;
765
766 FX_BOOL m_bInterpolate;
767
768 CPDF_Document* m_pDocument;
769
770 CPDF_Dictionary* m_pOC;
771 CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size);
772 };
773
774 #endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_
OLDNEW
« no previous file with comments | « core/fxcodec/codec/fx_codec_jpx_opj.cpp ('k') | core/include/fpdfdoc/fpdf_tagged.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698