Break circular dependency between fxge and fpdfdoc.
Move some functions from core/fxge/cfx_color.h to
core/fpdfdoc/cpdf_color_utils.h, and move an enum from
core/fpdfdoc/cpdf_defaultappearance.h to core/fxge/cfx_renderdevice.h.
Change-Id: I9a58f486abaa2c1a1506388bd9a2951876c1207a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/54910
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfdoc/BUILD.gn b/core/fpdfdoc/BUILD.gn
index d586e11..5e8d257 100644
--- a/core/fpdfdoc/BUILD.gn
+++ b/core/fpdfdoc/BUILD.gn
@@ -26,6 +26,8 @@
"cpdf_bookmark.h",
"cpdf_bookmarktree.cpp",
"cpdf_bookmarktree.h",
+ "cpdf_color_utils.cpp",
+ "cpdf_color_utils.h",
"cpdf_defaultappearance.cpp",
"cpdf_defaultappearance.h",
"cpdf_dest.cpp",
@@ -94,7 +96,6 @@
"../fxge",
]
allow_circular_includes_from = [
- "../fxge",
"../fpdfapi/parser",
"../fpdfapi/page",
"../fpdfapi/render",
diff --git a/core/fpdfdoc/cpdf_color_utils.cpp b/core/fpdfdoc/cpdf_color_utils.cpp
new file mode 100644
index 0000000..198b1ca
--- /dev/null
+++ b/core/fpdfdoc/cpdf_color_utils.cpp
@@ -0,0 +1,53 @@
+// Copyright 2019 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/cpdf_color_utils.h"
+
+#include "core/fpdfapi/parser/cpdf_array.h"
+#include "core/fpdfdoc/cpdf_defaultappearance.h"
+#include "core/fxcrt/bytestring.h"
+
+namespace fpdfdoc {
+
+CFX_Color CFXColorFromArray(const CPDF_Array& array) {
+ CFX_Color rt;
+ switch (array.size()) {
+ case 1:
+ rt = CFX_Color(CFX_Color::kGray, array.GetNumberAt(0));
+ break;
+ case 3:
+ rt = CFX_Color(CFX_Color::kRGB, array.GetNumberAt(0),
+ array.GetNumberAt(1), array.GetNumberAt(2));
+ break;
+ case 4:
+ rt = CFX_Color(CFX_Color::kCMYK, array.GetNumberAt(0),
+ array.GetNumberAt(1), array.GetNumberAt(2),
+ array.GetNumberAt(3));
+ break;
+ }
+ return rt;
+}
+
+CFX_Color CFXColorFromString(const ByteString& str) {
+ CPDF_DefaultAppearance appearance(str);
+ float values[4];
+ Optional<CFX_Color::Type> color_type = appearance.GetColor(values);
+ if (!color_type || *color_type == CFX_Color::kTransparent)
+ return CFX_Color(CFX_Color::kTransparent);
+ if (*color_type == CFX_Color::kGray)
+ return CFX_Color(CFX_Color::kGray, values[0]);
+ if (*color_type == CFX_Color::kRGB)
+ return CFX_Color(CFX_Color::kRGB, values[0], values[1], values[2]);
+ if (*color_type == CFX_Color::kCMYK) {
+ return CFX_Color(CFX_Color::kCMYK, values[0], values[1], values[2],
+ values[3]);
+ }
+
+ NOTREACHED();
+ return CFX_Color(CFX_Color::kTransparent);
+}
+
+} // namespace fpdfdoc
diff --git a/core/fpdfdoc/cpdf_color_utils.h b/core/fpdfdoc/cpdf_color_utils.h
new file mode 100644
index 0000000..993a7d7
--- /dev/null
+++ b/core/fpdfdoc/cpdf_color_utils.h
@@ -0,0 +1,25 @@
+// Copyright 2019 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
+
+#ifndef CORE_FPDFDOC_CPDF_COLOR_UTILS_H_
+#define CORE_FPDFDOC_CPDF_COLOR_UTILS_H_
+
+#include "core/fxge/cfx_color.h"
+
+class CPDF_Array;
+
+namespace fxcrt {
+class ByteString;
+}
+
+namespace fpdfdoc {
+
+CFX_Color CFXColorFromArray(const CPDF_Array& array);
+CFX_Color CFXColorFromString(const fxcrt::ByteString& str);
+
+} // namespace fpdfdoc
+
+#endif // CORE_FPDFDOC_CPDF_COLOR_UTILS_H_
diff --git a/core/fpdfdoc/cpdf_defaultappearance.h b/core/fpdfdoc/cpdf_defaultappearance.h
index c39842c..97762f8 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.h
+++ b/core/fpdfdoc/cpdf_defaultappearance.h
@@ -15,8 +15,6 @@
#include "core/fxge/cfx_color.h"
#include "core/fxge/fx_dib.h"
-enum class BorderStyle { SOLID, DASH, BEVELED, INSET, UNDERLINE };
-
class CPDF_DefaultAppearance {
public:
CPDF_DefaultAppearance() {}
diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp
index adaff5d..ade105f 100644
--- a/core/fpdfdoc/cpvt_generateap.cpp
+++ b/core/fpdfdoc/cpvt_generateap.cpp
@@ -26,11 +26,13 @@
#include "core/fpdfapi/parser/fpdf_parser_decode.h"
#include "core/fpdfapi/parser/fpdf_parser_utility.h"
#include "core/fpdfdoc/cpdf_annot.h"
+#include "core/fpdfdoc/cpdf_color_utils.h"
#include "core/fpdfdoc/cpdf_defaultappearance.h"
#include "core/fpdfdoc/cpdf_formfield.h"
#include "core/fpdfdoc/cpdf_variabletext.h"
#include "core/fpdfdoc/cpvt_fontmap.h"
#include "core/fpdfdoc/cpvt_word.h"
+#include "core/fxge/cfx_renderdevice.h"
#include "third_party/base/ptr_util.h"
namespace {
@@ -308,7 +310,7 @@
const CFX_Color& crDefaultColor,
PaintOperation nOperation) {
if (pColor) {
- CFX_Color color = CFX_Color::ParseColor(*pColor);
+ CFX_Color color = fpdfdoc::CFXColorFromArray(*pColor);
return GenerateColorAP(color, nOperation);
}
@@ -934,7 +936,7 @@
return;
ByteString font_name = *font;
- CFX_Color crText = CFX_Color::ParseColor(DA);
+ CFX_Color crText = fpdfdoc::CFXColorFromString(DA);
CPDF_Dictionary* pDRDict = pFormDict->GetDictFor("DR");
if (!pDRDict)
return;
@@ -1030,9 +1032,9 @@
CFX_Color crBG;
if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDictFor("MK")) {
if (CPDF_Array* pArray = pMKDict->GetArrayFor("BC"))
- crBorder = CFX_Color::ParseColor(*pArray);
+ crBorder = fpdfdoc::CFXColorFromArray(*pArray);
if (CPDF_Array* pArray = pMKDict->GetArrayFor("BG"))
- crBG = CFX_Color::ParseColor(*pArray);
+ crBG = fpdfdoc::CFXColorFromArray(*pArray);
}
std::ostringstream sAppStream;
ByteString sBG = GenerateColorAP(crBG, PaintOperation::FILL);
diff --git a/core/fxge/cfx_color.cpp b/core/fxge/cfx_color.cpp
index da60e67..99330bc 100644
--- a/core/fxge/cfx_color.cpp
+++ b/core/fxge/cfx_color.cpp
@@ -8,9 +8,6 @@
#include <algorithm>
-#include "core/fpdfapi/parser/cpdf_array.h"
-#include "core/fpdfdoc/cpdf_defaultappearance.h"
-
// Color types are orded by increasing number of components so we can
// choose a best color type during some conversions.
static_assert(CFX_Color::kTransparent < CFX_Color::kGray,
@@ -72,46 +69,6 @@
} // namespace
-// Static.
-CFX_Color CFX_Color::ParseColor(const CPDF_Array& array) {
- CFX_Color rt;
- switch (array.size()) {
- case 1:
- rt = CFX_Color(CFX_Color::kGray, array.GetNumberAt(0));
- break;
- case 3:
- rt = CFX_Color(CFX_Color::kRGB, array.GetNumberAt(0),
- array.GetNumberAt(1), array.GetNumberAt(2));
- break;
- case 4:
- rt = CFX_Color(CFX_Color::kCMYK, array.GetNumberAt(0),
- array.GetNumberAt(1), array.GetNumberAt(2),
- array.GetNumberAt(3));
- break;
- }
- return rt;
-}
-
-// Static.
-CFX_Color CFX_Color::ParseColor(const ByteString& str) {
- CPDF_DefaultAppearance appearance(str);
- float values[4];
- Optional<CFX_Color::Type> color_type = appearance.GetColor(values);
- if (!color_type || *color_type == CFX_Color::kTransparent)
- return CFX_Color(CFX_Color::kTransparent);
- if (*color_type == CFX_Color::kGray)
- return CFX_Color(CFX_Color::kGray, values[0]);
- if (*color_type == CFX_Color::kRGB)
- return CFX_Color(CFX_Color::kRGB, values[0], values[1], values[2]);
- if (*color_type == CFX_Color::kCMYK) {
- return CFX_Color(CFX_Color::kCMYK, values[0], values[1], values[2],
- values[3]);
- }
-
- NOTREACHED();
- return CFX_Color(CFX_Color::kTransparent);
-}
-
CFX_Color CFX_Color::ConvertColorType(int32_t nConvertColorType) const {
if (nColorType == nConvertColorType)
return *this;
diff --git a/core/fxge/cfx_color.h b/core/fxge/cfx_color.h
index 251962a..46893b9 100644
--- a/core/fxge/cfx_color.h
+++ b/core/fxge/cfx_color.h
@@ -7,15 +7,9 @@
#ifndef CORE_FXGE_CFX_COLOR_H_
#define CORE_FXGE_CFX_COLOR_H_
-#include "core/fxcrt/fx_string.h"
#include "core/fxge/fx_dib.h"
-class CPDF_Array;
-
struct CFX_Color {
- static CFX_Color ParseColor(const CPDF_Array& array);
- static CFX_Color ParseColor(const ByteString& str);
-
// Ordered by increasing number of components.
enum Type { kTransparent = 0, kGray, kRGB, kCMYK };
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index 4cc9028..f529068 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -12,6 +12,7 @@
#include "build/build_config.h"
#include "core/fxcrt/fx_safe_types.h"
+#include "core/fxge/cfx_color.h"
#include "core/fxge/cfx_defaultrenderdevice.h"
#include "core/fxge/cfx_font.h"
#include "core/fxge/cfx_fontmgr.h"
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index b4c53ef..11d8337 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -11,7 +11,6 @@
#include <vector>
#include "build/build_config.h"
-#include "core/fpdfdoc/cpdf_defaultappearance.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/unowned_ptr.h"
#include "core/fxge/fx_dib.h"
@@ -68,6 +67,8 @@
class RenderDeviceDriverIface;
struct CFX_Color;
+enum class BorderStyle { SOLID, DASH, BEVELED, INSET, UNDERLINE };
+
enum class FXPT_TYPE : uint8_t { LineTo, BezierTo, MoveTo };
class TextCharPos {
diff --git a/fpdfsdk/cpdfsdk_baannot.h b/fpdfsdk/cpdfsdk_baannot.h
index 5f79096..9430c2d 100644
--- a/fpdfsdk/cpdfsdk_baannot.h
+++ b/fpdfsdk/cpdfsdk_baannot.h
@@ -10,14 +10,13 @@
#include "core/fpdfdoc/cpdf_aaction.h"
#include "core/fpdfdoc/cpdf_action.h"
#include "core/fpdfdoc/cpdf_annot.h"
-#include "core/fpdfdoc/cpdf_defaultappearance.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_string.h"
+#include "core/fxge/cfx_renderdevice.h"
#include "fpdfsdk/cfx_systemhandler.h"
#include "fpdfsdk/cpdfsdk_annot.h"
class CFX_Matrix;
-class CFX_RenderDevice;
class CPDF_Dictionary;
class CPDF_RenderOptions;
class CPDFSDK_PageView;
diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp
index 0028119..f8bb967 100644
--- a/fpdfsdk/fpdf_annot.cpp
+++ b/fpdfsdk/fpdf_annot.cpp
@@ -20,6 +20,7 @@
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "core/fpdfapi/parser/cpdf_string.h"
#include "core/fpdfdoc/cpdf_annot.h"
+#include "core/fpdfdoc/cpdf_color_utils.h"
#include "core/fpdfdoc/cpdf_formfield.h"
#include "core/fpdfdoc/cpdf_interactiveform.h"
#include "core/fpdfdoc/cpvt_generateap.h"
@@ -550,7 +551,7 @@
return true;
}
- CFX_Color color = CFX_Color::ParseColor(*pColor);
+ CFX_Color color = fpdfdoc::CFXColorFromArray(*pColor);
switch (color.nColorType) {
case CFX_Color::kRGB:
*R = color.fColor1 * 255.f;
diff --git a/fpdfsdk/pwl/cpwl_wnd.h b/fpdfsdk/pwl/cpwl_wnd.h
index 5b1c7cc..2fe605e 100644
--- a/fpdfsdk/pwl/cpwl_wnd.h
+++ b/fpdfsdk/pwl/cpwl_wnd.h
@@ -14,6 +14,7 @@
#include "core/fxcrt/observable.h"
#include "core/fxcrt/unowned_ptr.h"
#include "core/fxge/cfx_color.h"
+#include "core/fxge/cfx_renderdevice.h"
#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
#include "fpdfsdk/cpdfsdk_widget.h"
#include "fpdfsdk/pwl/cpwl_timer.h"