diff --git a/core/include/fxge/fx_font.h b/core/include/fxge/fx_font.h
index 04918ea..1423be4 100644
--- a/core/include/fxge/fx_font.h
+++ b/core/include/fxge/fx_font.h
@@ -91,6 +91,10 @@
   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);
 
  private:
diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
index 37b0c01..a228cf7 100644
--- a/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
+++ b/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
@@ -1090,13 +1090,13 @@
   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;
     }
   }
@@ -1119,7 +1119,7 @@
               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);
           }
@@ -1161,7 +1161,7 @@
           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);
       }
@@ -1178,7 +1178,7 @@
             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);
         }
@@ -1207,7 +1207,7 @@
               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);
           }
@@ -1232,7 +1232,7 @@
               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);
           }
@@ -1261,7 +1261,7 @@
       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);
       }
@@ -1279,7 +1279,7 @@
               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);
           }
@@ -1295,7 +1295,7 @@
               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);
           }
diff --git a/core/src/fxge/apple/fx_apple_platform.cpp b/core/src/fxge/apple/fx_apple_platform.cpp
index 95cd1a1..03b5629 100644
--- a/core/src/fxge/apple/fx_apple_platform.cpp
+++ b/core/src/fxge/apple/fx_apple_platform.cpp
@@ -64,13 +64,13 @@
   }
   CQuartz2D& quartz2d =
       ((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
-  if (!pFont->m_pPlatformFont) {
+  if (!pFont->GetPlatformFont()) {
     if (pFont->GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) {
       return FALSE;
     }
-    pFont->m_pPlatformFont =
-        quartz2d.CreateFont(pFont->m_pFontData, pFont->m_dwSize);
-    if (NULL == pFont->m_pPlatformFont) {
+    pFont->SetPlatformFont(
+        quartz2d.CreateFont(pFont->GetFontData(), pFont->GetSize()));
+    if (!pFont->GetPlatformFont()) {
       return FALSE;
     }
   }
@@ -92,7 +92,7 @@
     new_matrix.d = -new_matrix.d;
   }
   quartz2d.setGraphicsTextMatrix(pContext, &new_matrix);
-  return quartz2d.drawGraphicsString(pContext, pFont->m_pPlatformFont,
+  return quartz2d.drawGraphicsString(pContext, pFont->GetPlatformFont(),
                                      font_size, glyph_indices, glyph_positions,
                                      nChars, argb, NULL);
 }
diff --git a/core/src/fxge/apple/fx_quartz_device.cpp b/core/src/fxge/apple/fx_quartz_device.cpp
index 61a0cef..eba27c0 100644
--- a/core/src/fxge/apple/fx_quartz_device.cpp
+++ b/core/src/fxge/apple/fx_quartz_device.cpp
@@ -751,13 +751,13 @@
   }
   CQuartz2D& quartz2d =
       ((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
-  if (!pFont->m_pPlatformFont) {
+  if (!pFont->GetPlatformFont()) {
     if (pFont->GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) {
       return FALSE;
     }
-    pFont->m_pPlatformFont =
-        quartz2d.CreateFont(pFont->m_pFontData, pFont->m_dwSize);
-    if (NULL == pFont->m_pPlatformFont) {
+    pFont->SetPlatformFont(
+        quartz2d.CreateFont(pFont->GetFontData(), pFont->GetSize()));
+    if (!pFont->GetPlatformFont()) {
       return FALSE;
     }
   }
@@ -777,7 +777,7 @@
                             text_matrix.d, text_matrix.e, text_matrix.f);
   matrix_cg = CGAffineTransformConcat(matrix_cg, _foxitDevice2User);
   CGContextSetTextMatrix(_context, matrix_cg);
-  CGContextSetFont(_context, (CGFontRef)pFont->m_pPlatformFont);
+  CGContextSetFont(_context, (CGFontRef)pFont->GetPlatformFont());
   CGContextSetFontSize(_context, FXSYS_fabs(font_size));
   int32_t a, r, g, b;
   ArgbDecode(argb, a, r, g, b);
