1// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef _FX_GRAPHOBJS_IMP
8#define _FX_GRAPHOBJS_IMP
9#ifndef _FXPLUS
10class CFX_GEFontMgr;
11#ifndef FXFONT_SUBST_ITALIC
12#define FXFONT_SUBST_ITALIC 0x02
13#endif
14class CFX_GEFont : public IFX_Font, public CFX_ThreadLock {
15 public:
16  CFX_GEFont(const CFX_GEFont& src, FX_DWORD dwFontStyles);
17  CFX_GEFont(IFX_FontMgr* pFontMgr);
18  ~CFX_GEFont();
19  virtual void Release();
20  virtual IFX_Font* Retain();
21  FX_BOOL LoadFont(const FX_WCHAR* pszFontFamily,
22                   FX_DWORD dwFontStyles,
23                   FX_WORD wCodePage);
24  FX_BOOL LoadFont(const uint8_t* pBuffer, int32_t length);
25  FX_BOOL LoadFont(const FX_WCHAR* pszFileName);
26  FX_BOOL LoadFont(IFX_Stream* pFontStream, FX_BOOL bSaveStream);
27  FX_BOOL LoadFont(CFX_Font* pExtFont, FX_BOOL bTakeOver = FALSE);
28  virtual IFX_Font* Derive(FX_DWORD dwFontStyles, FX_WORD wCodePage = 0);
29  virtual void GetFamilyName(CFX_WideString& wsFamily) const;
30  virtual void GetPsName(CFX_WideString& wsName) const;
31  virtual FX_DWORD GetFontStyles() const;
32  virtual uint8_t GetCharSet() const;
33  virtual FX_BOOL GetCharWidth(FX_WCHAR wUnicode,
34                               int32_t& iWidth,
35                               FX_BOOL bCharCode = FALSE);
36  virtual int32_t GetGlyphIndex(FX_WCHAR wUnicode, FX_BOOL bCharCode = FALSE);
37  virtual int32_t GetAscent() const;
38  virtual int32_t GetDescent() const;
39  virtual FX_BOOL GetCharBBox(FX_WCHAR wUnicode,
40                              CFX_Rect& bbox,
41                              FX_BOOL bCharCode = FALSE);
42  virtual FX_BOOL GetBBox(CFX_Rect& bbox);
43  virtual int32_t GetItalicAngle() const;
44  virtual void Reset();
45  virtual IFX_Font* GetSubstFont(int32_t iGlyphIndex) const;
46  virtual void* GetDevFont() const { return (void*)m_pFont; }
47  virtual void SetFontProvider(IFX_FontProvider* pProvider) {
48    m_pProvider = pProvider;
49  }
50#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
51  virtual void SetLogicalFontStyle(FX_DWORD dwLogFontStyle) {
52    m_bUseLogFontStyle = TRUE;
53    m_dwLogFontStyle = dwLogFontStyle;
54  };
55#endif
56 protected:
57#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
58  FX_BOOL m_bUseLogFontStyle;
59  FX_DWORD m_dwLogFontStyle;
60#endif
61  CFX_Font* m_pFont;
62  IFX_FontMgr* m_pFontMgr;
63  int32_t m_iRefCount;
64  FX_BOOL m_bExtFont;
65  IFX_Stream* m_pStream;
66  IFX_FileRead* m_pFileRead;
67  CFX_UnicodeEncoding* m_pFontEncoding;
68  CFX_WordDiscreteArray* m_pCharWidthMap;
69  CFX_RectMassArray* m_pRectArray;
70  CFX_MapPtrToPtr* m_pBBoxMap;
71  IFX_FontProvider* m_pProvider;
72  FX_WORD m_wCharSet;
73  CFX_PtrArray m_SubstFonts;
74  CFX_MapPtrToPtr m_FontMapper;
75  FX_BOOL InitFont();
76  FX_BOOL GetCharBBox(FX_WCHAR wUnicode,
77                      CFX_Rect& bbox,
78                      FX_BOOL bRecursive,
79                      FX_BOOL bCharCode = FALSE);
80  FX_BOOL GetCharWidth(FX_WCHAR wUnicode,
81                       int32_t& iWidth,
82                       FX_BOOL bRecursive,
83                       FX_BOOL bCharCode = FALSE);
84  int32_t GetGlyphIndex(FX_WCHAR wUnicode,
85                        FX_BOOL bRecursive,
86                        IFX_Font** ppFont,
87                        FX_BOOL bCharCode = FALSE);
88};
89#endif
90#endif
91