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;