XFA: Manually apply changes to fpdf_text.h and fx_font.h from master
authorTom Sepez <tsepez@chromium.org>
Fri, 23 Oct 2015 19:37:42 +0000 (12:37 -0700)
committerTom Sepez <tsepez@chromium.org>
Fri, 23 Oct 2015 19:37:42 +0000 (12:37 -0700)
Driven off of https://codereview.chromium.org/1398383002/

Then make the other files as similar as possible.  Note that this
required changes to xfa/ code, and required adding some Set() methods.

R=thestig@chromium.org

Review URL: https://codereview.chromium.org/1411833003 .

13 files changed:
core/include/fpdftext/fpdf_text.h
core/include/fxge/fx_font.h
core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp
core/src/fpdfapi/fpdf_font/fpdf_font.cpp
core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
core/src/fpdfapi/fpdf_font/ttgsubtable.cpp
core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp
core/src/fpdftext/fpdf_text_int.cpp
core/src/fpdftext/text_int.h
core/src/fxge/ge/fx_ge_font.cpp
xfa/src/fdp/src/fde/fde_gedevice.cpp
xfa/src/fgas/src/font/fx_gefont.cpp
xfa/src/fgas/src/font/fx_stdfontmgr.cpp

index f27f1db..0064992 100644 (file)
@@ -72,23 +72,24 @@ class CPDFText_ParseOptions {
   FX_BOOL m_bNormalizeObjs;
   FX_BOOL m_bOutputHyphen;
 };
