mirror of
https://github.com/ManchildProductions/UXP-Fixed.git
synced 2026-05-26 19:27:22 +00:00
Issue #1705 - Part 7: Implement scrollbar-width:thin on Windows.
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user