Be more careful about enum CFWL_PartState.
Initial cleanup before worrying about whether we are ORing
things into this mask that aren't CFWL_PartStates.
-- Remove some non-const refs while at it.
Change-Id: I03536d07686760b434c1a6d3cde5b62b243df1e5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/83192
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fwl/cfwl_scrollbar.cpp b/xfa/fwl/cfwl_scrollbar.cpp
index e5b0bf9..b967911 100644
--- a/xfa/fwl/cfwl_scrollbar.cpp
+++ b/xfa/fwl/cfwl_scrollbar.cpp
@@ -327,15 +327,15 @@
m_cpTrackPoint = point;
m_fLastTrackPos = m_fTrackPos;
if (m_MinBtnRect.Contains(point))
- DoMouseDown(0, m_MinBtnRect, m_iMinButtonState, point);
+ DoMouseDown(0, m_MinBtnRect, &m_iMinButtonState, point);
else if (m_ThumbRect.Contains(point))
- DoMouseDown(1, m_ThumbRect, m_iThumbButtonState, point);
+ DoMouseDown(1, m_ThumbRect, &m_iThumbButtonState, point);
else if (m_MaxBtnRect.Contains(point))
- DoMouseDown(2, m_MaxBtnRect, m_iMaxButtonState, point);
+ DoMouseDown(2, m_MaxBtnRect, &m_iMaxButtonState, point);
else if (m_MinTrackRect.Contains(point))
- DoMouseDown(3, m_MinTrackRect, m_iMinTrackState, point);
+ DoMouseDown(3, m_MinTrackRect, &m_iMinTrackState, point);
else
- DoMouseDown(4, m_MaxTrackRect, m_iMaxTrackState, point);
+ DoMouseDown(4, m_MaxTrackRect, &m_iMaxTrackState, point);
if (!SendEvent()) {
m_pTimer = std::make_unique<CFX_Timer>(GetFWLApp()->GetTimerHandler(), this,
@@ -346,28 +346,28 @@
void CFWL_ScrollBar::OnLButtonUp(const CFX_PointF& point) {
m_pTimer.reset();
m_bMouseDown = false;
- DoMouseUp(0, m_MinBtnRect, m_iMinButtonState, point);
- DoMouseUp(1, m_ThumbRect, m_iThumbButtonState, point);
- DoMouseUp(2, m_MaxBtnRect, m_iMaxButtonState, point);
- DoMouseUp(3, m_MinTrackRect, m_iMinTrackState, point);
- DoMouseUp(4, m_MaxTrackRect, m_iMaxTrackState, point);
+ DoMouseUp(0, m_MinBtnRect, &m_iMinButtonState, point);
+ DoMouseUp(1, m_ThumbRect, &m_iThumbButtonState, point);
+ DoMouseUp(2, m_MaxBtnRect, &m_iMaxButtonState, point);
+ DoMouseUp(3, m_MinTrackRect, &m_iMinTrackState, point);
+ DoMouseUp(4, m_MaxTrackRect, &m_iMaxTrackState, point);
SetGrab(false);
}
void CFWL_ScrollBar::OnMouseMove(const CFX_PointF& point) {
- DoMouseMove(0, m_MinBtnRect, m_iMinButtonState, point);
- DoMouseMove(1, m_ThumbRect, m_iThumbButtonState, point);
- DoMouseMove(2, m_MaxBtnRect, m_iMaxButtonState, point);
- DoMouseMove(3, m_MinTrackRect, m_iMinTrackState, point);
- DoMouseMove(4, m_MaxTrackRect, m_iMaxTrackState, point);
+ DoMouseMove(0, m_MinBtnRect, &m_iMinButtonState, point);
+ DoMouseMove(1, m_ThumbRect, &m_iThumbButtonState, point);
+ DoMouseMove(2, m_MaxBtnRect, &m_iMaxButtonState, point);
+ DoMouseMove(3, m_MinTrackRect, &m_iMinTrackState, point);
+ DoMouseMove(4, m_MaxTrackRect, &m_iMaxTrackState, point);
}
void CFWL_ScrollBar::OnMouseLeave() {
- DoMouseLeave(0, m_MinBtnRect, m_iMinButtonState);
- DoMouseLeave(1, m_ThumbRect, m_iThumbButtonState);
- DoMouseLeave(2, m_MaxBtnRect, m_iMaxButtonState);
- DoMouseLeave(3, m_MinTrackRect, m_iMinTrackState);
- DoMouseLeave(4, m_MaxTrackRect, m_iMaxTrackState);
+ DoMouseLeave(0, m_MinBtnRect, &m_iMinButtonState);
+ DoMouseLeave(1, m_ThumbRect, &m_iThumbButtonState);
+ DoMouseLeave(2, m_MaxBtnRect, &m_iMaxButtonState);
+ DoMouseLeave(3, m_MinTrackRect, &m_iMinTrackState);
+ DoMouseLeave(4, m_MaxTrackRect, &m_iMaxTrackState);
}
void CFWL_ScrollBar::OnMouseWheel(const CFX_Vector& delta) {
@@ -378,42 +378,42 @@
void CFWL_ScrollBar::DoMouseDown(int32_t iItem,
const CFX_RectF& rtItem,
- int32_t& iState,
+ CFWL_PartState* pState,
const CFX_PointF& point) {
if (!rtItem.Contains(point))
return;
- if (iState == CFWL_PartState_Pressed)
+ if (*pState == CFWL_PartState_Pressed)
return;
- iState = CFWL_PartState_Pressed;
+ *pState = CFWL_PartState_Pressed;
RepaintRect(rtItem);
}
void CFWL_ScrollBar::DoMouseUp(int32_t iItem,
const CFX_RectF& rtItem,
- int32_t& iState,
+ CFWL_PartState* pState,
const CFX_PointF& point) {
- int32_t iNewState =
+ CFWL_PartState iNewState =
rtItem.Contains(point) ? CFWL_PartState_Hovered : CFWL_PartState_Normal;
- if (iState == iNewState)
+ if (*pState == iNewState)
return;
- iState = iNewState;
+ *pState = iNewState;
RepaintRect(rtItem);
OnScroll(CFWL_EventScroll::Code::EndScroll, m_fTrackPos);
}
void CFWL_ScrollBar::DoMouseMove(int32_t iItem,
const CFX_RectF& rtItem,
- int32_t& iState,
+ CFWL_PartState* pState,
const CFX_PointF& point) {
if (!m_bMouseDown) {
- int32_t iNewState =
+ CFWL_PartState iNewState =
rtItem.Contains(point) ? CFWL_PartState_Hovered : CFWL_PartState_Normal;
- if (iState == iNewState)
+ if (*pState == iNewState)
return;
- iState = iNewState;
+ *pState = iNewState;
RepaintRect(rtItem);
} else if ((2 == iItem) && (m_iThumbButtonState == CFWL_PartState_Pressed)) {
m_fTrackPos = GetTrackPointPos(point);
@@ -423,21 +423,21 @@
void CFWL_ScrollBar::DoMouseLeave(int32_t iItem,
const CFX_RectF& rtItem,
- int32_t& iState) {
- if (iState == CFWL_PartState_Normal)
+ CFWL_PartState* pState) {
+ if (*pState == CFWL_PartState_Normal)
return;
- iState = CFWL_PartState_Normal;
+ *pState = CFWL_PartState_Normal;
RepaintRect(rtItem);
}
void CFWL_ScrollBar::DoMouseHover(int32_t iItem,
const CFX_RectF& rtItem,
- int32_t& iState) {
- if (iState == CFWL_PartState_Hovered)
+ CFWL_PartState* pState) {
+ if (*pState == CFWL_PartState_Hovered)
return;
- iState = CFWL_PartState_Hovered;
+ *pState = CFWL_PartState_Hovered;
RepaintRect(rtItem);
}
diff --git a/xfa/fwl/cfwl_scrollbar.h b/xfa/fwl/cfwl_scrollbar.h
index 0923a02..dd8921d 100644
--- a/xfa/fwl/cfwl_scrollbar.h
+++ b/xfa/fwl/cfwl_scrollbar.h
@@ -13,6 +13,7 @@
#include "core/fxcrt/fx_system.h"
#include "third_party/base/check.h"
#include "xfa/fwl/cfwl_eventscroll.h"
+#include "xfa/fwl/cfwl_themepart.h"
#include "xfa/fwl/cfwl_widget.h"
#define FWL_STYLEEXT_SCB_Horz (0L << 0)
@@ -86,18 +87,22 @@
bool DoScroll(CFWL_EventScroll::Code dwCode, float fPos);
void DoMouseDown(int32_t iItem,
const CFX_RectF& rtItem,
- int32_t& iState,
+ CFWL_PartState* pState,
const CFX_PointF& point);
void DoMouseUp(int32_t iItem,
const CFX_RectF& rtItem,
- int32_t& iState,
+ CFWL_PartState* pState,
const CFX_PointF& point);
void DoMouseMove(int32_t iItem,
const CFX_RectF& rtItem,
- int32_t& iState,
+ CFWL_PartState* pState,
const CFX_PointF& point);
- void DoMouseLeave(int32_t iItem, const CFX_RectF& rtItem, int32_t& iState);
- void DoMouseHover(int32_t iItem, const CFX_RectF& rtItem, int32_t& iState);
+ void DoMouseLeave(int32_t iItem,
+ const CFX_RectF& rtItem,
+ CFWL_PartState* pState);
+ void DoMouseHover(int32_t iItem,
+ const CFX_RectF& rtItem,
+ CFWL_PartState* pState);
float m_fRangeMin = 0.0f;
float m_fRangeMax = -1.0f;
@@ -105,11 +110,11 @@
float m_fStepSize = 0.0f;
float m_fPos = 0.0f;
float m_fTrackPos = 0.0f;
- int32_t m_iMinButtonState = CFWL_PartState_Normal;
- int32_t m_iMaxButtonState = CFWL_PartState_Normal;
- int32_t m_iThumbButtonState = CFWL_PartState_Normal;
- int32_t m_iMinTrackState = CFWL_PartState_Normal;
- int32_t m_iMaxTrackState = CFWL_PartState_Normal;
+ CFWL_PartState m_iMinButtonState = CFWL_PartState_Normal;
+ CFWL_PartState m_iMaxButtonState = CFWL_PartState_Normal;
+ CFWL_PartState m_iThumbButtonState = CFWL_PartState_Normal;
+ CFWL_PartState m_iMinTrackState = CFWL_PartState_Normal;
+ CFWL_PartState m_iMaxTrackState = CFWL_PartState_Normal;
float m_fLastTrackPos = 0.0f;
CFX_PointF m_cpTrackPoint;
int32_t m_iMouseWheel = 0;
diff --git a/xfa/fwl/cfwl_themepart.h b/xfa/fwl/cfwl_themepart.h
index c162772..a3a1a34 100644
--- a/xfa/fwl/cfwl_themepart.h
+++ b/xfa/fwl/cfwl_themepart.h
@@ -7,11 +7,15 @@
#ifndef XFA_FWL_CFWL_THEMEPART_H_
#define XFA_FWL_CFWL_THEMEPART_H_
+#include <type_traits>
+
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/unowned_ptr.h"
-enum CFWL_PartState {
+class CFWL_Widget;
+
+enum CFWL_PartState : uint32_t {
CFWL_PartState_Normal = 0,
CFWL_PartState_Checked = 1 << 1,
@@ -28,8 +32,7 @@
CFWL_PartState_RSelected = 1 << 13,
CFWL_PartState_Selected = 1 << 14
};
-
-class CFWL_Widget;
+using CFWL_PartStateMask = std::underlying_type<CFWL_PartState>::type;
class CFWL_ThemePart {
public:
@@ -87,7 +90,7 @@
CFX_Matrix m_matrix;
CFX_RectF m_PartRect;
UnownedPtr<const CFX_RectF> m_pRtData;
- uint32_t m_dwStates = CFWL_PartState_Normal;
+ CFWL_PartStateMask m_dwStates = CFWL_PartState_Normal;
Part m_iPart = Part::kNone;
bool m_bMaximize = false;
bool m_bStaticBackground = false;