diff options
author | Lei Zhang <thestig@chromium.org> | 2017-12-01 15:51:23 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-12-01 15:51:23 +0000 |
commit | 1f0d1fda6db83ee402561902c76ae8a6da124663 (patch) | |
tree | ca8054af7bc7d87ad8794bbba5b3aac352fe2e42 /core/fpdfapi/font/cpdf_type3char.cpp | |
parent | 1980f10ff2b869f14c409b712eea6744941ebd88 (diff) | |
download | pdfium-1f0d1fda6db83ee402561902c76ae8a6da124663.tar.xz |
Encapsulate CPDF_Type3Char members.
Change-Id: Iec4e999d76dabc9b6cd00323881c5c87afc5f629
Reviewed-on: https://pdfium-review.googlesource.com/19930
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'core/fpdfapi/font/cpdf_type3char.cpp')
-rw-r--r-- | core/fpdfapi/font/cpdf_type3char.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/core/fpdfapi/font/cpdf_type3char.cpp b/core/fpdfapi/font/cpdf_type3char.cpp index c0ed88d4db..eea3d9a86e 100644 --- a/core/fpdfapi/font/cpdf_type3char.cpp +++ b/core/fpdfapi/font/cpdf_type3char.cpp @@ -15,7 +15,7 @@ #include "core/fxge/fx_dib.h" CPDF_Type3Char::CPDF_Type3Char(std::unique_ptr<CPDF_Form> pForm) - : m_pForm(std::move(pForm)), m_bColored(false) {} + : m_pForm(std::move(pForm)) {} CPDF_Type3Char::~CPDF_Type3Char() {} @@ -49,3 +49,33 @@ bool CPDF_Type3Char::LoadBitmap(CPDF_RenderContext* pContext) { m_pForm.reset(); return true; } + +void CPDF_Type3Char::InitializeFromStreamData(bool bColored, + const float* pData) { + m_bColored = bColored; + m_Width = FXSYS_round(pData[0] * 1000); + m_BBox.left = FXSYS_round(pData[2] * 1000); + m_BBox.bottom = FXSYS_round(pData[3] * 1000); + m_BBox.right = FXSYS_round(pData[4] * 1000); + m_BBox.top = FXSYS_round(pData[5] * 1000); +} + +void CPDF_Type3Char::Transform(const CFX_Matrix& matrix) { + m_Width = m_Width * matrix.GetXUnit() + 0.5f; + CFX_FloatRect char_rect(static_cast<float>(m_BBox.left) / 1000.0f, + static_cast<float>(m_BBox.bottom) / 1000.0f, + static_cast<float>(m_BBox.right) / 1000.0f, + static_cast<float>(m_BBox.top) / 1000.0f); + if (m_BBox.right <= m_BBox.left || m_BBox.bottom >= m_BBox.top) + char_rect = form()->CalcBoundingBox(); + + char_rect = matrix.TransformRect(char_rect); + m_BBox.left = FXSYS_round(char_rect.left * 1000); + m_BBox.right = FXSYS_round(char_rect.right * 1000); + m_BBox.top = FXSYS_round(char_rect.top * 1000); + m_BBox.bottom = FXSYS_round(char_rect.bottom * 1000); +} + +void CPDF_Type3Char::ResetForm() { + m_pForm.reset(); +} |