Bug 1463917 part 2 - Have windows widget render scrollcorner. r?jimm
MozReview-Commit-ID: K4Cu1mL6xvH
--- a/widget/tests/test_scrollbar_colors.html
+++ b/widget/tests/test_scrollbar_colors.html
@@ -38,17 +38,17 @@ function countPixels(canvas) {
}
const WIN_REFERENCES = [
// Yellow background
["255,255,0", 6889],
// Blue scrollbar face
["0,0,255", 540],
// Cyan scrollbar track
- ["0,255,255", 2198],
+ ["0,255,255", 2487],
];
SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPrefEnv({
"set": [["layout.css.scrollbar-colors.enabled", true]],
}, function() {
document.querySelector('#style').textContent = `
.outer {
--- a/widget/windows/nsNativeThemeWin.cpp
+++ b/widget/windows/nsNativeThemeWin.cpp
@@ -758,16 +758,17 @@ mozilla::Maybe<nsUXThemeClass> nsNativeT
case NS_THEME_SCROLLBAR_VERTICAL:
case NS_THEME_SCROLLBAR_HORIZONTAL:
case NS_THEME_SCROLLBARBUTTON_UP:
case NS_THEME_SCROLLBARBUTTON_DOWN:
case NS_THEME_SCROLLBARBUTTON_LEFT:
case NS_THEME_SCROLLBARBUTTON_RIGHT:
case NS_THEME_SCROLLBARTHUMB_VERTICAL:
case NS_THEME_SCROLLBARTHUMB_HORIZONTAL:
+ case NS_THEME_SCROLLCORNER:
return Some(eUXScrollbar);
case NS_THEME_RANGE:
case NS_THEME_RANGE_THUMB:
case NS_THEME_SCALE_HORIZONTAL:
case NS_THEME_SCALE_VERTICAL:
case NS_THEME_SCALETHUMB_HORIZONTAL:
case NS_THEME_SCALETHUMB_VERTICAL:
return Some(eUXTrackbar);
@@ -1164,17 +1165,18 @@ nsNativeThemeWin::GetThemePartAndState(n
return NS_OK;
}
case NS_THEME_TOOLBOX:
case NS_THEME_WIN_MEDIA_TOOLBOX:
case NS_THEME_WIN_COMMUNICATIONS_TOOLBOX:
case NS_THEME_WIN_BROWSERTABBAR_TOOLBOX:
case NS_THEME_STATUSBAR:
case NS_THEME_SCROLLBAR:
- case NS_THEME_SCROLLBAR_SMALL: {
+ case NS_THEME_SCROLLBAR_SMALL:
+ case NS_THEME_SCROLLCORNER: {
aState = 0;
aPart = RP_BACKGROUND;
return NS_OK;
}
case NS_THEME_TOOLBAR: {
// Use -1 to indicate we don't wish to have the theme background drawn
// for this item. We will pass any nessessary information via aState,
// and will render the item using separate code.
@@ -1533,16 +1535,17 @@ IsWidgetScrollbarPart(uint8_t aWidgetTyp
case NS_THEME_SCROLLBAR_VERTICAL:
case NS_THEME_SCROLLBAR_HORIZONTAL:
case NS_THEME_SCROLLBARBUTTON_UP:
case NS_THEME_SCROLLBARBUTTON_DOWN:
case NS_THEME_SCROLLBARBUTTON_LEFT:
case NS_THEME_SCROLLBARBUTTON_RIGHT:
case NS_THEME_SCROLLBARTHUMB_VERTICAL:
case NS_THEME_SCROLLBARTHUMB_HORIZONTAL:
+ case NS_THEME_SCROLLCORNER:
return true;
default:
return false;
}
}
NS_IMETHODIMP
nsNativeThemeWin::DrawWidgetBackground(gfxContext* aContext,
@@ -2051,16 +2054,17 @@ nsNativeThemeWin::GetWidgetBorder(nsDevi
aWidgetType == NS_THEME_TOOLBOX ||
aWidgetType == NS_THEME_WIN_MEDIA_TOOLBOX ||
aWidgetType == NS_THEME_WIN_COMMUNICATIONS_TOOLBOX ||
aWidgetType == NS_THEME_WIN_BROWSERTABBAR_TOOLBOX ||
aWidgetType == NS_THEME_STATUSBAR ||
aWidgetType == NS_THEME_RESIZER || aWidgetType == NS_THEME_TABPANEL ||
aWidgetType == NS_THEME_SCROLLBAR_HORIZONTAL ||
aWidgetType == NS_THEME_SCROLLBAR_VERTICAL ||
+ aWidgetType == NS_THEME_SCROLLCORNER ||
aWidgetType == NS_THEME_MENUITEM || aWidgetType == NS_THEME_CHECKMENUITEM ||
aWidgetType == NS_THEME_RADIOMENUITEM || aWidgetType == NS_THEME_MENUPOPUP ||
aWidgetType == NS_THEME_MENUIMAGE || aWidgetType == NS_THEME_MENUITEMTEXT ||
aWidgetType == NS_THEME_SEPARATOR ||
aWidgetType == NS_THEME_WINDOW_TITLEBAR ||
aWidgetType == NS_THEME_WINDOW_TITLEBAR_MAXIMIZED ||
aWidgetType == NS_THEME_WIN_GLASS || aWidgetType == NS_THEME_WIN_BORDERLESS_GLASS)
return result; // Don't worry about it.
@@ -2419,16 +2423,17 @@ nsNativeThemeWin::GetMinimumWidgetSize(n
aResult->width = 20;
aResult->height = 12;
}
ScaleForFrameDPI(aResult, aFrame);
return rv;
}
case NS_THEME_SCROLLBAR:
+ case NS_THEME_SCROLLCORNER:
{
if (nsLookAndFeel::GetInt(
nsLookAndFeel::eIntID_UseOverlayScrollbars) != 0) {
aResult->SizeTo(::GetSystemMetrics(SM_CXHSCROLL),
::GetSystemMetrics(SM_CYVSCROLL));
ScaleForFrameDPI(aResult, aFrame);
return rv;
}
@@ -2701,16 +2706,17 @@ nsNativeThemeWin::ThemeGeometryTypeForWi
}
nsITheme::Transparency
nsNativeThemeWin::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
{
switch (aWidgetType) {
case NS_THEME_SCROLLBAR_SMALL:
case NS_THEME_SCROLLBAR:
+ case NS_THEME_SCROLLCORNER:
case NS_THEME_STATUSBAR:
// Knowing that scrollbars and statusbars are opaque improves
// performance, because we create layers for them. This better be
// true across all Windows themes! If it's not true, we should
// paint an opaque background for them to make it true!
return eOpaque;
case NS_THEME_WIN_GLASS:
case NS_THEME_WIN_BORDERLESS_GLASS:
@@ -2783,16 +2789,17 @@ nsNativeThemeWin::ClassicThemeSupportsWi
case NS_THEME_SCROLLBARBUTTON_DOWN:
case NS_THEME_SCROLLBARBUTTON_LEFT:
case NS_THEME_SCROLLBARBUTTON_RIGHT:
case NS_THEME_SCROLLBARTHUMB_VERTICAL:
case NS_THEME_SCROLLBARTHUMB_HORIZONTAL:
case NS_THEME_SCROLLBAR_VERTICAL:
case NS_THEME_SCROLLBAR_HORIZONTAL:
case NS_THEME_SCROLLBAR_NON_DISAPPEARING:
+ case NS_THEME_SCROLLCORNER:
case NS_THEME_SCALE_HORIZONTAL:
case NS_THEME_SCALE_VERTICAL:
case NS_THEME_SCALETHUMB_HORIZONTAL:
case NS_THEME_SCALETHUMB_VERTICAL:
case NS_THEME_MENULIST_BUTTON:
case NS_THEME_INNER_SPIN_BUTTON:
case NS_THEME_SPINNER_UPBUTTON:
case NS_THEME_SPINNER_DOWNBUTTON:
@@ -3256,16 +3263,17 @@ nsresult nsNativeThemeWin::ClassicGetThe
case NS_THEME_MENULIST:
case NS_THEME_MENULIST_TEXTFIELD:
case NS_THEME_RANGE:
case NS_THEME_RANGE_THUMB:
case NS_THEME_SCROLLBARTHUMB_VERTICAL:
case NS_THEME_SCROLLBARTHUMB_HORIZONTAL:
case NS_THEME_SCROLLBAR_VERTICAL:
case NS_THEME_SCROLLBAR_HORIZONTAL:
+ case NS_THEME_SCROLLCORNER:
case NS_THEME_SCALE_HORIZONTAL:
case NS_THEME_SCALE_VERTICAL:
case NS_THEME_SCALETHUMB_HORIZONTAL:
case NS_THEME_SCALETHUMB_VERTICAL:
case NS_THEME_STATUSBAR:
case NS_THEME_STATUSBARPANEL:
case NS_THEME_RESIZERPANEL:
case NS_THEME_PROGRESSCHUNK:
@@ -3777,16 +3785,19 @@ RENDER_AGAIN:
DrawCheckedRect(hdc, widgetRect, COLOR_3DHILIGHT, COLOR_3DFACE,
(HBRUSH) COLOR_SCROLLBAR+1);
}
// XXX should invert the part of the track being clicked here
// but the track is never :active
break;
}
+ case NS_THEME_SCROLLCORNER: {
+ ::FillRect(hdc, &widgetRect, (HBRUSH) (COLOR_SCROLLBAR + 1));
+ }
// Draw scale track background
case NS_THEME_RANGE:
case NS_THEME_SCALE_VERTICAL:
case NS_THEME_SCALE_HORIZONTAL: {
const int32_t trackWidth = 4;
// When rounding is necessary, we round the position of the track
// away from the chevron of the thumb to make it look better.
if (aWidgetType == NS_THEME_SCALE_HORIZONTAL ||
@@ -4058,16 +4069,17 @@ nsNativeThemeWin::GetWidgetNativeDrawing
case NS_THEME_SCROLLBARBUTTON_UP:
case NS_THEME_SCROLLBARBUTTON_DOWN:
case NS_THEME_SCROLLBARBUTTON_LEFT:
case NS_THEME_SCROLLBARBUTTON_RIGHT:
case NS_THEME_SCROLLBARTHUMB_VERTICAL:
case NS_THEME_SCROLLBARTHUMB_HORIZONTAL:
case NS_THEME_SCROLLBAR_VERTICAL:
case NS_THEME_SCROLLBAR_HORIZONTAL:
+ case NS_THEME_SCROLLCORNER:
case NS_THEME_SCALE_HORIZONTAL:
case NS_THEME_SCALE_VERTICAL:
case NS_THEME_SCALETHUMB_HORIZONTAL:
case NS_THEME_SCALETHUMB_VERTICAL:
case NS_THEME_INNER_SPIN_BUTTON:
case NS_THEME_SPINNER_UPBUTTON:
case NS_THEME_SPINNER_DOWNBUTTON:
case NS_THEME_LISTBOX: