Remove out parameter from CPDF_ApSettings::GetColorARGB().
Same for methods in CPDF_FormControl. Change return result from
CPDF_DefaultAppearance method for similariy.
-- use CFX_Color::Type enum consistently in place of int.
-- put some constructors into .cpp file while at it.
Change-Id: I0543b85dc72b17ae6da1bbcd8cb82928bc7045ec
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/80510
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfdoc/cpdf_apsettings.cpp b/core/fpdfdoc/cpdf_apsettings.cpp
index cc19e7b..f709ecd 100644
--- a/core/fpdfdoc/cpdf_apsettings.cpp
+++ b/core/fpdfdoc/cpdf_apsettings.cpp
@@ -26,42 +26,37 @@
return m_pDict ? m_pDict->GetIntegerFor("R") : 0;
}
-FX_ARGB CPDF_ApSettings::GetColorARGB(int& iColorType,
- const ByteString& csEntry) const {
- iColorType = CFX_Color::kTransparent;
+std::pair<CFX_Color::Type, FX_ARGB> CPDF_ApSettings::GetColorARGB(
+ const ByteString& csEntry) const {
if (!m_pDict)
- return 0;
+ return {CFX_Color::kTransparent, 0};
CPDF_Array* pEntry = m_pDict->GetArrayFor(csEntry);
if (!pEntry)
- return 0;
+ return {CFX_Color::kTransparent, 0};
- FX_ARGB color = 0;
- size_t dwCount = pEntry->size();
+ const size_t dwCount = pEntry->size();
if (dwCount == 1) {
- iColorType = CFX_Color::kGray;
- float g = pEntry->GetNumberAt(0) * 255;
- return ArgbEncode(255, (int)g, (int)g, (int)g);
+ const float g = pEntry->GetNumberAt(0) * 255;
+ return {CFX_Color::kGray, ArgbEncode(255, (int)g, (int)g, (int)g)};
}
if (dwCount == 3) {
- iColorType = CFX_Color::kRGB;
float r = pEntry->GetNumberAt(0) * 255;
float g = pEntry->GetNumberAt(1) * 255;
float b = pEntry->GetNumberAt(2) * 255;
- return ArgbEncode(255, (int)r, (int)g, (int)b);
+ return {CFX_Color::kRGB, ArgbEncode(255, (int)r, (int)g, (int)b)};
}
if (dwCount == 4) {
- iColorType = CFX_Color::kCMYK;
float c = pEntry->GetNumberAt(0);
float m = pEntry->GetNumberAt(1);
float y = pEntry->GetNumberAt(2);
float k = pEntry->GetNumberAt(3);
- float r = 1.0f - std::min(1.0f, c + k);
- float g = 1.0f - std::min(1.0f, m + k);
- float b = 1.0f - std::min(1.0f, y + k);
- return ArgbEncode(255, (int)(r * 255), (int)(g * 255), (int)(b * 255));
+ float r = (1.0f - std::min(1.0f, c + k)) * 255;
+ float g = (1.0f - std::min(1.0f, m + k)) * 255;
+ float b = (1.0f - std::min(1.0f, y + k)) * 255;
+ return {CFX_Color::kCMYK, ArgbEncode(255, (int)r, (int)g, (int)b)};
}
- return color;
+ return {CFX_Color::kTransparent, 0};
}
float CPDF_ApSettings::GetOriginalColorComponent(
diff --git a/core/fpdfdoc/cpdf_apsettings.h b/core/fpdfdoc/cpdf_apsettings.h
index a1d9ecd..b96ffe6 100644
--- a/core/fpdfdoc/cpdf_apsettings.h
+++ b/core/fpdfdoc/cpdf_apsettings.h
@@ -7,6 +7,8 @@
#ifndef CORE_FPDFDOC_CPDF_APSETTINGS_H_
#define CORE_FPDFDOC_CPDF_APSETTINGS_H_
+#include <utility>
+
#include "core/fpdfdoc/cpdf_iconfit.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxcrt/fx_system.h"
@@ -41,7 +43,9 @@
// Returns one of the TEXTPOS_* values above.
int GetTextPosition() const;
- FX_ARGB GetColorARGB(int& iColorType, const ByteString& csEntry) const;
+ std::pair<CFX_Color::Type, FX_ARGB> GetColorARGB(
+ const ByteString& csEntry) const;
+
float GetOriginalColorComponent(int index, const ByteString& csEntry) const;
CFX_Color GetOriginalColor(const ByteString& csEntry) const;
diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp
index 012c255..1b83d13 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.cpp
+++ b/core/fpdfdoc/cpdf_defaultappearance.cpp
@@ -54,6 +54,16 @@
} // namespace
+CPDF_DefaultAppearance::CPDF_DefaultAppearance() = default;
+
+CPDF_DefaultAppearance::CPDF_DefaultAppearance(const ByteString& csDA)
+ : m_csDA(csDA) {}
+
+CPDF_DefaultAppearance::CPDF_DefaultAppearance(
+ const CPDF_DefaultAppearance& cDA) = default;
+
+CPDF_DefaultAppearance::~CPDF_DefaultAppearance() = default;
+
Optional<ByteString> CPDF_DefaultAppearance::GetFont(float* fFontSize) {
*fFontSize = 0.0f;
if (m_csDA.IsEmpty())
@@ -95,33 +105,36 @@
return {};
}
-std::pair<Optional<CFX_Color::Type>, FX_ARGB>
+Optional<std::pair<CFX_Color::Type, FX_ARGB>>
CPDF_DefaultAppearance::GetColorARGB() const {
Optional<CFX_Color> maybe_color = GetColor();
if (!maybe_color.has_value())
- return {{}, 0};
+ return pdfium::nullopt;
const CFX_Color& color = maybe_color.value();
if (color.nColorType == CFX_Color::kGray) {
int g = static_cast<int>(color.fColor1 * 255 + 0.5f);
- return {CFX_Color::kGray, ArgbEncode(255, g, g, g)};
+ return std::pair<CFX_Color::Type, FX_ARGB>(CFX_Color::kGray,
+ ArgbEncode(255, g, g, g));
}
if (color.nColorType == CFX_Color::kRGB) {
int r = static_cast<int>(color.fColor1 * 255 + 0.5f);
int g = static_cast<int>(color.fColor2 * 255 + 0.5f);
int b = static_cast<int>(color.fColor3 * 255 + 0.5f);
- return {CFX_Color::kRGB, ArgbEncode(255, r, g, b)};
+ return std::pair<CFX_Color::Type, FX_ARGB>(CFX_Color::kRGB,
+ ArgbEncode(255, r, g, b));
}
if (color.nColorType == CFX_Color::kCMYK) {
float r = 1.0f - std::min(1.0f, color.fColor1 + color.fColor4);
float g = 1.0f - std::min(1.0f, color.fColor2 + color.fColor4);
float b = 1.0f - std::min(1.0f, color.fColor3 + color.fColor4);
- return {CFX_Color::kCMYK, ArgbEncode(255, static_cast<int>(r * 255 + 0.5f),
- static_cast<int>(g * 255 + 0.5f),
- static_cast<int>(b * 255 + 0.5f))};
+ return std::pair<CFX_Color::Type, FX_ARGB>(
+ CFX_Color::kCMYK, ArgbEncode(255, static_cast<int>(r * 255 + 0.5f),
+ static_cast<int>(g * 255 + 0.5f),
+ static_cast<int>(b * 255 + 0.5f)));
}
NOTREACHED();
- return {{}, 0};
+ return pdfium::nullopt;
}
bool CPDF_DefaultAppearance::FindTagParamFromStartForTesting(
diff --git a/core/fpdfdoc/cpdf_defaultappearance.h b/core/fpdfdoc/cpdf_defaultappearance.h
index 0319899..319da71 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.h
+++ b/core/fpdfdoc/cpdf_defaultappearance.h
@@ -17,15 +17,15 @@
class CPDF_DefaultAppearance {
public:
- CPDF_DefaultAppearance() = default;
- explicit CPDF_DefaultAppearance(const ByteString& csDA) : m_csDA(csDA) {}
- CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA)
- : m_csDA(cDA.m_csDA) {}
+ CPDF_DefaultAppearance();
+ explicit CPDF_DefaultAppearance(const ByteString& csDA);
+ CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA);
+ ~CPDF_DefaultAppearance();
Optional<ByteString> GetFont(float* fFontSize);
Optional<CFX_Color> GetColor() const;
- std::pair<Optional<CFX_Color::Type>, FX_ARGB> GetColorARGB() const;
+ Optional<std::pair<CFX_Color::Type, FX_ARGB>> GetColorARGB() const;
bool FindTagParamFromStartForTesting(CPDF_SimpleParser* parser,
ByteStringView token,
diff --git a/core/fpdfdoc/cpdf_formcontrol.cpp b/core/fpdfdoc/cpdf_formcontrol.cpp
index dc59ad0..50dcc17 100644
--- a/core/fpdfdoc/cpdf_formcontrol.cpp
+++ b/core/fpdfdoc/cpdf_formcontrol.cpp
@@ -147,9 +147,9 @@
return GetMK().GetRotation();
}
-FX_ARGB CPDF_FormControl::GetColorARGB(int& iColorType,
- const ByteString& csEntry) {
- return GetMK().GetColorARGB(iColorType, csEntry);
+std::pair<CFX_Color::Type, FX_ARGB> CPDF_FormControl::GetColorARGB(
+ const ByteString& csEntry) {
+ return GetMK().GetColorARGB(csEntry);
}
float CPDF_FormControl::GetOriginalColorComponent(int index,
diff --git a/core/fpdfdoc/cpdf_formcontrol.h b/core/fpdfdoc/cpdf_formcontrol.h
index 4ae8949..1e82e36 100644
--- a/core/fpdfdoc/cpdf_formcontrol.h
+++ b/core/fpdfdoc/cpdf_formcontrol.h
@@ -7,6 +7,8 @@
#ifndef CORE_FPDFDOC_CPDF_FORMCONTROL_H_
#define CORE_FPDFDOC_CPDF_FORMCONTROL_H_
+#include <utility>
+
#include "core/fpdfdoc/cpdf_aaction.h"
#include "core/fpdfdoc/cpdf_action.h"
#include "core/fpdfdoc/cpdf_annot.h"
@@ -19,6 +21,7 @@
#include "core/fxcrt/fx_string.h"
#include "core/fxcrt/retain_ptr.h"
#include "core/fxcrt/unowned_ptr.h"
+#include "core/fxge/cfx_color.h"
#include "core/fxge/dib/fx_dib.h"
#include "third_party/base/optional.h"
@@ -53,8 +56,8 @@
bool HasMKEntry(const ByteString& csEntry) const;
int GetRotation() const;
- FX_ARGB GetBorderColorARGB(int& iColorType) {
- return GetColorARGB(iColorType, "BC");
+ std::pair<CFX_Color::Type, FX_ARGB> GetBorderColorARGB() {
+ return GetColorARGB("BC");
}
float GetOriginalBorderColorComponent(int index) {
@@ -63,8 +66,8 @@
CFX_Color GetOriginalBorderColor() { return GetOriginalColor("BC"); }
- FX_ARGB GetBackgroundColor(int& iColorType) {
- return GetColorARGB(iColorType, "BG");
+ std::pair<CFX_Color::Type, FX_ARGB> GetBackgroundColor() {
+ return GetColorARGB("BG");
}
float GetOriginalBackgroundColorComponent(int index) {
@@ -93,7 +96,7 @@
private:
RetainPtr<CPDF_Font> GetDefaultControlFont() const;
- FX_ARGB GetColorARGB(int& iColorType, const ByteString& csEntry);
+ std::pair<CFX_Color::Type, FX_ARGB> GetColorARGB(const ByteString& csEntry);
float GetOriginalColorComponent(int index, const ByteString& csEntry);
CFX_Color GetOriginalColor(const ByteString& csEntry);
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index a9cdd13..0021c2f 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -427,36 +427,36 @@
#endif // PDF_ENABLE_XFA
Optional<FX_COLORREF> CPDFSDK_Widget::GetFillColor() const {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- int iColorType = 0;
- FX_COLORREF color = ArgbToColorRef(pFormCtrl->GetBackgroundColor(iColorType));
- if (iColorType == CFX_Color::kTransparent)
- return {};
- return color;
+ std::pair<CFX_Color::Type, FX_ARGB> type_argb_pair =
+ GetFormControl()->GetBackgroundColor();
+
+ if (type_argb_pair.first == CFX_Color::kTransparent)
+ return pdfium::nullopt;
+
+ return ArgbToColorRef(type_argb_pair.second);
}
Optional<FX_COLORREF> CPDFSDK_Widget::GetBorderColor() const {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- int iColorType = 0;
- FX_COLORREF color = ArgbToColorRef(pFormCtrl->GetBorderColorARGB(iColorType));
- if (iColorType == CFX_Color::kTransparent)
- return {};
- return color;
+ std::pair<CFX_Color::Type, FX_ARGB> type_argb_pair =
+ GetFormControl()->GetBorderColorARGB();
+ if (type_argb_pair.first == CFX_Color::kTransparent)
+ return pdfium::nullopt;
+
+ return ArgbToColorRef(type_argb_pair.second);
}
Optional<FX_COLORREF> CPDFSDK_Widget::GetTextColor() const {
- CPDF_FormControl* pFormCtrl = GetFormControl();
- CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
- FX_ARGB argb;
- Optional<CFX_Color::Type> iColorType;
- std::tie(iColorType, argb) = da.GetColorARGB();
- if (!iColorType.has_value())
- return {};
+ CPDF_DefaultAppearance da = GetFormControl()->GetDefaultAppearance();
+ Optional<std::pair<CFX_Color::Type, FX_ARGB>> maybe_type_argb_pair =
+ da.GetColorARGB();
- FX_COLORREF color = ArgbToColorRef(argb);
- if (iColorType.value() == CFX_Color::kTransparent)
- return {};
- return color;
+ if (!maybe_type_argb_pair.has_value())
+ return pdfium::nullopt;
+
+ if (maybe_type_argb_pair.value().first == CFX_Color::kTransparent)
+ return pdfium::nullopt;
+
+ return ArgbToColorRef(maybe_type_argb_pair.value().second);
}
float CPDFSDK_Widget::GetFontSize() const {
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index 2af7b92..460c2f8 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -1296,10 +1296,8 @@
if (!pFormControl)
return CJS_Result::Failure(JSMessage::kBadObjectError);
- int iColorType;
- pFormControl->GetBackgroundColor(iColorType);
-
CFX_Color color;
+ CFX_Color::Type iColorType = pFormControl->GetBackgroundColor().first;
if (iColorType == CFX_Color::kTransparent) {
color = CFX_Color(CFX_Color::kTransparent);
} else if (iColorType == CFX_Color::kGray) {
@@ -1825,10 +1823,8 @@
if (!pFormControl)
return CJS_Result::Failure(JSMessage::kBadObjectError);
- int iColorType;
- (void)pFormControl->GetBorderColorARGB(iColorType);
-
CFX_Color color;
+ CFX_Color::Type iColorType = pFormControl->GetBorderColorARGB().first;
if (iColorType == CFX_Color::kTransparent) {
color = CFX_Color(CFX_Color::kTransparent);
} else if (iColorType == CFX_Color::kGray) {
@@ -1933,20 +1929,18 @@
if (!pFormControl)
return CJS_Result::Failure(JSMessage::kBadObjectError);
- Optional<CFX_Color::Type> iColorType;
- FX_ARGB color;
CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance();
- std::tie(iColorType, color) = FieldAppearance.GetColorARGB();
+ Optional<std::pair<CFX_Color::Type, FX_ARGB>> maybe_type_argb_pair =
+ FieldAppearance.GetColorARGB();
CFX_Color crRet;
- if (!iColorType || *iColorType == CFX_Color::kTransparent) {
- crRet = CFX_Color(CFX_Color::kTransparent);
- } else {
+ if (maybe_type_argb_pair.has_value() &&
+ maybe_type_argb_pair.value().first != CFX_Color::kTransparent) {
int32_t a;
int32_t r;
int32_t g;
int32_t b;
- std::tie(a, r, g, b) = ArgbDecode(color);
+ std::tie(a, r, g, b) = ArgbDecode(maybe_type_argb_pair.value().second);
crRet = CFX_Color(CFX_Color::kRGB, r / 255.0f, g / 255.0f, b / 255.0f);
}