summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--widget/windows/nsNativeThemeWin.cpp41
1 files changed, 33 insertions, 8 deletions
diff --git a/widget/windows/nsNativeThemeWin.cpp b/widget/windows/nsNativeThemeWin.cpp
index e84a2b80ce..0947019caa 100644
--- a/widget/windows/nsNativeThemeWin.cpp
+++ b/widget/windows/nsNativeThemeWin.cpp
@@ -1388,6 +1388,12 @@ GetThemeDpiScaleFactor(nsIFrame* aFrame)
return 1.0;
}
+static bool
+IsScrollbarWidthThin(nsIFrame* aFrame)
+{
+ return aFrame->StyleUserInterface()->mScrollbarWidth == StyleScrollbarWidth::Thin;
+}
+
NS_IMETHODIMP
nsNativeThemeWin::DrawWidgetBackground(nsRenderingContext* aContext,
nsIFrame* aFrame,
@@ -2788,14 +2794,21 @@ nsNativeThemeWin::ClassicGetMinimumWidgetSize(nsIFrame* aFrame,
break;
case NS_THEME_SCROLLBARBUTTON_UP:
case NS_THEME_SCROLLBARBUTTON_DOWN:
- (*aResult).width = ::GetSystemMetrics(SM_CXVSCROLL);
- (*aResult).height = ::GetSystemMetrics(SM_CYVSCROLL);
+ // Get scrollbar button metrics from the system, except in the case of
+ // thin scrollbars, where we leave them at 0 (collapsing them to invisible)
+ if (!IsScrollbarWidthThin(aFrame)) {
+ (*aResult).width = ::GetSystemMetrics(SM_CXVSCROLL);
+ (*aResult).height = ::GetSystemMetrics(SM_CYVSCROLL);
+ }
*aIsOverridable = false;
break;
case NS_THEME_SCROLLBARBUTTON_LEFT:
case NS_THEME_SCROLLBARBUTTON_RIGHT:
- (*aResult).width = ::GetSystemMetrics(SM_CXHSCROLL);
- (*aResult).height = ::GetSystemMetrics(SM_CYHSCROLL);
+ // See comment above.
+ if (!IsScrollbarWidthThin(aFrame)) {
+ (*aResult).width = ::GetSystemMetrics(SM_CXHSCROLL);
+ (*aResult).height = ::GetSystemMetrics(SM_CYHSCROLL);
+ }
*aIsOverridable = false;
break;
case NS_THEME_SCROLLBAR_VERTICAL:
@@ -2871,8 +2884,14 @@ nsNativeThemeWin::ClassicGetMinimumWidgetSize(nsIFrame* aFrame,
(*aResult).height = ::GetSystemMetrics(SM_CYVTHUMB);
// Without theming, divide the thumb size by two in order to look more
// native
- if (!GetTheme(aWidgetType))
- (*aResult).height >>= 1;
+ if (!GetTheme(aWidgetType)) {
+ (*aResult).height /= 2;
+ }
+ // If scrollbar-width is thin, divide the thickness by three to make
+ // it more compact.
+ if (IsScrollbarWidthThin(aFrame)) {
+ (*aResult).width /= 3;
+ }
*aIsOverridable = false;
break;
case NS_THEME_SCROLLBARTHUMB_HORIZONTAL:
@@ -2880,8 +2899,14 @@ nsNativeThemeWin::ClassicGetMinimumWidgetSize(nsIFrame* aFrame,
(*aResult).height = ::GetSystemMetrics(SM_CYHSCROLL);
// Without theming, divide the thumb size by two in order to look more
// native
- if (!GetTheme(aWidgetType))
- (*aResult).width >>= 1;
+ if (!GetTheme(aWidgetType)) {
+ (*aResult).width /= 2;
+ }
+ // If scrollbar-width is thin, divide the thickness by three to make
+ // it more compact.
+ if (IsScrollbarWidthThin(aFrame)) {
+ (*aResult).height /= 3;
+ }
*aIsOverridable = false;
break;
case NS_THEME_SCROLLBAR_HORIZONTAL: