Home | History | Annotate | Download | only in android
      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 _FPF_SKIA_FONTMGR_H_
      8 #define _FPF_SKIA_FONTMGR_H_
      9 #if _FX_OS_ == _FX_ANDROID_
     10 #define FPF_SKIAFONTTYPE_Unknown	0
     11 #define	FPF_SKIAFONTTYPE_Path		1
     12 #define FPF_SKIAFONTTYPE_File		2
     13 #define FPF_SKIAFONTTYPE_Buffer		3
     14 class CFPF_SkiaFontDescriptor : public CFX_Object
     15 {
     16 public:
     17     CFPF_SkiaFontDescriptor() : m_pFamily(NULL), m_dwStyle(0), m_iFaceIndex(0), m_dwCharsets(0), m_iGlyphNum(0) {}
     18     virtual ~CFPF_SkiaFontDescriptor()
     19     {
     20         if (m_pFamily) {
     21             FX_Free(m_pFamily);
     22         }
     23     }
     24     virtual	FX_INT32	GetType() const
     25     {
     26         return FPF_SKIAFONTTYPE_Unknown;
     27     }
     28     void				SetFamily(FX_LPCSTR pFamily)
     29     {
     30         if (m_pFamily) {
     31             FX_Free(m_pFamily);
     32         }
     33         FX_INT32 iSize = FXSYS_strlen(pFamily);
     34         m_pFamily = FX_Alloc(FX_CHAR, iSize + 1);
     35         FXSYS_memcpy32(m_pFamily, pFamily, iSize * sizeof(FX_CHAR));
     36         m_pFamily[iSize] = 0;
     37     }
     38     FX_LPSTR		m_pFamily;
     39     FX_DWORD		m_dwStyle;
     40     FX_INT32		m_iFaceIndex;
     41     FX_DWORD		m_dwCharsets;
     42     FX_INT32		m_iGlyphNum;
     43 };
     44 class CFPF_SkiaPathFont : public CFPF_SkiaFontDescriptor
     45 {
     46 public:
     47     CFPF_SkiaPathFont() : m_pPath(NULL) {}
     48     virtual ~CFPF_SkiaPathFont()
     49     {
     50         if (m_pPath) {
     51             FX_Free(m_pPath);
     52         }
     53     }
     54     virtual	FX_INT32	GetType() const
     55     {
     56         return FPF_SKIAFONTTYPE_Path;
     57     }
     58     void				SetPath(FX_LPCSTR pPath)
     59     {
     60         if (m_pPath) {
     61             FX_Free(m_pPath);
     62         }
     63         FX_INT32 iSize = FXSYS_strlen(pPath);
     64         m_pPath = FX_Alloc(FX_CHAR, iSize + 1);
     65         FXSYS_memcpy32(m_pPath, pPath, iSize * sizeof(FX_CHAR));
     66         m_pPath[iSize] = 0;
     67     }
     68     FX_LPSTR		m_pPath;
     69 };
     70 class CFPF_SkiaFileFont : public CFPF_SkiaFontDescriptor
     71 {
     72 public:
     73     CFPF_SkiaFileFont() : m_pFile(NULL) {}
     74     virtual FX_INT32	GetType() const
     75     {
     76         return FPF_SKIAFONTTYPE_File;
     77     }
     78     IFX_FileRead		*m_pFile;
     79 };
     80 class CFPF_SkiaBufferFont : public CFPF_SkiaFontDescriptor
     81 {
     82 public:
     83     CFPF_SkiaBufferFont() : m_pBuffer(NULL), m_szBuffer(0) {}
     84     virtual FX_INT32	GetType() const
     85     {
     86         return FPF_SKIAFONTTYPE_Buffer;
     87     }
     88     FX_LPVOID			m_pBuffer;
     89     size_t				m_szBuffer;
     90 };
     91 class CFPF_SkiaFontMgr : public IFPF_FontMgr, public CFX_Object
     92 {
     93 public:
     94     CFPF_SkiaFontMgr();
     95     virtual ~CFPF_SkiaFontMgr();
     96     FX_BOOL					InitFTLibrary();
     97     virtual void			LoadSystemFonts();
     98     virtual void			LoadPrivateFont(IFX_FileRead* pFontFile);
     99     virtual void			LoadPrivateFont(FX_BSTR bsFileName);
    100     virtual void			LoadPrivateFont(FX_LPVOID pBuffer, size_t szBuffer);
    101 
    102     virtual IFPF_Font*		CreateFont(FX_BSTR bsFamilyname, FX_BYTE uCharset, FX_DWORD dwStyle, FX_DWORD dwMatch = 0);
    103     FXFT_Face				GetFontFace(IFX_FileRead *pFileRead, FX_INT32 iFaceIndex = 0);
    104     FXFT_Face				GetFontFace(FX_BSTR bsFile, FX_INT32 iFaceIndex = 0);
    105     FXFT_Face				GetFontFace(FX_LPCBYTE pBuffer, size_t szBuffer, FX_INT32 iFaceIndex = 0);
    106 protected:
    107     void				ScanPath(FX_BSTR path);
    108     void				ScanFile(FX_BSTR file);
    109     void				ReportFace(FXFT_Face face, CFPF_SkiaFontDescriptor *pFontDesc);
    110     void				OutputSystemFonts();
    111     FX_BOOL				m_bLoaded;
    112     CFX_PtrArray		m_FontFaces;
    113     FXFT_Library		m_FTLibrary;
    114     CFX_MapPtrToPtr		m_FamilyFonts;
    115 };
    116 #endif
    117 #endif
    118