diff options
Diffstat (limited to 'core/fpdfapi')
-rw-r--r-- | core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp | 2 | ||||
-rw-r--r-- | core/fpdfapi/page/cpdf_streamcontentparser.cpp | 9 | ||||
-rw-r--r-- | core/fpdfapi/page/cpdf_textobject.h | 10 | ||||
-rw-r--r-- | core/fpdfapi/render/cpdf_renderstatus.cpp | 30 |
4 files changed, 26 insertions, 25 deletions
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp index fc7e97fc79..593680e7ff 100644 --- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp +++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp @@ -388,7 +388,7 @@ void CPDF_PageContentGenerator::ProcessText(std::ostringstream* buf, *buf << "/" << PDF_NameEncode(dictName) << " " << pTextObj->GetFontSize() << " Tf "; ByteString text; - for (uint32_t charcode : pTextObj->m_CharCodes) { + for (uint32_t charcode : pTextObj->GetCharCodes()) { if (charcode != CPDF_Font::kInvalidCharCode) pFont->AppendChar(&text, charcode); } diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp index 47aa20938a..4ba1d2a44e 100644 --- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp +++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp @@ -1262,10 +1262,11 @@ void CPDF_StreamContentParser::AddTextObject(ByteString* pStrs, pCTM[3] = m_pCurStates->m_CTM.d; } pText->SetSegments(pStrs, pKerning, nsegs); - pText->m_Pos = m_mtContentToUser.Transform( - m_pCurStates->m_CTM.Transform(m_pCurStates->m_TextMatrix.Transform( - CFX_PointF(m_pCurStates->m_TextPos.x, - m_pCurStates->m_TextPos.y + m_pCurStates->m_TextRise)))); + pText->SetPosition( + m_mtContentToUser.Transform(m_pCurStates->m_CTM.Transform( + m_pCurStates->m_TextMatrix.Transform(CFX_PointF( + m_pCurStates->m_TextPos.x, + m_pCurStates->m_TextPos.y + m_pCurStates->m_TextRise))))); m_pCurStates->m_TextPos += pText->CalcPositionData(m_pCurStates->m_TextHorzScale); diff --git a/core/fpdfapi/page/cpdf_textobject.h b/core/fpdfapi/page/cpdf_textobject.h index 5cffbd1434..02653dc2aa 100644 --- a/core/fpdfapi/page/cpdf_textobject.h +++ b/core/fpdfapi/page/cpdf_textobject.h @@ -48,20 +48,18 @@ class CPDF_TextObject : public CPDF_PageObject { float GetFontSize() const; void SetText(const ByteString& text); + void SetPosition(CFX_PointF pos) { m_Pos = pos; } void SetPosition(float x, float y); void RecalcPositionData(); - private: - friend class CPDF_RenderStatus; - friend class CPDF_StreamContentParser; - friend class CPDF_TextRenderer; - friend class CPDF_PageContentGenerator; + const std::vector<uint32_t>& GetCharCodes() const { return m_CharCodes; } + const std::vector<float>& GetCharPositions() const { return m_CharPos; } void SetSegments(const ByteString* pStrs, const float* pKerning, int nSegs); - CFX_PointF CalcPositionData(float horz_scale); + private: CFX_PointF m_Pos; std::vector<uint32_t> m_CharCodes; std::vector<float> m_CharPos; diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index b49394993a..906143048d 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp @@ -1590,7 +1590,7 @@ bool CPDF_RenderStatus::ProcessTransparency(CPDF_PageObject* pPageObj, CFX_Matrix text_matrix = textobj->GetTextMatrix(); CPDF_TextRenderer::DrawTextPath( - &text_device, textobj->m_CharCodes, textobj->m_CharPos, + &text_device, textobj->GetCharCodes(), textobj->GetCharPositions(), textobj->m_TextState.GetFont(), textobj->m_TextState.GetFontSize(), &text_matrix, &new_matrix, textobj->m_GraphState.GetObject(), (FX_ARGB)-1, 0, nullptr, 0); @@ -1712,7 +1712,7 @@ void CPDF_RenderStatus::DebugVerifyDeviceIsPreMultiplied() const { bool CPDF_RenderStatus::ProcessText(CPDF_TextObject* textobj, const CFX_Matrix* pObj2Device, CFX_PathData* pClippingPath) { - if (textobj->m_CharCodes.empty()) + if (textobj->GetCharCodes().empty()) return true; const TextRenderingMode text_render_mode = textobj->m_TextState.GetTextMode(); @@ -1805,14 +1805,15 @@ bool CPDF_RenderStatus::ProcessText(CPDF_TextObject* textobj, if (m_Options.m_Flags & RENDER_NOTEXTSMOOTH) flag |= FXFILL_NOPATHSMOOTH; return CPDF_TextRenderer::DrawTextPath( - m_pDevice, textobj->m_CharCodes, textobj->m_CharPos, pFont, font_size, - &text_matrix, pDeviceMatrix, textobj->m_GraphState.GetObject(), - fill_argb, stroke_argb, pClippingPath, flag); + m_pDevice, textobj->GetCharCodes(), textobj->GetCharPositions(), pFont, + font_size, &text_matrix, pDeviceMatrix, + textobj->m_GraphState.GetObject(), fill_argb, stroke_argb, + pClippingPath, flag); } text_matrix.Concat(*pObj2Device); - return CPDF_TextRenderer::DrawNormalText(m_pDevice, textobj->m_CharCodes, - textobj->m_CharPos, pFont, font_size, - &text_matrix, fill_argb, &m_Options); + return CPDF_TextRenderer::DrawNormalText( + m_pDevice, textobj->GetCharCodes(), textobj->GetCharPositions(), pFont, + font_size, &text_matrix, fill_argb, &m_Options); } RetainPtr<CPDF_Type3Cache> CPDF_RenderStatus::GetCachedType3( @@ -1844,14 +1845,14 @@ bool CPDF_RenderStatus::ProcessType3Text(CPDF_TextObject* textobj, int device_class = m_pDevice->GetDeviceClass(); std::vector<FXTEXT_GLYPHPOS> glyphs; if (device_class == FXDC_DISPLAY) - glyphs.resize(textobj->m_CharCodes.size()); + glyphs.resize(textobj->GetCharCodes().size()); else if (fill_alpha < 255) return false; CPDF_RefType3Cache refTypeCache(pType3Font); - for (int iChar = 0; iChar < pdfium::CollectionSize<int>(textobj->m_CharCodes); - iChar++) { - uint32_t charcode = textobj->m_CharCodes[iChar]; + for (int iChar = 0; + iChar < pdfium::CollectionSize<int>(textobj->GetCharCodes()); iChar++) { + uint32_t charcode = textobj->GetCharCodes()[iChar]; if (charcode == static_cast<uint32_t>(-1)) continue; @@ -1860,7 +1861,7 @@ bool CPDF_RenderStatus::ProcessType3Text(CPDF_TextObject* textobj, continue; CFX_Matrix matrix = char_matrix; - matrix.e += iChar ? textobj->m_CharPos[iChar - 1] : 0; + matrix.e += iChar ? textobj->GetCharPositions()[iChar - 1] : 0; matrix.Concat(text_matrix); matrix.Concat(*pObj2Device); if (!pType3Char->LoadBitmap(m_pContext.Get())) { @@ -2014,7 +2015,8 @@ void CPDF_RenderStatus::DrawTextPathWithPattern(const CPDF_TextObject* textobj, return; } CPDF_CharPosList CharPosList; - CharPosList.Load(textobj->m_CharCodes, textobj->m_CharPos, pFont, font_size); + CharPosList.Load(textobj->GetCharCodes(), textobj->GetCharPositions(), pFont, + font_size); for (uint32_t i = 0; i < CharPosList.m_nChars; i++) { FXTEXT_CHARPOS& charpos = CharPosList.m_pCharPos[i]; auto* font = charpos.m_FallbackFontPosition == -1 |