+
 class IPDF_TextPage {
  public:
-  virtual ~IPDF_TextPage() {}
+  static IPDF_TextPage* CreateTextPage(const CPDF_Page* pPage, int flags = 0);
   static IPDF_TextPage* CreateTextPage(const CPDF_Page* pPage,
                                        CPDFText_ParseOptions ParserOptions);
-  static IPDF_TextPage* CreateTextPage(const CPDF_Page* pPage, int flags = 0);
   static IPDF_TextPage* CreateTextPage(const CPDF_PageObjects* pObjs,
                                        int flags = 0);
   static IPDF_TextPage* CreateReflowTextPage(IPDF_ReflowedPage* pRefPage);
 
+  virtual ~IPDF_TextPage() {}
+
   virtual void NormalizeObjects(FX_BOOL bNormalize) = 0;
 
   virtual FX_BOOL ParseTextPage() = 0;
 
-  virtual FX_BOOL IsParsered() const = 0;
+  virtual bool IsParsed() const = 0;
 
- public:
   virtual int CharIndexFromTextIndex(int TextIndex) const = 0;
 
   virtual int TextIndexFromCharIndex(int CharIndex) const = 0;
@@ -139,6 +140,7 @@ class IPDF_TextPage {
 
   virtual CFX_WideString GetPageText(int start = 0, int nCount = -1) const = 0;
 };
+
 #define FPDFTEXT_MATCHCASE 0x00000001
 #define FPDFTEXT_MATCHWHOLEWORD 0x00000002
 #define FPDFTEXT_CONSECUTIVE 0x00000004
index 3743120..29b3da7 100644 (file)
@@ -34,8 +34,8 @@ class IFX_SystemFontInfo;
 #define FXFONT_ITALIC 0x40
 #define FXFONT_BOLD 0x40000
 #define FXFONT_USEEXTERNATTR 0x80000
-#define FXFONT_EXACTMATCH 0x80000000
 #define FXFONT_CIDFONT 0x100000
+#define FXFONT_EXACTMATCH 0x80000000
 #define FXFONT_ANSI_CHARSET 0
 #define FXFONT_DEFAULT_CHARSET 1
 #define FXFONT_SYMBOL_CHARSET 2
@@ -56,6 +56,7 @@ class IFX_SystemFontInfo;
 #define FXFONT_FF_SCRIPT (4 << 4)
 #define FXFONT_FW_NORMAL 400
 #define FXFONT_FW_BOLD 700
+
 class CFX_Font {
  public:
   CFX_Font();
@@ -77,51 +78,42 @@ class CFX_Font {
   FX_BOOL LoadClone(const CFX_Font* pFont);
 
   FXFT_Face GetFace() const { return m_Face; }
-
-  const CFX_SubstFont* GetSubstFont() const { return m_pSubstFont; }
-
+  CFX_SubstFont* GetSubstFont() const { return m_pSubstFont; }
+  void SetFace(FXFT_Face face) { m_Face = face; }
+  void SetSubstFont(CFX_SubstFont* subst) { m_pSubstFont = subst; }
   CFX_PathData* LoadGlyphPath(FX_DWORD glyph_index, int dest_width = 0);
-
   int GetGlyphWidth(FX_DWORD glyph_index);
-
   int GetAscent() const;
-
   int GetDescent() const;
-
   FX_BOOL GetGlyphBBox(FX_DWORD glyph_index, FX_RECT& bbox);
-
-  FX_BOOL IsItalic();
-
-  FX_BOOL IsBold();
-
-  FX_BOOL IsFixedWidth();
-
+  FX_BOOL IsItalic() const;
+  FX_BOOL IsBold() const;
+  FX_BOOL IsFixedWidth() const;
   FX_BOOL IsVertical() const { return m_bVertical; }
-
   CFX_WideString GetPsName() const;
-
   CFX_ByteString GetFamilyName() const;
-
   CFX_ByteString GetFaceName() const;
-
-  FX_BOOL IsTTFont();
-
+  FX_BOOL IsTTFont() const;
   FX_BOOL GetBBox(FX_RECT& bbox);
+  int GetHeight() const;
+  int GetULPos() const;
+  int GetULthickness() const;
+  int GetMaxAdvanceWidth() const;
+  FX_BOOL IsEmbedded() const { return m_bEmbedded; }
+  uint8_t* GetSubData() const { return m_pGsubData; }
+  void SetSubData(uint8_t* data) { m_pGsubData = data; }
+  void* GetPlatformFont() const { return m_pPlatformFont; }
+  void SetPlatformFont(void* font) { m_pPlatformFont = font; }
+  uint8_t* GetFontData() const { return m_pFontData; }
+  FX_DWORD GetSize() const { return m_dwSize; }
+  void AdjustMMParams(int glyph_index, int width, int weight);
 
-  int GetHeight();
-
-  int GetULPos();
-
-  int GetULthickness();
-
-  int GetMaxAdvanceWidth();
+ private:
+  void ReleasePlatformResource();
+  void DeleteFace();
 
   FXFT_Face m_Face;
-
   CFX_SubstFont* m_pSubstFont;
-  FX_BOOL IsEmbedded() { return m_bEmbedded; }
-
-  void AdjustMMParams(int glyph_index, int width, int weight);
   uint8_t* m_pFontDataAllocation;
   uint8_t* m_pFontData;
   uint8_t* m_pGsubData;
@@ -132,16 +124,14 @@ class CFX_Font {
   void* m_pPlatformFontCollection;
   void* m_pDwFont;
   FX_BOOL m_bDwLoaded;
-  void ReleasePlatformResource();
-
-  void DeleteFace();
-
- protected:
   FX_BOOL m_bEmbedded;
   FX_BOOL m_bVertical;
+
+ protected:
   FX_BOOL m_bLogic;
   void* m_pOwnedStream;
 };
+
 #define ENCODING_INTERNAL 0
 #define ENCODING_UNICODE 1
 
@@ -239,6 +229,7 @@ class CFX_FontMgr {
   ~CFX_FontMgr();
 
   void InitFTLibrary();
+
   FXFT_Face GetCachedFace(const CFX_ByteString& face_name,
                           int weight,
                           FX_BOOL bItalic,
@@ -312,7 +303,6 @@ class CFX_FontMapper {
     m_pFontEnumerator = pFontEnumerator;
   }
   IFX_FontEnumerator* GetFontEnumerator() const { return m_pFontEnumerator; }
-
   FXFT_Face FindSubstFont(const CFX_ByteString& face_name,
                           FX_BOOL bTrueType,
                           FX_DWORD flags,
index 72df84e..0f6d973 100644 (file)
@@ -978,7 +978,7 @@ CPDF_Font* CPDF_Document::AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert) {
   pFontDesc->SetAtInteger("Flags", flags);
   pFontDesc->SetAtInteger(
       "ItalicAngle",
-      pFont->m_pSubstFont ? pFont->m_pSubstFont->m_ItalicAngle : 0);
+      pFont->GetSubstFont() ? pFont->GetSubstFont()->m_ItalicAngle : 0);
   pFontDesc->SetAtInteger("Ascent", pFont->GetAscent());
   pFontDesc->SetAtInteger("Descent", pFont->GetDescent());
   FX_RECT bbox;
@@ -990,8 +990,8 @@ CPDF_Font* CPDF_Document::AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert) {
   pBBox->AddInteger(bbox.top);
   pFontDesc->SetAt("FontBBox", pBBox);
   int32_t nStemV = 0;
-  if (pFont->m_pSubstFont) {
-    nStemV = pFont->m_pSubstFont->m_Weight / 5;
+  if (pFont->GetSubstFont()) {
+    nStemV = pFont->GetSubstFont()->m_Weight / 5;
   } else {
     static const FX_CHAR stem_chars[] = {'i', 'I', '!', '1'};
     const size_t count = sizeof(stem_chars) / sizeof(stem_chars[0]);
index 0236d4c..543816b 100644 (file)
@@ -212,6 +212,7 @@ CFX_ByteString CPDF_Font::EncodeString(const CFX_WideString& str) const {
   result.ReleaseBuffer(dest_pos);
   return result;
 }
+
 void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) {
   m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags"), PDFFONT_NONSYMBOLIC);
   int ItalicAngle = 0;
@@ -257,6 +258,7 @@ void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) {
     m_FontBBox.right = pBBox->GetInteger(2);
     m_FontBBox.top = pBBox->GetInteger(3);
   }
+
   CPDF_Stream* pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile"));
   if (!pFontFile)
     pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile2"));
@@ -271,10 +273,13 @@ void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) {
 
   const uint8_t* pFontData = m_pFontFile->GetData();
   FX_DWORD dwFontSize = m_pFontFile->GetSize();
-  m_Font.LoadEmbedded(pFontData, dwFontSize);
-  if (!m_Font.m_Face)
+  if (!m_Font.LoadEmbedded(pFontData, dwFontSize)) {
+    m_pDocument->GetPageData()->ReleaseFontFileStreamAcc(
+        const_cast<CPDF_Stream*>(m_pFontFile->GetStream()->AsStream()));
     m_pFontFile = nullptr;
+  }
 }
+
 short TT2PDF(int m, FXFT_Face face) {
   int upm = FXFT_Get_Face_UnitsPerEM(face);
   if (upm == 0) {
@@ -285,16 +290,14 @@ short TT2PDF(int m, FXFT_Face face) {
 void CPDF_Font::CheckFontMetrics() {
   if (m_FontBBox.top == 0 && m_FontBBox.bottom == 0 && m_FontBBox.left == 0 &&
       m_FontBBox.right == 0) {
-    if (m_Font.m_Face) {
-      m_FontBBox.left =
-          TT2PDF(FXFT_Get_Face_xMin(m_Font.m_Face), m_Font.m_Face);
-      m_FontBBox.bottom =
-          TT2PDF(FXFT_Get_Face_yMin(m_Font.m_Face), m_Font.m_Face);
-      m_FontBBox.right =
-          TT2PDF(FXFT_Get_Face_xMax(m_Font.m_Face), m_Font.m_Face);
-      m_FontBBox.top = TT2PDF(FXFT_Get_Face_yMax(m_Font.m_Face), m_Font.m_Face);
-      m_Ascent = TT2PDF(FXFT_Get_Face_Ascender(m_Font.m_Face), m_Font.m_Face);
-      m_Descent = TT2PDF(FXFT_Get_Face_Descender(m_Font.m_Face), m_Font.m_Face);
+    FXFT_Face face = m_Font.GetFace();
+    if (face) {
+      m_FontBBox.left = TT2PDF(FXFT_Get_Face_xMin(face), face);
+      m_FontBBox.bottom = TT2PDF(FXFT_Get_Face_yMin(face), face);
+      m_FontBBox.right = TT2PDF(FXFT_Get_Face_xMax(face), face);
+      m_FontBBox.top = TT2PDF(FXFT_Get_Face_yMax(face), face);
+      m_Ascent = TT2PDF(FXFT_Get_Face_Ascender(face), face);
+      m_Descent = TT2PDF(FXFT_Get_Face_Descender(face), face);
     } else {
       FX_BOOL bFirst = TRUE;
       for (int i = 0; i < 256; i++) {
@@ -358,9 +361,9 @@ int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) {
   return width;
 }
 int CPDF_Font::GetCharTypeWidth(FX_DWORD charcode) {
-  if (m_Font.m_Face == NULL) {
+  if (!m_Font.GetFace())
     return 0;
-  }
+
   int glyph_index = GlyphFromCharCode(charcode);
   if (glyph_index == 0xffff) {
     return 0;
@@ -781,15 +784,12 @@ void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding,
 }
 
 FX_BOOL CPDF_Font::IsStandardFont() const {
-  if (m_FontType != PDFFONT_TYPE1) {
+  if (m_FontType != PDFFONT_TYPE1)
     return FALSE;
-  }
-  if (m_pFontFile != NULL) {
+  if (m_pFontFile)
     return FALSE;
-  }
-  if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) {
+  if (((CPDF_Type1Font*)this)->GetBase14Font() < 0)
     return FALSE;
-  }
   return TRUE;
 }
 CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype) {
@@ -817,15 +817,15 @@ int CPDF_SimpleFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) {
   return index;
 }
 void CPDF_SimpleFont::LoadCharMetrics(int charcode) {
-  if (m_Font.m_Face == NULL) {
+  if (!m_Font.GetFace())
     return;
-  }
+
   if (charcode < 0 || charcode > 0xff) {
     return;
   }
   int glyph_index = m_GlyphIndex[charcode];
   if (glyph_index == 0xffff) {
-    if (m_pFontFile == NULL && charcode != 32) {
+    if (!m_pFontFile && charcode != 32) {
       LoadCharMetrics(32);
       m_CharBBox[charcode] = m_CharBBox[32];
       if (m_bUseFontWidth) {
@@ -834,27 +834,21 @@ void CPDF_SimpleFont::LoadCharMetrics(int charcode) {
     }
     return;
   }
+  FXFT_Face face = m_Font.GetFace();
   int err = FXFT_Load_Glyph(
-      m_Font.m_Face, glyph_index,
+      face, glyph_index,
       FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
   if (err) {
     return;
   }
-  m_CharBBox[charcode].Left =
-      TT2PDF(FXFT_Get_Glyph_HoriBearingX(m_Font.m_Face), m_Font.m_Face);
-  m_CharBBox[charcode].Right =
-      TT2PDF(FXFT_Get_Glyph_HoriBearingX(m_Font.m_Face) +
-                 FXFT_Get_Glyph_Width(m_Font.m_Face),
-             m_Font.m_Face);
-  m_CharBBox[charcode].Top =
-      TT2PDF(FXFT_Get_Glyph_HoriBearingY(m_Font.m_Face), m_Font.m_Face);
-  m_CharBBox[charcode].Bottom =
-      TT2PDF(FXFT_Get_Glyph_HoriBearingY(m_Font.m_Face) -
-                 FXFT_Get_Glyph_Height(m_Font.m_Face),
-             m_Font.m_Face);
+  m_CharBBox[charcode].Left = TT2PDF(FXFT_Get_Glyph_HoriBearingX(face), face);
+  m_CharBBox[charcode].Right = TT2PDF(
+      FXFT_Get_Glyph_HoriBearingX(face) + FXFT_Get_Glyph_Width(face), face);
+  m_CharBBox[charcode].Top = TT2PDF(FXFT_Get_Glyph_HoriBearingY(face), face);
+  m_CharBBox[charcode].Bottom = TT2PDF(
+      FXFT_Get_Glyph_HoriBearingY(face) - FXFT_Get_Glyph_Height(face), face);
   if (m_bUseFontWidth) {
-    int TT_Width =
-        TT2PDF(FXFT_Get_Glyph_HoriAdvance(m_Font.m_Face), m_Font.m_Face);
+    int TT_Width = TT2PDF(FXFT_Get_Glyph_HoriAdvance(face), face);
     if (m_CharWidth[charcode] == 0xffff) {
       m_CharWidth[charcode] = TT_Width;
     } else if (TT_Width && !IsEmbedded()) {
@@ -939,12 +933,12 @@ FX_BOOL CPDF_SimpleFont::LoadCommon() {
       }
     }
   }
-  if (m_pFontFile == NULL) {
-    LoadSubstFont();
-  } else {
+  if (m_pFontFile) {
     if (m_BaseFont.GetLength() > 8 && m_BaseFont[7] == '+') {
       m_BaseFont = m_BaseFont.Mid(8);
     }
+  } else {
+    LoadSubstFont();
   }
   if (!(m_Flags & PDFFONT_SYMBOLIC)) {
     m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
@@ -955,14 +949,14 @@ FX_BOOL CPDF_SimpleFont::LoadCommon() {
   LoadGlyphMap();
   delete[] m_pCharNames;
   m_pCharNames = NULL;
-  if (m_Font.m_Face == NULL) {
+  if (!m_Font.GetFace())
     return TRUE;
-  }
+
   if (m_Flags & PDFFONT_ALLCAP) {
     unsigned char lowercases[] = {'a', 'z', 0xe0, 0xf6, 0xf8, 0xfd};
     for (size_t range = 0; range < sizeof lowercases / 2; range++) {
       for (int i = lowercases[range * 2]; i <= lowercases[range * 2 + 1]; i++) {
-        if (m_GlyphIndex[i] != 0xffff && m_pFontFile != NULL) {
+        if (m_GlyphIndex[i] != 0xffff && m_pFontFile) {
           continue;
         }
         m_GlyphIndex[i] = m_GlyphIndex[i - 32];
@@ -996,7 +990,7 @@ void CPDF_SimpleFont::LoadSubstFont() {
   int weight = m_StemV < 140 ? m_StemV * 5 : (m_StemV * 4 + 140);
   m_Font.LoadSubst(m_BaseFont, IsFontType(PDFFONT_TRUETYPE), m_Flags, weight,
                    m_ItalicAngle, 0);
-  if (m_Font.m_pSubstFont->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) {
+  if (m_Font.GetSubstFont()->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) {
   }
 }
 FX_BOOL CPDF_SimpleFont::IsUnicodeCompatible() const {
@@ -1089,42 +1083,43 @@ static const FX_CHAR* _GlyphNameRemap(const FX_CHAR* pStrAdobe) {
 }
 #endif
 void CPDF_Type1Font::LoadGlyphMap() {
-  if (m_Font.m_Face == NULL) {
+  if (!m_Font.GetFace())
     return;
-  }
+
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
   FX_BOOL bCoreText = TRUE;
   CQuartz2D& quartz2d =
       ((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
-  if (!m_Font.m_pPlatformFont) {
+  if (!m_Font.GetPlatformFont()) {
     if (m_Font.GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) {
       bCoreText = FALSE;
     }
-    m_Font.m_pPlatformFont =
-        quartz2d.CreateFont(m_Font.m_pFontData, m_Font.m_dwSize);
-    if (NULL == m_Font.m_pPlatformFont) {
+    m_Font.SetPlatformFont(
+        quartz2d.CreateFont(m_Font.GetFontData(), m_Font.GetSize()));
+    if (!m_Font.GetPlatformFont()) {
       bCoreText = FALSE;
     }
   }
 #endif
   if (!IsEmbedded() && (m_Base14Font < 12) && m_Font.IsTTFont()) {
-    if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
+    if (FT_UseTTCharmap(m_Font.GetFace(), 3, 0)) {
       FX_BOOL bGotOne = FALSE;
       for (int charcode = 0; charcode < 256; charcode++) {
         const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
         for (int j = 0; j < 4; j++) {
           FX_WORD unicode = prefix[j] * 256 + charcode;
-          m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+          m_GlyphIndex[charcode] =
+              FXFT_Get_Char_Index(m_Font.GetFace(), unicode);
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
           FX_CHAR name_glyph[256];
-          FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
-                              256);
+          FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+                              name_glyph, 256);
           name_glyph[255] = 0;
           CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
               kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
               kCFAllocatorNull);
           m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
-              (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+              (CGFontRef)m_Font.GetPlatformFont(), name_ct);
           if (name_ct) {
             CFRelease(name_ct);
           }
@@ -1144,7 +1139,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
         return;
       }
     }
-    FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE);
+    FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE);
     if (m_BaseEncoding == 0) {
       m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
     }
@@ -1155,35 +1150,35 @@ void CPDF_Type1Font::LoadGlyphMap() {
         continue;
       }
       m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
-      m_GlyphIndex[charcode] =
-          FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
+      m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
+          m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]);
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
       FX_CHAR name_glyph[256];
-      FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
+      FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode], name_glyph,
                           256);
       name_glyph[255] = 0;
       CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
           kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
           kCFAllocatorNull);
       m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
-          (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+          (CGFontRef)m_Font.GetPlatformFont(), name_ct);
       if (name_ct) {
         CFRelease(name_ct);
       }
 #endif
       if (m_GlyphIndex[charcode] == 0 && FXSYS_strcmp(name, ".notdef") == 0) {
         m_Encoding.m_Unicodes[charcode] = 0x20;
-        m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, 0x20);
+        m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), 0x20);
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
         FX_CHAR name_glyph[256];
-        FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
-                            256);
+        FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+                            name_glyph, 256);
         name_glyph[255] = 0;
         CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
             kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
             kCFAllocatorNull);
         m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
-            (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+            (CGFontRef)m_Font.GetPlatformFont(), name_ct);
         if (name_ct) {
           CFRelease(name_ct);
         }
@@ -1197,7 +1192,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
 #endif
     return;
   }
-  FT_UseType1Charmap(m_Font.m_Face);
+  FT_UseType1Charmap(m_Font.GetFace());
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
   if (bCoreText) {
     if (m_Flags & PDFFONT_SYMBOLIC) {
@@ -1207,17 +1202,18 @@ void CPDF_Type1Font::LoadGlyphMap() {
         if (name) {
           m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
           m_GlyphIndex[charcode] =
-              FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+              FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
           CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
               kCFAllocatorDefault, name, kCFStringEncodingASCII,
               kCFAllocatorNull);
           m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
-              (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+              (CGFontRef)m_Font.GetPlatformFont(), name_ct);
           if (name_ct) {
             CFRelease(name_ct);
           }
         } else {
-          m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+          m_GlyphIndex[charcode] =
+              FXFT_Get_Char_Index(m_Font.GetFace(), charcode);
           FX_WCHAR unicode = 0;
           if (m_GlyphIndex[charcode]) {
             unicode =
@@ -1225,8 +1221,8 @@ void CPDF_Type1Font::LoadGlyphMap() {
           }
           FX_CHAR name_glyph[256];
           FXSYS_memset(name_glyph, 0, sizeof(name_glyph));
-          FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
-                              256);
+          FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+                              name_glyph, 256);
           name_glyph[255] = 0;
           if (unicode == 0 && name_glyph[0] != 0) {
             unicode = PDF_UnicodeFromAdobeName(name_glyph);
@@ -1236,7 +1232,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
               kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
               kCFAllocatorNull);
           m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
-              (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+              (CGFontRef)m_Font.GetPlatformFont(), name_ct);
           if (name_ct) {
             CFRelease(name_ct);
           }
@@ -1245,7 +1241,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
       return;
     }
     FX_BOOL bUnicode = FALSE;
-    if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) {
+    if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) {
       bUnicode = TRUE;
     }
     for (int charcode = 0; charcode < 256; charcode++) {
@@ -1256,14 +1252,16 @@ void CPDF_Type1Font::LoadGlyphMap() {
       }
       m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
       const FX_CHAR* pStrUnicode = _GlyphNameRemap(name);
-      if (pStrUnicode && 0 == FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)) {
+      if (pStrUnicode &&
+          0 == FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name)) {
         name = pStrUnicode;
       }
-      m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+      m_GlyphIndex[charcode] =
+          FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
       CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
           kCFAllocatorDefault, name, kCFStringEncodingASCII, kCFAllocatorNull);
       m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
-          (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+          (CGFontRef)m_Font.GetPlatformFont(), name_ct);
       if (name_ct) {
         CFRelease(name_ct);
       }
@@ -1271,33 +1269,33 @@ void CPDF_Type1Font::LoadGlyphMap() {
         if (FXSYS_strcmp(name, ".notdef") != 0 &&
             FXSYS_strcmp(name, "space") != 0) {
           m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
-              m_Font.m_Face,
+              m_Font.GetFace(),
               bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode);
           FX_CHAR name_glyph[256];
-          FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
-                              256);
+          FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+                              name_glyph, 256);
           name_glyph[255] = 0;
           CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
               kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
               kCFAllocatorNull);
           m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
-              (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+              (CGFontRef)m_Font.GetPlatformFont(), name_ct);
           if (name_ct) {
             CFRelease(name_ct);
           }
         } else {
           m_Encoding.m_Unicodes[charcode] = 0x20;
           m_GlyphIndex[charcode] =
-              bUnicode ? FXFT_Get_Char_Index(m_Font.m_Face, 0x20) : 0xffff;
+              bUnicode ? FXFT_Get_Char_Index(m_Font.GetFace(), 0x20) : 0xffff;
           FX_CHAR name_glyph[256];
-          FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
-                              256);
+          FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+                              name_glyph, 256);
           name_glyph[255] = 0;
           CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
               kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
               kCFAllocatorNull);
           m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
-              (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+              (CGFontRef)m_Font.GetPlatformFont(), name_ct);
           if (name_ct) {
             CFRelease(name_ct);
           }
@@ -1314,16 +1312,17 @@ void CPDF_Type1Font::LoadGlyphMap() {
       if (name) {
         m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
         m_GlyphIndex[charcode] =
-            FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+            FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
       } else {
-        m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+        m_GlyphIndex[charcode] =
+            FXFT_Get_Char_Index(m_Font.GetFace(), charcode);
         if (m_GlyphIndex[charcode]) {
           FX_WCHAR unicode =
               FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode);
           if (unicode == 0) {
             FX_CHAR name_glyph[256];
             FXSYS_memset(name_glyph, 0, sizeof(name_glyph));
-            FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode],
+            FXFT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
                                 name_glyph, 256);
             name_glyph[255] = 0;
             if (name_glyph[0] != 0) {
@@ -1342,7 +1341,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
     return;
   }
   FX_BOOL bUnicode = FALSE;
-  if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) {
+  if (0 == FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE)) {
     bUnicode = TRUE;
   }
   for (int charcode = 0; charcode < 256; charcode++) {
@@ -1352,12 +1351,12 @@ void CPDF_Type1Font::LoadGlyphMap() {
       continue;
     }
     m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
-    m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+    m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
     if (m_GlyphIndex[charcode] == 0) {
       if (FXSYS_strcmp(name, ".notdef") != 0 &&
           FXSYS_strcmp(name, "space") != 0) {
         m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
-            m_Font.m_Face,
+            m_Font.GetFace(),
             bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode);
       } else {
         m_Encoding.m_Unicodes[charcode] = 0x20;
@@ -1371,6 +1370,7 @@ void CPDF_Type1Font::LoadGlyphMap() {
   }
 #endif
 }
+
 CPDF_FontEncoding::CPDF_FontEncoding() {
   FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes));
 }
@@ -1443,19 +1443,19 @@ FX_BOOL CPDF_TrueTypeFont::_Load() {
   return LoadCommon();
 }
 void CPDF_TrueTypeFont::LoadGlyphMap() {
-  if (m_Font.m_Face == NULL) {
+  if (!m_Font.GetFace())
     return;
-  }
+
   int baseEncoding = m_BaseEncoding;
-  if (m_pFontFile && m_Font.m_Face->num_charmaps > 0 &&
+  if (m_pFontFile && m_Font.GetFace()->num_charmaps > 0 &&
       (baseEncoding == PDFFONT_ENCODING_MACROMAN ||
        baseEncoding == PDFFONT_ENCODING_WINANSI) &&
       (m_Flags & PDFFONT_SYMBOLIC)) {
     FX_BOOL bSupportWin = FALSE;
     FX_BOOL bSupportMac = FALSE;
-    for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i++) {
-      int platform_id =
-          FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]);
+    for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.GetFace()); i++) {
+      int platform_id = FXFT_Get_Charmap_PlatformID(
+          FXFT_Get_Face_Charmaps(m_Font.GetFace())[i]);
       if (platform_id == 0 || platform_id == 3) {
         bSupportWin = TRUE;
       } else if (platform_id == 0 || platform_id == 1) {
@@ -1474,8 +1474,8 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
         baseEncoding == PDFFONT_ENCODING_WINANSI) &&
        m_pCharNames == NULL) ||
       (m_Flags & PDFFONT_NONSYMBOLIC)) {
-    if (!FXFT_Has_Glyph_Names(m_Font.m_Face) &&
-        (!m_Font.m_Face->num_charmaps || !m_Font.m_Face->charmaps)) {
+    if (!FXFT_Has_Glyph_Names(m_Font.GetFace()) &&
+        (!m_Font.GetFace()->num_charmaps || !m_Font.GetFace()->charmaps)) {
       int nStartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"));
       if (nStartChar < 0 || nStartChar > 255)
         return;
@@ -1490,15 +1490,15 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
       }
       return;
     }
-    FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1);
+    FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.GetFace(), 3, 1);
     FX_BOOL bMacRoman = FALSE, bMSSymbol = FALSE;
     if (!bMSUnicode) {
       if (m_Flags & PDFFONT_NONSYMBOLIC) {
-        bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0);
-        bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.m_Face, 3, 0);
+        bMacRoman = FT_UseTTCharmap(m_Font.GetFace(), 1, 0);
+        bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.GetFace(), 3, 0);
       } else {
-        bMSSymbol = FT_UseTTCharmap(m_Font.m_Face, 3, 0);
-        bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.m_Face, 1, 0);
+        bMSSymbol = FT_UseTTCharmap(m_Font.GetFace(), 3, 0);
+        bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.GetFace(), 1, 0);
       }
     }
     FX_BOOL bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode"));
@@ -1507,7 +1507,7 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
           GetAdobeCharName(baseEncoding, m_pCharNames, charcode);
       if (name == NULL) {
         m_GlyphIndex[charcode] =
-            m_pFontFile ? FXFT_Get_Char_Index(m_Font.m_Face, charcode) : -1;
+            m_pFontFile ? FXFT_Get_Char_Index(m_Font.GetFace(), charcode) : -1;
         continue;
       }
       m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
@@ -1515,7 +1515,8 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
         const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
         for (int j = 0; j < 4; j++) {
           FX_WORD unicode = prefix[j] * 256 + charcode;
-          m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+          m_GlyphIndex[charcode] =
+              FXFT_Get_Char_Index(m_Font.GetFace(), unicode);
           if (m_GlyphIndex[charcode]) {
             break;
           }
@@ -1523,38 +1524,38 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
       } else if (m_Encoding.m_Unicodes[charcode]) {
         if (bMSUnicode) {
           m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
-              m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
+              m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]);
         } else if (bMacRoman) {
           FX_DWORD maccode = FT_CharCodeFromUnicode(
               FXFT_ENCODING_APPLE_ROMAN, m_Encoding.m_Unicodes[charcode]);
           if (!maccode) {
             m_GlyphIndex[charcode] =
-                FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+                FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
           } else {
             m_GlyphIndex[charcode] =
-                FXFT_Get_Char_Index(m_Font.m_Face, maccode);
+                FXFT_Get_Char_Index(m_Font.GetFace(), maccode);
           }
         }
       }
       if ((m_GlyphIndex[charcode] == 0 || m_GlyphIndex[charcode] == 0xffff) &&
           name != NULL) {
         if (name[0] == '.' && FXSYS_strcmp(name, ".notdef") == 0) {
-          m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, 32);
+          m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), 32);
         } else {
           m_GlyphIndex[charcode] =
-              FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+              FXFT_Get_Name_Index(m_Font.GetFace(), (char*)name);
           if (m_GlyphIndex[charcode] == 0) {
             if (bToUnicode) {
               CFX_WideString wsUnicode = UnicodeFromCharCode(charcode);
               if (!wsUnicode.IsEmpty()) {
                 m_GlyphIndex[charcode] =
-                    FXFT_Get_Char_Index(m_Font.m_Face, wsUnicode[0]);
+                    FXFT_Get_Char_Index(m_Font.GetFace(), wsUnicode[0]);
                 m_Encoding.m_Unicodes[charcode] = wsUnicode[0];
               }
             }
             if (m_GlyphIndex[charcode] == 0) {
               m_GlyphIndex[charcode] =
-                  FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+                  FXFT_Get_Char_Index(m_Font.GetFace(), charcode);
             }
           }
         }
