Encapsulate CFX_GlyphBitmap.

Change-Id: I5a08beb8741912e39f9537a16aa92a595c0b7241
Reviewed-on: https://pdfium-review.googlesource.com/c/50073
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 7f73814..e7e4b4a 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1827,9 +1827,9 @@
           if (!glyph.m_pGlyph)
             continue;
 
-          m_pDevice->SetBitMask(glyph.m_pGlyph->m_pBitmap,
-                                glyph.m_Origin.x + glyph.m_pGlyph->m_Left,
-                                glyph.m_Origin.y - glyph.m_pGlyph->m_Top,
+          m_pDevice->SetBitMask(glyph.m_pGlyph->GetBitmap(),
+                                glyph.m_Origin.x + glyph.m_pGlyph->left(),
+                                glyph.m_Origin.y - glyph.m_pGlyph->top(),
                                 fill_argb);
         }
         glyphs.clear();
@@ -1897,8 +1897,9 @@
 
         CFX_Point origin(FXSYS_round(matrix.e), FXSYS_round(matrix.f));
         if (glyphs.empty()) {
-          m_pDevice->SetBitMask(pBitmap->m_pBitmap, origin.x + pBitmap->m_Left,
-                                origin.y - pBitmap->m_Top, fill_argb);
+          m_pDevice->SetBitMask(pBitmap->GetBitmap(),
+                                origin.x + pBitmap->left(),
+                                origin.y - pBitmap->top(), fill_argb);
         } else {
           glyphs[iChar].m_pGlyph = pBitmap;
           glyphs[iChar].m_Origin = origin;
@@ -1931,21 +1932,21 @@
       continue;
 
     pdfium::base::CheckedNumeric<int> left = glyph.m_Origin.x;
-    left += glyph.m_pGlyph->m_Left;
+    left += glyph.m_pGlyph->left();
     left -= rect.left;
     if (!left.IsValid())
       continue;
 
     pdfium::base::CheckedNumeric<int> top = glyph.m_Origin.y;
-    top -= glyph.m_pGlyph->m_Top;
+    top -= glyph.m_pGlyph->top();
     top -= rect.top;
     if (!top.IsValid())
       continue;
 
     pBitmap->CompositeMask(left.ValueOrDie(), top.ValueOrDie(),
-                           glyph.m_pGlyph->m_pBitmap->GetWidth(),
-                           glyph.m_pGlyph->m_pBitmap->GetHeight(),
-                           glyph.m_pGlyph->m_pBitmap, fill_argb, 0, 0,
+                           glyph.m_pGlyph->GetBitmap()->GetWidth(),
+                           glyph.m_pGlyph->GetBitmap()->GetHeight(),
+                           glyph.m_pGlyph->GetBitmap(), fill_argb, 0, 0,
                            BlendMode::kNormal, nullptr, false, 0);
   }
   m_pDevice->SetBitMask(pBitmap, rect.left, rect.top, fill_argb);
diff --git a/core/fpdfapi/render/cpdf_type3cache.cpp b/core/fpdfapi/render/cpdf_type3cache.cpp
index a2412a8..5a48bca 100644
--- a/core/fpdfapi/render/cpdf_type3cache.cpp
+++ b/core/fpdfapi/render/cpdf_type3cache.cpp
@@ -159,9 +159,7 @@
   if (!pResBitmap)
     return nullptr;
 
-  auto pGlyph = pdfium::MakeUnique<CFX_GlyphBitmap>();
-  pGlyph->m_Left = left;
-  pGlyph->m_Top = -top;
-  pGlyph->m_pBitmap->TakeOver(std::move(pResBitmap));
+  auto pGlyph = pdfium::MakeUnique<CFX_GlyphBitmap>(left, -top);
+  pGlyph->GetBitmap()->TakeOver(std::move(pResBitmap));
   return pGlyph;
 }
diff --git a/core/fxge/cfx_facecache.cpp b/core/fxge/cfx_facecache.cpp
index 5885aa6..f0d3b58 100644
--- a/core/fxge/cfx_facecache.cpp
+++ b/core/fxge/cfx_facecache.cpp
@@ -161,15 +161,14 @@
   if (bmwidth > kMaxGlyphDimension || bmheight > kMaxGlyphDimension)
     return nullptr;
   int dib_width = bmwidth;
