Encapsulate CPDF_CharPosList.
Also merge Load() into the ctor.
Change-Id: Idbdd1b29d12a9a29d547db7bf25c8b7517f9d68e
Reviewed-on: https://pdfium-review.googlesource.com/c/50075
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_charposlist.cpp b/core/fpdfapi/render/cpdf_charposlist.cpp
index 9c89ba4..b59564d 100644
--- a/core/fpdfapi/render/cpdf_charposlist.cpp
+++ b/core/fpdfapi/render/cpdf_charposlist.cpp
@@ -11,16 +11,10 @@
#include "core/fxge/cfx_renderdevice.h"
#include "core/fxge/cfx_substfont.h"
-CPDF_CharPosList::CPDF_CharPosList() = default;
-
-CPDF_CharPosList::~CPDF_CharPosList() {
- FX_Free(m_pCharPos);
-}
-
-void CPDF_CharPosList::Load(const std::vector<uint32_t>& charCodes,
- const std::vector<float>& charPos,
- CPDF_Font* pFont,
- float FontSize) {
+CPDF_CharPosList::CPDF_CharPosList(const std::vector<uint32_t>& charCodes,
+ const std::vector<float>& charPos,
+ CPDF_Font* pFont,
+ float FontSize) {
m_pCharPos = FX_Alloc(TextCharPos, charCodes.size());
m_nChars = 0;
CPDF_CIDFont* pCIDFont = pFont->AsCIDFont();
@@ -118,3 +112,15 @@
}
}
}
+
+CPDF_CharPosList::~CPDF_CharPosList() {
+ FX_Free(m_pCharPos);
+}
+
+uint32_t CPDF_CharPosList::GetCount() const {
+ return m_nChars;
+}
+
+const TextCharPos& CPDF_CharPosList::GetAt(size_t index) const {
+ return m_pCharPos[index];
+}
diff --git a/core/fpdfapi/render/cpdf_charposlist.h b/core/fpdfapi/render/cpdf_charposlist.h
index f2c5f44..a8872a0 100644
--- a/core/fpdfapi/render/cpdf_charposlist.h
+++ b/core/fpdfapi/render/cpdf_charposlist.h
@@ -16,14 +16,17 @@
class CPDF_CharPosList {
public:
- CPDF_CharPosList();
+ CPDF_CharPosList(const std::vector<uint32_t>& charCodes,
+ const std::vector<float>& charPos,
+ CPDF_Font* pFont,
+ float font_size);
~CPDF_CharPosList();
- void Load(const std::vector<uint32_t>& charCodes,
- const std::vector<float>& charPos,
- CPDF_Font* pFont,
- float font_size);
+ uint32_t empty() const { return m_nChars == 0; }
+ uint32_t GetCount() const;
+ const TextCharPos& GetAt(size_t index) const;
+ private:
// TODO(thestig): Convert to unique_ptr or vector.
TextCharPos* m_pCharPos = nullptr;
uint32_t m_nChars = 0;
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 5af2af8..4a6ee85 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1977,11 +1977,10 @@
RenderSingleObject(&path, mtObj2Device);
return;
}
- CPDF_CharPosList CharPosList;
- CharPosList.Load(textobj->GetCharCodes(), textobj->GetCharPositions(), pFont,
- font_size);
- for (uint32_t i = 0; i < CharPosList.m_nChars; i++) {
- TextCharPos& charpos = CharPosList.m_pCharPos[i];
+ CPDF_CharPosList CharPosList(textobj->GetCharCodes(),
+ textobj->GetCharPositions(), pFont, font_size);
+ for (uint32_t i = 0; i < CharPosList.GetCount(); ++i) {
+ const TextCharPos& charpos = CharPosList.GetAt(i);
auto* font = charpos.m_FallbackFontPosition == -1
? pFont->GetFont()
: pFont->GetFontFallback(charpos.m_FallbackFontPosition);
diff --git a/core/fpdfapi/render/cpdf_textrenderer.cpp b/core/fpdfapi/render/cpdf_textrenderer.cpp
index 1bf81ed..ee93418 100644
--- a/core/fpdfapi/render/cpdf_textrenderer.cpp
+++ b/core/fpdfapi/render/cpdf_textrenderer.cpp
@@ -37,34 +37,33 @@
FX_ARGB stroke_argb,
CFX_PathData* pClippingPath,
int nFlag) {
- CPDF_CharPosList CharPosList;
- CharPosList.Load(charCodes, charPos, pFont, font_size);
- if (CharPosList.m_nChars == 0)
+ CPDF_CharPosList CharPosList(charCodes, charPos, pFont, font_size);
+ if (CharPosList.empty())
return true;
bool bDraw = true;
- int32_t fontPosition = CharPosList.m_pCharPos[0].m_FallbackFontPosition;
+ int32_t fontPosition = CharPosList.GetAt(0).m_FallbackFontPosition;
uint32_t startIndex = 0;
- for (uint32_t i = 0; i < CharPosList.m_nChars; i++) {
- int32_t curFontPosition = CharPosList.m_pCharPos[i].m_FallbackFontPosition;
+ for (uint32_t i = 0; i < CharPosList.GetCount(); ++i) {
+ int32_t curFontPosition = CharPosList.GetAt(i).m_FallbackFontPosition;
if (fontPosition == curFontPosition)
continue;
CFX_Font* font = GetFont(pFont, fontPosition);
- if (!pDevice->DrawTextPath(i - startIndex,
- CharPosList.m_pCharPos + startIndex, font,
- font_size, pText2User, pUser2Device, pGraphState,
- fill_argb, stroke_argb, pClippingPath, nFlag)) {
+ if (!pDevice->DrawTextPath(i - startIndex, &CharPosList.GetAt(startIndex),
+ font, font_size, pText2User, pUser2Device,
+ pGraphState, fill_argb, stroke_argb,
+ pClippingPath, nFlag)) {
bDraw = false;
}
fontPosition = curFontPosition;
startIndex = i;
}
CFX_Font* font = GetFont(pFont, fontPosition);
- if (!pDevice->DrawTextPath(CharPosList.m_nChars - startIndex,
- CharPosList.m_pCharPos + startIndex, font,
- font_size, pText2User, pUser2Device, pGraphState,
- fill_argb, stroke_argb, pClippingPath, nFlag)) {
+ if (!pDevice->DrawTextPath(CharPosList.GetCount() - startIndex,
+ &CharPosList.GetAt(startIndex), font, font_size,
+ pText2User, pUser2Device, pGraphState, fill_argb,
+ stroke_argb, pClippingPath, nFlag)) {
bDraw = false;
}
return bDraw;
@@ -116,9 +115,8 @@
const CFX_Matrix* pText2Device,
FX_ARGB fill_argb,
const CPDF_RenderOptions* pOptions) {
- CPDF_CharPosList CharPosList;
- CharPosList.Load(charCodes, charPos, pFont, font_size);
- if (CharPosList.m_nChars == 0)
+ CPDF_CharPosList CharPosList(charCodes, charPos, pFont, font_size);
+ if (CharPosList.empty())
return true;
int FXGE_flags = 0;
if (pOptions) {
@@ -141,27 +139,26 @@
if (pFont->IsCIDFont())
FXGE_flags |= FXFONT_CIDFONT;
bool bDraw = true;
- int32_t fontPosition = CharPosList.m_pCharPos[0].m_FallbackFontPosition;
+ int32_t fontPosition = CharPosList.GetAt(0).m_FallbackFontPosition;
uint32_t startIndex = 0;
- for (uint32_t i = 0; i < CharPosList.m_nChars; i++) {
- int32_t curFontPosition = CharPosList.m_pCharPos[i].m_FallbackFontPosition;
+ for (uint32_t i = 0; i < CharPosList.GetCount(); ++i) {
+ int32_t curFontPosition = CharPosList.GetAt(i).m_FallbackFontPosition;
if (fontPosition == curFontPosition)
continue;
CFX_Font* font = GetFont(pFont, fontPosition);
- if (!pDevice->DrawNormalText(
- i - startIndex, CharPosList.m_pCharPos + startIndex, font,
- font_size, pText2Device, fill_argb, FXGE_flags)) {
+ if (!pDevice->DrawNormalText(i - startIndex, &CharPosList.GetAt(startIndex),
+ font, font_size, pText2Device, fill_argb,
+ FXGE_flags)) {
bDraw = false;
}
fontPosition = curFontPosition;
startIndex = i;
}
CFX_Font* font = GetFont(pFont, fontPosition);
- if (!pDevice->DrawNormalText(CharPosList.m_nChars - startIndex,
- CharPosList.m_pCharPos + startIndex, font,
- font_size, pText2Device, fill_argb,
- FXGE_flags)) {
+ if (!pDevice->DrawNormalText(CharPosList.GetCount() - startIndex,
+ &CharPosList.GetAt(startIndex), font, font_size,
+ pText2Device, fill_argb, FXGE_flags)) {
bDraw = false;
}
return bDraw;