@@ -1562,13 +1563,13 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
     }
     return;
   }
-  if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
+  if (FT_UseTTCharmap(m_Font.GetFace(), 3, 0)) {
     const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
     FX_BOOL bGotOne = FALSE;
     for (int charcode = 0; charcode < 256; charcode++) {
       for (int j = 0; j < 4; j++) {
         FX_WORD unicode = prefix[j] * 256 + charcode;
-        m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+        m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), unicode);
         if (m_GlyphIndex[charcode]) {
           bGotOne = TRUE;
           break;
@@ -1585,7 +1586,7 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
           }
           m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
         }
-      } else if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) {
+      } else if (FT_UseTTCharmap(m_Font.GetFace(), 1, 0)) {
         for (int charcode = 0; charcode < 256; charcode++) {
           m_Encoding.m_Unicodes[charcode] =
               FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode);
@@ -1594,10 +1595,10 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
       return;
     }
   }
-  if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) {
+  if (FT_UseTTCharmap(m_Font.GetFace(), 1, 0)) {
     FX_BOOL bGotOne = FALSE;
     for (int charcode = 0; charcode < 256; charcode++) {
-      m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+      m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.GetFace(), charcode);
       m_Encoding.m_Unicodes[charcode] =
           FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode);
       if (m_GlyphIndex[charcode]) {
@@ -1608,22 +1609,22 @@ void CPDF_TrueTypeFont::LoadGlyphMap() {
       return;
     }
   }
-  if (FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE) == 0) {
+  if (FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE) == 0) {
     FX_BOOL bGotOne = FALSE;
     const FX_WORD* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding);
     for (int charcode = 0; charcode < 256; charcode++) {
-      if (m_pFontFile == NULL) {
+      if (m_pFontFile) {
+        m_Encoding.m_Unicodes[charcode] = charcode;
+      } else {
         const FX_CHAR* name = GetAdobeCharName(0, m_pCharNames, charcode);
-        if (name != NULL) {
+        if (name) {
           m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
         } else if (pUnicodes) {
           m_Encoding.m_Unicodes[charcode] = pUnicodes[charcode];
         }
-      } else {
-        m_Encoding.m_Unicodes[charcode] = charcode;
       }
-      m_GlyphIndex[charcode] =
-          FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
+      m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
+          m_Font.GetFace(), m_Encoding.m_Unicodes[charcode]);
       if (m_GlyphIndex[charcode]) {
         bGotOne = TRUE;
       }
index 1b1ba8b..02f0933 100644 (file)
@@ -1307,11 +1307,9 @@ void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
   }
   FX_BOOL bVert = FALSE;
   int glyph_index = GlyphFromCharCode(charcode, &bVert);
-  if (m_Font.m_Face == NULL) {
-    rect = FX_RECT(0, 0, 0, 0);
-  } else {
+  FXFT_Face face = m_Font.GetFace();
+  if (face) {
     rect.left = rect.bottom = rect.right = rect.top = 0;
-    FXFT_Face face = m_Font.m_Face;
     if (FXFT_Is_Face_Tricky(face)) {
       int err = FXFT_Load_Glyph(face, glyph_index,
                                 FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
@@ -1357,6 +1355,8 @@ void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
             face);
       }
     }
+  } else {
+    rect = FX_RECT(0, 0, 0, 0);
   }
   if (m_pFontFile == NULL && m_Charset == CIDSET_JAPAN1) {
     FX_WORD CID = CIDFromCharCode(charcode);
@@ -1433,7 +1433,8 @@ int CPDF_CIDFont::GetGlyphIndex(FX_DWORD unicode, FX_BOOL* pVertGlyph) {
   if (pVertGlyph) {
     *pVertGlyph = FALSE;
   }
-  int index = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+  FXFT_Face face = m_Font.GetFace();
+  int index = FXFT_Get_Char_Index(face, unicode);
   if (unicode == 0x2502) {
     return index;
   }
@@ -1449,20 +1450,19 @@ int CPDF_CIDFont::GetGlyphIndex(FX_DWORD unicode, FX_BOOL* pVertGlyph) {
       }
       return index;
     }
-    if (NULL == m_Font.m_pGsubData) {
+    if (!m_Font.GetSubData()) {
       unsigned long length = 0;
-      int error = FXFT_Load_Sfnt_Table(
-          m_Font.m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, NULL, &length);
+      int error = FXFT_Load_Sfnt_Table(face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
+                                       NULL, &length);
       if (!error) {
-        m_Font.m_pGsubData = FX_Alloc(uint8_t, length);
+        m_Font.SetSubData(FX_Alloc(uint8_t, length));
       }
     }
-    int error =
-        FXFT_Load_Sfnt_Table(m_Font.m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
-                             m_Font.m_pGsubData, NULL);
-    if (!error && m_Font.m_pGsubData) {
+    int error = FXFT_Load_Sfnt_Table(face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
+                                     m_Font.GetSubData(), NULL);
+    if (!error && m_Font.GetSubData()) {
       m_pTTGSUBTable = new CFX_CTTGSUBTable;
-      m_pTTGSUBTable->LoadGSUBTable((FT_Bytes)m_Font.m_pGsubData);
+      m_pTTGSUBTable->LoadGSUBTable((FT_Bytes)m_Font.GetSubData());
       TT_uint32_t vindex = 0;
       m_pTTGSUBTable->GetVerticalGlyph(index, &vindex);
       if (vindex) {
@@ -1510,16 +1510,17 @@ int CPDF_CIDFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) {
         unicode = UnicodeFromCharCode(charcode).GetAt(0);
       }
     }
+    FXFT_Face face = m_Font.GetFace();
     if (unicode == 0) {
       if (!m_bAdobeCourierStd) {
         return charcode == 0 ? -1 : (int)charcode;
       }
       charcode += 31;
       int index = 0, iBaseEncoding;
-      FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1);
+      FX_BOOL bMSUnicode = FT_UseTTCharmap(face, 3, 1);
       FX_BOOL bMacRoman = FALSE;
       if (!bMSUnicode) {
-        bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0);
+        bMacRoman = FT_UseTTCharmap(face, 1, 0);
       }
       iBaseEncoding = PDFFONT_ENCODING_STANDARD;
       if (bMSUnicode) {
@@ -1534,14 +1535,14 @@ int CPDF_CIDFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) {
       FX_WORD unicode = PDF_UnicodeFromAdobeName(name);
       if (unicode) {
         if (bMSUnicode) {
-          index = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+          index = FXFT_Get_Char_Index(face, unicode);
         } else if (bMacRoman) {
           FX_DWORD maccode =
               FT_CharCodeFromUnicode(FXFT_ENCODING_APPLE_ROMAN, unicode);
-          index = !maccode ? FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)
-                           : FXFT_Get_Char_Index(m_Font.m_Face, maccode);
+          index = !maccode ? FXFT_Get_Name_Index(face, (char*)name)
+                           : FXFT_Get_Char_Index(face, maccode);
         } else {
-          return FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+          return FXFT_Get_Char_Index(face, unicode);
         }
       } else {
         return charcode == 0 ? -1 : (int)charcode;
@@ -1561,57 +1562,53 @@ int CPDF_CIDFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) {
       }
 #endif
     }
-    if (m_Font.m_Face == NULL) {
+    if (!face)
       return unicode;
-    }
-    int err = FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE);
+
+    int err = FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE);
     if (err != 0) {
       int i;
-      for (i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i++) {
+      for (i = 0; i < FXFT_Get_Face_CharmapCount(face); i++) {
         FX_DWORD ret = FT_CharCodeFromUnicode(
-            FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]),
+            FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[i]),
             (FX_WCHAR)charcode);
         if (ret == 0) {
           continue;
         }
