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