diff options
-rw-r--r-- | widget/windows/nsNativeThemeWin.cpp | 41 |
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: |