c5dd8fd1b2527b996805f45fdd67592f4855eb10
[pdfium.git] / core / src / fxge / android / fpf_skiafontmgr.h
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #ifndef CORE_SRC_FXGE_ANDROID_FPF_SKIAFONTMGR_H_
8 #define CORE_SRC_FXGE_ANDROID_FPF_SKIAFONTMGR_H_
9
10 #if _FX_OS_ == _FX_ANDROID_
11 #define FPF_SKIAFONTTYPE_Unknown 0
12 #define FPF_SKIAFONTTYPE_Path 1
13 #define FPF_SKIAFONTTYPE_File 2
14 #define FPF_SKIAFONTTYPE_Buffer 3
15 class CFPF_SkiaFontDescriptor {
16  public:
17   CFPF_SkiaFontDescriptor()
18       : m_pFamily(NULL),
19         m_dwStyle(0),
20         m_iFaceIndex(0),
21         m_dwCharsets(0),
22         m_iGlyphNum(0) {}
23   virtual ~CFPF_SkiaFontDescriptor() {
24     if (m_pFamily) {
25       FX_Free(m_pFamily);
26     }
27   }
28   virtual int32_t GetType() const { return FPF_SKIAFONTTYPE_Unknown; }
29   void SetFamily(const FX_CHAR* pFamily) {
30     if (m_pFamily) {
31       FX_Free(m_pFamily);
32     }
33     int32_t iSize = FXSYS_strlen(pFamily);
34     m_pFamily = FX_Alloc(FX_CHAR, iSize + 1);
35     FXSYS_memcpy(m_pFamily, pFamily, iSize * sizeof(FX_CHAR));
36     m_pFamily[iSize] = 0;
37   }
38   FX_CHAR* m_pFamily;
39   FX_DWORD m_dwStyle;
40   int32_t m_iFaceIndex;
41   FX_DWORD m_dwCharsets;
42   int32_t m_iGlyphNum;
43 };
44 class CFPF_SkiaPathFont : public CFPF_SkiaFontDescriptor {
45  public:
46   CFPF_SkiaPathFont() : m_pPath(NULL) {}
47   virtual ~CFPF_SkiaPathFont() {
48     if (m_pPath) {
49       FX_Free(m_pPath);
50     }
51   }
52   virtual int32_t GetType() const { return FPF_SKIAFONTTYPE_Path; }
53   void SetPath(const FX_CHAR* pPath) {
54     if (m_pPath) {
55       FX_Free(m_pPath);
56     }
57     int32_t iSize = FXSYS_strlen(pPath);
58     m_pPath = FX_Alloc(FX_CHAR, iSize + 1);
59     FXSYS_memcpy(m_pPath, pPath, iSize * sizeof(FX_CHAR));
60     m_pPath[iSize] = 0;
61   }
62   FX_CHAR* m_pPath;
63 };
64 class CFPF_SkiaFileFont : public CFPF_SkiaFontDescriptor {
65  public:
66   CFPF_SkiaFileFont() : m_pFile(NULL) {}
67   virtual int32_t GetType() const { return FPF_SKIAFONTTYPE_File; }
68   IFX_FileRead* m_pFile;
69 };
70 class CFPF_SkiaBufferFont : public CFPF_SkiaFontDescriptor {
71  public:
72   CFPF_SkiaBufferFont() : m_pBuffer(NULL), m_szBuffer(0) {}
73   virtual int32_t GetType() const { return FPF_SKIAFONTTYPE_Buffer; }
74   void* m_pBuffer;
75   size_t m_szBuffer;
76 };
77 class CFPF_SkiaFontMgr : public IFPF_FontMgr {
78  public:
79   CFPF_SkiaFontMgr();
80   virtual ~CFPF_SkiaFontMgr();
81   FX_BOOL InitFTLibrary();
82   virtual void LoadSystemFonts();
83   virtual void LoadPrivateFont(IFX_FileRead* pFontFile);
84   virtual void LoadPrivateFont(const CFX_ByteStringC& bsFileName);
85   virtual void LoadPrivateFont(void* pBuffer, size_t szBuffer);
86
87   virtual IFPF_Font* CreateFont(const CFX_ByteStringC& bsFamilyname,
88                                 uint8_t uCharset,
89                                 FX_DWORD dwStyle,
90                                 FX_DWORD dwMatch = 0);
91   FXFT_Face GetFontFace(IFX_FileRead* pFileRead, int32_t iFaceIndex = 0);
92   FXFT_Face GetFontFace(const CFX_ByteStringC& bsFile, int32_t iFaceIndex = 0);
93   FXFT_Face GetFontFace(const uint8_t* pBuffer,
94                         size_t szBuffer,
95                         int32_t iFaceIndex = 0);
96
97  protected:
98   void ScanPath(const CFX_ByteStringC& path);
99   void ScanFile(const CFX_ByteStringC& file);
100   void ReportFace(FXFT_Face face, CFPF_SkiaFontDescriptor* pFontDesc);
101   void OutputSystemFonts();
102   FX_BOOL m_bLoaded;
103   CFX_PtrArray m_FontFaces;
104   FXFT_Library m_FTLibrary;
105   CFX_MapPtrToPtr m_FamilyFonts;
106 };
107 #endif
108
109 #endif  // CORE_SRC_FXGE_ANDROID_FPF_SKIAFONTMGR_H_