summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/fpdfdoc/cpdf_annotlist.cpp1
-rw-r--r--core/fpdfdoc/cpdf_apsettings.cpp18
-rw-r--r--core/fpdfdoc/cpdf_defaultappearance.cpp18
-rw-r--r--core/fpdfdoc/cpdf_formcontrol.h5
-rw-r--r--core/fpdfdoc/cpvt_color.cpp51
-rw-r--r--core/fpdfdoc/cpvt_color.h38
-rw-r--r--core/fpdfdoc/cpvt_generateap.cpp96
-rw-r--r--core/fpdfdoc/cpvt_generateap.h10
-rw-r--r--core/fxge/cfx_color.cpp122
-rw-r--r--core/fxge/cfx_color.h11
10 files changed, 161 insertions, 209 deletions
diff --git a/core/fpdfdoc/cpdf_annotlist.cpp b/core/fpdfdoc/cpdf_annotlist.cpp
index 9224943d1e..c0f7ae2f23 100644
--- a/core/fpdfdoc/cpdf_annotlist.cpp
+++ b/core/fpdfdoc/cpdf_annotlist.cpp
@@ -11,6 +11,7 @@
#include <utility>
#include "core/fpdfapi/page/cpdf_page.h"
+#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fpdfapi/parser/cpdf_name.h"
#include "core/fpdfapi/parser/cpdf_number.h"
diff --git a/core/fpdfdoc/cpdf_apsettings.cpp b/core/fpdfdoc/cpdf_apsettings.cpp
index 0fc9c202cb..076cdd9b9e 100644
--- a/core/fpdfdoc/cpdf_apsettings.cpp
+++ b/core/fpdfdoc/cpdf_apsettings.cpp
@@ -10,7 +10,7 @@
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
-#include "core/fpdfdoc/cpdf_formcontrol.h"
+#include "core/fxge/cfx_color.h"
CPDF_ApSettings::CPDF_ApSettings(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
@@ -28,7 +28,7 @@ int CPDF_ApSettings::GetRotation() const {
FX_ARGB CPDF_ApSettings::GetColor(int& iColorType,
const ByteString& csEntry) const {
- iColorType = COLORTYPE_TRANSPARENT;
+ iColorType = CFX_Color::kTransparent;
if (!m_pDict)
return 0;
@@ -39,19 +39,19 @@ FX_ARGB CPDF_ApSettings::GetColor(int& iColorType,
FX_ARGB color = 0;
size_t dwCount = pEntry->GetCount();
if (dwCount == 1) {
- iColorType = COLORTYPE_GRAY;
+ iColorType = CFX_Color::kGray;
float g = pEntry->GetNumberAt(0) * 255;
return ArgbEncode(255, (int)g, (int)g, (int)g);
}
if (dwCount == 3) {
- iColorType = COLORTYPE_RGB;
+ 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);
}
if (dwCount == 4) {
- iColorType = COLORTYPE_CMYK;
+ iColorType = CFX_Color::kCMYK;
float c = pEntry->GetNumberAt(0);
float m = pEntry->GetNumberAt(1);
float y = pEntry->GetNumberAt(2);
@@ -76,7 +76,7 @@ float CPDF_ApSettings::GetOriginalColor(int index,
void CPDF_ApSettings::GetOriginalColor(int& iColorType,
float fc[4],
const ByteString& csEntry) const {
- iColorType = COLORTYPE_TRANSPARENT;
+ iColorType = CFX_Color::kTransparent;
for (int i = 0; i < 4; i++)
fc[i] = 0;
@@ -89,15 +89,15 @@ void CPDF_ApSettings::GetOriginalColor(int& iColorType,
size_t dwCount = pEntry->GetCount();
if (dwCount == 1) {
- iColorType = COLORTYPE_GRAY;
+ iColorType = CFX_Color::kGray;
fc[0] = pEntry->GetNumberAt(0);
} else if (dwCount == 3) {
- iColorType = COLORTYPE_RGB;
+ iColorType = CFX_Color::kRGB;
fc[0] = pEntry->GetNumberAt(0);
fc[1] = pEntry->GetNumberAt(1);
fc[2] = pEntry->GetNumberAt(2);
} else if (dwCount == 4) {
- iColorType = COLORTYPE_CMYK;
+ iColorType = CFX_Color::kCMYK;
fc[0] = pEntry->GetNumberAt(0);
fc[1] = pEntry->GetNumberAt(1);
fc[2] = pEntry->GetNumberAt(2);
diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp
index bd7ea1bc07..02d6eea41f 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.cpp
+++ b/core/fpdfdoc/cpdf_defaultappearance.cpp
@@ -10,7 +10,7 @@
#include "core/fpdfapi/parser/cpdf_simple_parser.h"
#include "core/fpdfapi/parser/fpdf_parser_decode.h"
-#include "core/fpdfdoc/cpdf_formcontrol.h"
+#include "core/fxge/cfx_color.h"
bool CPDF_DefaultAppearance::HasFont() {
if (m_csDA.IsEmpty())
@@ -110,7 +110,7 @@ ByteString CPDF_DefaultAppearance::GetColorString(PaintOperation nOperation) {
void CPDF_DefaultAppearance::GetColor(int& iColorType,
float fc[4],
PaintOperation nOperation) {
- iColorType = COLORTYPE_TRANSPARENT;
+ iColorType = CFX_Color::kTransparent;
for (int c = 0; c < 4; c++)
fc[c] = 0;
@@ -120,13 +120,13 @@ void CPDF_DefaultAppearance::GetColor(int& iColorType,
CPDF_SimpleParser syntax(m_csDA.AsStringView());
if (syntax.FindTagParamFromStart(
(nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) {
- iColorType = COLORTYPE_GRAY;
+ iColorType = CFX_Color::kGray;
fc[0] = FX_atof(syntax.GetWord());
return;
}
if (syntax.FindTagParamFromStart(
(nOperation == PaintOperation::STROKE ? "RG" : "rg"), 3)) {
- iColorType = COLORTYPE_RGB;
+ iColorType = CFX_Color::kRGB;
fc[0] = FX_atof(syntax.GetWord());
fc[1] = FX_atof(syntax.GetWord());
fc[2] = FX_atof(syntax.GetWord());
@@ -134,7 +134,7 @@ void CPDF_DefaultAppearance::GetColor(int& iColorType,
}
if (syntax.FindTagParamFromStart(
(nOperation == PaintOperation::STROKE ? "K" : "k"), 4)) {
- iColorType = COLORTYPE_CMYK;
+ iColorType = CFX_Color::kCMYK;
fc[0] = FX_atof(syntax.GetWord());
fc[1] = FX_atof(syntax.GetWord());
fc[2] = FX_atof(syntax.GetWord());
@@ -146,21 +146,21 @@ void CPDF_DefaultAppearance::GetColor(FX_ARGB& color,
int& iColorType,
PaintOperation nOperation) {
color = 0;
- iColorType = COLORTYPE_TRANSPARENT;
+ iColorType = CFX_Color::kTransparent;
if (m_csDA.IsEmpty())
return;
CPDF_SimpleParser syntax(m_csDA.AsStringView());
if (syntax.FindTagParamFromStart(
(nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) {
- iColorType = COLORTYPE_GRAY;
+ iColorType = CFX_Color::kGray;
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;
+ iColorType = CFX_Color::kRGB;
float r = FX_atof(syntax.GetWord()) * 255 + 0.5f;
float g = FX_atof(syntax.GetWord()) * 255 + 0.5f;
float b = FX_atof(syntax.GetWord()) * 255 + 0.5f;
@@ -169,7 +169,7 @@ void CPDF_DefaultAppearance::GetColor(FX_ARGB& color,
}
if (syntax.FindTagParamFromStart(
(nOperation == PaintOperation::STROKE ? "K" : "k"), 4)) {
- iColorType = COLORTYPE_CMYK;
+ iColorType = CFX_Color::kCMYK;
float c = FX_atof(syntax.GetWord());
float m = FX_atof(syntax.GetWord());
float y = FX_atof(syntax.GetWord());
diff --git a/core/fpdfdoc/cpdf_formcontrol.h b/core/fpdfdoc/cpdf_formcontrol.h
index b22b074600..6485af0b44 100644
--- a/core/fpdfdoc/cpdf_formcontrol.h
+++ b/core/fpdfdoc/cpdf_formcontrol.h
@@ -28,11 +28,6 @@
#define TEXTPOS_LEFT 5
#define TEXTPOS_OVERLAID 6
-#define COLORTYPE_TRANSPARENT 0
-#define COLORTYPE_GRAY 1
-#define COLORTYPE_RGB 2
-#define COLORTYPE_CMYK 3
-
class CFX_RenderDevice;
class CPDF_Dictionary;
class CPDF_Font;
diff --git a/core/fpdfdoc/cpvt_color.cpp b/core/fpdfdoc/cpvt_color.cpp
deleted file mode 100644
index 914e416dbd..0000000000
--- a/core/fpdfdoc/cpvt_color.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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/cpvt_color.h"
-
-#include "core/fpdfapi/parser/cpdf_simple_parser.h"
-
-// Static.
-CPVT_Color CPVT_Color::ParseColor(const ByteString& str) {
- CPDF_SimpleParser syntax(str.AsStringView());
- if (syntax.FindTagParamFromStart("g", 1))
- return CPVT_Color(CPVT_Color::kGray, FX_atof(syntax.GetWord()));
-
- if (syntax.FindTagParamFromStart("rg", 3)) {
- float f1 = FX_atof(syntax.GetWord());
- float f2 = FX_atof(syntax.GetWord());
- float f3 = FX_atof(syntax.GetWord());
- return CPVT_Color(CPVT_Color::kRGB, f1, f2, f3);
- }
- if (syntax.FindTagParamFromStart("k", 4)) {
- float f1 = FX_atof(syntax.GetWord());
- float f2 = FX_atof(syntax.GetWord());
- float f3 = FX_atof(syntax.GetWord());
- float f4 = FX_atof(syntax.GetWord());
- return CPVT_Color(CPVT_Color::kCMYK, f1, f2, f3, f4);
- }
- return CPVT_Color(CPVT_Color::kTransparent);
-}
-
-// Static.
-CPVT_Color CPVT_Color::ParseColor(const CPDF_Array& array) {
- CPVT_Color rt;
- switch (array.GetCount()) {
- case 1:
- rt = CPVT_Color(CPVT_Color::kGray, array.GetFloatAt(0));
- break;
- case 3:
- rt = CPVT_Color(CPVT_Color::kRGB, array.GetFloatAt(0),
- array.GetFloatAt(1), array.GetFloatAt(2));
- break;
- case 4:
- rt = CPVT_Color(CPVT_Color::kCMYK, array.GetFloatAt(0),
- array.GetFloatAt(1), array.GetFloatAt(2),
- array.GetFloatAt(3));
- break;
- }
- return rt;
-}
diff --git a/core/fpdfdoc/cpvt_color.h b/core/fpdfdoc/cpvt_color.h
deleted file mode 100644
index a7e925bf79..0000000000
--- a/core/fpdfdoc/cpvt_color.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// 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
-
-#ifndef CORE_FPDFDOC_CPVT_COLOR_H_
-#define CORE_FPDFDOC_CPVT_COLOR_H_
-
-#include "core/fpdfapi/parser/cpdf_array.h"
-#include "core/fxcrt/fx_string.h"
-#include "core/fxcrt/fx_system.h"
-
-struct CPVT_Color {
- enum Type { kTransparent = 0, kGray, kRGB, kCMYK };
-
- CPVT_Color(Type type = kTransparent,
- float color1 = 0.0f,
- float color2 = 0.0f,
- float color3 = 0.0f,
- float color4 = 0.0f)
- : nColorType(type),
- fColor1(color1),
- fColor2(color2),
- fColor3(color3),
- fColor4(color4) {}
-
- Type nColorType;
- float fColor1;
- float fColor2;
- float fColor3;
- float fColor4;
-
- static CPVT_Color ParseColor(const ByteString& str);
- static CPVT_Color ParseColor(const CPDF_Array& array);
-};
-
-#endif // CORE_FPDFDOC_CPVT_COLOR_H_
diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp
index 634864c957..ac3e7a51a0 100644
--- a/core/fpdfdoc/cpvt_generateap.cpp
+++ b/core/fpdfdoc/cpvt_generateap.cpp
@@ -12,6 +12,7 @@
#include <utility>
#include "core/fpdfapi/font/cpdf_font.h"
+#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_boolean.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_document.h"
@@ -24,7 +25,6 @@
#include "core/fpdfapi/parser/fpdf_parser_decode.h"
#include "core/fpdfdoc/cpdf_annot.h"
#include "core/fpdfdoc/cpdf_formfield.h"
-#include "core/fpdfdoc/cpvt_color.h"
#include "core/fpdfdoc/cpvt_fontmap.h"
#include "core/fpdfdoc/cpvt_word.h"
#include "third_party/base/ptr_util.h"
@@ -58,7 +58,7 @@ bool GenerateWidgetAP(CPDF_Document* pDoc,
return false;
float fFontSize = FX_atof(syntax.GetWord());
- CPVT_Color crText = CPVT_Color::ParseColor(DA);
+ CFX_Color crText = CFX_Color::ParseColor(DA);
CPDF_Dictionary* pDRDict = pFormDict->GetDictFor("DR");
if (!pDRDict)
return false;
@@ -116,8 +116,8 @@ bool GenerateWidgetAP(CPDF_Document* pDoc,
BorderStyle nBorderStyle = BorderStyle::SOLID;
float fBorderWidth = 1;
CPVT_Dash dsBorder(3, 0, 0);
- CPVT_Color crLeftTop;
- CPVT_Color crRightBottom;
+ CFX_Color crLeftTop;
+ CFX_Color crRightBottom;
if (CPDF_Dictionary* pBSDict = pAnnotDict->GetDictFor("BS")) {
if (pBSDict->KeyExist("W"))
fBorderWidth = pBSDict->GetNumberFor("W");
@@ -137,14 +137,14 @@ bool GenerateWidgetAP(CPDF_Document* pDoc,
case 'B':
nBorderStyle = BorderStyle::BEVELED;
fBorderWidth *= 2;
- crLeftTop = CPVT_Color(CPVT_Color::kGray, 1);
- crRightBottom = CPVT_Color(CPVT_Color::kGray, 0.5);
+ crLeftTop = CFX_Color(CFX_Color::kGray, 1);
+ crRightBottom = CFX_Color(CFX_Color::kGray, 0.5);
break;
case 'I':
nBorderStyle = BorderStyle::INSET;
fBorderWidth *= 2;
- crLeftTop = CPVT_Color(CPVT_Color::kGray, 0.5);
- crRightBottom = CPVT_Color(CPVT_Color::kGray, 0.75);
+ crLeftTop = CFX_Color(CFX_Color::kGray, 0.5);
+ crRightBottom = CFX_Color(CFX_Color::kGray, 0.75);
break;
case 'U':
nBorderStyle = BorderStyle::UNDERLINE;
@@ -152,13 +152,13 @@ bool GenerateWidgetAP(CPDF_Document* pDoc,
}
}
}
- CPVT_Color crBorder;
- CPVT_Color crBG;
+ CFX_Color crBorder;
+ CFX_Color crBG;
if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDictFor("MK")) {
if (CPDF_Array* pArray = pMKDict->GetArrayFor("BC"))
- crBorder = CPVT_Color::ParseColor(*pArray);
+ crBorder = CFX_Color::ParseColor(*pArray);
if (CPDF_Array* pArray = pMKDict->GetArrayFor("BG"))
- crBG = CPVT_Color::ParseColor(*pArray);
+ crBG = CFX_Color::ParseColor(*pArray);
}
std::ostringstream sAppStream;
ByteString sBG = CPVT_GenerateAP::GenerateColorAP(crBG, PaintOperation::FILL);
@@ -320,8 +320,8 @@ bool GenerateWidgetAP(CPDF_Document* pDoc,
<< "Q\nEMC\n";
}
ByteString sButton = CPVT_GenerateAP::GenerateColorAP(
- CPVT_Color(CPVT_Color::kRGB, 220.0f / 255.0f, 220.0f / 255.0f,
- 220.0f / 255.0f),
+ CFX_Color(CFX_Color::kRGB, 220.0f / 255.0f, 220.0f / 255.0f,
+ 220.0f / 255.0f),
PaintOperation::FILL);
if (sButton.GetLength() > 0 && !rcButton.IsEmpty()) {
sAppStream << "q\n" << sButton;
@@ -329,10 +329,9 @@ bool GenerateWidgetAP(CPDF_Document* pDoc,
<< rcButton.Width() << " " << rcButton.Height() << " re f\n";
sAppStream << "Q\n";
ByteString sButtonBorder = CPVT_GenerateAP::GenerateBorderAP(
- rcButton, 2, CPVT_Color(CPVT_Color::kGray, 0),
- CPVT_Color(CPVT_Color::kGray, 1),
- CPVT_Color(CPVT_Color::kGray, 0.5), BorderStyle::BEVELED,
- CPVT_Dash(3, 0, 0));
+ rcButton, 2, CFX_Color(CFX_Color::kGray, 0),
+ CFX_Color(CFX_Color::kGray, 1), CFX_Color(CFX_Color::kGray, 0.5),
+ BorderStyle::BEVELED, CPVT_Dash(3, 0, 0));
if (sButtonBorder.GetLength() > 0)
sAppStream << "q\n" << sButtonBorder << "Q\n";
@@ -398,16 +397,15 @@ bool GenerateWidgetAP(CPDF_Document* pDoc,
rcBody.left, fy - fItemHeight, rcBody.right, fy);
sBody << "q\n"
<< CPVT_GenerateAP::GenerateColorAP(
- CPVT_Color(CPVT_Color::kRGB, 0, 51.0f / 255.0f,
- 113.0f / 255.0f),
+ CFX_Color(CFX_Color::kRGB, 0, 51.0f / 255.0f,
+ 113.0f / 255.0f),
PaintOperation::FILL)
<< rcItem.left << " " << rcItem.bottom << " "
<< rcItem.Width() << " " << rcItem.Height() << " re f\n"
<< "Q\n";
sBody << "BT\n"
<< CPVT_GenerateAP::GenerateColorAP(
- CPVT_Color(CPVT_Color::kGray, 1),
- PaintOperation::FILL)
+ CFX_Color(CFX_Color::kGray, 1), PaintOperation::FILL)
<< CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(),
CFX_PointF(0.0f, fy),
true, 0)
@@ -461,10 +459,10 @@ bool GenerateWidgetAP(CPDF_Document* pDoc,
}
ByteString GetColorStringWithDefault(CPDF_Array* pColor,
- const CPVT_Color& crDefaultColor,
+ const CFX_Color& crDefaultColor,
PaintOperation nOperation) {
if (pColor) {
- CPVT_Color color = CPVT_Color::ParseColor(*pColor);
+ CFX_Color color = CFX_Color::ParseColor(*pColor);
return CPVT_GenerateAP::GenerateColorAP(color, nOperation);
}
@@ -546,7 +544,7 @@ ByteString GetPopupContentsString(CPDF_Document* pDoc,
std::ostringstream sAppStream;
sAppStream << "BT\n"
<< CPVT_GenerateAP::GenerateColorAP(
- CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), PaintOperation::FILL)
+ CFX_Color(CFX_Color::kRGB, 0, 0, 0), PaintOperation::FILL)
<< sContent << "ET\n"
<< "Q\n";
return ByteString(sAppStream);
@@ -577,9 +575,9 @@ ByteString GetPaintOperatorString(bool bIsStrokeRect, bool bIsFillRect) {
ByteString GenerateTextSymbolAP(const CFX_FloatRect& rect) {
std::ostringstream sAppStream;
sAppStream << CPVT_GenerateAP::GenerateColorAP(
- CPVT_Color(CPVT_Color::kRGB, 1, 1, 0), PaintOperation::FILL);
+ CFX_Color(CFX_Color::kRGB, 1, 1, 0), PaintOperation::FILL);
sAppStream << CPVT_GenerateAP::GenerateColorAP(
- CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), PaintOperation::STROKE);
+ CFX_Color(CFX_Color::kRGB, 0, 0, 0), PaintOperation::STROKE);
const float fBorderWidth = 1;
sAppStream << fBorderWidth << " w\n";
@@ -687,12 +685,11 @@ bool CPVT_GenerateAP::GenerateCircleAP(CPDF_Document* pDoc,
sAppStream << "/" << sExtGSDictName << " gs ";
CPDF_Array* pInteriorColor = pAnnotDict->GetArrayFor("IC");
- sAppStream << GetColorStringWithDefault(pInteriorColor,
- CPVT_Color(CPVT_Color::kTransparent),
- PaintOperation::FILL);
+ sAppStream << GetColorStringWithDefault(
+ pInteriorColor, CFX_Color(CFX_Color::kTransparent), PaintOperation::FILL);
sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
- CPVT_Color(CPVT_Color::kRGB, 0, 0, 0),
+ CFX_Color(CFX_Color::kRGB, 0, 0, 0),
PaintOperation::STROKE);
float fBorderWidth = GetBorderWidth(*pAnnotDict);
@@ -761,7 +758,7 @@ bool CPVT_GenerateAP::GenerateHighlightAP(CPDF_Document* pDoc,
sAppStream << "/" << sExtGSDictName << " gs ";
sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
- CPVT_Color(CPVT_Color::kRGB, 1, 1, 0),
+ CFX_Color(CFX_Color::kRGB, 1, 1, 0),
PaintOperation::FILL);
CFX_FloatRect rect = CPDF_Annot::RectFromQuadPoints(pAnnotDict);
@@ -799,7 +796,7 @@ bool CPVT_GenerateAP::GenerateInkAP(CPDF_Document* pDoc,
sAppStream << "/" << sExtGSDictName << " gs ";
sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
- CPVT_Color(CPVT_Color::kRGB, 0, 0, 0),
+ CFX_Color(CFX_Color::kRGB, 0, 0, 0),
PaintOperation::STROKE);
sAppStream << fBorderWidth << " w ";
@@ -866,7 +863,7 @@ bool CPVT_GenerateAP::GenerateUnderlineAP(CPDF_Document* pDoc,
sAppStream << "/" << sExtGSDictName << " gs ";
sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
- CPVT_Color(CPVT_Color::kRGB, 0, 0, 0),
+ CFX_Color(CFX_Color::kRGB, 0, 0, 0),
PaintOperation::STROKE);
CFX_FloatRect rect = CPDF_Annot::RectFromQuadPoints(pAnnotDict);
@@ -892,9 +889,9 @@ bool CPVT_GenerateAP::GeneratePopupAP(CPDF_Document* pDoc,
ByteString sExtGSDictName = "GS";
sAppStream << "/" << sExtGSDictName << " gs\n";
- sAppStream << GenerateColorAP(CPVT_Color(CPVT_Color::kRGB, 1, 1, 0),
+ sAppStream << GenerateColorAP(CFX_Color(CFX_Color::kRGB, 1, 1, 0),
PaintOperation::FILL);
- sAppStream << GenerateColorAP(CPVT_Color(CPVT_Color::kRGB, 0, 0, 0),
+ sAppStream << GenerateColorAP(CFX_Color(CFX_Color::kRGB, 0, 0, 0),
PaintOperation::STROKE);
const float fBorderWidth = 1;
@@ -931,12 +928,11 @@ bool CPVT_GenerateAP::GenerateSquareAP(CPDF_Document* pDoc,
sAppStream << "/" << sExtGSDictName << " gs ";
CPDF_Array* pInteriorColor = pAnnotDict->GetArrayFor("IC");
- sAppStream << GetColorStringWithDefault(pInteriorColor,
- CPVT_Color(CPVT_Color::kTransparent),
- PaintOperation::FILL);
+ sAppStream << GetColorStringWithDefault(
+ pInteriorColor, CFX_Color(CFX_Color::kTransparent), PaintOperation::FILL);
sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
- CPVT_Color(CPVT_Color::kRGB, 0, 0, 0),
+ CFX_Color(CFX_Color::kRGB, 0, 0, 0),
PaintOperation::STROKE);
float fBorderWidth = GetBorderWidth(*pAnnotDict);
@@ -979,7 +975,7 @@ bool CPVT_GenerateAP::GenerateSquigglyAP(CPDF_Document* pDoc,
sAppStream << "/" << sExtGSDictName << " gs ";
sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
- CPVT_Color(CPVT_Color::kRGB, 0, 0, 0),
+ CFX_Color(CFX_Color::kRGB, 0, 0, 0),
PaintOperation::STROKE);
CFX_FloatRect rect = CPDF_Annot::RectFromQuadPoints(pAnnotDict);
@@ -1028,7 +1024,7 @@ bool CPVT_GenerateAP::GenerateStrikeOutAP(CPDF_Document* pDoc,
sAppStream << "/" << sExtGSDictName << " gs ";
sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
- CPVT_Color(CPVT_Color::kRGB, 0, 0, 0),
+ CFX_Color(CFX_Color::kRGB, 0, 0, 0),
PaintOperation::STROKE);
CFX_FloatRect rect = CPDF_Annot::RectFromQuadPoints(pAnnotDict);
@@ -1135,9 +1131,9 @@ ByteString CPVT_GenerateAP::GenerateEditAP(
// Static.
ByteString CPVT_GenerateAP::GenerateBorderAP(const CFX_FloatRect& rect,
float fWidth,
- const CPVT_Color& color,
- const CPVT_Color& crLeftTop,
- const CPVT_Color& crRightBottom,
+ const CFX_Color& color,
+ const CFX_Color& crLeftTop,
+ const CFX_Color& crRightBottom,
BorderStyle nStyle,
const CPVT_Dash& dash) {
std::ostringstream sAppStream;
@@ -1240,28 +1236,28 @@ ByteString CPVT_GenerateAP::GenerateBorderAP(const CFX_FloatRect& rect,
}
// Static.
-ByteString CPVT_GenerateAP::GenerateColorAP(const CPVT_Color& color,
+ByteString CPVT_GenerateAP::GenerateColorAP(const CFX_Color& color,
PaintOperation nOperation) {
std::ostringstream sColorStream;
switch (color.nColorType) {
- case CPVT_Color::kRGB:
+ case CFX_Color::kRGB:
sColorStream << color.fColor1 << " " << color.fColor2 << " "
<< color.fColor3 << " "
<< (nOperation == PaintOperation::STROKE ? "RG" : "rg")
<< "\n";
break;
- case CPVT_Color::kGray:
+ case CFX_Color::kGray:
sColorStream << color.fColor1 << " "
<< (nOperation == PaintOperation::STROKE ? "G" : "g")
<< "\n";
break;
- case CPVT_Color::kCMYK:
+ case CFX_Color::kCMYK:
sColorStream << color.fColor1 << " " << color.fColor2 << " "
<< color.fColor3 << " " << color.fColor4 << " "
<< (nOperation == PaintOperation::STROKE ? "K" : "k")
<< "\n";
break;
- case CPVT_Color::kTransparent:
+ case CFX_Color::kTransparent:
break;
}
return ByteString(sColorStream);
diff --git a/core/fpdfdoc/cpvt_generateap.h b/core/fpdfdoc/cpvt_generateap.h
index 2812b29a47..31962e237b 100644
--- a/core/fpdfdoc/cpvt_generateap.h
+++ b/core/fpdfdoc/cpvt_generateap.h
@@ -11,11 +11,11 @@
#include "core/fpdfdoc/cpdf_defaultappearance.h"
#include "core/fpdfdoc/cpdf_variabletext.h"
-#include "core/fpdfdoc/cpvt_color.h"
#include "core/fpdfdoc/cpvt_dash.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxcrt/fx_system.h"
+#include "core/fxge/cfx_color.h"
class CPDF_Dictionary;
class CPDF_Document;
@@ -55,12 +55,12 @@ class CPVT_GenerateAP {
uint16_t SubWord);
static ByteString GenerateBorderAP(const CFX_FloatRect& rect,
float fWidth,
- const CPVT_Color& color,
- const CPVT_Color& crLeftTop,
- const CPVT_Color& crRightBottom,
+ const CFX_Color& color,
+ const CFX_Color& crLeftTop,
+ const CFX_Color& crRightBottom,
BorderStyle nStyle,
const CPVT_Dash& dash);
- static ByteString GenerateColorAP(const CPVT_Color& color,
+ static ByteString GenerateColorAP(const CFX_Color& color,
PaintOperation nOperation);
static std::unique_ptr<CPDF_Dictionary> GenerateExtGStateDict(
const CPDF_Dictionary& pAnnotDict,
diff --git a/core/fxge/cfx_color.cpp b/core/fxge/cfx_color.cpp
index eebdd2cf1c..42ab39d670 100644
--- a/core/fxge/cfx_color.cpp
+++ b/core/fxge/cfx_color.cpp
@@ -8,6 +8,9 @@
#include <algorithm>
+#include "core/fpdfapi/parser/cpdf_array.h"
+#include "core/fpdfapi/parser/cpdf_simple_parser.h"
+
namespace {
bool InRange(float comp) {
@@ -16,86 +19,127 @@ bool InRange(float comp) {
CFX_Color ConvertCMYK2GRAY(float dC, float dM, float dY, float dK) {
if (!InRange(dC) || !InRange(dM) || !InRange(dY) || !InRange(dK))
- return CFX_Color(COLORTYPE_GRAY);
+ return CFX_Color(CFX_Color::kGray);
return CFX_Color(
- COLORTYPE_GRAY,
+ CFX_Color::kGray,
1.0f - std::min(1.0f, 0.3f * dC + 0.59f * dM + 0.11f * dY + dK));
}
CFX_Color ConvertGRAY2CMYK(float dGray) {
if (!InRange(dGray))
- return CFX_Color(COLORTYPE_CMYK);
- return CFX_Color(COLORTYPE_CMYK, 0.0f, 0.0f, 0.0f, 1.0f - dGray);
+ return CFX_Color(CFX_Color::kCMYK);
+ return CFX_Color(CFX_Color::kCMYK, 0.0f, 0.0f, 0.0f, 1.0f - dGray);
}
CFX_Color ConvertGRAY2RGB(float dGray) {
if (!InRange(dGray))
- return CFX_Color(COLORTYPE_RGB);
- return CFX_Color(COLORTYPE_RGB, dGray, dGray, dGray);
+ return CFX_Color(CFX_Color::kRGB);
+ return CFX_Color(CFX_Color::kRGB, dGray, dGray, dGray);
}
CFX_Color ConvertRGB2GRAY(float dR, float dG, float dB) {
if (!InRange(dR) || !InRange(dG) || !InRange(dB))
- return CFX_Color(COLORTYPE_GRAY);
- return CFX_Color(COLORTYPE_GRAY, 0.3f * dR + 0.59f * dG + 0.11f * dB);
+ return CFX_Color(CFX_Color::kGray);
+ return CFX_Color(CFX_Color::kGray, 0.3f * dR + 0.59f * dG + 0.11f * dB);
}
CFX_Color ConvertCMYK2RGB(float dC, float dM, float dY, float dK) {
if (!InRange(dC) || !InRange(dM) || !InRange(dY) || !InRange(dK))
- return CFX_Color(COLORTYPE_RGB);
- return CFX_Color(COLORTYPE_RGB, 1.0f - std::min(1.0f, dC + dK),
+ return CFX_Color(CFX_Color::kRGB);
+ return CFX_Color(CFX_Color::kRGB, 1.0f - std::min(1.0f, dC + dK),
1.0f - std::min(1.0f, dM + dK),
1.0f - std::min(1.0f, dY + dK));
}
CFX_Color ConvertRGB2CMYK(float dR, float dG, float dB) {
if (!InRange(dR) || !InRange(dG) || !InRange(dB))
- return CFX_Color(COLORTYPE_CMYK);
+ return CFX_Color(CFX_Color::kCMYK);
float c = 1.0f - dR;
float m = 1.0f - dG;
float y = 1.0f - dB;
- return CFX_Color(COLORTYPE_CMYK, c, m, y, std::min(c, std::min(m, y)));
+ return CFX_Color(CFX_Color::kCMYK, c, m, y, std::min(c, std::min(m, y)));
}
} // namespace
+// Static.
+CFX_Color CFX_Color::ParseColor(const CPDF_Array& array) {
+ CFX_Color rt;
+ switch (array.GetCount()) {
+ case 1:
+ rt = CFX_Color(CFX_Color::kGray, array.GetFloatAt(0));
+ break;
+ case 3:
+ rt = CFX_Color(CFX_Color::kRGB, array.GetFloatAt(0), array.GetFloatAt(1),
+ array.GetFloatAt(2));
+ break;
+ case 4:
+ rt = CFX_Color(CFX_Color::kCMYK, array.GetFloatAt(0), array.GetFloatAt(1),
+ array.GetFloatAt(2), array.GetFloatAt(3));
+ break;
+ }
+ return rt;
+}
+
+// Static.
+CFX_Color CFX_Color::ParseColor(const ByteString& str) {
+ CPDF_SimpleParser syntax(str.AsStringView());
+ if (syntax.FindTagParamFromStart("g", 1))
+ return CFX_Color(CFX_Color::kGray, FX_atof(syntax.GetWord()));
+
+ if (syntax.FindTagParamFromStart("rg", 3)) {
+ float f1 = FX_atof(syntax.GetWord());
+ float f2 = FX_atof(syntax.GetWord());
+ float f3 = FX_atof(syntax.GetWord());
+ return CFX_Color(CFX_Color::kRGB, f1, f2, f3);
+ }
+ if (syntax.FindTagParamFromStart("k", 4)) {
+ float f1 = FX_atof(syntax.GetWord());
+ float f2 = FX_atof(syntax.GetWord());
+ float f3 = FX_atof(syntax.GetWord());
+ float f4 = FX_atof(syntax.GetWord());
+ return CFX_Color(CFX_Color::kCMYK, f1, f2, f3, f4);
+ }
+ return CFX_Color(CFX_Color::kTransparent);
+}
+
CFX_Color CFX_Color::ConvertColorType(int32_t nConvertColorType) const {
if (nColorType == nConvertColorType)
return *this;
CFX_Color ret;
switch (nColorType) {
- case COLORTYPE_TRANSPARENT:
+ case CFX_Color::kTransparent:
ret = *this;
- ret.nColorType = COLORTYPE_TRANSPARENT;
+ ret.nColorType = CFX_Color::kTransparent;
break;
- case COLORTYPE_GRAY:
+ case CFX_Color::kGray:
switch (nConvertColorType) {
- case COLORTYPE_RGB:
+ case CFX_Color::kRGB:
ret = ConvertGRAY2RGB(fColor1);
break;
- case COLORTYPE_CMYK:
+ case CFX_Color::kCMYK:
ret = ConvertGRAY2CMYK(fColor1);
break;
}
break;
- case COLORTYPE_RGB:
+ case CFX_Color::kRGB:
switch (nConvertColorType) {
- case COLORTYPE_GRAY:
+ case CFX_Color::kGray:
ret = ConvertRGB2GRAY(fColor1, fColor2, fColor3);
break;
- case COLORTYPE_CMYK:
+ case CFX_Color::kCMYK:
ret = ConvertRGB2CMYK(fColor1, fColor2, fColor3);
break;
}
break;
- case COLORTYPE_CMYK:
+ case CFX_Color::kCMYK:
switch (nConvertColorType) {
- case COLORTYPE_GRAY:
+ case CFX_Color::kGray:
ret = ConvertCMYK2GRAY(fColor1, fColor2, fColor3, fColor4);
break;
- case COLORTYPE_RGB:
+ case CFX_Color::kRGB:
ret = ConvertCMYK2RGB(fColor1, fColor2, fColor3, fColor4);
break;
}
@@ -107,21 +151,21 @@ CFX_Color CFX_Color::ConvertColorType(int32_t nConvertColorType) const {
FX_COLORREF CFX_Color::ToFXColor(int32_t nTransparency) const {
CFX_Color ret;
switch (nColorType) {
- case COLORTYPE_TRANSPARENT: {
- ret = CFX_Color(COLORTYPE_TRANSPARENT, 0, 0, 0, 0);
+ case CFX_Color::kTransparent: {
+ ret = CFX_Color(CFX_Color::kTransparent, 0, 0, 0, 0);
break;
}
- case COLORTYPE_GRAY: {
+ case CFX_Color::kGray: {
ret = ConvertGRAY2RGB(fColor1);
ret.fColor4 = nTransparency;
break;
}
- case COLORTYPE_RGB: {
- ret = CFX_Color(COLORTYPE_RGB, fColor1, fColor2, fColor3);
+ case CFX_Color::kRGB: {
+ ret = CFX_Color(CFX_Color::kRGB, fColor1, fColor2, fColor3);
ret.fColor4 = nTransparency;
break;
}
- case COLORTYPE_CMYK: {
+ case CFX_Color::kCMYK: {
ret = ConvertCMYK2RGB(fColor1, fColor2, fColor3, fColor4);
ret.fColor4 = nTransparency;
break;
@@ -135,15 +179,15 @@ FX_COLORREF CFX_Color::ToFXColor(int32_t nTransparency) const {
CFX_Color CFX_Color::operator-(float fColorSub) const {
CFX_Color sRet(nColorType);
switch (nColorType) {
- case COLORTYPE_TRANSPARENT:
- sRet.nColorType = COLORTYPE_RGB;
+ case CFX_Color::kTransparent:
+ sRet.nColorType = CFX_Color::kRGB;
sRet.fColor1 = std::max(1.0f - fColorSub, 0.0f);
sRet.fColor2 = std::max(1.0f - fColorSub, 0.0f);
sRet.fColor3 = std::max(1.0f - fColorSub, 0.0f);
break;
- case COLORTYPE_RGB:
- case COLORTYPE_GRAY:
- case COLORTYPE_CMYK:
+ case CFX_Color::kRGB:
+ case CFX_Color::kGray:
+ case CFX_Color::kCMYK:
sRet.fColor1 = std::max(fColor1 - fColorSub, 0.0f);
sRet.fColor2 = std::max(fColor2 - fColorSub, 0.0f);
sRet.fColor3 = std::max(fColor3 - fColorSub, 0.0f);
@@ -156,15 +200,15 @@ CFX_Color CFX_Color::operator-(float fColorSub) const {
CFX_Color CFX_Color::operator/(float fColorDivide) const {
CFX_Color sRet(nColorType);
switch (nColorType) {
- case COLORTYPE_TRANSPARENT:
- sRet.nColorType = COLORTYPE_RGB;
+ case CFX_Color::kTransparent:
+ sRet.nColorType = CFX_Color::kRGB;
sRet.fColor1 = 1.0f / fColorDivide;
sRet.fColor2 = 1.0f / fColorDivide;
sRet.fColor3 = 1.0f / fColorDivide;
break;
- case COLORTYPE_RGB:
- case COLORTYPE_GRAY:
- case COLORTYPE_CMYK:
+ case CFX_Color::kRGB:
+ case CFX_Color::kGray:
+ case CFX_Color::kCMYK:
sRet = *this;
sRet.fColor1 /= fColorDivide;
sRet.fColor2 /= fColorDivide;
diff --git a/core/fxge/cfx_color.h b/core/fxge/cfx_color.h
index b92c0bcc28..413c0a49c1 100644
--- a/core/fxge/cfx_color.h
+++ b/core/fxge/cfx_color.h
@@ -11,10 +11,15 @@
#include "core/fxge/fx_dib.h"
struct CFX_Color {
+ static CFX_Color ParseColor(const CPDF_Array& array);
+ static CFX_Color ParseColor(const ByteString& str);
+
+ enum Type { kTransparent = 0, kGray, kRGB, kCMYK };
+
explicit CFX_Color(FX_COLORREF ref)
: CFX_Color(FXARGB_R(ref), FXARGB_G(ref), FXARGB_B(ref)) {}
- CFX_Color(int32_t type = COLORTYPE_TRANSPARENT,
+ CFX_Color(int32_t type = CFX_Color::kTransparent,
float color1 = 0.0f,
float color2 = 0.0f,
float color3 = 0.0f,
@@ -26,7 +31,7 @@ struct CFX_Color {
fColor4(color4) {}
CFX_Color(int32_t r, int32_t g, int32_t b)
- : nColorType(COLORTYPE_RGB),
+ : nColorType(CFX_Color::kRGB),
fColor1(r / 255.0f),
fColor2(g / 255.0f),
fColor3(b / 255.0f),
@@ -40,7 +45,7 @@ struct CFX_Color {
FX_COLORREF ToFXColor(int32_t nTransparency) const;
void Reset() {
- nColorType = COLORTYPE_TRANSPARENT;
+ nColorType = CFX_Color::kTransparent;
fColor1 = 0.0f;
fColor2 = 0.0f;
fColor3 = 0.0f;