-  auto pGlyphBitmap = pdfium::MakeUnique<CFX_GlyphBitmap>();
-  pGlyphBitmap->m_pBitmap->Create(
+  auto pGlyphBitmap = pdfium::MakeUnique<CFX_GlyphBitmap>(
+      FXFT_Get_Glyph_BitmapLeft(m_Face), FXFT_Get_Glyph_BitmapTop(m_Face));
+  pGlyphBitmap->GetBitmap()->Create(
       dib_width, bmheight,
       anti_alias == FXFT_RENDER_MODE_MONO ? FXDIB_1bppMask : FXDIB_8bppMask);
-  pGlyphBitmap->m_Left = FXFT_Get_Glyph_BitmapLeft(m_Face);
-  pGlyphBitmap->m_Top = FXFT_Get_Glyph_BitmapTop(m_Face);
-  int dest_pitch = pGlyphBitmap->m_pBitmap->GetPitch();
+  int dest_pitch = pGlyphBitmap->GetBitmap()->GetPitch();
   int src_pitch = FXFT_Get_Bitmap_Pitch(FXFT_Get_Glyph_Bitmap(m_Face));
-  uint8_t* pDestBuf = pGlyphBitmap->m_pBitmap->GetBuffer();
+  uint8_t* pDestBuf = pGlyphBitmap->GetBitmap()->GetBuffer();
   uint8_t* pSrcBuf =
       (uint8_t*)FXFT_Get_Bitmap_Buffer(FXFT_Get_Glyph_Bitmap(m_Face));
   if (anti_alias != FXFT_RENDER_MODE_MONO &&
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index bb843d3..3118b93 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -970,10 +970,10 @@
     for (const FXTEXT_GLYPHPOS& glyph : glyphs) {
       if (!glyph.m_pGlyph)
         continue;
-      RetainPtr<CFX_DIBitmap> pGlyph = glyph.m_pGlyph->m_pBitmap;
+      const RetainPtr<CFX_DIBitmap>& pGlyph = glyph.m_pGlyph->GetBitmap();
       bitmap->TransferBitmap(
-          glyph.m_Origin.x + glyph.m_pGlyph->m_Left - pixel_left,
-          glyph.m_Origin.y - glyph.m_pGlyph->m_Top - pixel_top,
+          glyph.m_Origin.x + glyph.m_pGlyph->left() - pixel_left,
+          glyph.m_Origin.y - glyph.m_pGlyph->top() - pixel_top,
           pGlyph->GetWidth(), pGlyph->GetHeight(), pGlyph, 0, 0);
     }
     return SetBitMask(bitmap, bmp_rect.left, bmp_rect.top, fill_color);
@@ -1008,18 +1008,18 @@
       continue;
 
     pdfium::base::CheckedNumeric<int> left = glyph.m_Origin.x;
-    left += glyph.m_pGlyph->m_Left;
+    left += glyph.m_pGlyph->left();
     left -= pixel_left;
     if (!left.IsValid())
       return false;
 
     pdfium::base::CheckedNumeric<int> top = glyph.m_Origin.y;
-    top -= glyph.m_pGlyph->m_Top;
+    top -= glyph.m_pGlyph->top();
     top -= pixel_top;
     if (!top.IsValid())
       return false;
 
-    RetainPtr<CFX_DIBitmap> pGlyph = glyph.m_pGlyph->m_pBitmap;
+    const RetainPtr<CFX_DIBitmap>& pGlyph = glyph.m_pGlyph->GetBitmap();
     int ncols = pGlyph->GetWidth();
     int nrows = pGlyph->GetHeight();
     if (anti_alias == FXFT_RENDER_MODE_NORMAL) {
diff --git a/core/fxge/fx_font.cpp b/core/fxge/fx_font.cpp
index 29c55dd..d03fb57 100644
--- a/core/fxge/fx_font.cpp
+++ b/core/fxge/fx_font.cpp
@@ -5,9 +5,8 @@
 #include "core/fxge/fx_font.h"
 
 #include "core/fxge/dib/cfx_dibitmap.h"
-#include "core/fxge/dib/cfx_imagestretcher.h"
 
-CFX_GlyphBitmap::CFX_GlyphBitmap()
-    : m_pBitmap(pdfium::MakeRetain<CFX_DIBitmap>()) {}
+CFX_GlyphBitmap::CFX_GlyphBitmap(int left, int top)
+    : m_Left(left), m_Top(top), m_pBitmap(pdfium::MakeRetain<CFX_DIBitmap>()) {}
 
 CFX_GlyphBitmap::~CFX_GlyphBitmap() = default;
diff --git a/core/fxge/fx_font.h b/core/fxge/fx_font.h
index 204655a..2910a86 100644
--- a/core/fxge/fx_font.h
+++ b/core/fxge/fx_font.h
@@ -65,11 +65,19 @@
 
 class CFX_GlyphBitmap {
  public:
-  CFX_GlyphBitmap();
+  CFX_GlyphBitmap(int left, int top);
   ~CFX_GlyphBitmap();
 
-  int m_Top;
-  int m_Left;
+  CFX_GlyphBitmap(const CFX_GlyphBitmap&) = delete;
+  CFX_GlyphBitmap& operator=(const CFX_GlyphBitmap&) = delete;
+
+  const RetainPtr<CFX_DIBitmap>& GetBitmap() const { return m_pBitmap; }
+  int left() const { return m_Left; }
+  int top() const { return m_Top; }
+
+ private:
+  const int m_Left;
+  const int m_Top;
   RetainPtr<CFX_DIBitmap> m_pBitmap;
 };
 
diff --git a/core/fxge/fx_ge_text.cpp b/core/fxge/fx_ge_text.cpp
index d355058..16e6d9c 100644
--- a/core/fxge/fx_ge_text.cpp
+++ b/core/fxge/fx_ge_text.cpp
@@ -53,11 +53,11 @@
       continue;
 
     FX_SAFE_INT32 char_left = glyph.m_Origin.x;
-    char_left += pGlyph->m_Left;
+    char_left += pGlyph->left();
     if (!char_left.IsValid())
       continue;
 
-    FX_SAFE_INT32 char_width = pGlyph->m_pBitmap->GetWidth();
+    FX_SAFE_INT32 char_width = pGlyph->GetBitmap()->GetWidth();
     if (anti_alias == FXFT_RENDER_MODE_LCD)
       char_width /= 3;
     if (!char_width.IsValid())
@@ -68,11 +68,11 @@
       continue;
 
     FX_SAFE_INT32 char_top = glyph.m_Origin.y;
-    char_top -= pGlyph->m_Top;
+    char_top -= pGlyph->top();
     if (!char_top.IsValid())
       continue;
 
-    FX_SAFE_INT32 char_height = pGlyph->m_pBitmap->GetHeight();
+    FX_SAFE_INT32 char_height = pGlyph->GetBitmap()->GetHeight();
     if (!char_height.IsValid())
       continue;