-        FXFT_Set_Charmap(m_Font.m_Face,
-                         FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]);
+        FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[i]);
         unicode = (FX_WCHAR)ret;
         break;
       }
-      if (i == FXFT_Get_Face_CharmapCount(m_Font.m_Face) && i) {
-        FXFT_Set_Charmap(m_Font.m_Face,
-                         FXFT_Get_Face_Charmaps(m_Font.m_Face)[0]);
+      if (i == FXFT_Get_Face_CharmapCount(face) && i) {
+        FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[0]);
         unicode = (FX_WCHAR)charcode;
       }
     }
-    if (FXFT_Get_Face_Charmap(m_Font.m_Face)) {
+    if (FXFT_Get_Face_Charmap(face)) {
       int index = GetGlyphIndex(unicode, pVertGlyph);
-      if (index == 0) {
+      if (index == 0)
         return -1;
-      }
       return index;
     }
     return unicode;
   }
-  if (m_Font.m_Face == NULL) {
+  if (!m_Font.GetFace())
     return -1;
-  }
+
   FX_WORD cid = CIDFromCharCode(charcode);
   if (m_bType1) {
-    if (NULL == m_pCIDToGIDMap) {
+    if (!m_pCIDToGIDMap) {
       return cid;
     }
   } else {
-    if (m_pCIDToGIDMap == NULL) {
-      if (m_pFontFile && m_pCMap->m_pMapping == NULL) {
+    if (!m_pCIDToGIDMap) {
+      if (m_pFontFile && !m_pCMap->m_pMapping)
         return cid;
-      }
       if (m_pCMap->m_Coding == CIDCODING_UNKNOWN ||
-          FXFT_Get_Face_Charmap(m_Font.m_Face) == NULL) {
+          !FXFT_Get_Face_Charmap(m_Font.GetFace())) {
         return cid;
       }
-      if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.m_Face)) ==
+      if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.GetFace())) ==
           FXFT_ENCODING_UNICODE) {
         CFX_WideString unicode_str = UnicodeFromCharCode(charcode);
         if (unicode_str.IsEmpty()) {
@@ -1623,9 +1620,9 @@ int CPDF_CIDFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) {
     }
   }
   FX_DWORD byte_pos = cid * 2;
