From 8e7f932410732a4f05d2e69e9ff66277f54d1bd7 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Mon, 16 Oct 2017 11:35:42 -0400 Subject: Convert CPVT_Color to CFX_Color This CL converts the use of CPVT_Color to CFX_Color and removes the CPVT_Color class. Change-Id: I86a2d06524cd8f0fbce2335f0185426cc41dbe84 Reviewed-on: https://pdfium-review.googlesource.com/16030 Reviewed-by: Ryan Harrison Commit-Queue: dsinclair --- core/fpdfdoc/cpdf_annotlist.cpp | 1 + core/fpdfdoc/cpdf_apsettings.cpp | 18 ++--- core/fpdfdoc/cpdf_defaultappearance.cpp | 18 ++--- core/fpdfdoc/cpdf_formcontrol.h | 5 -- core/fpdfdoc/cpvt_color.cpp | 51 ------------- core/fpdfdoc/cpvt_color.h | 38 ---------- core/fpdfdoc/cpvt_generateap.cpp | 96 ++++++++++++------------- core/fpdfdoc/cpvt_generateap.h | 10 +-- core/fxge/cfx_color.cpp | 122 ++++++++++++++++++++++---------- core/fxge/cfx_color.h | 11 ++- 10 files changed, 161 insertions(+), 209 deletions(-) delete mode 100644 core/fpdfdoc/cpvt_color.cpp delete mode 100644 core/fpdfdoc/cpvt_color.h (limited to 'core') 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 #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 #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 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 +#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; -- cgit v1.2.3