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