-  if (byte_pos + 2 > m_pCIDToGIDMap->GetSize()) {
+  if (byte_pos + 2 > m_pCIDToGIDMap->GetSize())
     return -1;
-  }
+
   const uint8_t* pdata = m_pCIDToGIDMap->GetData() + byte_pos;
   return pdata[0] * 256 + pdata[1];
 }
index 2ed586e..6c1b426 100644 (file)
@@ -388,23 +388,23 @@ IFX_GSUBTable* IFX_GSUBTable::Create(CFX_Font* pFont) {
   if (!pFont) {
     return NULL;
   }
-  if (NULL == pFont->m_pGsubData) {
+  if (!pFont->GetSubData()) {
     unsigned long length = 0;
     int error = FXFT_Load_Sfnt_Table(
-        pFont->m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, NULL, &length);
+        pFont->GetFace(), FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, NULL, &length);
     if (!error) {
-      pFont->m_pGsubData = FX_Alloc(uint8_t, length);
+      pFont->SetSubData(FX_Alloc(uint8_t, length));
     }
-    if (!pFont->m_pGsubData) {
+    if (!pFont->GetSubData()) {
       return NULL;
     }
   }
   int error =
-      FXFT_Load_Sfnt_Table(pFont->m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
-                           pFont->m_pGsubData, NULL);
-  if (!error && pFont->m_pGsubData) {
+      FXFT_Load_Sfnt_Table(pFont->GetFace(), FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
+                           pFont->GetSubData(), NULL);
+  if (!error && pFont->GetSubData()) {
     nonstd::unique_ptr<CFX_GSUBTable> pGsubTable(new CFX_GSUBTable);
-    if (pGsubTable->m_GsubImp.LoadGSUBTable((FT_Bytes)pFont->m_pGsubData)) {
+    if (pGsubTable->m_GsubImp.LoadGSUBTable((FT_Bytes)pFont->GetSubData())) {
       return pGsubTable.release();
     }
   }
index 472e96a..89ac8ac 100644 (file)
@@ -790,10 +790,10 @@ void CPDF_RenderStatus::DrawTextPathWithPattern(
     ProcessPath(&path, pObj2Device);
   }
 }
+
 CFX_PathData* CPDF_Font::LoadGlyphPath(FX_DWORD charcode, int dest_width) {
   int glyph_index = GlyphFromCharCode(charcode);
-  if (m_Font.m_Face == NULL) {
-    return NULL;
-  }
+  if (!m_Font.GetFace())
+    return nullptr;
   return m_Font.LoadGlyphPath(glyph_index, dest_width);
 }
index 8931acd..1b476d7 100644 (file)
@@ -2561,7 +2561,7 @@ CPDF_LinkExtract::~CPDF_LinkExtract() {
   DeleteLinkList();
 }
 FX_BOOL CPDF_LinkExtract::ExtractLinks(const IPDF_TextPage* pTextPage) {
-  if (!pTextPage || !pTextPage->IsParsered()) {
+  if (!pTextPage || !pTextPage->IsParsed()) {
     return FALSE;
   }
   m_pTextPage = (const CPDF_TextPage*)pTextPage;
index 129ef0a..59332e7 100644 (file)
@@ -60,7 +60,7 @@ class CPDF_TextPage : public IPDF_TextPage {
   // IPDF_TextPage
   FX_BOOL ParseTextPage() override;
   void NormalizeObjects(FX_BOOL bNormalize) override;
-  FX_BOOL IsParsered() const override { return m_IsParsered; }
+  bool IsParsed() const override { return m_IsParsered; }
   int CharIndexFromTextIndex(int TextIndex) const override;
   int TextIndexFromCharIndex(int CharIndex) const override;
   int CountChars() const override;
index 7517cf1..05ae175 100644 (file)
@@ -34,7 +34,7 @@ const FX_DWORD g_EncodingID[] = {
 
 CFX_UnicodeEncodingEx* _FXFM_CreateFontEncoding(CFX_Font* pFont,
                                                 FX_DWORD nEncodingID) {
-  if (FXFT_Select_Charmap(pFont->m_Face, nEncodingID))
+  if (FXFT_Select_Charmap(pFont->GetFace(), nEncodingID))
     return nullptr;
   return new CFX_UnicodeEncodingEx(pFont, nEncodingID);
 }
@@ -233,7 +233,7 @@ FX_BOOL CFX_Font::LoadEmbedded(const uint8_t* data, FX_DWORD size) {
   m_dwSize = size;
   return m_Face != NULL;
 }
-FX_BOOL CFX_Font::IsTTFont() {
+FX_BOOL CFX_Font::IsTTFont() const {
   if (m_Face == NULL) {
     return FALSE;
   }
@@ -321,7 +321,7 @@ FX_BOOL CFX_Font::GetGlyphBBox(FX_DWORD glyph_index, FX_RECT& bbox) {
   }
   return TRUE;
 }
-FX_BOOL CFX_Font::IsItalic() {
+FX_BOOL CFX_Font::IsItalic() const {
   if (m_Face == NULL) {
     return FALSE;
   }
@@ -335,13 +335,13 @@ FX_BOOL CFX_Font::IsItalic() {
   }
   return ret;
 }
-FX_BOOL CFX_Font::IsBold() {
+FX_BOOL CFX_Font::IsBold() const {
   if (m_Face == NULL) {
     return FALSE;
   }
   return FXFT_Is_Face_Bold(m_Face) == FXFT_STYLE_FLAG_BOLD;
 }
-FX_BOOL CFX_Font::IsFixedWidth() {
+FX_BOOL CFX_Font::IsFixedWidth() const {
   if (m_Face == NULL) {
     return FALSE;
   }
@@ -403,7 +403,7 @@ FX_BOOL CFX_Font::GetBBox(FX_RECT& bbox) {
   }
   return TRUE;
 }
-int CFX_Font::GetHeight() {
+int CFX_Font::GetHeight() const {
   if (m_Face == NULL) {
     return 0;
   }
@@ -411,7 +411,7 @@ int CFX_Font::GetHeight() {
       EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_Height(m_Face));
   return height;
 }
-int CFX_Font::GetMaxAdvanceWidth() {
+int CFX_Font::GetMaxAdvanceWidth() const {
   if (m_Face == NULL) {
     return 0;
   }
@@ -419,7 +419,7 @@ int CFX_Font::GetMaxAdvanceWidth() {
                         FXFT_Get_Face_MaxAdvanceWidth(m_Face));
   return width;
 }
-int CFX_Font::GetULPos() {
+int CFX_Font::GetULPos() const {
   if (m_Face == NULL) {
     return 0;
   }
@@ -427,7 +427,7 @@ int CFX_Font::GetULPos() {
                       FXFT_Get_Face_UnderLinePosition(m_Face));
   return pos;
 }
-int CFX_Font::GetULthickness() {
+int CFX_Font::GetULthickness() const {
   if (m_Face == NULL) {
     return 0;
   }
@@ -450,7 +450,7 @@ FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCode(FX_DWORD charcode) {
   if (FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE) == 0)
     return FXFT_Get_Char_Index(face, charcode);
 
-  if (m_pFont->m_pSubstFont && m_pFont->m_pSubstFont->m_Charset == 2) {
+  if (m_pFont->GetSubstFont() && m_pFont->GetSubstFont()->m_Charset == 2) {
     FX_DWORD index = 0;
     if (FXFT_Select_Charmap(face, FXFT_ENCODING_MS_SYMBOL) == 0)
       index = FXFT_Get_Char_Index(face, charcode);
@@ -501,7 +501,7 @@ FX_DWORD CFX_UnicodeEncodingEx::CharCodeFromUnicode(FX_WCHAR Unicode) const {
       m_nEncodingID == FXFM_ENCODING_MS_SYMBOL) {
     return Unicode;
   }
-  FXFT_Face face = m_pFont->m_Face;
+  FXFT_Face face = m_pFont->GetFace();
   int nmaps = FXFT_Get_Face_CharmapCount(face);
   for (int i = 0; i < nmaps; i++) {
     int nEncodingID =
@@ -516,7 +516,7 @@ FX_DWORD CFX_UnicodeEncodingEx::CharCodeFromUnicode(FX_WCHAR Unicode) const {
 
 CFX_UnicodeEncodingEx* FX_CreateFontEncodingEx(CFX_Font* pFont,
                                                FX_DWORD nEncodingID) {
-  if (!pFont || !pFont->m_Face)
+  if (!pFont || !pFont->GetFace())
     return nullptr;
 
   if (nEncodingID != FXFM_ENCODING_NONE)
index c50fcca..f357f50 100644 (file)
@@ -165,7 +165,7 @@ FX_BOOL CFDE_FxgeDevice::DrawString(IFDE_Brush* pBrush,
       FX_DWORD dwFontStyle = pFont->GetFontStyles();\r
       CFX_Font FxFont;\r
       CFX_SubstFont SubstFxFont;\r
-      FxFont.m_pSubstFont = &SubstFxFont;\r
+      FxFont.SetSubstFont(&SubstFxFont);\r
       SubstFxFont.m_Weight = dwFontStyle & FX_FONTSTYLE_Bold ? 700 : 400;\r
       SubstFxFont.m_WeightCJK = SubstFxFont.m_Weight;\r
       SubstFxFont.m_ItalicAngle = dwFontStyle & FX_FONTSTYLE_Italic ? -12 : 0;\r
@@ -179,7 +179,7 @@ FX_BOOL CFDE_FxgeDevice::DrawString(IFDE_Brush* pBrush,
           if (pCurFont != NULL) {\r
             pFxFont = (CFX_Font*)pCurFont->GetDevFont();\r
 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_\r
-            FxFont.m_Face = pFxFont->m_Face;\r
+            FxFont.SetFace(pFxFont->GetFace());\r
             m_pDevice->DrawNormalText(\r
                 iCurCount, pCurCP, &FxFont, pCache, -fFontSize,\r
                 (const CFX_AffineMatrix*)pMatrix, argb, FXTEXT_CLEARTYPE);\r
@@ -200,12 +200,12 @@ FX_BOOL CFDE_FxgeDevice::DrawString(IFDE_Brush* pBrush,
       if (pCurFont != NULL && iCurCount) {\r
         pFxFont = (CFX_Font*)pCurFont->GetDevFont();\r
 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_\r
-        FxFont.m_Face = pFxFont->m_Face;\r
+        FxFont.SetFace(pFxFont->GetFace());\r
         FX_BOOL bRet = m_pDevice->DrawNormalText(\r
             iCurCount, pCurCP, &FxFont, pCache, -fFontSize,\r
             (const CFX_AffineMatrix*)pMatrix, argb, FXTEXT_CLEARTYPE);\r
-        FxFont.m_pSubstFont = NULL;\r
-        FxFont.m_Face = NULL;\r
+        FxFont.SetSubstFont(nullptr);\r
+        FxFont.SetFace(nullptr);\r
         return bRet;\r
 #else\r
         return m_pDevice->DrawNormalText(\r
@@ -214,8 +214,8 @@ FX_BOOL CFDE_FxgeDevice::DrawString(IFDE_Brush* pBrush,
 #endif\r
       }\r
 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_\r
-      FxFont.m_pSubstFont = NULL;\r
-      FxFont.m_Face = NULL;\r
+      FxFont.SetSubstFont(nullptr);\r
+      FxFont.SetFace(nullptr);\r
 #endif\r
       return TRUE;\r
     } break;\r
index 12c4f0e..280e0fb 100644 (file)
@@ -132,16 +132,15 @@ CFX_GEFont::CFX_GEFont(const CFX_GEFont& src, FX_DWORD dwFontStyles)
   FXSYS_assert(m_pFont != NULL);\r
   FXSYS_assert(src.m_pFont != NULL);\r
   m_pFont->LoadClone(src.m_pFont);\r
-  CFX_SubstFont*& pSubst = m_pFont->m_pSubstFont;\r
-  if (pSubst == NULL) {\r
+  CFX_SubstFont* pSubst = m_pFont->GetSubstFont();\r
+  if (!pSubst) {\r
     pSubst = new CFX_SubstFont;\r
+    m_pFont->SetSubstFont(pSubst);\r
   }\r
-  if (pSubst) {\r
-    pSubst->m_Weight =\r
-        (dwFontStyles & FX_FONTSTYLE_Bold) ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL;\r
-    if (dwFontStyles & FX_FONTSTYLE_Italic) {\r
-      pSubst->m_SubstFlags |= FXFONT_SUBST_ITALIC;\r
-    }\r
+  pSubst->m_Weight =\r
+      (dwFontStyles & FX_FONTSTYLE_Bold) ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL;\r
+  if (dwFontStyles & FX_FONTSTYLE_Italic) {\r
+    pSubst->m_SubstFlags |= FXFONT_SUBST_ITALIC;\r
   }\r
   InitFont();\r
 }\r
@@ -236,7 +235,7 @@ FX_BOOL CFX_GEFont::LoadFont(const FX_WCHAR* pszFontFamily,
     csFontFamily += ",Italic";\r
   }\r
   m_pFont->LoadSubst(csFontFamily, TRUE, dwFlags, iWeight, 0, wCodePage);\r
-  FX_BOOL bRet = m_pFont->m_Face != nullptr;\r
+  FX_BOOL bRet = m_pFont->GetFace() != nullptr;\r
   if (bRet) {\r
     InitFont();\r
   }\r
@@ -355,22 +354,20 @@ IFX_Font* CFX_GEFont::Derive(FX_DWORD dwFontStyles, FX_WORD wCodePage) {
   return new CFX_GEFont(*this, dwFontStyles);\r
 }\r
 uint8_t CFX_GEFont::GetCharSet() const {\r
-  FXSYS_assert(m_pFont != NULL);\r
   if (m_wCharSet != 0xFFFF) {\r
     return (uint8_t)m_wCharSet;\r
   }\r
-  if (m_pFont->m_pSubstFont == NULL) {\r
+  if (!m_pFont->GetSubstFont()) {\r
     return FX_CHARSET_Default;\r
   }\r
-  return m_pFont->m_pSubstFont->m_Charset;\r
+  return m_pFont->GetSubstFont()->m_Charset;\r
 }\r
 void CFX_GEFont::GetFamilyName(CFX_WideString& wsFamily) const {\r
-  FXSYS_assert(m_pFont != NULL);\r
-  if (m_pFont->m_pSubstFont == NULL ||\r
-      m_pFont->m_pSubstFont->m_Family.GetLength() == 0) {\r
+  if (!m_pFont->GetSubstFont() ||\r
+      m_pFont->GetSubstFont()->m_Family.GetLength() == 0) {\r
     wsFamily = CFX_WideString::FromLocal(m_pFont->GetFamilyName());\r
   } else {\r
-    wsFamily = CFX_WideString::FromLocal(m_pFont->m_pSubstFont->m_Family);\r
+    wsFamily = CFX_WideString::FromLocal(m_pFont->GetSubstFont()->m_Family);\r
   }\r
 }\r
 void CFX_GEFont::GetPsName(CFX_WideString& wsName) const {\r
@@ -384,7 +381,7 @@ FX_DWORD CFX_GEFont::GetFontStyles() const {
   }\r
 #endif\r
   FX_DWORD dwStyles = 0;\r
-  if (m_pFont->m_pSubstFont == NULL) {\r
+  if (!m_pFont->GetSubstFont()) {\r
     if (m_pFont->IsBold()) {\r
       dwStyles |= FX_FONTSTYLE_Bold;\r
     }\r
@@ -392,10 +389,10 @@ FX_DWORD CFX_GEFont::GetFontStyles() const {
       dwStyles |= FX_FONTSTYLE_Italic;\r
     }\r
   } else {\r
-    if (m_pFont->m_pSubstFont->m_Weight == FXFONT_FW_BOLD) {\r
+    if (m_pFont->GetSubstFont()->m_Weight == FXFONT_FW_BOLD) {\r
       dwStyles |= FX_FONTSTYLE_Bold;\r
     }\r
-    if (m_pFont->m_pSubstFont->m_SubstFlags & FXFONT_SUBST_ITALIC) {\r
+    if (m_pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_ITALIC) {\r
       dwStyles |= FX_FONTSTYLE_Italic;\r
     }\r
   }\r
@@ -490,10 +487,10 @@ FX_BOOL CFX_GEFont::GetBBox(CFX_Rect& bbox) {
   return bRet;\r
 }\r
 int32_t CFX_GEFont::GetItalicAngle() const {\r
-  if (m_pFont->m_pSubstFont == NULL) {\r
+  if (!m_pFont->GetSubstFont()) {\r
     return 0;\r
   }\r
-  return m_pFont->m_pSubstFont->m_ItalicAngle;\r
+  return m_pFont->GetSubstFont()->m_ItalicAngle;\r
 }\r
 int32_t CFX_GEFont::GetGlyphIndex(FX_WCHAR wUnicode, FX_BOOL bCharCode) {\r
   return GetGlyphIndex(wUnicode, TRUE, NULL, bCharCode);\r
index 83c6dff..885e755 100644 (file)
@@ -868,7 +868,7 @@ FX_BOOL CFX_FontMgrImp::VerifyUnicode(IFX_Font* pFont, FX_WCHAR wcUnicode) {
   if (NULL == pFont) {\r
     return FALSE;\r
   }\r
-  FXFT_Face pFace = ((CFX_Font*)pFont->GetDevFont())->m_Face;\r
+  FXFT_Face pFace = ((CFX_Font*)pFont->GetDevFont())->GetFace();\r
   FXFT_CharMap charmap = FXFT_Get_Face_Charmap(pFace);\r
   if (0 != FXFT_Select_Charmap(pFace, FXFT_ENCODING_UNICODE)) {\r
     return FALSE;\r
@@ -948,7 +948,7 @@ IFX_Font* CFX_FontMgrImp::LoadFont(IFX_FileAccess* pFontAccess,
     if (m_FileAccess2IFXFont.Lookup(dwHash, pFont)) {\r
       if (NULL != pFont) {\r
         if (NULL != pFaceCount) {\r
-          *pFaceCount = ((CFX_Font*)pFont->GetDevFont())->m_Face->num_faces;\r
+          *pFaceCount = ((CFX_Font*)pFont->GetDevFont())->GetFace()->num_faces;\r
         }\r
         return pFont->Retain();\r
       }\r
@@ -977,7 +977,7 @@ IFX_Font* CFX_FontMgrImp::LoadFont(IFX_FileAccess* pFontAccess,
   }\r
   m_IFXFont2FileRead.SetAt(pFont, pFontStream);\r
   if (NULL != pFaceCount) {\r
-    *pFaceCount = ((CFX_Font*)pFont->GetDevFont())->m_Face->num_faces;\r
+    *pFaceCount = ((CFX_Font*)pFont->GetDevFont())->GetFace()->num_faces;\r
   }\r
   return pFont;\r
 }\r