diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2018-04-03 19:52:27 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-04-03 19:52:27 +0000 |
commit | 28bb2f2ffe751cf4142329e27238da52ae9f848b (patch) | |
tree | 99229667c2b702b79f24d60faea4f89457e4ff32 /core/fpdfdoc/cpdf_defaultappearance.cpp | |
parent | 4c22dd5690cdec725389055bb7c07c300a4b6fe4 (diff) | |
download | pdfium-28bb2f2ffe751cf4142329e27238da52ae9f848b.tar.xz |
Remove DefaultAppearance HasColor and return an optional instead
This CL converts CPDF_DefaultAppearance to return
Optional<CFX_Color:Type> items instead of having a HasColor. This saves
the double parse of the appearance stream.
Change-Id: Ib3c136da6e2adfb559e495de1d299cce0b4ad25f
Reviewed-on: https://pdfium-review.googlesource.com/29630
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'core/fpdfdoc/cpdf_defaultappearance.cpp')
-rw-r--r-- | core/fpdfdoc/cpdf_defaultappearance.cpp | 39 |
1 files changed, 14 insertions, 25 deletions
diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp index 161f90e014..4efb0655b4 100644 --- a/core/fpdfdoc/cpdf_defaultappearance.cpp +++ b/core/fpdfdoc/cpdf_defaultappearance.cpp @@ -68,64 +68,53 @@ Optional<ByteString> CPDF_DefaultAppearance::GetFont(float* fFontSize) { return {PDF_NameDecode(csFontNameTag.AsStringView())}; } -bool CPDF_DefaultAppearance::HasColor() { - if (m_csDA.IsEmpty()) - return false; - - CPDF_SimpleParser syntax(m_csDA.AsStringView()); - if (FindTagParamFromStart(&syntax, "g", 1)) - return true; - if (FindTagParamFromStart(&syntax, "rg", 3)) - return true; - return FindTagParamFromStart(&syntax, "k", 4); -} - -CFX_Color::Type CPDF_DefaultAppearance::GetColor(float fc[4]) { +Optional<CFX_Color::Type> CPDF_DefaultAppearance::GetColor(float fc[4]) { for (int c = 0; c < 4; c++) fc[c] = 0; if (m_csDA.IsEmpty()) - return CFX_Color::kTransparent; + return {}; CPDF_SimpleParser syntax(m_csDA.AsStringView()); if (FindTagParamFromStart(&syntax, "g", 1)) { fc[0] = FX_atof(syntax.GetWord()); - return CFX_Color::kGray; + return {CFX_Color::kGray}; } if (FindTagParamFromStart(&syntax, "rg", 3)) { fc[0] = FX_atof(syntax.GetWord()); fc[1] = FX_atof(syntax.GetWord()); fc[2] = FX_atof(syntax.GetWord()); - return CFX_Color::kRGB; + return {CFX_Color::kRGB}; } if (FindTagParamFromStart(&syntax, "k", 4)) { fc[0] = FX_atof(syntax.GetWord()); fc[1] = FX_atof(syntax.GetWord()); fc[2] = FX_atof(syntax.GetWord()); fc[3] = FX_atof(syntax.GetWord()); - return CFX_Color::kCMYK; + return {CFX_Color::kCMYK}; } - return CFX_Color::kTransparent; + return {}; } -std::pair<CFX_Color::Type, FX_ARGB> CPDF_DefaultAppearance::GetColor() { +std::pair<Optional<CFX_Color::Type>, FX_ARGB> +CPDF_DefaultAppearance::GetColor() { float values[4]; - CFX_Color::Type type = GetColor(values); - if (type == CFX_Color::kTransparent) + Optional<CFX_Color::Type> type = GetColor(values); + if (!type) return {type, 0}; - if (type == CFX_Color::kGray) { + if (*type == CFX_Color::kGray) { int g = static_cast<int>(values[0] * 255 + 0.5f); return {type, ArgbEncode(255, g, g, g)}; } - if (type == CFX_Color::kRGB) { + if (*type == CFX_Color::kRGB) { int r = static_cast<int>(values[0] * 255 + 0.5f); int g = static_cast<int>(values[1] * 255 + 0.5f); int b = static_cast<int>(values[2] * 255 + 0.5f); return {type, ArgbEncode(255, r, g, b)}; } - if (type == CFX_Color::kCMYK) { + if (*type == CFX_Color::kCMYK) { float r = 1.0f - std::min(1.0f, values[0] + values[3]); float g = 1.0f - std::min(1.0f, values[1] + values[3]); float b = 1.0f - std::min(1.0f, values[2] + values[3]); @@ -134,7 +123,7 @@ std::pair<CFX_Color::Type, FX_ARGB> CPDF_DefaultAppearance::GetColor() { static_cast<int>(b * 255 + 0.5f))}; } NOTREACHED(); - return {CFX_Color::kTransparent, 0}; + return {{}, 0}; } bool CPDF_DefaultAppearance::FindTagParamFromStartForTesting( |