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

Side by Side Diff: core/include/fpdfapi/fpdf_resource.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_RESOURCE_H_ 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_
8 #define CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ 8 #define CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_
9 9
10 #include "../fxcrt/fx_system.h" 10 #include "../fxcrt/fx_system.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 const FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding, 44 const FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding,
45 uint8_t charcode); 45 uint8_t charcode);
46 46
47 FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode); 47 FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode);
48 FX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode); 48 FX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode);
49 const FX_WORD* PDF_UnicodesForPredefinedCharSet(int encoding); 49 const FX_WORD* PDF_UnicodesForPredefinedCharSet(int encoding);
50 const FX_CHAR* GetAdobeCharName(int iBaseEncoding, 50 const FX_CHAR* GetAdobeCharName(int iBaseEncoding,
51 const CFX_ByteString* pCharNames, 51 const CFX_ByteString* pCharNames,
52 int charcode); 52 int charcode);
53 53
54 template <class T> class CPDF_CountedObject 54 template <class T>
55 { 55 class CPDF_CountedObject {
56 public: 56 public:
57 explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) { } 57 explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) {}
58 void reset(T* ptr) { // CAUTION: tosses prior ref counts. 58 void reset(T* ptr) { // CAUTION: tosses prior ref counts.
59 m_nCount = 1; 59 m_nCount = 1;
60 m_pObj = ptr; 60 m_pObj = ptr;
61 } 61 }
62 void clear() { // Now you're all weak ptrs ... 62 void clear() { // Now you're all weak ptrs ...
63 delete m_pObj; 63 delete m_pObj;
64 m_pObj = nullptr; 64 m_pObj = nullptr;
65 } 65 }
66 T* get() const { return m_pObj; } 66 T* get() const { return m_pObj; }
67 T* AddRef() { FXSYS_assert(m_pObj); ++m_nCount; return m_pObj; } 67 T* AddRef() {
68 void RemoveRef() { if (m_nCount) --m_nCount; } 68 FXSYS_assert(m_pObj);
69 size_t use_count() const { return m_nCount; } 69 ++m_nCount;
70 70 return m_pObj;
71 protected: 71 }
72 size_t m_nCount; 72 void RemoveRef() {
73 T* m_pObj; 73 if (m_nCount)
74 --m_nCount;
75 }
76 size_t use_count() const { return m_nCount; }
77
78 protected:
79 size_t m_nCount;
80 T* m_pObj;
74 }; 81 };
75 using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>; 82 using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>;
76 using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>; 83 using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>;
77 #define PDFFONT_TYPE1» » » 1 84 #define PDFFONT_TYPE1 1
78 #define PDFFONT_TRUETYPE» » 2 85 #define PDFFONT_TRUETYPE 2
79 #define PDFFONT_TYPE3» » » 3 86 #define PDFFONT_TYPE3 3
80 #define PDFFONT_CIDFONT»» » 4 87 #define PDFFONT_CIDFONT 4
81 #define PDFFONT_FIXEDPITCH» » 1 88 #define PDFFONT_FIXEDPITCH 1
82 #define PDFFONT_SERIF» » » 2 89 #define PDFFONT_SERIF 2
83 #define PDFFONT_SYMBOLIC» » 4 90 #define PDFFONT_SYMBOLIC 4
84 #define PDFFONT_SCRIPT» » » 8 91 #define PDFFONT_SCRIPT 8
85 #define PDFFONT_NONSYMBOLIC» » 32 92 #define PDFFONT_NONSYMBOLIC 32
86 #define PDFFONT_ITALIC» » » 64 93 #define PDFFONT_ITALIC 64
87 #define PDFFONT_ALLCAP» » » 0x10000 94 #define PDFFONT_ALLCAP 0x10000
88 #define PDFFONT_SMALLCAP» » 0x20000 95 #define PDFFONT_SMALLCAP 0x20000
89 #define PDFFONT_FORCEBOLD» » 0x40000 96 #define PDFFONT_FORCEBOLD 0x40000
90 #define PDFFONT_USEEXTERNATTR» 0x80000 97 #define PDFFONT_USEEXTERNATTR 0x80000
91 class CPDF_Font 98 class CPDF_Font {
92 { 99 public:
93 public: 100 static CPDF_Font* CreateFontF(CPDF_Document* pDoc,
94 static CPDF_Font*» » CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary * pFontDict); 101 CPDF_Dictionary* pFontDict);
95 static CPDF_Font*» » GetStockFont(CPDF_Document* pDoc, const CFX_Byte StringC& fontname); 102 static CPDF_Font* GetStockFont(CPDF_Document* pDoc,
96 103 const CFX_ByteStringC& fontname);
97 virtual ~CPDF_Font(); 104
98 105 virtual ~CPDF_Font();
99 bool IsFontType(int fonttype) const { return fonttype == m_FontType; } 106
100 int»GetFontType() const { return m_FontType; } 107 bool IsFontType(int fonttype) const { return fonttype == m_FontType; }
101 108 int GetFontType() const { return m_FontType; }
102 CFX_ByteString» » » GetFontTypeName() const; 109
103 110 CFX_ByteString GetFontTypeName() const;
104 const CFX_ByteString&» GetBaseFont() const 111
105 { 112 const CFX_ByteString& GetBaseFont() const { return m_BaseFont; }
106 return m_BaseFont; 113
114 const CFX_SubstFont* GetSubstFont() const { return m_Font.GetSubstFont(); }
115
116 FX_DWORD GetFlags() const { return m_Flags; }
117
118 virtual FX_BOOL IsVertWriting() const;
119
120 CPDF_Type1Font* GetType1Font() const {
121 return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL;
122 }
123
124 CPDF_TrueTypeFont* GetTrueTypeFont() const {
125 return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this
126 : NULL;
127 }
128
129 CPDF_CIDFont* GetCIDFont() const {
130 return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL;
131 }
132
133 CPDF_Type3Font* GetType3Font() const {
134 return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL;
135 }
136
137 FX_BOOL IsEmbedded() const {
138 return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL;
139 }
140
141 virtual FX_BOOL IsUnicodeCompatible() const { return FALSE; }
142
143 CPDF_StreamAcc* GetFontFile() const { return m_pFontFile; }
144
145 CPDF_Dictionary* GetFontDict() const { return m_pFontDict; }
146
147 FX_BOOL IsStandardFont() const;
148
149 FXFT_Face GetFace() const { return m_Font.GetFace(); }
150
151 virtual FX_DWORD GetNextChar(const FX_CHAR* pString,
152 int nStrLen,
153 int& offset) const {
154 if (offset < 0 || nStrLen < 1) {
155 return 0;
107 } 156 }
108 157 uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1];
109 const CFX_SubstFont* GetSubstFont() const 158 return static_cast<FX_DWORD>(ch);
110 { 159 }
111 return m_Font.GetSubstFont(); 160
112 } 161 virtual int CountChar(const FX_CHAR* pString, int size) const { return size; }
113 162
114 FX_DWORD GetFlags() const 163 void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const;
115 { 164
116 return m_Flags; 165 virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const {
117 } 166 *buf = (FX_CHAR)charcode;
118 167 return 1;
119 virtual FX_BOOL IsVertWriting()const; 168 }
120 169
121 170 virtual int GetCharSize(FX_DWORD charcode) const { return 1; }
122 171
123 172 virtual int GlyphFromCharCode(FX_DWORD charcode,
124 CPDF_Type1Font* GetType1Font() const 173 FX_BOOL* pVertGlyph = NULL) = 0;
125 { 174 virtual int GlyphFromCharCodeExt(FX_DWORD charcode) {
126 return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL ; 175 return GlyphFromCharCode(charcode);
127 } 176 }
128 177
129 CPDF_TrueTypeFont* GetTrueTypeFont() const 178 CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const;
130 { 179
131 return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this : NULL; 180 FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const;
132 } 181
133 182 CFX_CharMap* GetCharMap() { return m_pCharMap; }
134 CPDF_CIDFont* GetCIDFont() const 183
135 { 184 CFX_ByteString EncodeString(const CFX_WideString& str) const;
136 return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NU LL; 185
137 } 186 CFX_WideString DecodeString(const CFX_ByteString& str) const;
138 187
139 CPDF_Type3Font* GetType3Font() const 188 void GetFontBBox(FX_RECT& rect) const { rect = m_FontBBox; }
140 { 189
141 return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NU LL; 190 int GetTypeAscent() const { return m_Ascent; }
142 } 191
143 192 int GetTypeDescent() const { return m_Descent; }
144 193
145 FX_BOOL IsEmbedded() const 194 int GetItalicAngle() const { return m_ItalicAngle; }
146 { 195
147 return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL; 196 int GetStemV() const { return m_StemV; }
148 } 197
149 198 int GetStringWidth(const FX_CHAR* pString, int size);
150 virtual FX_BOOL IsUnicodeCompatible() const 199
151 { 200 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0;
152 return FALSE; 201
153 } 202 virtual int GetCharTypeWidth(FX_DWORD charcode);
154 203
155 CPDF_StreamAcc* GetFontFile() const 204 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0;
156 { 205
157 return m_pFontFile; 206 CPDF_Document* m_pDocument;
158 } 207
159 208 class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0);
160 CPDF_Dictionary* GetFontDict() const 209
161 { 210 CFX_Font m_Font;
162 return m_pFontDict; 211
163 } 212 protected:
164 213 explicit CPDF_Font(int fonttype);
165 FX_BOOL IsStandardFont() const; 214
166 215 FX_BOOL Initialize();
167 FXFT_Face GetFace() const 216
168 { 217 FX_BOOL Load();
169 return m_Font.GetFace(); 218
170 } 219 virtual FX_BOOL _Load() = 0;
171 220
172 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const 221 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0;
173 { 222
174 if (offset < 0 || nStrLen < 1) { 223 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
175 return 0; 224
176 } 225 void LoadUnicodeMap();
177 uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen-1]; 226
178 return static_cast<FX_DWORD>(ch); 227 void LoadPDFEncoding(CPDF_Object* pEncoding,
179 } 228 int& iBaseEncoding,
180 229 CFX_ByteString*& pCharNames,
181 virtual int CountChar(const FX_CHAR* pString, int si ze) const 230 FX_BOOL bEmbedded,
182 { 231 FX_BOOL bTrueType);
183 return size; 232
184 } 233 void LoadFontDescriptor(CPDF_Dictionary*);
185 234
186 void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const; 235 void LoadCharWidths(FX_WORD* pWidths);
187 236
188 virtual int AppendChar(FX_CHAR* buf, FX_DWORD charco de) const 237 void CheckFontMetrics();
189 { 238
190 *buf = (FX_CHAR)charcode; 239 CFX_CharMap* m_pCharMap;
191 return 1; 240
192 } 241 CFX_ByteString m_BaseFont;
193 242
194 virtual int GetCharSize(FX_DWORD charcode) const 243 CPDF_StreamAcc* m_pFontFile;
195 { 244
196 return 1; 245 CPDF_Dictionary* m_pFontDict;
197 } 246
198 247 CPDF_ToUnicodeMap* m_pToUnicodeMap;
199 248
200 249 FX_BOOL m_bToUnicodeLoaded;
201 250
202 virtual int GlyphFromCharCode(FX_DWORD charcode, FX_ BOOL *pVertGlyph = NULL) = 0; 251 int m_Flags;
203 virtual int GlyphFromCharCodeExt(FX_DWORD charcode) 252
204 { 253 FX_RECT m_FontBBox;
205 return GlyphFromCharCode(charcode); 254
206 } 255 int m_StemV;
207 256
208 CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) c onst; 257 int m_Ascent;
209 258
210 FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) co nst; 259 int m_Descent;
211 260
212 CFX_CharMap* GetCharMap() 261 int m_ItalicAngle;
213 { 262
214 return m_pCharMap; 263 private:
215 } 264 const int m_FontType;
216 265 };
217 CFX_ByteString EncodeString(const CFX_WideString& str) const; 266 #define PDFFONT_ENCODING_BUILTIN 0
218 267 #define PDFFONT_ENCODING_WINANSI 1
219 CFX_WideString DecodeString(const CFX_ByteString& str) const; 268 #define PDFFONT_ENCODING_MACROMAN 2
220 269 #define PDFFONT_ENCODING_MACEXPERT 3
221 270 #define PDFFONT_ENCODING_STANDARD 4
222 271 #define PDFFONT_ENCODING_ADOBE_SYMBOL 5
223 272 #define PDFFONT_ENCODING_ZAPFDINGBATS 6
224 void GetFontBBox(FX_RECT& rect) const 273 #define PDFFONT_ENCODING_PDFDOC 7
225 { 274 #define PDFFONT_ENCODING_MS_SYMBOL 8
226 rect = m_FontBBox; 275 #define PDFFONT_ENCODING_UNICODE 9
227 } 276 class CPDF_FontEncoding {
228 277 public:
229 int GetTypeAscent() const 278 CPDF_FontEncoding();
230 { 279
231 return m_Ascent; 280 CPDF_FontEncoding(int PredefinedEncoding);
232 } 281
233 282 void LoadEncoding(CPDF_Object* pEncoding);
234 int GetTypeDescent() const 283
235 { 284 FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const;
236 return m_Descent; 285
237 } 286 FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const {
238 287 return m_Unicodes[charcode];
239 int GetItalicAngle() const 288 }
240 { 289
241 return m_ItalicAngle; 290 int CharCodeFromUnicode(FX_WCHAR unicode) const;
242 } 291
243 292 void SetUnicode(uint8_t charcode, FX_WCHAR unicode) {
244 int GetStemV() const 293 m_Unicodes[charcode] = unicode;
245 { 294 }
246 return m_StemV; 295
247 } 296 CPDF_Object* Realize();
248 297
249 int GetStringWidth(const FX_CHAR* pS tring, int size); 298 public:
250 299 FX_WCHAR m_Unicodes[256];
251 virtual int GetCharWidthF(FX_DWORD charcode, int lev el = 0) = 0; 300 };
252 301
253 virtual int GetCharTypeWidth(FX_DWORD charcode); 302 class CPDF_SimpleFont : public CPDF_Font {
254 303 public:
255 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0; 304 explicit CPDF_SimpleFont(int fonttype);
256 305 ~CPDF_SimpleFont() override;
257 306
258 307 CPDF_FontEncoding* GetEncoding() { return &m_Encoding; }
259 CPDF_Document* m_pDocument; 308 int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
260 309 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
261 class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0); 310 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override;
262 311 FX_BOOL IsUnicodeCompatible() const override;
263 CFX_Font m_Font; 312
264 313 protected:
265 protected: 314 FX_BOOL LoadCommon();
266 explicit CPDF_Font(int fonttype); 315
267 316 void LoadSubstFont();
268 FX_BOOL Initialize(); 317
269 318 void LoadFaceMetrics();
270 FX_BOOL Load(); 319
271 320 virtual void LoadGlyphMap() = 0;
272 virtual FX_BOOL _Load() = 0; 321
273 322 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override {
274 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0; 323 return m_Encoding.UnicodeFromCharCode((uint8_t)charcode);
275 324 }
276 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0 ; 325
277 326 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override {
278 void LoadUnicodeMap(); 327 return m_Encoding.CharCodeFromUnicode(Unicode);
279 328 }
280 void LoadPDFEncoding(CPDF_Object* pEn coding, int& iBaseEncoding, 329
281 CFX_ByteString*& pCharNames, FX_BOOL bEmbedded, FX_BOOL bTrueType); 330 void LoadCharMetrics(int charcode);
282 331
283 void LoadFontDescriptor(CPDF_Dictiona ry*); 332 CPDF_FontEncoding m_Encoding;
284 333 FX_WORD m_GlyphIndex[256];
285 void LoadCharWidths(FX_WORD* pWidths) ; 334 FX_WORD m_ExtGID[256];
286 335 CFX_ByteString* m_pCharNames;
287 void CheckFontMetrics(); 336 int m_BaseEncoding;
288 337 FX_WORD m_CharWidth[256];
289 CFX_CharMap* m_pCharMap; 338 FX_SMALL_RECT m_CharBBox[256];
290 339 FX_BOOL m_bUseFontWidth;
291 340 };
292 341
293 CFX_ByteString m_BaseFont; 342 class CPDF_Type1Font : public CPDF_SimpleFont {
294 343 public:
295 CPDF_StreamAcc* m_pFontFile; 344 CPDF_Type1Font();
296 345
297 CPDF_Dictionary* m_pFontDict; 346 int GetBase14Font() { return m_Base14Font; }
298 347 virtual int GlyphFromCharCodeExt(FX_DWORD charcode);
299 CPDF_ToUnicodeMap* m_pToUnicodeMap; 348
300 349 protected:
301 FX_BOOL m_bToUnicodeLoaded; 350 virtual FX_BOOL _Load();
302 351
303 352 int m_Base14Font;
304 353 virtual void LoadGlyphMap();
305 354 };
306 int m_Flags; 355 class CPDF_TrueTypeFont : public CPDF_SimpleFont {
307 356 public:
308 FX_RECT m_FontBBox; 357 CPDF_TrueTypeFont();
309 358
310 int m_StemV; 359 protected:
311 360 virtual FX_BOOL _Load();
312 int m_Ascent; 361 virtual void LoadGlyphMap();
313 362 };
314 int m_Descent; 363 class CPDF_Type3Char {
315 364 public:
316 int m_ItalicAngle; 365 CPDF_Type3Char();
317 366
318 private: 367 ~CPDF_Type3Char();
319 const int m_FontType; 368
320 }; 369 FX_BOOL LoadBitmap(CPDF_RenderContext* pContext);
321 #define PDFFONT_ENCODING_BUILTIN 0 370
322 #define PDFFONT_ENCODING_WINANSI 1 371 FX_BOOL m_bColored;
323 #define PDFFONT_ENCODING_MACROMAN 2 372
324 #define PDFFONT_ENCODING_MACEXPERT 3 373 FX_BOOL m_bPageRequired;
325 #define PDFFONT_ENCODING_STANDARD 4 374
326 #define PDFFONT_ENCODING_ADOBE_SYMBOL 5 375 CPDF_Form* m_pForm;
327 #define PDFFONT_ENCODING_ZAPFDINGBATS 6 376
328 #define PDFFONT_ENCODING_PDFDOC 7 377 CFX_AffineMatrix m_ImageMatrix;
329 #define PDFFONT_ENCODING_MS_SYMBOL 8 378
330 #define PDFFONT_ENCODING_UNICODE 9 379 CFX_DIBitmap* m_pBitmap;
331 class CPDF_FontEncoding 380
332 { 381 int m_Width;
333 public: 382
334 383 FX_RECT m_BBox;
335 CPDF_FontEncoding(); 384 };
336 385 class CPDF_Type3Font : public CPDF_SimpleFont {
337 CPDF_FontEncoding(int PredefinedEncoding); 386 public:
338 387 CPDF_Type3Font();
339 void LoadEncoding(CPDF_Object* pEncod ing); 388 ~CPDF_Type3Font() override;
340 389
341 FX_BOOL IsIdentical(CPDF_FontEncoding* p Another) const; 390 void SetPageResources(CPDF_Dictionary* pResources) {
342 391 m_pPageResources = pResources;
343 FX_WCHAR UnicodeFromCharCode(uint8_t charcode) co nst 392 }
344 { 393 CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0);
345 return m_Unicodes[charcode]; 394 int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
346 } 395 int GetCharTypeWidth(FX_DWORD charcode) override {
347 396 return GetCharWidthF(charcode);
348 int CharCodeFromUnicode(FX_WCHAR uni code) const; 397 }
349 398 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
350 void SetUnicode(uint8_t charcode, FX_ WCHAR unicode) 399 CFX_AffineMatrix& GetFontMatrix() { return m_FontMatrix; }
351 { 400 void CheckType3FontMetrics();
352 m_Unicodes[charcode] = unicode; 401
353 } 402 protected:
354 403 CFX_AffineMatrix m_FontMatrix;
355 CPDF_Object* Realize(); 404
356 public: 405 private:
357 406 FX_BOOL _Load() override;
358 FX_WCHAR m_Unicodes[256]; 407 void LoadGlyphMap() override {}
359 }; 408
360 409 int m_CharWidthL[256];
361 class CPDF_SimpleFont : public CPDF_Font 410 CPDF_Dictionary* m_pCharProcs;
362 { 411 CPDF_Dictionary* m_pPageResources;
363 public: 412 CPDF_Dictionary* m_pFontResources;
364 explicit CPDF_SimpleFont(int fonttype); 413 CFX_MapPtrToPtr m_CacheMap;
365 ~CPDF_SimpleFont() override; 414 CFX_MapPtrToPtr m_DeletedMap;
366 415 };
367 CPDF_FontEncoding* GetEncoding() 416
368 { 417 #define CIDSET_UNKNOWN 0
369 return &m_Encoding; 418 #define CIDSET_GB1 1
370 } 419 #define CIDSET_CNS1 2
371 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; 420 #define CIDSET_JAPAN1 3
372 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; 421 #define CIDSET_KOREA1 4
373 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) overrid e; 422 #define CIDSET_UNICODE 5
374 FX_BOOL IsUnicodeCompatible() const override; 423 #define NUMBER_OF_CIDSETS 6
375 424
376 protected: 425 class CPDF_CIDFont : public CPDF_Font {
377 FX_BOOL LoadCommon(); 426 public:
378 427 CPDF_CIDFont();
379 void LoadSubstFont(); 428
380 429 ~CPDF_CIDFont() override;
381 void LoadFaceMetrics(); 430
382 431 FX_BOOL LoadGB2312();
383 virtual void LoadGlyphMap() = 0; 432 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override;
384 433 int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
385 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override 434 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
386 { 435 FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
387 return m_Encoding.UnicodeFromCharCode((uint8_t)charcode); 436
388 } 437 FX_BOOL IsTrueType() const { return !m_bType1; }
389 438
390 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override 439 virtual FX_DWORD GetNextChar(const FX_CHAR* pString,
391 { 440 int nStrLen,
392 return m_Encoding.CharCodeFromUnicode(Unicode); 441 int& offset) const override;
393 } 442 int CountChar(const FX_CHAR* pString, int size) const override;
394 443 int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override;
395 void LoadCharMetrics(int charcode); 444 int GetCharSize(FX_DWORD charcode) const override;
396 445
397 CPDF_FontEncoding m_Encoding; 446 int GetCharset() const { return m_Charset; }
398 FX_WORD m_GlyphIndex[256]; 447
399 FX_WORD m_ExtGID[256]; 448 const uint8_t* GetCIDTransform(FX_WORD CID) const;
400 CFX_ByteString* m_pCharNames; 449 FX_BOOL IsVertWriting() const override;
401 int m_BaseEncoding; 450 short GetVertWidth(FX_WORD CID) const;
402 FX_WORD m_CharWidth[256]; 451 void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const;
403 FX_SMALL_RECT m_CharBBox[256]; 452 FX_BOOL IsUnicodeCompatible() const override;
404 FX_BOOL m_bUseFontWidth; 453 virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const;
405 }; 454
406 455 protected:
407 class CPDF_Type1Font : public CPDF_SimpleFont 456 friend class CPDF_Font;
408 { 457
409 public: 458 FX_BOOL _Load() override;
410 459 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override;
411 CPDF_Type1Font(); 460 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override;
412 461 int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL* pVertGlyph);
413 int GetBase14Font() 462 void LoadMetricsArray(CPDF_Array* pArray,
414 { 463 CFX_DWordArray& result,
415 return m_Base14Font; 464 int nElements);
416 } 465 void LoadSubstFont();
417 virtual int GlyphFromCharCodeExt(FX_DWORD charcode); 466
418 protected: 467 CPDF_CMap* m_pCMap;
419 virtual FX_BOOL _Load(); 468 CPDF_CMap* m_pAllocatedCMap;
420 469 CPDF_CID2UnicodeMap* m_pCID2UnicodeMap;
421 int m_Base14Font; 470 int m_Charset;
422 virtual void LoadGlyphMap(); 471 FX_BOOL m_bType1;
423 }; 472 CPDF_StreamAcc* m_pCIDToGIDMap;
424 class CPDF_TrueTypeFont : public CPDF_SimpleFont 473 FX_BOOL m_bCIDIsGID;
425 { 474 FX_WORD m_DefaultWidth;
426 public: 475 FX_WORD* m_pAnsiWidths;
427 476 FX_SMALL_RECT m_CharBBox[256];
428 CPDF_TrueTypeFont(); 477 CFX_DWordArray m_WidthList;
429 protected: 478 short m_DefaultVY;
430 virtual FX_BOOL _Load(); 479 short m_DefaultW1;
431 virtual void LoadGlyphMap(); 480 CFX_DWordArray m_VertMetrics;
432 }; 481 FX_BOOL m_bAdobeCourierStd;
433 class CPDF_Type3Char 482 CFX_CTTGSUBTable* m_pTTGSUBTable;
434 { 483 };
435 public: 484
436 485 #define PDFCS_DEVICEGRAY 1
437 CPDF_Type3Char(); 486 #define PDFCS_DEVICERGB 2
438 487 #define PDFCS_DEVICECMYK 3
439 ~CPDF_Type3Char(); 488 #define PDFCS_CALGRAY 4
440 489 #define PDFCS_CALRGB 5
441 FX_BOOL LoadBitmap(CPDF_RenderContext* pContext); 490 #define PDFCS_LAB 6
442 491 #define PDFCS_ICCBASED 7
443 FX_BOOL m_bColored; 492 #define PDFCS_SEPARATION 8
444 493 #define PDFCS_DEVICEN 9
445 FX_BOOL m_bPageRequired; 494 #define PDFCS_INDEXED 10
446 495 #define PDFCS_PATTERN 11
447 496
448 497 class CPDF_ColorSpace {
449 CPDF_Form* m_pForm; 498 public:
450 499 static CPDF_ColorSpace* GetStockCS(int Family);
451 CFX_AffineMatrix m_ImageMatrix; 500
452 501 static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj);
453 CFX_DIBitmap* m_pBitmap; 502
454 503 void ReleaseCS();
455 504
456 int m_Width; 505 int GetBufSize() const;
457 506
458 FX_RECT m_BBox; 507 FX_FLOAT* CreateBuf();
459 }; 508
460 class CPDF_Type3Font : public CPDF_SimpleFont 509 void GetDefaultColor(FX_FLOAT* buf) const;
461 { 510
462 public: 511 int CountComponents() const { return m_nComponents; }
463 CPDF_Type3Font(); 512
464 ~CPDF_Type3Font() override; 513 int GetFamily() const { return m_Family; }
465 514
466 void SetPageResources(CPDF_Dictionary* pResources) 515 virtual void GetDefaultValue(int iComponent,
467 { 516 FX_FLOAT& value,
468 m_pPageResources = pResources; 517 FX_FLOAT& min,
469 } 518 FX_FLOAT& max) const {
470 CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0); 519 value = 0;
471 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; 520 min = 0;
472 int GetCharTypeWidth(FX_DWORD charcode) override 521 max = 1.0f;
473 { 522 }
474 return GetCharWidthF(charcode); 523
475 } 524 FX_BOOL sRGB() const;
476 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; 525
477 CFX_AffineMatrix& GetFontMatrix() 526 virtual FX_BOOL GetRGB(FX_FLOAT* pBuf,
478 { 527 FX_FLOAT& R,
479 return m_FontMatrix; 528 FX_FLOAT& G,
480 } 529 FX_FLOAT& B) const = 0;
481 void CheckType3FontMetrics(); 530
482 531 virtual FX_BOOL SetRGB(FX_FLOAT* pBuf,
483 protected: 532 FX_FLOAT R,
484 CFX_AffineMatrix m_FontMatrix; 533 FX_FLOAT G,
485 534 FX_FLOAT B) const {
486 private: 535 return FALSE;
487 FX_BOOL _Load() override; 536 }
488 void LoadGlyphMap() override {} 537
489 538 FX_BOOL GetCMYK(FX_FLOAT* pBuf,
490 int m_CharWidthL[256]; 539 FX_FLOAT& c,
491 CPDF_Dictionary* m_pCharProcs; 540 FX_FLOAT& m,
492 CPDF_Dictionary* m_pPageResources; 541 FX_FLOAT& y,
493 CPDF_Dictionary* m_pFontResources; 542 FX_FLOAT& k) const;
494 CFX_MapPtrToPtr m_CacheMap; 543
495 CFX_MapPtrToPtr m_DeletedMap; 544 FX_BOOL SetCMYK(FX_FLOAT* pBuf,
496 }; 545 FX_FLOAT c,
497 546 FX_FLOAT m,
498 #define CIDSET_UNKNOWN 0 547 FX_FLOAT y,
499 #define CIDSET_GB1 1 548 FX_FLOAT k) const;
500 #define CIDSET_CNS1 2 549
501 #define CIDSET_JAPAN1 3 550 virtual void TranslateImageLine(uint8_t* dest_buf,
502 #define CIDSET_KOREA1 4 551 const uint8_t* src_buf,
503 #define CIDSET_UNICODE 5 552 int pixels,
504 #define NUMBER_OF_CIDSETS 6 553 int image_width,
505 554 int image_height,
506 class CPDF_CIDFont : public CPDF_Font 555 FX_BOOL bTransMask = FALSE) const;
507 { 556
508 public: 557 CPDF_Array*& GetArray() { return m_pArray; }
509 558
510 CPDF_CIDFont(); 559 int GetMaxIndex() const;
511 560
512 ~CPDF_CIDFont() override; 561 virtual CPDF_ColorSpace* GetBaseCS() const { return NULL; }
513 562
514 FX_BOOL LoadGB2312(); 563 virtual void EnableStdConversion(FX_BOOL bEnabled);
515 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) overrid e; 564
516 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; 565 CPDF_Document* const m_pDocument;
517 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; 566
518 FX_WORD CIDFromCharCode(FX_DWORD charcode) const; 567 protected:
519 568 CPDF_ColorSpace(CPDF_Document* pDoc, int family, int nComponents)
520 FX_BOOL IsTrueType() const 569 : m_pDocument(pDoc),
521 { 570 m_Family(family),
522 return !m_bType1; 571 m_nComponents(nComponents),
523 } 572 m_pArray(nullptr),
524 573 m_dwStdConversion(0) {}
525 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offse t) const override; 574 virtual ~CPDF_ColorSpace() {}
526 int CountChar(const FX_CHAR* pString, int size) const override; 575 virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
527 int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override; 576 return TRUE;
528 int GetCharSize(FX_DWORD charcode) const override; 577 }
529 578 virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf,
530 int GetCharset() const 579 FX_FLOAT& c,
531 { 580 FX_FLOAT& m,
532 return m_Charset; 581 FX_FLOAT& y,
533 } 582 FX_FLOAT& k) const {
534 583 return FALSE;
535 const uint8_t* GetCIDTransform(FX_WORD CID) const; 584 }
536 FX_BOOL IsVertWriting() const override; 585 virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf,
537 short GetVertWidth(FX_WORD CID) const; 586 FX_FLOAT c,
538 void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const; 587 FX_FLOAT m,
539 FX_BOOL IsUnicodeCompatible() const override; 588 FX_FLOAT y,
540 virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const; 589 FX_FLOAT k) const {
541 590 return FALSE;
542 protected: 591 }
543 friend class CPDF_Font; 592
544 593 int m_Family;
545 FX_BOOL _Load() override; 594
546 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override; 595 int m_nComponents;
547 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override; 596
548 int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL *pVertGlyph); 597 CPDF_Array* m_pArray;
549 void LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nEleme nts); 598
550 void LoadSubstFont(); 599 FX_DWORD m_dwStdConversion;
551 600 };
552 CPDF_CMap* m_pCMap; 601 class CPDF_Color {
553 CPDF_CMap* m_pAllocatedCMap; 602 public:
554 CPDF_CID2UnicodeMap* m_pCID2UnicodeMap; 603 CPDF_Color() : m_pCS(NULL), m_pBuffer(NULL) {}
555 int m_Charset; 604
556 FX_BOOL m_bType1; 605 CPDF_Color(int family);
557 CPDF_StreamAcc* m_pCIDToGIDMap; 606
558 FX_BOOL m_bCIDIsGID; 607 ~CPDF_Color();
559 FX_WORD m_DefaultWidth; 608
560 FX_WORD* m_pAnsiWidths; 609 FX_BOOL IsNull() const { return m_pBuffer == NULL; }
561 FX_SMALL_RECT m_CharBBox[256]; 610
562 CFX_DWordArray m_WidthList; 611 FX_BOOL IsEqual(const CPDF_Color& other) const;
563 short m_DefaultVY; 612
564 short m_DefaultW1; 613 FX_BOOL IsPattern() const {
565 CFX_DWordArray m_VertMetrics; 614 return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;
566 FX_BOOL m_bAdobeCourierStd; 615 }
567 CFX_CTTGSUBTable* m_pTTGSUBTable; 616
568 }; 617 void Copy(const CPDF_Color* pSrc);
569 618
570 #define PDFCS_DEVICEGRAY 1 619 void SetColorSpace(CPDF_ColorSpace* pCS);
571 #define PDFCS_DEVICERGB 2 620
572 #define PDFCS_DEVICECMYK 3 621 void SetValue(FX_FLOAT* comp);
573 #define PDFCS_CALGRAY 4 622
574 #define PDFCS_CALRGB 5 623 void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);
575 #define PDFCS_LAB 6 624
576 #define PDFCS_ICCBASED 7 625 FX_BOOL GetRGB(int& R, int& G, int& B) const;
577 #define PDFCS_SEPARATION 8 626
578 #define PDFCS_DEVICEN 9 627 CPDF_Pattern* GetPattern() const;
579 #define PDFCS_INDEXED 10 628
580 #define PDFCS_PATTERN 11 629 CPDF_ColorSpace* GetPatternCS() const;
581 630
582 class CPDF_ColorSpace 631 FX_FLOAT* GetPatternColor() const;
583 { 632
584 public: 633 CPDF_ColorSpace* m_pCS;
585 634
586 static CPDF_ColorSpace* GetStockCS(int Family); 635 protected:
587 636 void ReleaseBuffer();
588 static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj); 637 void ReleaseColorSpace();
589 638 FX_FLOAT* m_pBuffer;
590 void ReleaseCS(); 639 };
591 640 #define PATTERN_TILING 1
592 int GetBufSize() const; 641 #define PATTERN_SHADING 2
593 642 class CPDF_Pattern {
594 FX_FLOAT* CreateBuf(); 643 public:
595 644 virtual ~CPDF_Pattern();
596 void GetDefaultColor(FX_FLOAT* buf) c onst; 645 void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
597 646
598 int CountComponents() const 647 CPDF_Object* m_pPatternObj;
599 { 648
600 return m_nComponents; 649 int m_PatternType;
601 } 650
602 651 CFX_AffineMatrix m_Pattern2Form;
603 int GetFamily() const 652 CFX_AffineMatrix m_ParentMatrix;
604 { 653
605 return m_Family; 654 CPDF_Document* m_pDocument;
606 } 655
607 656 protected:
608 virtual void GetDefaultValue(int iComponent, FX_FLOAT & value, FX_FLOAT& min, FX_FLOAT& max) const 657 CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
609 { 658 FX_BOOL m_bForceClear;
610 value = 0; 659 };
611 min = 0; 660
612 max = 1.0f; 661 class CPDF_TilingPattern : public CPDF_Pattern {
613 } 662 public:
614 663 CPDF_TilingPattern(CPDF_Document* pDoc,
615 FX_BOOL sRGB() const; 664 CPDF_Object* pPatternObj,
616 665 const CFX_AffineMatrix* parentMatrix);
617 666
618 667 virtual ~CPDF_TilingPattern();
619 virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_F LOAT& G, FX_FLOAT& B) const = 0; 668
620 669 FX_BOOL Load();
621 virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FL OAT G, FX_FLOAT B) const 670
622 { 671 FX_BOOL m_bColored;
623 return FALSE; 672
624 } 673 CFX_FloatRect m_BBox;
625 674
626 675 FX_FLOAT m_XStep;
627 676
628 677 FX_FLOAT m_YStep;
629 FX_BOOL GetCMYK(FX_FLOAT* pBuf, FX_FLOAT & c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const; 678
630 679 CPDF_Form* m_pForm;
631 FX_BOOL SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const; 680 };
632 681 class CPDF_ShadingPattern : public CPDF_Pattern {
633 682 public:
634 virtual void TranslateImageLine(uint8_t* dest_buf, co nst uint8_t* src_buf, int pixels, 683 CPDF_ShadingPattern(CPDF_Document* pDoc,
635 int image_width, int image_height, FX_BOOL bTransMask = FALSE) const ; 684 CPDF_Object* pPatternObj,
636 685 FX_BOOL bShading,
637 CPDF_Array*& GetArray() 686 const CFX_AffineMatrix* parentMatrix);
638 { 687
639 return m_pArray; 688 virtual ~CPDF_ShadingPattern();
640 } 689
641 690 CPDF_Object* m_pShadingObj;
642 int GetMaxIndex() const; 691
643 692 FX_BOOL m_bShadingObj;
644 virtual CPDF_ColorSpace* GetBaseCS() const 693
645 { 694 FX_BOOL Load();
646 return NULL; 695
647 } 696 FX_BOOL Reload();
648 697
649 virtual void EnableStdConversion(FX_BOOL bEnabled); 698 int m_ShadingType;
650 699
651 CPDF_Document* const m_pDocument; 700 CPDF_ColorSpace* m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name
652 701 // object) are not managed as counted objects. Refer
653 protected: 702 // to CPDF_DocPageData::GetColorSpace.
654 CPDF_ColorSpace(CPDF_Document* pDoc, int family, int nComponents) 703
655 : m_pDocument(pDoc), 704 CPDF_CountedColorSpace* m_pCountedCS;
656 m_Family(family), 705
657 m_nComponents(nComponents), 706 CPDF_Function* m_pFunctions[4];
658 m_pArray(nullptr), 707
659 m_dwStdConversion(0) { 708 int m_nFuncs;
660 } 709
661 virtual ~CPDF_ColorSpace() {} 710 protected:
662 virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) 711 void Clear();
663 {
664 return TRUE;
665 }
666 virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, F X_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const
667 {
668 return FALSE;
669 }
670 virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX _FLOAT m, FX_FLOAT y, FX_FLOAT k) const
671 {
672 return FALSE;
673 }
674
675 int m_Family;
676
677 int m_nComponents;
678
679 CPDF_Array* m_pArray;
680
681 FX_DWORD m_dwStdConversion;
682 };
683 class CPDF_Color
684 {
685 public:
686
687 CPDF_Color() :m_pCS(NULL), m_pBuffer(NULL)
688 {
689 }
690
691 CPDF_Color(int family);
692
693 ~CPDF_Color();
694
695 FX_BOOL IsNull() const
696 {
697 return m_pBuffer == NULL;
698 }
699
700 FX_BOOL IsEqual(const CPDF_Color& other) const;
701
702 FX_BOOL IsPattern() const
703 {
704 return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;
705 }
706
707 void Copy(const CPDF_Color* pSrc);
708
709 void SetColorSpace(CPDF_ColorSpace* p CS);
710
711 void SetValue(FX_FLOAT* comp);
712
713 void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);
714
715 FX_BOOL GetRGB(int& R, int& G, int& B) c onst;
716
717 CPDF_Pattern* GetPattern() const;
718
719 CPDF_ColorSpace* GetPatternCS() const;
720
721 FX_FLOAT* GetPatternColor() const;
722
723 CPDF_ColorSpace* m_pCS;
724
725 protected:
726 void ReleaseBuffer();
727 void ReleaseColorSpace();
728 FX_FLOAT* m_pBuffer;
729 };
730 #define PATTERN_TILING 1
731 #define PATTERN_SHADING 2
732 class CPDF_Pattern
733 {
734 public:
735
736 virtual ~CPDF_Pattern();
737 void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
738
739 CPDF_Object* m_pPatternObj;
740
741 int m_PatternType;
742
743 CFX_AffineMatrix m_Pattern2Form;
744 CFX_AffineMatrix m_ParentMatrix;
745
746 CPDF_Document* m_pDocument;
747
748 protected:
749 CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
750 FX_BOOL m_bForceClear;
751 };
752
753 class CPDF_TilingPattern : public CPDF_Pattern
754 {
755 public:
756
757 CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_ AffineMatrix* parentMatrix);
758
759 virtual ~CPDF_TilingPattern();
760
761 FX_BOOL Load();
762
763
764
765 FX_BOOL m_bColored;
766
767 CFX_FloatRect m_BBox;
768
769 FX_FLOAT m_XStep;
770
771 FX_FLOAT m_YStep;
772
773
774
775 CPDF_Form* m_pForm;
776 };
777 class CPDF_ShadingPattern : public CPDF_Pattern
778 {
779 public:
780
781 CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL b Shading, const CFX_AffineMatrix* parentMatrix);
782
783 virtual ~CPDF_ShadingPattern();
784
785 CPDF_Object* m_pShadingObj;
786
787 FX_BOOL m_bShadingObj;
788
789 FX_BOOL Load();
790
791 FX_BOOL Reload();
792
793 int m_ShadingType;
794
795 CPDF_ColorSpace* m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name object) are not managed as counted objects. Refer to CPDF_DocPageData::GetColor Space.
796
797 CPDF_CountedColorSpace* m_pCountedCS;
798
799 CPDF_Function* m_pFunctions[4];
800
801 int m_nFuncs;
802 protected:
803 void Clear();
804 }; 712 };
805 struct CPDF_MeshVertex { 713 struct CPDF_MeshVertex {
806 FX_FLOAT x, y; 714 FX_FLOAT x, y;
807 FX_FLOAT r, g, b; 715 FX_FLOAT r, g, b;
808 }; 716 };
809 class CPDF_MeshStream 717 class CPDF_MeshStream {
810 { 718 public:
811 public: 719 FX_BOOL Load(CPDF_Stream* pShadingStream,
812 720 CPDF_Function** pFuncs,
813 FX_BOOL» » » » Load(CPDF_Stream* pShadingStream, CPDF_F unction** pFuncs, int nFuncs, CPDF_ColorSpace* pCS); 721 int nFuncs,
814 722 CPDF_ColorSpace* pCS);
815 FX_DWORD» » » GetFlag(); 723
816 724 FX_DWORD GetFlag();
817 void» » » » GetCoords(FX_FLOAT& x, FX_FLOAT& y); 725
818 726 void GetCoords(FX_FLOAT& x, FX_FLOAT& y);
819 void» » » » GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FL OAT& b); 727
820 728 void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b);
821 FX_DWORD » » » GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMat rix* pObject2Bitmap); 729
822 730 FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap);
823 FX_BOOL» » » » GetVertexRow(CPDF_MeshVertex* vertex, in t count, CFX_AffineMatrix* pObject2Bitmap); 731
824 CPDF_Function**» m_pFuncs; 732 FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex,
825 CPDF_ColorSpace*» m_pCS; 733 int count,
826 FX_DWORD» » » m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits , m_nComps; 734 CFX_AffineMatrix* pObject2Bitmap);
827 FX_DWORD» » » m_CoordMax, m_CompMax; 735 CPDF_Function** m_pFuncs;
828 FX_FLOAT» » » m_xmin, m_xmax, m_ymin, m_ymax; 736 CPDF_ColorSpace* m_pCS;
829 FX_FLOAT» » » m_ColorMin[8], m_ColorMax[8]; 737 FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps;
830 CPDF_StreamAcc» » m_Stream; 738 FX_DWORD m_CoordMax, m_CompMax;
831 CFX_BitStream» » m_BitStream; 739 FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax;
832 }; 740 FX_FLOAT m_ColorMin[8], m_ColorMax[8];
833 #define PDF_IMAGE_NO_COMPRESS» » » » 0x0000 741 CPDF_StreamAcc m_Stream;
834 #define PDF_IMAGE_LOSSY_COMPRESS» » » 0x0001 742 CFX_BitStream m_BitStream;
835 #define PDF_IMAGE_LOSSLESS_COMPRESS» » » 0x0002 743 };
836 #define PDF_IMAGE_MASK_LOSSY_COMPRESS» » 0x0004 744 #define PDF_IMAGE_NO_COMPRESS 0x0000
837 #define PDF_IMAGE_MASK_LOSSLESS_COMPRESS» 0x0008 745 #define PDF_IMAGE_LOSSY_COMPRESS 0x0001
838 class CPDF_ImageSetParam 746 #define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002
839 { 747 #define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004
840 public: 748 #define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008
841 CPDF_ImageSetParam() 749 class CPDF_ImageSetParam {
842 : pMatteColor(NULL) 750 public:
843 , nQuality(80) 751 CPDF_ImageSetParam() : pMatteColor(NULL), nQuality(80) {}
844 { 752 FX_ARGB* pMatteColor;
845 } 753 int32_t nQuality;
846 FX_ARGB* pMatteColor; 754 };
847 int32_t nQuality; 755 class CPDF_Image {
848 }; 756 public:
849 class CPDF_Image 757 CPDF_Image(CPDF_Document* pDoc);
850 { 758
851 public: 759 ~CPDF_Image();
852 760
853 CPDF_Image(CPDF_Document* pDoc); 761 FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline);
854 762
855 ~CPDF_Image(); 763 void Release();
856 764
857 FX_BOOL» » » » » LoadImageF(CPDF_Stream* pImageSt ream, FX_BOOL bInline); 765 CPDF_Image* Clone();
858 766
859 void» » » » » Release(); 767 FX_BOOL IsInline() { return m_bInline; }
860 768
861 CPDF_Image*»» » » Clone(); 769 void SetInlineDict(CPDF_Dictionary* pDict) { m_pInlineDict = pDict; }
862 770
863 FX_BOOL» » » » » IsInline() 771 CPDF_Dictionary* GetInlineDict() const { return m_pInlineDict; }
864 { 772
865 return m_bInline; 773 CPDF_Stream* GetStream() const { return m_pStream; }
866 } 774
867 775 CPDF_Dictionary* GetDict() const {
868 void» » » » » SetInlineDict(CPDF_Dictionary* p Dict) 776 return m_pStream ? m_pStream->GetDict() : NULL;
869 { 777 }
870 m_pInlineDict = pDict; 778
871 } 779 CPDF_Dictionary* GetOC() const { return m_pOC; }
872 780
873 CPDF_Dictionary*» » GetInlineDict() const 781 CPDF_Document* GetDocument() const { return m_pDocument; }
874 { 782
875 return m_pInlineDict; 783 int32_t GetPixelHeight() const { return m_Height; }
876 } 784
877 785 int32_t GetPixelWidth() const { return m_Width; }
878 CPDF_Stream*» » » GetStream() const 786
879 { 787 FX_BOOL IsMask() const { return m_bIsMask; }
880 return m_pStream; 788
881 } 789 FX_BOOL IsInterpol() const { return m_bInterpolate; }
882 790
883 CPDF_Dictionary*» » GetDict() const 791 CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL,
884 { 792 FX_DWORD* pMatteColor = NULL,
885 return m_pStream? m_pStream->GetDict(): NULL; 793 FX_BOOL bStdCS = FALSE,
886 } 794 FX_DWORD GroupFamily = 0,
887 795 FX_BOOL bLoadMask = FALSE) const;
888 CPDF_Dictionary*» » GetOC() const 796
889 { 797 void SetImage(const CFX_DIBitmap* pDIBitmap,
890 return m_pOC; 798 int32_t iCompress,
891 } 799 IFX_FileWrite* pFileWrite = NULL,
892 800 IFX_FileRead* pFileRead = NULL,
893 CPDF_Document*» » » GetDocument() const 801 const CFX_DIBitmap* pMask = NULL,
894 { 802 const CPDF_ImageSetParam* pParam = NULL);
895 return m_pDocument; 803
896 } 804 void SetJpegImage(uint8_t* pImageData, FX_DWORD size);
897 805
898 806 void SetJpegImage(IFX_FileRead* pFile);
899 807
900 int32_t» » » » GetPixelHeight() const 808 void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);
901 { 809
902 return m_Height; 810 public:
903 } 811 FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource,
904 812 CPDF_Dictionary* pPageResource,
905 int32_t» » » » GetPixelWidth() const 813 FX_BOOL bStdCS = FALSE,
906 { 814 FX_DWORD GroupFamily = 0,
907 return m_Width; 815 FX_BOOL bLoadMask = FALSE);
908 } 816 FX_BOOL Continue(IFX_Pause* pPause);
909 817 CFX_DIBSource* DetachBitmap();
910 818 CFX_DIBSource* DetachMask();
911 FX_BOOL» » » » » IsMask() const 819 CFX_DIBSource* m_pDIBSource;
912 { 820 CFX_DIBSource* m_pMask;
913 return m_bIsMask; 821 FX_DWORD m_MatteColor;
914 } 822
915 823 private:
916 FX_BOOL» » » » » IsInterpol() const 824 CPDF_Stream* m_pStream;
917 { 825 FX_BOOL m_bInline;
918 return m_bInterpolate; 826 CPDF_Dictionary* m_pInlineDict;
919 } 827
920 828 int32_t m_Height;
921 CFX_DIBSource*» » » LoadDIBSource(CFX_DIBSource** ppMask = N ULL, FX_DWORD* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE) const; 829
922 830 int32_t m_Width;
923 831
924 832 FX_BOOL m_bIsMask;
925 void» » » » » SetImage(const CFX_DIBitmap* pDI Bitmap, int32_t iCompress, IFX_FileWrite *pFileWrite = NULL, IFX_FileRead *pFile Read = NULL, const CFX_DIBitmap* pMask = NULL, const CPDF_ImageSetParam* pParam = NULL); 833
926 834 FX_BOOL m_bInterpolate;
927 void» » » » » SetJpegImage(uint8_t* pImageData , FX_DWORD size); 835
928 836 CPDF_Document* m_pDocument;
929 void» » » » » SetJpegImage(IFX_FileRead *pFile ); 837
930 838 CPDF_Dictionary* m_pOC;
931 void» » » » » ResetCache(CPDF_Page* pPage, con st CFX_DIBitmap* pDIBitmap); 839 CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size);
932
933 public:
934 FX_BOOL» » » » » StartLoadDIBSource(CPDF_Dictiona ry* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, FX_DW ORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE);
935 FX_BOOL» » » » » Continue(IFX_Pause* pPause);
936 CFX_DIBSource*» » » DetachBitmap();
937 CFX_DIBSource*» » » DetachMask();
938 CFX_DIBSource*» » » m_pDIBSource;
939 CFX_DIBSource*» » » m_pMask;
940 FX_DWORD» » » » m_MatteColor;
941 private:
942
943 CPDF_Stream*» » » m_pStream;
944 FX_BOOL» » » » » m_bInline;
945 CPDF_Dictionary*» » m_pInlineDict;
946
947 int32_t» » » » m_Height;
948
949 int32_t» » » » m_Width;
950
951 FX_BOOL» » » » » m_bIsMask;
952
953 FX_BOOL» » » » » m_bInterpolate;
954
955 CPDF_Document*» » » m_pDocument;
956
957 CPDF_Dictionary*» » m_pOC;
958 CPDF_Dictionary*» InitJPEG(uint8_t* pData, FX_DWORD size);
959 }; 840 };
960 841
961 #endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ 842 #endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698