diff options
author | tsepez <tsepez@chromium.org> | 2016-09-06 14:51:40 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-06 14:51:40 -0700 |
commit | 0a765b832c5b9dd0a46fb5a25ce09d52dedb336b (patch) | |
tree | ec83ef6a7c2434ddf3dfd903dfc216d21c8b71c4 /core/fpdfapi/fpdf_page/cpdf_textstate.cpp | |
parent | 1897bdc3cf51c84a0356d373e34ec100c93c954e (diff) | |
download | pdfium-chromium/2853.tar.xz |
Make CPDF_TextStateData private to CPDF_TextState.chromium/2853
Review-Url: https://codereview.chromium.org/2313083002
Diffstat (limited to 'core/fpdfapi/fpdf_page/cpdf_textstate.cpp')
-rw-r--r-- | core/fpdfapi/fpdf_page/cpdf_textstate.cpp | 99 |
1 files changed, 98 insertions, 1 deletions
diff --git a/core/fpdfapi/fpdf_page/cpdf_textstate.cpp b/core/fpdfapi/fpdf_page/cpdf_textstate.cpp index feb70aeecc..4967cca4e8 100644 --- a/core/fpdfapi/fpdf_page/cpdf_textstate.cpp +++ b/core/fpdfapi/fpdf_page/cpdf_textstate.cpp @@ -4,7 +4,7 @@ // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com -#include "core/fpdfapi/fpdf_page/cpdf_textstate.h" +#include "core/fpdfapi/fpdf_page/include/cpdf_textstate.h" #include "core/fpdfapi/fpdf_font/include/cpdf_font.h" #include "core/fpdfapi/fpdf_page/pageint.h" @@ -88,3 +88,100 @@ const FX_FLOAT* CPDF_TextState::GetCTM() const { FX_FLOAT* CPDF_TextState::GetMutableCTM() { return m_Ref.GetPrivateCopy()->m_CTM; } + +CPDF_TextState::TextData::TextData() + : m_pFont(nullptr), + m_pDocument(nullptr), + m_FontSize(1.0f), + m_CharSpace(0), + m_WordSpace(0), + m_TextMode(TextRenderingMode::MODE_FILL) { + m_Matrix[0] = m_Matrix[3] = 1.0f; + m_Matrix[1] = m_Matrix[2] = 0; + m_CTM[0] = m_CTM[3] = 1.0f; + m_CTM[1] = m_CTM[2] = 0; +} + +CPDF_TextState::TextData::TextData(const TextData& that) + : m_pFont(that.m_pFont), + m_pDocument(that.m_pDocument), + m_FontSize(that.m_FontSize), + m_CharSpace(that.m_CharSpace), + m_WordSpace(that.m_WordSpace), + m_TextMode(that.m_TextMode) { + for (int i = 0; i < 4; ++i) + m_Matrix[i] = that.m_Matrix[i]; + + for (int i = 0; i < 4; ++i) + m_CTM[i] = that.m_CTM[i]; + + if (m_pDocument && m_pFont) { + m_pFont = + m_pDocument->GetPageData()->GetFont(m_pFont->GetFontDict(), FALSE); + } +} + +CPDF_TextState::TextData::~TextData() { + if (m_pDocument && m_pFont) { + CPDF_DocPageData* pPageData = m_pDocument->GetPageData(); + if (pPageData && !pPageData->IsForceClear()) + pPageData->ReleaseFont(m_pFont->GetFontDict()); + } +} + +void CPDF_TextState::TextData::SetFont(CPDF_Font* pFont) { + CPDF_Document* pDoc = m_pDocument; + CPDF_DocPageData* pPageData = pDoc ? pDoc->GetPageData() : nullptr; + if (pPageData && m_pFont && !pPageData->IsForceClear()) + pPageData->ReleaseFont(m_pFont->GetFontDict()); + + m_pDocument = pFont ? pFont->m_pDocument : nullptr; + m_pFont = pFont; +} + +FX_FLOAT CPDF_TextState::TextData::GetFontSizeV() const { + return FXSYS_fabs(FXSYS_sqrt2(m_Matrix[1], m_Matrix[3]) * m_FontSize); +} + +FX_FLOAT CPDF_TextState::TextData::GetFontSizeH() const { + return FXSYS_fabs(FXSYS_sqrt2(m_Matrix[0], m_Matrix[2]) * m_FontSize); +} + +FX_FLOAT CPDF_TextState::TextData::GetBaselineAngle() const { + return FXSYS_atan2(m_Matrix[2], m_Matrix[0]); +} + +FX_FLOAT CPDF_TextState::TextData::GetShearAngle() const { + return GetBaselineAngle() + FXSYS_atan2(m_Matrix[1], m_Matrix[3]); +} + +bool SetTextRenderingModeFromInt(int iMode, TextRenderingMode* mode) { + if (iMode < 0 || iMode > 7) + return false; + *mode = static_cast<TextRenderingMode>(iMode); + return true; +} + +bool TextRenderingModeIsClipMode(const TextRenderingMode& mode) { + switch (mode) { + case TextRenderingMode::MODE_FILL_CLIP: + case TextRenderingMode::MODE_STROKE_CLIP: + case TextRenderingMode::MODE_FILL_STROKE_CLIP: + case TextRenderingMode::MODE_CLIP: + return true; + default: + return false; + } +} + +bool TextRenderingModeIsStrokeMode(const TextRenderingMode& mode) { + switch (mode) { + case TextRenderingMode::MODE_STROKE: + case TextRenderingMode::MODE_FILL_STROKE: + case TextRenderingMode::MODE_STROKE_CLIP: + case TextRenderingMode::MODE_FILL_STROKE_CLIP: + return true; + default: + return false; + } +} |