summaryrefslogtreecommitdiff
path: root/core/fpdfapi/font/cpdf_type3char.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fpdfapi/font/cpdf_type3char.cpp')
-rw-r--r--core/fpdfapi/font/cpdf_type3char.cpp32
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();
+}