Consolidate CFLW_PartState to FWLTHEME_STATE conversions
This is currently being done in three different ways in three
different places in xfa/fwl. All of them appear wrong because
either:
-- PartState is a bitmap so switching on it is wrong.
-- &ing it with 0x03 doesn't select the bits we want to test.
-- &ing it against a different type is not meaningful.
-- Not all of the possibilities are covered sometimes.
Add a method GetThemeStates() that tests each bit in order of
some natural "priority".
-- Inline DrawDropDownButton() methods into only callers.
Change-Id: Iaef63405ed061212aff371dca0fe76001aec6a10
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/83591
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fwl/cfwl_themepart.cpp b/xfa/fwl/cfwl_themepart.cpp
index f7d5974..69bdb37 100644
--- a/xfa/fwl/cfwl_themepart.cpp
+++ b/xfa/fwl/cfwl_themepart.cpp
@@ -9,3 +9,13 @@
CFWL_ThemePart::CFWL_ThemePart(CFWL_Widget* pWidget) : m_pWidget(pWidget) {}
CFWL_ThemePart::~CFWL_ThemePart() = default;
+
+FWLTHEME_STATE CFWL_ThemePart::GetThemeState() const {
+ if (m_dwStates & CFWL_PartState_Disabled)
+ return FWLTHEME_STATE::kDisable;
+ if (m_dwStates & CFWL_PartState_Pressed)
+ return FWLTHEME_STATE::kPressed;
+ if (m_dwStates & CFWL_PartState_Hovered)
+ return FWLTHEME_STATE::kHover;
+ return FWLTHEME_STATE::kNormal;
+}
diff --git a/xfa/fwl/cfwl_themepart.h b/xfa/fwl/cfwl_themepart.h
index 77b9bc5..fc1d1a6 100644
--- a/xfa/fwl/cfwl_themepart.h
+++ b/xfa/fwl/cfwl_themepart.h
@@ -13,6 +13,7 @@
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/unowned_ptr.h"
+#include "xfa/fwl/theme/cfwl_utils.h"
class CFWL_Widget;
@@ -87,6 +88,7 @@
~CFWL_ThemePart();
CFWL_Widget* GetWidget() const { return m_pWidget.Get(); }
+ FWLTHEME_STATE GetThemeState() const;
CFX_Matrix m_matrix;
CFX_RectF m_PartRect;
diff --git a/xfa/fwl/theme/cfwl_comboboxtp.cpp b/xfa/fwl/theme/cfwl_comboboxtp.cpp
index 0d5695f..969ccc3 100644
--- a/xfa/fwl/theme/cfwl_comboboxtp.cpp
+++ b/xfa/fwl/theme/cfwl_comboboxtp.cpp
@@ -46,35 +46,12 @@
break;
}
case CFWL_ThemePart::Part::kDropDownButton: {
- DrawDropDownButton(pParams, pParams.m_dwStates, pParams.m_matrix);
+ DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
+ FWLTHEME_DIRECTION::kDown, pParams.GetThemeState(),
+ pParams.m_matrix);
break;
}
default:
break;
}
}
-
-void CFWL_ComboBoxTP::DrawDropDownButton(const CFWL_ThemeBackground& pParams,
- uint32_t dwStates,
- const CFX_Matrix& matrix) {
- FWLTHEME_STATE eState;
- switch (dwStates) {
- case CFWL_PartState_Normal:
- eState = FWLTHEME_STATE::kNormal;
- break;
- case CFWL_PartState_Hovered:
- eState = FWLTHEME_STATE::kHover;
- break;
- case CFWL_PartState_Pressed:
- eState = FWLTHEME_STATE::kPressed;
- break;
- case CFWL_PartState_Disabled:
- eState = FWLTHEME_STATE::kDisable;
- break;
- default:
- eState = FWLTHEME_STATE::kNormal;
- break;
- }
- DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
- FWLTHEME_DIRECTION::kDown, eState, pParams.m_matrix);
-}
diff --git a/xfa/fwl/theme/cfwl_comboboxtp.h b/xfa/fwl/theme/cfwl_comboboxtp.h
index 501f67a..f218064 100644
--- a/xfa/fwl/theme/cfwl_comboboxtp.h
+++ b/xfa/fwl/theme/cfwl_comboboxtp.h
@@ -20,10 +20,6 @@
private:
CFWL_ComboBoxTP();
-
- void DrawDropDownButton(const CFWL_ThemeBackground& pParams,
- uint32_t dwStates,
- const CFX_Matrix& matrix);
};
#endif // XFA_FWL_THEME_CFWL_COMBOBOXTP_H_
diff --git a/xfa/fwl/theme/cfwl_datetimepickertp.cpp b/xfa/fwl/theme/cfwl_datetimepickertp.cpp
index c332b1b..24df85b 100644
--- a/xfa/fwl/theme/cfwl_datetimepickertp.cpp
+++ b/xfa/fwl/theme/cfwl_datetimepickertp.cpp
@@ -20,37 +20,11 @@
DrawBorder(pParams.GetGraphics(), pParams.m_PartRect, pParams.m_matrix);
break;
case CFWL_ThemePart::Part::kDropDownButton:
- DrawDropDownButton(pParams, pParams.m_matrix);
+ DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
+ FWLTHEME_DIRECTION::kDown, pParams.GetThemeState(),
+ pParams.m_matrix);
break;
default:
break;
}
}
-
-void CFWL_DateTimePickerTP::DrawDropDownButton(
- const CFWL_ThemeBackground& pParams,
- const CFX_Matrix& matrix) {
- uint32_t dwStates = pParams.m_dwStates;
- dwStates &= 0x03;
- FWLTHEME_STATE eState = FWLTHEME_STATE::kNormal;
-
- // TODO(tsepez): enum mismatch, &ing with 1 makes no sense here.
- switch (static_cast<uint32_t>(eState) & dwStates) {
- case CFWL_PartState_Normal:
- eState = FWLTHEME_STATE::kNormal;
- break;
- case CFWL_PartState_Hovered:
- eState = FWLTHEME_STATE::kHover;
- break;
- case CFWL_PartState_Pressed:
- eState = FWLTHEME_STATE::kPressed;
- break;
- case CFWL_PartState_Disabled:
- eState = FWLTHEME_STATE::kDisable;
- break;
- default:
- break;
- }
- DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
- FWLTHEME_DIRECTION::kDown, eState, matrix);
-}
diff --git a/xfa/fwl/theme/cfwl_datetimepickertp.h b/xfa/fwl/theme/cfwl_datetimepickertp.h
index 951f784..c02c422 100644
--- a/xfa/fwl/theme/cfwl_datetimepickertp.h
+++ b/xfa/fwl/theme/cfwl_datetimepickertp.h
@@ -20,9 +20,6 @@
private:
CFWL_DateTimePickerTP();
-
- void DrawDropDownButton(const CFWL_ThemeBackground& pParams,
- const CFX_Matrix& matrix);
};
#endif // XFA_FWL_THEME_CFWL_DATETIMEPICKERTP_H_
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.cpp b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
index 125119e..2f28c67 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.cpp
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.cpp
@@ -47,15 +47,15 @@
break;
}
case CFWL_ThemePart::Part::kLBtn: {
- FWLTHEME_STATE eState = GetState(pParams.m_dwStates);
DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
- FWLTHEME_DIRECTION::kLeft, eState, pParams.m_matrix);
+ FWLTHEME_DIRECTION::kLeft, pParams.GetThemeState(),
+ pParams.m_matrix);
break;
}
case CFWL_ThemePart::Part::kRBtn: {
- FWLTHEME_STATE eState = GetState(pParams.m_dwStates);
DrawArrowBtn(pParams.GetGraphics(), pParams.m_PartRect,
- FWLTHEME_DIRECTION::kRight, eState, pParams.m_matrix);
+ FWLTHEME_DIRECTION::kRight, pParams.GetThemeState(),
+ pParams.m_matrix);
break;
}
case CFWL_ThemePart::Part::kHSeparator: {
@@ -265,11 +265,3 @@
pParams.GetGraphics()->StrokePath(path, matrix);
pParams.GetGraphics()->RestoreGraphState();
}
-
-FWLTHEME_STATE CFWL_MonthCalendarTP::GetState(uint32_t dwFWLStates) {
- if (dwFWLStates & CFWL_PartState_Hovered)
- return FWLTHEME_STATE::kHover;
- if (dwFWLStates & CFWL_PartState_Pressed)
- return FWLTHEME_STATE::kPressed;
- return FWLTHEME_STATE::kNormal;
-}
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.h b/xfa/fwl/theme/cfwl_monthcalendartp.h
index 3cf68ba..15b3f6b 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.h
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.h
@@ -40,7 +40,6 @@
const CFX_Matrix& matrix);
void DrawWeekNumSep(const CFWL_ThemeBackground& pParams,
const CFX_Matrix& matrix);
- FWLTHEME_STATE GetState(uint32_t dwFWLStates);
};
#endif // XFA_FWL_THEME_CFWL_MONTHCALENDARTP_H_
diff --git a/xfa/fwl/theme/cfwl_scrollbartp.cpp b/xfa/fwl/theme/cfwl_scrollbartp.cpp
index 7e4cfcd..562d1a0 100644
--- a/xfa/fwl/theme/cfwl_scrollbartp.cpp
+++ b/xfa/fwl/theme/cfwl_scrollbartp.cpp
@@ -22,43 +22,35 @@
void CFWL_ScrollBarTP::DrawBackground(const CFWL_ThemeBackground& pParams) {
CFWL_Widget* pWidget = pParams.GetWidget();
- FWLTHEME_STATE eState = FWLTHEME_STATE::kNormal;
- if (pParams.m_dwStates & CFWL_PartState_Hovered)
- eState = FWLTHEME_STATE::kHover;
- else if (pParams.m_dwStates & CFWL_PartState_Pressed)
- eState = FWLTHEME_STATE::kPressed;
- else if (pParams.m_dwStates & CFWL_PartState_Disabled)
- eState = FWLTHEME_STATE::kDisable;
-
CFGAS_GEGraphics* pGraphics = pParams.GetGraphics();
bool bVert = !!pWidget->GetStyleExts();
switch (pParams.m_iPart) {
case CFWL_ThemePart::Part::kForeArrow: {
DrawMaxMinBtn(pGraphics, pParams.m_PartRect,
bVert ? FWLTHEME_DIRECTION::kUp : FWLTHEME_DIRECTION::kLeft,
- eState, pParams.m_matrix);
+ pParams.GetThemeState(), pParams.m_matrix);
break;
}
case CFWL_ThemePart::Part::kBackArrow: {
DrawMaxMinBtn(
pGraphics, pParams.m_PartRect,
bVert ? FWLTHEME_DIRECTION::kDown : FWLTHEME_DIRECTION::kRight,
- eState, pParams.m_matrix);
+ pParams.GetThemeState(), pParams.m_matrix);
break;
}
case CFWL_ThemePart::Part::kThumb: {
- DrawThumbBtn(pGraphics, pParams.m_PartRect, bVert, eState,
- pParams.m_matrix);
+ DrawThumbBtn(pGraphics, pParams.m_PartRect, bVert,
+ pParams.GetThemeState(), pParams.m_matrix);
break;
}
case CFWL_ThemePart::Part::kLowerTrack: {
- DrawTrack(pGraphics, pParams.m_PartRect, bVert, eState, true,
- pParams.m_matrix);
+ DrawTrack(pGraphics, pParams.m_PartRect, bVert, pParams.GetThemeState(),
+ true, pParams.m_matrix);
break;
}
case CFWL_ThemePart::Part::kUpperTrack: {
- DrawTrack(pGraphics, pParams.m_PartRect, bVert, eState, false,
- pParams.m_matrix);
+ DrawTrack(pGraphics, pParams.m_PartRect, bVert, pParams.GetThemeState(),
+ false, pParams.m_matrix);
break;
}
default: