diff options
author | dsinclair <dsinclair@chromium.org> | 2016-08-02 15:43:46 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-02 15:43:46 -0700 |
commit | 27053d81ca80a2f9433abf3e9c393d2914c91ad8 (patch) | |
tree | ecf94b4610dfd09d42a83b1ab86ec22223957390 /core/fpdfdoc/cpdf_defaultappearance.cpp | |
parent | e21501d9427539828b5d547b9d20a752d06914aa (diff) | |
download | pdfium-27053d81ca80a2f9433abf3e9c393d2914c91ad8.tar.xz |
Splitting fpdfdoc/doc_* part III.
This CL cleans up the remaining doc_* files, splitting into .h and .pp files
as needed.
Review-Url: https://codereview.chromium.org/2190983002
Diffstat (limited to 'core/fpdfdoc/cpdf_defaultappearance.cpp')
-rw-r--r-- | core/fpdfdoc/cpdf_defaultappearance.cpp | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp new file mode 100644 index 0000000000..1c71ae5826 --- /dev/null +++ b/core/fpdfdoc/cpdf_defaultappearance.cpp @@ -0,0 +1,222 @@ +// Copyright 2016 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "core/fpdfdoc/include/cpdf_defaultappearance.h" + +#include "core/fpdfapi/fpdf_parser/include/cpdf_simple_parser.h" +#include "core/fpdfapi/fpdf_parser/include/fpdf_parser_decode.h" +#include "core/fpdfdoc/include/cpdf_formcontrol.h" + +FX_BOOL CPDF_DefaultAppearance::HasFont() { + if (m_csDA.IsEmpty()) + return FALSE; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + return syntax.FindTagParamFromStart("Tf", 2); +} + +CFX_ByteString CPDF_DefaultAppearance::GetFontString() { + CFX_ByteString csFont; + if (m_csDA.IsEmpty()) + return csFont; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + if (syntax.FindTagParamFromStart("Tf", 2)) { + csFont += syntax.GetWord(); + csFont += " "; + csFont += syntax.GetWord(); + csFont += " "; + csFont += syntax.GetWord(); + } + return csFont; +} + +void CPDF_DefaultAppearance::GetFont(CFX_ByteString& csFontNameTag, + FX_FLOAT& fFontSize) { + csFontNameTag = ""; + fFontSize = 0; + if (m_csDA.IsEmpty()) + return; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + if (syntax.FindTagParamFromStart("Tf", 2)) { + csFontNameTag = CFX_ByteString(syntax.GetWord()); + csFontNameTag.Delete(0, 1); + fFontSize = FX_atof(syntax.GetWord()); + } + csFontNameTag = PDF_NameDecode(csFontNameTag); +} + +FX_BOOL CPDF_DefaultAppearance::HasColor(PaintOperation nOperation) { + if (m_csDA.IsEmpty()) + return FALSE; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) { + return TRUE; + } + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "RG" : "rg"), 3)) { + return TRUE; + } + return syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "K" : "k"), 4); +} + +CFX_ByteString CPDF_DefaultAppearance::GetColorString( + PaintOperation nOperation) { + CFX_ByteString csColor; + if (m_csDA.IsEmpty()) + return csColor; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) { + csColor += syntax.GetWord(); + csColor += " "; + csColor += syntax.GetWord(); + return csColor; + } + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "RG" : "rg"), 3)) { + csColor += syntax.GetWord(); + csColor += " "; + csColor += syntax.GetWord(); + csColor += " "; + csColor += syntax.GetWord(); + csColor += " "; + csColor += syntax.GetWord(); + return csColor; + } + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "K" : "k"), 4)) { + csColor += syntax.GetWord(); + csColor += " "; + csColor += syntax.GetWord(); + csColor += " "; + csColor += syntax.GetWord(); + csColor += " "; + csColor += syntax.GetWord(); + csColor += " "; + csColor += syntax.GetWord(); + } + return csColor; +} + +void CPDF_DefaultAppearance::GetColor(int& iColorType, + FX_FLOAT fc[4], + PaintOperation nOperation) { + iColorType = COLORTYPE_TRANSPARENT; + for (int c = 0; c < 4; c++) + fc[c] = 0; + + if (m_csDA.IsEmpty()) + return; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) { + iColorType = COLORTYPE_GRAY; + fc[0] = FX_atof(syntax.GetWord()); + return; + } + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "RG" : "rg"), 3)) { + iColorType = COLORTYPE_RGB; + fc[0] = FX_atof(syntax.GetWord()); + fc[1] = FX_atof(syntax.GetWord()); + fc[2] = FX_atof(syntax.GetWord()); + return; + } + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "K" : "k"), 4)) { + iColorType = COLORTYPE_CMYK; + fc[0] = FX_atof(syntax.GetWord()); + fc[1] = FX_atof(syntax.GetWord()); + fc[2] = FX_atof(syntax.GetWord()); + fc[3] = FX_atof(syntax.GetWord()); + } +} + +void CPDF_DefaultAppearance::GetColor(FX_ARGB& color, + int& iColorType, + PaintOperation nOperation) { + color = 0; + iColorType = COLORTYPE_TRANSPARENT; + if (m_csDA.IsEmpty()) + return; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) { + iColorType = COLORTYPE_GRAY; + FX_FLOAT g = FX_atof(syntax.GetWord()) * 255 + 0.5f; + color = ArgbEncode(255, (int)g, (int)g, (int)g); + return; + } + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "RG" : "rg"), 3)) { + iColorType = COLORTYPE_RGB; + FX_FLOAT r = FX_atof(syntax.GetWord()) * 255 + 0.5f; + FX_FLOAT g = FX_atof(syntax.GetWord()) * 255 + 0.5f; + FX_FLOAT b = FX_atof(syntax.GetWord()) * 255 + 0.5f; + color = ArgbEncode(255, (int)r, (int)g, (int)b); + return; + } + if (syntax.FindTagParamFromStart( + (nOperation == PaintOperation::STROKE ? "K" : "k"), 4)) { + iColorType = COLORTYPE_CMYK; + FX_FLOAT c = FX_atof(syntax.GetWord()); + FX_FLOAT m = FX_atof(syntax.GetWord()); + FX_FLOAT y = FX_atof(syntax.GetWord()); + FX_FLOAT k = FX_atof(syntax.GetWord()); + FX_FLOAT r = 1.0f - std::min(1.0f, c + k); + FX_FLOAT g = 1.0f - std::min(1.0f, m + k); + FX_FLOAT b = 1.0f - std::min(1.0f, y + k); + color = ArgbEncode(255, (int)(r * 255 + 0.5f), (int)(g * 255 + 0.5f), + (int)(b * 255 + 0.5f)); + } +} + +FX_BOOL CPDF_DefaultAppearance::HasTextMatrix() { + if (m_csDA.IsEmpty()) + return FALSE; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + return syntax.FindTagParamFromStart("Tm", 6); +} + +CFX_ByteString CPDF_DefaultAppearance::GetTextMatrixString() { + CFX_ByteString csTM; + if (m_csDA.IsEmpty()) + return csTM; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + if (syntax.FindTagParamFromStart("Tm", 6)) { + for (int i = 0; i < 6; i++) { + csTM += syntax.GetWord(); + csTM += " "; + } + csTM += syntax.GetWord(); + } + return csTM; +} + +CFX_Matrix CPDF_DefaultAppearance::GetTextMatrix() { + CFX_Matrix tm; + if (m_csDA.IsEmpty()) + return tm; + + CPDF_SimpleParser syntax(m_csDA.AsStringC()); + if (syntax.FindTagParamFromStart("Tm", 6)) { + FX_FLOAT f[6]; + for (int i = 0; i < 6; i++) + f[i] = FX_atof(syntax.GetWord()); + tm.Set(f[0], f[1], f[2], f[3], f[4], f[5]); + } + return tm; +} |