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