Make LineCap and LineJoin enum classes
-- validate public arguments against public constants.
Change-Id: Ibfc16a08f01815b6e1efe73f669d1714436926e5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/84410
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index c856d06..10ed004 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -440,10 +440,10 @@
if (lineWidth != 1.0f)
WriteFloat(*buf, lineWidth) << " w ";
CFX_GraphStateData::LineCap lineCap = pPageObj->m_GraphState.GetLineCap();
- if (lineCap != CFX_GraphStateData::LineCapButt)
+ if (lineCap != CFX_GraphStateData::LineCap::kButt)
*buf << static_cast<int>(lineCap) << " J ";
CFX_GraphStateData::LineJoin lineJoin = pPageObj->m_GraphState.GetLineJoin();
- if (lineJoin != CFX_GraphStateData::LineJoinMiter)
+ if (lineJoin != CFX_GraphStateData::LineJoin::kMiter)
*buf << static_cast<int>(lineJoin) << " j ";
const CPDF_ClipPath& clip_path = pPageObj->m_ClipPath;
@@ -504,8 +504,8 @@
void CPDF_PageContentGenerator::ProcessDefaultGraphics(
std::ostringstream* buf) {
*buf << "0 0 0 RG 0 0 0 rg 1 w "
- << static_cast<int>(CFX_GraphStateData::LineCapButt) << " J "
- << static_cast<int>(CFX_GraphStateData::LineJoinMiter) << " j\n";
+ << static_cast<int>(CFX_GraphStateData::LineCap::kButt) << " J "
+ << static_cast<int>(CFX_GraphStateData::LineJoin::kMiter) << " j\n";
ByteString name = GetOrCreateDefaultGraphics();
*buf << "/" << PDF_NameEncode(name) << " gs ";
}
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 0e564fa..8b17295 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -228,10 +228,10 @@
bool bTextMode) {
agg::line_cap_e cap;
switch (pGraphState->m_LineCap) {
- case CFX_GraphStateData::LineCapRound:
+ case CFX_GraphStateData::LineCap::kRound:
cap = agg::round_cap;
break;
- case CFX_GraphStateData::LineCapSquare:
+ case CFX_GraphStateData::LineCap::kSquare:
cap = agg::square_cap;
break;
default:
@@ -240,10 +240,10 @@
}
agg::line_join_e join;
switch (pGraphState->m_LineJoin) {
- case CFX_GraphStateData::LineJoinRound:
+ case CFX_GraphStateData::LineJoin::kRound:
join = agg::round_join;
break;
- case CFX_GraphStateData::LineJoinBevel:
+ case CFX_GraphStateData::LineJoin::kBevel:
join = agg::bevel_join;
break;
default:
diff --git a/core/fxge/cfx_graphstate.cpp b/core/fxge/cfx_graphstate.cpp
index 9631712..bce9ab6 100644
--- a/core/fxge/cfx_graphstate.cpp
+++ b/core/fxge/cfx_graphstate.cpp
@@ -61,7 +61,7 @@
CFX_GraphStateData::LineCap CFX_GraphState::GetLineCap() const {
return m_Ref.GetObject() ? m_Ref.GetObject()->m_LineCap
- : CFX_GraphStateData::LineCapButt;
+ : CFX_GraphStateData::LineCap::kButt;
}
void CFX_GraphState::SetLineCap(CFX_GraphStateData::LineCap cap) {
m_Ref.GetPrivateCopy()->m_LineCap = cap;
@@ -69,7 +69,7 @@
CFX_GraphStateData::LineJoin CFX_GraphState::GetLineJoin() const {
return m_Ref.GetObject() ? m_Ref.GetObject()->m_LineJoin
- : CFX_GraphStateData::LineJoinMiter;
+ : CFX_GraphStateData::LineJoin::kMiter;
}
void CFX_GraphState::SetLineJoin(CFX_GraphStateData::LineJoin join) {
diff --git a/core/fxge/cfx_graphstatedata.h b/core/fxge/cfx_graphstatedata.h
index 95778d0..d8f4bc6 100644
--- a/core/fxge/cfx_graphstatedata.h
+++ b/core/fxge/cfx_graphstatedata.h
@@ -15,17 +15,9 @@
class CFX_GraphStateData {
public:
- enum LineCap : uint8_t {
- LineCapButt = 0,
- LineCapRound = 1,
- LineCapSquare = 2
- };
+ enum class LineCap : uint8_t { kButt = 0, kRound = 1, kSquare = 2 };
- enum LineJoin : uint8_t {
- LineJoinMiter = 0,
- LineJoinRound = 1,
- LineJoinBevel = 2
- };
+ enum class LineJoin : uint8_t { kMiter = 0, kRound = 1, kBevel = 2 };
CFX_GraphStateData();
CFX_GraphStateData(const CFX_GraphStateData& src);
@@ -35,8 +27,8 @@
CFX_GraphStateData& operator=(const CFX_GraphStateData& that);
CFX_GraphStateData& operator=(CFX_GraphStateData&& that) noexcept;
- LineCap m_LineCap = LineCapButt;
- LineJoin m_LineJoin = LineJoinMiter;
+ LineCap m_LineCap = LineCap::kButt;
+ LineJoin m_LineJoin = LineJoin::kMiter;
float m_DashPhase = 0.0f;
float m_MiterLimit = 10.0f;
float m_LineWidth = 1.0f;
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index f2355a8..9aa05fd 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -1572,10 +1572,10 @@
const SkMatrix& matrix) {
SkPaint::Cap cap;
switch (pGraphState->m_LineCap) {
- case CFX_GraphStateData::LineCapRound:
+ case CFX_GraphStateData::LineCap::kRound:
cap = SkPaint::kRound_Cap;
break;
- case CFX_GraphStateData::LineCapSquare:
+ case CFX_GraphStateData::LineCap::kSquare:
cap = SkPaint::kSquare_Cap;
break;
default:
@@ -1584,10 +1584,10 @@
}
SkPaint::Join join;
switch (pGraphState->m_LineJoin) {
- case CFX_GraphStateData::LineJoinRound:
+ case CFX_GraphStateData::LineJoin::kRound:
join = SkPaint::kRound_Join;
break;
- case CFX_GraphStateData::LineJoinBevel:
+ case CFX_GraphStateData::LineJoin::kBevel:
join = SkPaint::kBevel_Join;
break;
default:
diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp
index 2aa8718..4c58d29 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -79,7 +79,7 @@
path2.AppendRect(0, 0, 2, 2);
if (state.m_change == State::Change::kYes) {
if (state.m_graphic == State::Graphic::kPath)
- graphState.m_LineCap = CFX_GraphStateData::LineCapRound;
+ graphState.m_LineCap = CFX_GraphStateData::LineCap::kRound;
else if (state.m_graphic == State::Graphic::kText)
fontSize = 2;
}
diff --git a/core/fxge/win32/cgdi_device_driver.cpp b/core/fxge/win32/cgdi_device_driver.cpp
index 0ae473e..c8a15b2 100644
--- a/core/fxge/win32/cgdi_device_driver.cpp
+++ b/core/fxge/win32/cgdi_device_driver.cpp
@@ -61,24 +61,24 @@
PenStyle |= PS_SOLID;
switch (pGraphState->m_LineCap) {
- case CFX_GraphStateData::LineCapButt:
+ case CFX_GraphStateData::LineCap::kButt:
PenStyle |= PS_ENDCAP_FLAT;
break;
- case CFX_GraphStateData::LineCapRound:
+ case CFX_GraphStateData::LineCap::kRound:
PenStyle |= PS_ENDCAP_ROUND;
break;
- case CFX_GraphStateData::LineCapSquare:
+ case CFX_GraphStateData::LineCap::kSquare:
PenStyle |= PS_ENDCAP_SQUARE;
break;
}
switch (pGraphState->m_LineJoin) {
- case CFX_GraphStateData::LineJoinMiter:
+ case CFX_GraphStateData::LineJoin::kMiter:
PenStyle |= PS_JOIN_MITER;
break;
- case CFX_GraphStateData::LineJoinRound:
+ case CFX_GraphStateData::LineJoin::kRound:
PenStyle |= PS_JOIN_ROUND;
break;
- case CFX_GraphStateData::LineJoinBevel:
+ case CFX_GraphStateData::LineJoin::kBevel:
PenStyle |= PS_JOIN_BEVEL;
break;
}
diff --git a/core/fxge/win32/cgdi_plus_ext.cpp b/core/fxge/win32/cgdi_plus_ext.cpp
index 51db123..109da57 100644
--- a/core/fxge/win32/cgdi_plus_ext.cpp
+++ b/core/fxge/win32/cgdi_plus_ext.cpp
@@ -361,15 +361,15 @@
Gdiplus::DashCap dashCap = Gdiplus::DashCapFlat;
bool bDashExtend = false;
switch (pGraphState->m_LineCap) {
- case CFX_GraphStateData::LineCapButt:
+ case CFX_GraphStateData::LineCap::kButt:
lineCap = Gdiplus::LineCapFlat;
break;
- case CFX_GraphStateData::LineCapRound:
+ case CFX_GraphStateData::LineCap::kRound:
lineCap = Gdiplus::LineCapRound;
dashCap = Gdiplus::DashCapRound;
bDashExtend = true;
break;
- case CFX_GraphStateData::LineCapSquare:
+ case CFX_GraphStateData::LineCap::kSquare:
lineCap = Gdiplus::LineCapSquare;
bDashExtend = true;
break;
@@ -377,13 +377,13 @@
CallFunc(GdipSetPenLineCap197819)(pPen, lineCap, lineCap, dashCap);
Gdiplus::LineJoin lineJoin = Gdiplus::LineJoinMiterClipped;
switch (pGraphState->m_LineJoin) {
- case CFX_GraphStateData::LineJoinMiter:
+ case CFX_GraphStateData::LineJoin::kMiter:
lineJoin = Gdiplus::LineJoinMiterClipped;
break;
- case CFX_GraphStateData::LineJoinRound:
+ case CFX_GraphStateData::LineJoin::kRound:
lineJoin = Gdiplus::LineJoinRound;
break;
- case CFX_GraphStateData::LineJoinBevel:
+ case CFX_GraphStateData::LineJoin::kBevel:
lineJoin = Gdiplus::LineJoinBevel;
break;
}
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp
index 49671c4..32bddf1 100644
--- a/fpdfsdk/fpdf_editpage.cpp
+++ b/fpdfsdk/fpdf_editpage.cpp
@@ -849,7 +849,7 @@
FPDF_EXPORT int FPDF_CALLCONV
FPDFPageObj_GetLineJoin(FPDF_PAGEOBJECT page_object) {
auto* pPageObj = CPDFPageObjectFromFPDFPageObject(page_object);
- return pPageObj ? pPageObj->m_GraphState.GetLineJoin() : -1;
+ return pPageObj ? static_cast<int>(pPageObj->m_GraphState.GetLineJoin()) : -1;
}
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
@@ -858,11 +858,7 @@
if (!pPageObj)
return false;
- constexpr int kLineJoinMiter =
- static_cast<int>(CFX_GraphStateData::LineJoin::LineJoinMiter);
- constexpr int kLineJoinBevel =
- static_cast<int>(CFX_GraphStateData::LineJoin::LineJoinBevel);
- if (line_join < kLineJoinMiter || line_join > kLineJoinBevel)
+ if (line_join < FPDF_LINEJOIN_MITER || line_join > FPDF_LINEJOIN_BEVEL)
return false;
pPageObj->m_GraphState.SetLineJoin(
@@ -874,7 +870,7 @@
FPDF_EXPORT int FPDF_CALLCONV
FPDFPageObj_GetLineCap(FPDF_PAGEOBJECT page_object) {
auto* pPageObj = CPDFPageObjectFromFPDFPageObject(page_object);
- return pPageObj ? pPageObj->m_GraphState.GetLineCap() : -1;
+ return pPageObj ? static_cast<int>(pPageObj->m_GraphState.GetLineCap()) : -1;
}
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
@@ -883,13 +879,10 @@
if (!pPageObj)
return false;
- constexpr int kLineCapButt =
- static_cast<int>(CFX_GraphStateData::LineCap::LineCapButt);
- constexpr int kLineCapSquare =
- static_cast<int>(CFX_GraphStateData::LineCap::LineCapSquare);
- if (line_cap < kLineCapButt || line_cap > kLineCapSquare)
+ if (line_cap < FPDF_LINECAP_BUTT ||
+ line_cap > FPDF_LINECAP_PROJECTING_SQUARE) {
return false;
-
+ }
pPageObj->m_GraphState.SetLineCap(
static_cast<CFX_GraphStateData::LineCap>(line_cap));
pPageObj->SetDirty(true);
diff --git a/fpdfsdk/fpdf_editpath.cpp b/fpdfsdk/fpdf_editpath.cpp
index d4e12c4..1c5d5c1 100644
--- a/fpdfsdk/fpdf_editpath.cpp
+++ b/fpdfsdk/fpdf_editpath.cpp
@@ -15,20 +15,25 @@
#include "third_party/base/span.h"
// These checks are here because core/ and public/ cannot depend on each other.
-static_assert(CFX_GraphStateData::LineCapButt == FPDF_LINECAP_BUTT,
- "CFX_GraphStateData::LineCapButt value mismatch");
-static_assert(CFX_GraphStateData::LineCapRound == FPDF_LINECAP_ROUND,
- "CFX_GraphStateData::LineCapRound value mismatch");
-static_assert(CFX_GraphStateData::LineCapSquare ==
+static_assert(static_cast<int>(CFX_GraphStateData::LineCap::kButt) ==
+ FPDF_LINECAP_BUTT,
+ "CFX_GraphStateData::LineCap::kButt value mismatch");
+static_assert(static_cast<int>(CFX_GraphStateData::LineCap::kRound) ==
+ FPDF_LINECAP_ROUND,
+ "CFX_GraphStateData::LineCap::kRound value mismatch");
+static_assert(static_cast<int>(CFX_GraphStateData::LineCap::kSquare) ==
FPDF_LINECAP_PROJECTING_SQUARE,
- "CFX_GraphStateData::LineCapSquare value mismatch");
+ "CFX_GraphStateData::LineCap::kSquare value mismatch");
-static_assert(CFX_GraphStateData::LineJoinMiter == FPDF_LINEJOIN_MITER,
- "CFX_GraphStateData::LineJoinMiter value mismatch");
-static_assert(CFX_GraphStateData::LineJoinRound == FPDF_LINEJOIN_ROUND,
- "CFX_GraphStateData::LineJoinRound value mismatch");
-static_assert(CFX_GraphStateData::LineJoinBevel == FPDF_LINEJOIN_BEVEL,
- "CFX_GraphStateData::LineJoinBevel value mismatch");
+static_assert(static_cast<int>(CFX_GraphStateData::LineJoin::kMiter) ==
+ FPDF_LINEJOIN_MITER,
+ "CFX_GraphStateData::LineJoin::kMiter value mismatch");
+static_assert(static_cast<int>(CFX_GraphStateData::LineJoin::kRound) ==
+ FPDF_LINEJOIN_ROUND,
+ "CFX_GraphStateData::LineJoin::kRound value mismatch");
+static_assert(static_cast<int>(CFX_GraphStateData::LineJoin::kBevel) ==
+ FPDF_LINEJOIN_BEVEL,
+ "CFX_GraphStateData::LineJoin::kBevel value mismatch");
static_assert(static_cast<int>(CFX_Path::Point::Type::kLine) ==
FPDF_SEGMENT_LINETO,
diff --git a/xfa/fxfa/cxfa_ffline.cpp b/xfa/fxfa/cxfa_ffline.cpp
index 37e3bae..8d8a06e 100644
--- a/xfa/fxfa/cxfa_ffline.cpp
+++ b/xfa/fxfa/cxfa_ffline.cpp
@@ -19,13 +19,12 @@
CFX_GraphStateData::LineCap LineCapToFXGE(XFA_AttributeValue iLineCap) {
switch (iLineCap) {
case XFA_AttributeValue::Round:
- return CFX_GraphStateData::LineCapRound;
+ return CFX_GraphStateData::LineCap::kRound;
case XFA_AttributeValue::Butt:
- return CFX_GraphStateData::LineCapButt;
+ return CFX_GraphStateData::LineCap::kButt;
default:
- break;
+ return CFX_GraphStateData::LineCap::kSquare;
}
- return CFX_GraphStateData::LineCapSquare;
}
} // namespace
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 0a00eec..7fef9ea 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -1280,8 +1280,8 @@
}
CFX_GraphStateData graphState;
- graphState.m_LineCap = CFX_GraphStateData::LineCapButt;
- graphState.m_LineJoin = CFX_GraphStateData::LineJoinMiter;
+ graphState.m_LineCap = CFX_GraphStateData::LineCap::kButt;
+ graphState.m_LineJoin = CFX_GraphStateData::LineJoin::kMiter;
graphState.m_LineWidth = 1;
graphState.m_MiterLimit = 10;
graphState.m_DashPhase = 0;
diff --git a/xfa/fxfa/parser/cxfa_stroke.cpp b/xfa/fxfa/parser/cxfa_stroke.cpp
index 175bc2d..605390e 100644
--- a/xfa/fxfa/parser/cxfa_stroke.cpp
+++ b/xfa/fxfa/parser/cxfa_stroke.cpp
@@ -186,7 +186,7 @@
pGS->SetLineWidth(fThickness);
pGS->EnableActOnDash();
- pGS->SetLineCap(CFX_GraphStateData::LineCapButt);
+ pGS->SetLineCap(CFX_GraphStateData::LineCap::kButt);
XFA_StrokeTypeSetLineDash(pGS, GetStrokeType(), XFA_AttributeValue::Butt);
pGS->SetStrokeColor(CFGAS_GEColor(GetColor()));
pGS->StrokePath(pPath, matrix);