diff --git a/dom/canvas/test/test_bug1485266.html b/dom/canvas/test/test_bug1485266.html index 57305966bfb4..43cf5f094528 100644 --- a/dom/canvas/test/test_bug1485266.html +++ b/dom/canvas/test/test_bug1485266.html @@ -18,82 +18,82 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=14852266 /** Test for Bug 14852266 **/ function beginTest() { - var colorNames = [ - [ "ActiveBorder", 0xB4, 0xB4, 0xB4 ], - [ "ActiveCaption", 0x99, 0xB4, 0xD1 ], - [ "AppWorkspace", 0xAB, 0xAB, 0xAB ], - [ "Background", 0x00, 0x00, 0x00 ], - [ "ButtonFace", 0xF0, 0xF0, 0xF0 ], - [ "ButtonHighlight", 0xFF, 0xFF, 0xFF ], - [ "ButtonShadow", 0xA0, 0xA0, 0xA0 ], - [ "ButtonText", 0x00, 0x00, 0x00 ], - [ "CaptionText", 0x00, 0x00, 0x00 ], - [ "GrayText", 0x6D, 0x6D, 0x6D ], - [ "Highlight", 0x33, 0x99, 0xFF ], - [ "HighlightText", 0xFF, 0xFF, 0xFF ], - [ "InactiveBorder", 0xF4, 0xF7, 0xFC ], - [ "InactiveCaption", 0xBF, 0xCD, 0xDB ], - [ "InactiveCaptionText", 0x43, 0x4E, 0x54 ], - [ "InfoBackground", 0xFF, 0xFF, 0xE1 ], - [ "InfoText", 0x00, 0x00, 0x00 ], - [ "Menu", 0xF0, 0xF0, 0xF0 ], - [ "MenuText", 0x00, 0x00, 0x00 ], - [ "Scrollbar", 0xC8, 0xC8, 0xC8 ], - [ "ThreeDDarkShadow", 0x69, 0x69, 0x69 ], - [ "ThreeDFace", 0xF0, 0xF0, 0xF0 ], - [ "ThreeDHighlight", 0xFF, 0xFF, 0xFF ], - [ "ThreeDLightShadow", 0xE3, 0xE3, 0xE3 ], - [ "ThreeDShadow", 0xA0, 0xA0, 0xA0 ], - [ "Window", 0xFF, 0xFF, 0xFF ], - [ "WindowFrame", 0x64, 0x64, 0x64 ], - [ "WindowText", 0x00, 0x00, 0x00 ], - [ "-moz-ButtonDefault", 0x69, 0x69, 0x69 ], - [ "-moz-ButtonHoverFace", 0xF0, 0xF0, 0xF0 ], + var colorNames = [ + [ "ActiveBorder", 0xB4, 0xB4, 0xB4 ], + [ "ActiveCaption", 0x99, 0xB4, 0xD1 ], + [ "AppWorkspace", 0xAB, 0xAB, 0xAB ], + [ "Background", 0x00, 0x00, 0x00 ], + [ "ButtonFace", 0xe9, 0xe9, 0xed], + [ "ButtonHighlight", 0xFF, 0xFF, 0xFF ], + [ "ButtonShadow", 0xA0, 0xA0, 0xA0 ], + [ "ButtonText", 0x00, 0x00, 0x00 ], + [ "CaptionText", 0x00, 0x00, 0x00 ], + [ "GrayText", 0x6D, 0x6D, 0x6D ], + [ "Highlight", 0x33, 0x99, 0xFF ], + [ "HighlightText", 0xFF, 0xFF, 0xFF ], + [ "InactiveBorder", 0xF4, 0xF7, 0xFC ], + [ "InactiveCaption", 0xBF, 0xCD, 0xDB ], + [ "InactiveCaptionText", 0x43, 0x4E, 0x54 ], + [ "InfoBackground", 0xFF, 0xFF, 0xE1 ], + [ "InfoText", 0x00, 0x00, 0x00 ], + [ "Menu", 0xF0, 0xF0, 0xF0 ], + [ "MenuText", 0x00, 0x00, 0x00 ], + [ "Scrollbar", 0xC8, 0xC8, 0xC8 ], + [ "ThreeDDarkShadow", 0x69, 0x69, 0x69 ], + [ "ThreeDFace", 0xF0, 0xF0, 0xF0 ], + [ "ThreeDHighlight", 0xFF, 0xFF, 0xFF ], + [ "ThreeDLightShadow", 0xE3, 0xE3, 0xE3 ], + [ "ThreeDShadow", 0xA0, 0xA0, 0xA0 ], + [ "Window", 0xFF, 0xFF, 0xFF ], + [ "WindowFrame", 0x64, 0x64, 0x64 ], + [ "WindowText", 0x00, 0x00, 0x00 ], + [ "-moz-ButtonDefault", 0x69, 0x69, 0x69 ], + [ "-moz-ButtonHoverFace", 0xd0, 0xd0, 0xd7 ], [ "-moz-ButtonHoverText", 0x00, 0x00, 0x00 ], - [ "-moz-CellHighlight", 0xF0, 0xF0, 0xF0 ], - [ "-moz-CellHighlightText", 0x00, 0x00, 0x00 ], - [ "-moz-Combobox", 0xFF, 0xFF, 0xFF ], - [ "-moz-ComboboxText", 0x00, 0x00, 0x00 ], - [ "-moz-Dialog", 0xF0, 0xF0, 0xF0 ], - [ "-moz-DialogText", 0x00, 0x00, 0x00 ], - [ "-moz-DragTargetZone", 0xFF, 0xFF, 0xFF ], - [ "-moz-EvenTreeRow", 0xFF, 0xFF, 0xFF ], - [ "-moz-Field", 0xFF, 0xFF, 0xFF ], - [ "-moz-FieldText", 0x00, 0x00, 0x00 ], - [ "-moz-MenuHover", 0x33, 0x99, 0xFF ], - [ "-moz-MenuHoverText", 0x00, 0x00, 0x00 ], - [ "-moz-MenubarText", 0x00, 0x00, 0x00 ], + [ "-moz-CellHighlight", 0xF0, 0xF0, 0xF0 ], + [ "-moz-CellHighlightText", 0x00, 0x00, 0x00 ], + [ "-moz-Combobox", 0xe9, 0xe9, 0xed], + [ "-moz-ComboboxText", 0x00, 0x00, 0x00 ], + [ "-moz-Dialog", 0xF0, 0xF0, 0xF0 ], + [ "-moz-DialogText", 0x00, 0x00, 0x00 ], + [ "-moz-DragTargetZone", 0xFF, 0xFF, 0xFF ], + [ "-moz-EvenTreeRow", 0xFF, 0xFF, 0xFF ], + [ "-moz-Field", 0xFF, 0xFF, 0xFF ], + [ "-moz-FieldText", 0x00, 0x00, 0x00 ], + [ "-moz-MenuHover", 0x33, 0x99, 0xFF ], + [ "-moz-MenuHoverText", 0x00, 0x00, 0x00 ], + [ "-moz-MenubarText", 0x00, 0x00, 0x00 ], [ "-moz-MenubarHoverText", 0x00, 0x00, 0x00 ], - [ "-moz-NativeHyperlinkText", 0x00, 0x66, 0xCC ], - [ "-moz-OddTreeRow", 0xFF, 0xFF, 0xFF ], - [ "-moz-mac-chrome-active", 0xB2, 0xB2, 0xB2 ], - [ "-moz-mac-chrome-inactive", 0xE1, 0xE1, 0xE1 ], - [ "-moz-mac-focusring", 0x60, 0x9D, 0xD7 ], - [ "-moz-mac-menuselect", 0x38, 0x75, 0xD7 ], - [ "-moz-mac-menushadow", 0xA3, 0xA3, 0xA3 ], - [ "-moz-mac-menutextdisable", 0x88, 0x88, 0x88 ], - [ "-moz-mac-menutextselect", 0xFF, 0xFF, 0xFF ], - [ "-moz-mac-DisabledToolbarText", 0x3F, 0x3F, 0x3F ], - [ "-moz-mac-AlternatePrimaryHighlight", 0x3F, 0x3F, 0x3F ], - [ "-moz-mac-SecondaryHighlight", 0xD4, 0xD4, 0xD4 ], - [ "-moz-win-MediaText", 0xFF, 0xFF, 0xFF ], - [ "-moz-win-CommunicationsText", 0xFF, 0xFF, 0xFF ], - [ "SelectedItem", 0x33, 0x99, 0xFF ], - [ "SelectedItemText", 0xFF, 0xFF, 0xFF ], + [ "-moz-NativeHyperlinkText", 0x00, 0x66, 0xCC ], + [ "-moz-OddTreeRow", 0xFF, 0xFF, 0xFF ], + [ "-moz-mac-chrome-active", 0xB2, 0xB2, 0xB2 ], + [ "-moz-mac-chrome-inactive", 0xE1, 0xE1, 0xE1 ], + [ "-moz-mac-focusring", 0x60, 0x9D, 0xD7 ], + [ "-moz-mac-menuselect", 0x38, 0x75, 0xD7 ], + [ "-moz-mac-menushadow", 0xA3, 0xA3, 0xA3 ], + [ "-moz-mac-menutextdisable", 0x88, 0x88, 0x88 ], + [ "-moz-mac-menutextselect", 0xFF, 0xFF, 0xFF ], + [ "-moz-mac-DisabledToolbarText", 0x3F, 0x3F, 0x3F ], + [ "-moz-mac-AlternatePrimaryHighlight", 0x3F, 0x3F, 0x3F ], + [ "-moz-mac-SecondaryHighlight", 0xD4, 0xD4, 0xD4 ], + [ "-moz-win-MediaText", 0xFF, 0xFF, 0xFF ], + [ "-moz-win-CommunicationsText", 0xFF, 0xFF, 0xFF ], + [ "SelectedItem", 0x33, 0x99, 0xFF ], + [ "SelectedItemText", 0xFF, 0xFF, 0xFF ], - // These five are configured via Tools -> Options -> Content -> Colors. - //"-moz-ActiveHyperlinkText", - //"-moz-HyperLinkText", - //"-moz-VisitedHyperlinkText", - //"-moz-default-background-color", - //"-moz-default-color", - ]; + // These five are configured via Tools -> Options -> Content -> Colors. + //"-moz-ActiveHyperlinkText", + //"-moz-HyperLinkText", + //"-moz-VisitedHyperlinkText", + //"-moz-default-background-color", + //"-moz-default-color", + ]; - var colorTestDiv = document.createElement("div"); - document.body.appendChild(colorTestDiv); // ie + var colorTestDiv = document.createElement("div"); + document.body.appendChild(colorTestDiv); // ie - for (var i in colorNames) { - (function(colorName, r, g, b) { + for (var i in colorNames) { + (function(colorName, r, g, b) { // test value var ctest = "rgb(" + r + ", " + g + ", " + b + ")"; diff --git a/dom/canvas/test/test_bug232227.html b/dom/canvas/test/test_bug232227.html index 4ddbc8619adf..9572e9f8e4cd 100644 --- a/dom/canvas/test/test_bug232227.html +++ b/dom/canvas/test/test_bug232227.html @@ -19,86 +19,86 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=232227 /** Test for Bug 232227 **/ function beginTest() { - var colorNames = [ - [ "ActiveBorder", 0xB4, 0xB4, 0xB4 ], - [ "ActiveCaption", 0x99, 0xB4, 0xD1 ], - [ "AppWorkspace", 0xAB, 0xAB, 0xAB ], - [ "Background", 0x00, 0x00, 0x00 ], - [ "ButtonFace", 0xF0, 0xF0, 0xF0 ], - [ "ButtonHighlight", 0xFF, 0xFF, 0xFF ], - [ "ButtonShadow", 0xA0, 0xA0, 0xA0 ], - [ "ButtonText", 0x00, 0x00, 0x00 ], - [ "CaptionText", 0x00, 0x00, 0x00 ], - [ "GrayText", 0x6D, 0x6D, 0x6D ], - [ "Highlight", 0x33, 0x99, 0xFF ], - [ "HighlightText", 0xFF, 0xFF, 0xFF ], - [ "InactiveBorder", 0xF4, 0xF7, 0xFC ], - [ "InactiveCaption", 0xBF, 0xCD, 0xDB ], - [ "InactiveCaptionText", 0x43, 0x4E, 0x54 ], - [ "InfoBackground", 0xFF, 0xFF, 0xE1 ], - [ "InfoText", 0x00, 0x00, 0x00 ], - [ "Menu", 0xF0, 0xF0, 0xF0 ], - [ "MenuText", 0x00, 0x00, 0x00 ], - [ "Scrollbar", 0xC8, 0xC8, 0xC8 ], - [ "ThreeDDarkShadow", 0x69, 0x69, 0x69 ], - [ "ThreeDFace", 0xF0, 0xF0, 0xF0 ], - [ "ThreeDHighlight", 0xFF, 0xFF, 0xFF ], - [ "ThreeDLightShadow", 0xE3, 0xE3, 0xE3 ], - [ "ThreeDShadow", 0xA0, 0xA0, 0xA0 ], - [ "Window", 0xFF, 0xFF, 0xFF ], - [ "WindowFrame", 0x64, 0x64, 0x64 ], - [ "WindowText", 0x00, 0x00, 0x00 ], - [ "-moz-ButtonDefault", 0x69, 0x69, 0x69 ], - [ "-moz-ButtonHoverFace", 0xF0, 0xF0, 0xF0 ], + var colorNames = [ + [ "ActiveBorder", 0xB4, 0xB4, 0xB4 ], + [ "ActiveCaption", 0x99, 0xB4, 0xD1 ], + [ "AppWorkspace", 0xAB, 0xAB, 0xAB ], + [ "Background", 0x00, 0x00, 0x00 ], + [ "ButtonFace", 0xe9, 0xe9, 0xed], + [ "ButtonHighlight", 0xFF, 0xFF, 0xFF ], + [ "ButtonShadow", 0xA0, 0xA0, 0xA0 ], + [ "ButtonText", 0x00, 0x00, 0x00 ], + [ "CaptionText", 0x00, 0x00, 0x00 ], + [ "GrayText", 0x6D, 0x6D, 0x6D ], + [ "Highlight", 0x33, 0x99, 0xFF ], + [ "HighlightText", 0xFF, 0xFF, 0xFF ], + [ "InactiveBorder", 0xF4, 0xF7, 0xFC ], + [ "InactiveCaption", 0xBF, 0xCD, 0xDB ], + [ "InactiveCaptionText", 0x43, 0x4E, 0x54 ], + [ "InfoBackground", 0xFF, 0xFF, 0xE1 ], + [ "InfoText", 0x00, 0x00, 0x00 ], + [ "Menu", 0xF0, 0xF0, 0xF0 ], + [ "MenuText", 0x00, 0x00, 0x00 ], + [ "Scrollbar", 0xC8, 0xC8, 0xC8 ], + [ "ThreeDDarkShadow", 0x69, 0x69, 0x69 ], + [ "ThreeDFace", 0xF0, 0xF0, 0xF0 ], + [ "ThreeDHighlight", 0xFF, 0xFF, 0xFF ], + [ "ThreeDLightShadow", 0xE3, 0xE3, 0xE3 ], + [ "ThreeDShadow", 0xA0, 0xA0, 0xA0 ], + [ "Window", 0xFF, 0xFF, 0xFF ], + [ "WindowFrame", 0x64, 0x64, 0x64 ], + [ "WindowText", 0x00, 0x00, 0x00 ], + [ "-moz-ButtonDefault", 0x69, 0x69, 0x69 ], + [ "-moz-ButtonHoverFace", 0xd0, 0xd0, 0xd7 ], [ "-moz-ButtonHoverText", 0x00, 0x00, 0x00 ], - [ "-moz-CellHighlight", 0xF0, 0xF0, 0xF0 ], - [ "-moz-CellHighlightText", 0x00, 0x00, 0x00 ], - [ "-moz-Combobox", 0xFF, 0xFF, 0xFF ], - [ "-moz-ComboboxText", 0x00, 0x00, 0x00 ], - [ "-moz-Dialog", 0xF0, 0xF0, 0xF0 ], - [ "-moz-DialogText", 0x00, 0x00, 0x00 ], - [ "-moz-DragTargetZone", 0xFF, 0xFF, 0xFF ], - [ "-moz-EvenTreeRow", 0xFF, 0xFF, 0xFF ], - [ "-moz-Field", 0xFF, 0xFF, 0xFF ], - [ "-moz-FieldText", 0x00, 0x00, 0x00 ], - [ "-moz-MenuHover", 0x33, 0x99, 0xFF ], - [ "-moz-MenuHoverText", 0x00, 0x00, 0x00 ], - [ "-moz-MenubarText", 0x00, 0x00, 0x00 ], + [ "-moz-CellHighlight", 0xF0, 0xF0, 0xF0 ], + [ "-moz-CellHighlightText", 0x00, 0x00, 0x00 ], + [ "-moz-Combobox", 0xe9, 0xe9, 0xed], + [ "-moz-ComboboxText", 0x00, 0x00, 0x00 ], + [ "-moz-Dialog", 0xF0, 0xF0, 0xF0 ], + [ "-moz-DialogText", 0x00, 0x00, 0x00 ], + [ "-moz-DragTargetZone", 0xFF, 0xFF, 0xFF ], + [ "-moz-EvenTreeRow", 0xFF, 0xFF, 0xFF ], + [ "-moz-Field", 0xFF, 0xFF, 0xFF ], + [ "-moz-FieldText", 0x00, 0x00, 0x00 ], + [ "-moz-MenuHover", 0x33, 0x99, 0xFF ], + [ "-moz-MenuHoverText", 0x00, 0x00, 0x00 ], + [ "-moz-MenubarText", 0x00, 0x00, 0x00 ], [ "-moz-MenubarHoverText", 0x00, 0x00, 0x00 ], - [ "-moz-NativeHyperlinkText", 0x00, 0x66, 0xCC ], - [ "-moz-OddTreeRow", 0xFF, 0xFF, 0xFF ], - [ "-moz-mac-chrome-active", 0xB2, 0xB2, 0xB2 ], - [ "-moz-mac-chrome-inactive", 0xE1, 0xE1, 0xE1 ], - [ "-moz-mac-focusring", 0x60, 0x9D, 0xD7 ], - [ "-moz-mac-menuselect", 0x38, 0x75, 0xD7 ], - [ "-moz-mac-menushadow", 0xA3, 0xA3, 0xA3 ], - [ "-moz-mac-menutextdisable", 0x88, 0x88, 0x88 ], - [ "-moz-mac-menutextselect", 0xFF, 0xFF, 0xFF ], - [ "-moz-mac-DisabledToolbarText", 0x3F, 0x3F, 0x3F ], - [ "-moz-mac-AlternatePrimaryHighlight", 0x3F, 0x3F, 0x3F ], - [ "-moz-mac-SecondaryHighlight", 0xD4, 0xD4, 0xD4 ], - [ "-moz-win-MediaText", 0xFF, 0xFF, 0xFF ], - [ "-moz-win-CommunicationsText", 0xFF, 0xFF, 0xFF ], - [ "SelectedItem", 0x33, 0x99, 0xFF ], - [ "SelectedItemText", 0xFF, 0xFF, 0xFF ], + [ "-moz-NativeHyperlinkText", 0x00, 0x66, 0xCC ], + [ "-moz-OddTreeRow", 0xFF, 0xFF, 0xFF ], + [ "-moz-mac-chrome-active", 0xB2, 0xB2, 0xB2 ], + [ "-moz-mac-chrome-inactive", 0xE1, 0xE1, 0xE1 ], + [ "-moz-mac-focusring", 0x60, 0x9D, 0xD7 ], + [ "-moz-mac-menuselect", 0x38, 0x75, 0xD7 ], + [ "-moz-mac-menushadow", 0xA3, 0xA3, 0xA3 ], + [ "-moz-mac-menutextdisable", 0x88, 0x88, 0x88 ], + [ "-moz-mac-menutextselect", 0xFF, 0xFF, 0xFF ], + [ "-moz-mac-DisabledToolbarText", 0x3F, 0x3F, 0x3F ], + [ "-moz-mac-AlternatePrimaryHighlight", 0x3F, 0x3F, 0x3F ], + [ "-moz-mac-SecondaryHighlight", 0xD4, 0xD4, 0xD4 ], + [ "-moz-win-MediaText", 0xFF, 0xFF, 0xFF ], + [ "-moz-win-CommunicationsText", 0xFF, 0xFF, 0xFF ], + [ "SelectedItem", 0x33, 0x99, 0xFF ], + [ "SelectedItemText", 0xFF, 0xFF, 0xFF ], - // These five are configured via Tools -> Options -> Content -> Colors. - //"-moz-ActiveHyperlinkText", - //"-moz-HyperLinkText", - //"-moz-VisitedHyperlinkText", - //"-moz-default-background-color", - //"-moz-default-color", - ]; + // These five are configured via Tools -> Options -> Content -> Colors. + //"-moz-ActiveHyperlinkText", + //"-moz-HyperLinkText", + //"-moz-VisitedHyperlinkText", + //"-moz-default-background-color", + //"-moz-default-color", + ]; var colorTestCanvas = document.createElement("canvas"); colorTestCanvas.width = colorTestCanvas.height = 1; colorTestCanvas = colorTestCanvas.getContext("2d"); - var colorTestDiv = document.createElement("div"); - document.body.appendChild(colorTestDiv); // ie + var colorTestDiv = document.createElement("div"); + document.body.appendChild(colorTestDiv); // ie - for (var i in colorNames) { - (function(colorName, r, g, b) { + for (var i in colorNames) { + (function(colorName, r, g, b) { // test value var ctest = "rgb(" + r + ", " + g + ", " + b + ")"; diff --git a/layout/reftests/color-scheme/color-scheme-themed-button-notref.html b/layout/reftests/color-scheme/color-scheme-themed-button-notref.html new file mode 100644 index 000000000000..ffa300c51365 --- /dev/null +++ b/layout/reftests/color-scheme/color-scheme-themed-button-notref.html @@ -0,0 +1,5 @@ + + + diff --git a/layout/reftests/color-scheme/color-scheme-themed-button.html b/layout/reftests/color-scheme/color-scheme-themed-button.html new file mode 100644 index 000000000000..8d920e666fc3 --- /dev/null +++ b/layout/reftests/color-scheme/color-scheme-themed-button.html @@ -0,0 +1,10 @@ + + + diff --git a/layout/reftests/color-scheme/reftest.list b/layout/reftests/color-scheme/reftest.list index 298a38372122..a70157630b41 100644 --- a/layout/reftests/color-scheme/reftest.list +++ b/layout/reftests/color-scheme/reftest.list @@ -1,3 +1,4 @@ defaults pref(layout.css.color-scheme.enabled,true) != color-scheme-basic.html color-scheme-basic-notref.html +!= color-scheme-themed-button.html color-scheme-themed-button-notref.html diff --git a/layout/reftests/high-contrast/reftest.list b/layout/reftests/high-contrast/reftest.list index 0aa155f450f5..fff9697eeb71 100644 --- a/layout/reftests/high-contrast/reftest.list +++ b/layout/reftests/high-contrast/reftest.list @@ -1,5 +1,5 @@ # This pref enables high-contrast mode in the testcases here: -defaults test-pref(browser.display.document_color_use,2) test-pref(browser.display.permit_backplate,true) test-pref(layout.css.prefers-contrast.enabled,true) test-pref(layout.css.forced-colors.enabled,true) test-pref(browser.display.foreground_color,"#000000") test-pref(browser.display.background_color,"#FFFFFF") pref(ui.use_standins_for_native_colors,true) pref(widget.non-native-theme.always-use-system-colors,true) +defaults test-pref(browser.display.document_color_use,2) test-pref(browser.display.permit_backplate,true) test-pref(layout.css.prefers-contrast.enabled,true) test-pref(layout.css.forced-colors.enabled,true) test-pref(browser.display.foreground_color,"#000000") test-pref(browser.display.background_color,"#FFFFFF") pref(ui.use_standins_for_native_colors,true) pref(widget.non-native-theme.always-high-contrast,true) # There are several platform-specific fuzzy-if notations below due to # anti-aliasing, extra ink overflow, and slightly inacurate reftest diff --git a/layout/style/PreferenceSheet.cpp b/layout/style/PreferenceSheet.cpp index a09a7f165ef2..5276babeb199 100644 --- a/layout/style/PreferenceSheet.cpp +++ b/layout/style/PreferenceSheet.cpp @@ -84,11 +84,11 @@ static bool UseDocumentColors(bool aIsChrome, bool aUseAcccessibilityTheme) { } } -bool PreferenceSheet::Prefs::NonNativeThemeShouldUseSystemColors() const { +bool PreferenceSheet::Prefs::NonNativeThemeShouldBeHighContrast() const { // We only do that if we are overriding the document colors. Otherwise it // causes issues when pages only override some of the system colors, // specially in dark themes mode. - return StaticPrefs::widget_non_native_theme_always_use_system_colors() || + return StaticPrefs::widget_non_native_theme_always_high_contrast() || !mUseDocumentColors; } diff --git a/layout/style/PreferenceSheet.h b/layout/style/PreferenceSheet.h index 272ef860f080..21c8732f89f8 100644 --- a/layout/style/PreferenceSheet.h +++ b/layout/style/PreferenceSheet.h @@ -36,8 +36,8 @@ struct PreferenceSheet { bool mUseDocumentColors = true; - // Whether the non-native theme should use system colors for widgets. - bool NonNativeThemeShouldUseSystemColors() const; + // Whether the non-native theme should use real system colors for widgets. + bool NonNativeThemeShouldBeHighContrast() const; void Load(bool aIsChrome); }; diff --git a/layout/style/res/forms.css b/layout/style/res/forms.css index 6e23a983647f..76c3e340939e 100644 --- a/layout/style/res/forms.css +++ b/layout/style/res/forms.css @@ -415,7 +415,7 @@ option:disabled, optgroup:disabled, select:disabled { color: GrayText; - background-color: ThreeDLightShadow; + background-color: -moz-DisabledField; cursor: unset; } @@ -651,6 +651,7 @@ button:is(:disabled, :disabled:active), input:is([type=reset], [type=button], [type=submit]):is(:disabled, :disabled:active), select:is(:disabled, :disabled:active) > button { color: GrayText; + background-color: -moz-ButtonDisabledFace; } /* file selector */ diff --git a/layout/style/test/test_non_content_accessible_values.html b/layout/style/test/test_non_content_accessible_values.html index b2adf8981805..4ac357d457b2 100644 --- a/layout/style/test/test_non_content_accessible_values.html +++ b/layout/style/test/test_non_content_accessible_values.html @@ -8,6 +8,8 @@ const NON_CONTENT_ACCESSIBLE_VALUES = { "color": [ "-moz-buttonactivetext", "-moz-buttonactiveface", + "-moz-buttondisabledface", + "-moz-disabledfield", "-moz-colheaderhovertext", "-moz-colheadertext", "-moz-system-color(highlight, light)", diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index c3848f2b1ea7..608d5a4cc9f0 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -11677,7 +11677,7 @@ # Whether the non-native theme should always use system colors. Useful mostly # for testing forced colors mode. -- name: widget.non-native-theme.always-use-system-colors +- name: widget.non-native-theme.always-high-contrast type: RelaxedAtomicBool value: false mirror: always diff --git a/servo/components/style/values/specified/color.rs b/servo/components/style/values/specified/color.rs index 85c888accb86..a44eae5025c4 100644 --- a/servo/components/style/values/specified/color.rs +++ b/servo/components/style/values/specified/color.rs @@ -300,8 +300,12 @@ pub enum SystemColor { Captiontext, #[parse(aliases = "-moz-field")] Field, + /// Used for disabled field backgrounds. + #[parse(condition = "ParserContext::in_ua_or_chrome_sheet")] + MozDisabledfield, #[parse(aliases = "-moz-fieldtext")] Fieldtext, + Graytext, Highlight, Highlighttext, @@ -366,6 +370,10 @@ pub enum SystemColor { #[parse(condition = "ParserContext::in_ua_or_chrome_sheet")] MozButtonactiveface, + /// Used for button background when disabled. + #[parse(condition = "ParserContext::in_ua_or_chrome_sheet")] + MozButtondisabledface, + /// Background color of chrome toolbars in active windows. MozMacChromeActive, /// Background color of chrome toolbars in inactive windows. diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h index 9475c050b306..580f0f196852 100644 --- a/widget/LookAndFeel.h +++ b/widget/LookAndFeel.h @@ -441,7 +441,6 @@ class LookAndFeel { // taken from win7, mostly). This forces light appearance, effectively. enum class UseStandins : bool { No, Yes }; static UseStandins ShouldUseStandins(const dom::Document&, ColorID); - static UseStandins ShouldAlwaysUseStandinsForColorInContent(ColorID); // Returns a native color value (might be overwritten by prefs) for a given // color id. diff --git a/widget/android/nsLookAndFeel.cpp b/widget/android/nsLookAndFeel.cpp index decac5a58a7f..3056a6eac5e7 100644 --- a/widget/android/nsLookAndFeel.cpp +++ b/widget/android/nsLookAndFeel.cpp @@ -233,9 +233,11 @@ nsresult nsLookAndFeel::NativeGetColor(ColorID aID, ColorScheme aColorScheme, aColor = NS_RGB(0xf7, 0xf5, 0xf3); break; - case ColorID::Threedface: case ColorID::Buttonface: + case ColorID::MozButtondisabledface: + case ColorID::Threedface: case ColorID::Threedlightshadow: + case ColorID::MozDisabledfield: aColor = NS_RGB(0xec, 0xe7, 0xe2); break; @@ -273,6 +275,7 @@ nsresult nsLookAndFeel::NativeGetColor(ColorID aID, ColorScheme aColorScheme, aColor = mSystemColors.textColorHighlight; break; case ColorID::MozButtonhoverface: + case ColorID::MozButtonactiveface: aColor = NS_RGB(0xf3, 0xf0, 0xed); break; case ColorID::MozMenuhover: diff --git a/widget/cocoa/nsLookAndFeel.mm b/widget/cocoa/nsLookAndFeel.mm index 3dcd87cf0329..3aeb8f9c82cf 100644 --- a/widget/cocoa/nsLookAndFeel.mm +++ b/widget/cocoa/nsLookAndFeel.mm @@ -233,6 +233,7 @@ nsresult nsLookAndFeel::NativeGetColor(ColorID aID, ColorScheme aScheme, nscolor case ColorID::Buttonface: case ColorID::MozButtonhoverface: case ColorID::MozButtonactiveface: + case ColorID::MozButtondisabledface: color = GetColorFromNSColor(NSColor.controlColor); break; case ColorID::Buttonhighlight: @@ -267,6 +268,7 @@ nsresult nsLookAndFeel::NativeGetColor(ColorID aID, ColorScheme aScheme, nscolor color = GetColorFromNSColor(NSColor.highlightColor); break; case ColorID::Threedlightshadow: + case ColorID::MozDisabledfield: color = NS_RGB(0xDA, 0xDA, 0xDA); break; case ColorID::Menu: diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp index d17e2531a0d8..dfed1b66d598 100644 --- a/widget/gtk/nsLookAndFeel.cpp +++ b/widget/gtk/nsLookAndFeel.cpp @@ -537,6 +537,7 @@ nsresult nsLookAndFeel::PerThemeData::GetColor(ColorID aID, case ColorID::Threedface: case ColorID::Buttonface: + case ColorID::MozButtondisabledface: // 3-D face color aColor = mMozWindowBackground; break; @@ -561,6 +562,7 @@ nsresult nsLookAndFeel::PerThemeData::GetColor(ColorID aID, break; case ColorID::Threedlightshadow: + case ColorID::MozDisabledfield: aColor = NS_RGB(0xE0, 0xE0, 0xE0); break; case ColorID::Threeddarkshadow: diff --git a/widget/nsNativeBasicTheme.cpp b/widget/nsNativeBasicTheme.cpp index 7485d1864fa4..a7b73ffcd576 100644 --- a/widget/nsNativeBasicTheme.cpp +++ b/widget/nsNativeBasicTheme.cpp @@ -246,19 +246,44 @@ class nsNativeBasicTheme::AccentColor { // Widget color information associated to a particular frame. class nsNativeBasicTheme::Colors { const AccentColor mAccentColor; - const bool mUseSystemColors; + const dom::Document& mDoc; + const bool mHighContrast; const LookAndFeel::ColorScheme mColorScheme; public: explicit Colors(const nsIFrame* aFrame) : mAccentColor(*aFrame->Style()), - mUseSystemColors(ShouldUseSystemColors(*aFrame->PresContext()) == - UseSystemColors::Yes), + mDoc(*aFrame->PresContext()->Document()), + mHighContrast(ShouldBeHighContrast(*aFrame->PresContext())), mColorScheme(LookAndFeel::ColorSchemeForFrame(aFrame)) {} const AccentColor& Accent() const { return mAccentColor; } - bool UseSystemColors() const { return mUseSystemColors; } + bool HighContrast() const { return mHighContrast; } bool IsDark() const { return mColorScheme == LookAndFeel::ColorScheme::Dark; } + + nscolor SystemNs(StyleSystemColor aColor) const { + return LookAndFeel::Color(aColor, mColorScheme, + LookAndFeel::ShouldUseStandins(mDoc, aColor)); + } + + sRGBColor System(StyleSystemColor aColor) const { + return sRGBColor::FromABGR(SystemNs(aColor)); + } + + template + sRGBColor SystemOrElse(StyleSystemColor aColor, Compute aCompute) const { + if (auto color = LookAndFeel::GetColor( + aColor, mColorScheme, + LookAndFeel::ShouldUseStandins(mDoc, aColor))) { + return sRGBColor::FromABGR(*color); + } + return aCompute(); + } + + std::pair SystemPair(StyleSystemColor aFirst, + StyleSystemColor aSecond) const { + return std::make_pair(System(aFirst), System(aSecond)); + } }; CSSIntCoord nsNativeBasicTheme::sHorizontalScrollbarHeight = CSSIntCoord(0); @@ -331,45 +356,6 @@ static bool IsScrollbarWidthThin(nsIFrame* aFrame) { return scrollbarWidth == StyleScrollbarWidth::Thin; } -// TODO: Like for the ColorScheme, this should probably look at the document, -// like LookAndFeel does, but: -// -// * We only draw with system colors when forcing colors, and we don't use -// standins for nnt by default. -// * We only expect non-native-themed buttons on content. -// * The colors we look up should always be CSS-accessible. -// -// So this should do the right thing for now with regards to the standins pref, -// which is all we need for tests and should be good enough. -static LookAndFeel::UseStandins ShouldUseStandins(LookAndFeel::ColorID aColor) { - return LookAndFeel::ShouldAlwaysUseStandinsForColorInContent(aColor); -} - -static nscolor SystemNsColor(StyleSystemColor aColor) { - // TODO(emilio): We could not hardcode light appearance here with a bit of - // work, but doesn't matter for now. - return LookAndFeel::Color(aColor, LookAndFeel::ColorScheme::Light, - ShouldUseStandins(aColor)); -} - -static sRGBColor SystemColor(StyleSystemColor aColor) { - return sRGBColor::FromABGR(SystemNsColor(aColor)); -} - -template -static sRGBColor SystemColorOrElse(StyleSystemColor aColor, Compute aCompute) { - if (auto color = LookAndFeel::GetColor( - aColor, LookAndFeel::ColorScheme::Light, ShouldUseStandins(aColor))) { - return sRGBColor::FromABGR(*color); - } - return aCompute(); -} - -static std::pair SystemColorPair( - StyleSystemColor aFirst, StyleSystemColor aSecond) { - return std::make_pair(SystemColor(aFirst), SystemColor(aSecond)); -} - /* static */ auto nsNativeBasicTheme::GetDPIRatioForScrollbarPart(nsPresContext* aPc) -> DPIRatio { @@ -413,56 +399,27 @@ std::pair nsNativeBasicTheme::ComputeCheckboxColors( MOZ_ASSERT(aAppearance == StyleAppearance::Checkbox || aAppearance == StyleAppearance::Radio); bool isDisabled = aState.HasState(NS_EVENT_STATE_DISABLED); - bool isPressed = - aState.HasAllStates(NS_EVENT_STATE_HOVER | NS_EVENT_STATE_ACTIVE); - bool isHovered = aState.HasState(NS_EVENT_STATE_HOVER); bool isChecked = aState.HasState(NS_EVENT_STATE_CHECKED); bool isIndeterminate = aAppearance == StyleAppearance::Checkbox && aState.HasState(NS_EVENT_STATE_INDETERMINATE); - if (aColors.UseSystemColors()) { - sRGBColor backgroundColor = SystemColor(StyleSystemColor::Buttonface); - sRGBColor borderColor = SystemColor(StyleSystemColor::Buttontext); - if (isDisabled) { - borderColor = SystemColor(StyleSystemColor::Graytext); - if (isChecked || isIndeterminate) { - backgroundColor = borderColor; - } - } else if (isChecked || isIndeterminate) { - backgroundColor = borderColor = - SystemColor(StyleSystemColor::Selecteditem); - } - return {backgroundColor, borderColor}; - } - - sRGBColor backgroundColor = sColorWhite; - sRGBColor borderColor = sColorGrey40; - if (isDisabled) { - backgroundColor = sColorWhiteAlpha50; - borderColor = sColorGrey40Alpha50; - if (isChecked || isIndeterminate) { - backgroundColor = borderColor; - } - } else if (isChecked || isIndeterminate) { - const auto& color = isPressed ? aColors.Accent().GetDarker() + if (!isDisabled && (isChecked || isIndeterminate)) { + bool isActive = + aState.HasAllStates(NS_EVENT_STATE_HOVER | NS_EVENT_STATE_ACTIVE); + bool isHovered = aState.HasState(NS_EVENT_STATE_HOVER); + const auto& color = isActive ? aColors.Accent().GetDarker() : isHovered ? aColors.Accent().GetDark() : aColors.Accent().Get(); - backgroundColor = borderColor = color; - } else if (isPressed) { - backgroundColor = sColorGrey20; - borderColor = sColorGrey60; - } else if (isHovered) { - backgroundColor = sColorWhite; - borderColor = sColorGrey50; + return std::make_pair(color, color); } - return std::make_pair(backgroundColor, borderColor); + return ComputeTextfieldColors(aState, aColors); } sRGBColor nsNativeBasicTheme::ComputeCheckmarkColor(const EventStates& aState, const Colors& aColors) { - if (aColors.UseSystemColors()) { - return SystemColor(StyleSystemColor::Selecteditemtext); + if (aColors.HighContrast()) { + return aColors.System(StyleSystemColor::Selecteditemtext); } if (aState.HasState(NS_EVENT_STATE_DISABLED)) { return sColorWhiteAlpha80; @@ -473,9 +430,9 @@ sRGBColor nsNativeBasicTheme::ComputeCheckmarkColor(const EventStates& aState, sRGBColor nsNativeBasicTheme::ComputeBorderColor(const EventStates& aState, const Colors& aColors) { bool isDisabled = aState.HasState(NS_EVENT_STATE_DISABLED); - if (aColors.UseSystemColors()) { - return SystemColor(isDisabled ? StyleSystemColor::Graytext - : StyleSystemColor::Buttontext); + if (aColors.HighContrast()) { + return aColors.System(isDisabled ? StyleSystemColor::Graytext + : StyleSystemColor::Buttontext); } bool isActive = aState.HasAllStates(NS_EVENT_STATE_HOVER | NS_EVENT_STATE_ACTIVE); @@ -493,11 +450,12 @@ sRGBColor nsNativeBasicTheme::ComputeBorderColor(const EventStates& aState, // the border. But this looks harder to mess up. return sTransparent; } + bool dark = aColors.IsDark(); if (isActive) { - return sColorGrey60; + return dark ? sColorGrey20 : sColorGrey60; } if (isHovered) { - return sColorGrey50; + return dark ? sColorGrey30 : sColorGrey50; } return sColorGrey40; } @@ -510,20 +468,16 @@ std::pair nsNativeBasicTheme::ComputeButtonColors( bool isHovered = aState.HasState(NS_EVENT_STATE_HOVER); const sRGBColor backgroundColor = [&] { - if (aColors.UseSystemColors()) { - return SystemColor(StyleSystemColor::Buttonface); - } - if (isDisabled) { - return sColorGrey10Alpha50; + return aColors.System(StyleSystemColor::MozButtondisabledface); } if (isActive) { - return sColorGrey30; + return aColors.System(StyleSystemColor::MozButtonactiveface); } if (isHovered) { - return sColorGrey20; + return aColors.System(StyleSystemColor::MozButtonhoverface); } - return sColorGrey10; + return aColors.System(StyleSystemColor::Buttonface); }(); const sRGBColor borderColor = ComputeBorderColor(aState, aColors); @@ -537,13 +491,10 @@ constexpr nscolor kAutofillColor = NS_RGBA(255, 249, 145, 128); std::pair nsNativeBasicTheme::ComputeTextfieldColors( const EventStates& aState, const Colors& aColors) { nscolor backgroundColor = [&] { - if (aColors.UseSystemColors()) { - return SystemNsColor(StyleSystemColor::Field); - } if (aState.HasState(NS_EVENT_STATE_DISABLED)) { - return NS_RGBA(0xff, 0xff, 0xff, 128); + return aColors.SystemNs(StyleSystemColor::MozDisabledfield); } - return NS_RGB(0xff, 0xff, 0xff); + return aColors.SystemNs(StyleSystemColor::Field); }(); if (aState.HasState(NS_EVENT_STATE_AUTOFILL) && @@ -557,9 +508,9 @@ std::pair nsNativeBasicTheme::ComputeTextfieldColors( std::pair nsNativeBasicTheme::ComputeRangeProgressColors( const EventStates& aState, const Colors& aColors) { - if (aColors.UseSystemColors()) { - return SystemColorPair(StyleSystemColor::Selecteditem, - StyleSystemColor::Buttontext); + if (aColors.HighContrast()) { + return aColors.SystemPair(StyleSystemColor::Selecteditem, + StyleSystemColor::Buttontext); } bool isActive = @@ -579,9 +530,9 @@ std::pair nsNativeBasicTheme::ComputeRangeProgressColors( std::pair nsNativeBasicTheme::ComputeRangeTrackColors( const EventStates& aState, const Colors& aColors) { - if (aColors.UseSystemColors()) { - return SystemColorPair(StyleSystemColor::TextBackground, - StyleSystemColor::Buttontext); + if (aColors.HighContrast()) { + return aColors.SystemPair(StyleSystemColor::TextBackground, + StyleSystemColor::Buttontext); } bool isActive = aState.HasAllStates(NS_EVENT_STATE_HOVER | NS_EVENT_STATE_ACTIVE); @@ -599,9 +550,9 @@ std::pair nsNativeBasicTheme::ComputeRangeTrackColors( std::pair nsNativeBasicTheme::ComputeRangeThumbColors( const EventStates& aState, const Colors& aColors) { - if (aColors.UseSystemColors()) { - return SystemColorPair(StyleSystemColor::Selecteditemtext, - StyleSystemColor::Selecteditem); + if (aColors.HighContrast()) { + return aColors.SystemPair(StyleSystemColor::Selecteditemtext, + StyleSystemColor::Selecteditem); } bool isActive = @@ -629,25 +580,25 @@ std::pair nsNativeBasicTheme::ComputeRangeThumbColors( std::pair nsNativeBasicTheme::ComputeProgressColors( const Colors& aColors) { - if (aColors.UseSystemColors()) { - return SystemColorPair(StyleSystemColor::Selecteditem, - StyleSystemColor::Buttontext); + if (aColors.HighContrast()) { + return aColors.SystemPair(StyleSystemColor::Selecteditem, + StyleSystemColor::Buttontext); } return std::make_pair(aColors.Accent().Get(), aColors.Accent().GetDark()); } std::pair nsNativeBasicTheme::ComputeProgressTrackColors( const Colors& aColors) { - if (aColors.UseSystemColors()) { - return SystemColorPair(StyleSystemColor::Buttonface, - StyleSystemColor::Buttontext); + if (aColors.HighContrast()) { + return aColors.SystemPair(StyleSystemColor::Buttonface, + StyleSystemColor::Buttontext); } return std::make_pair(sColorGrey10, sColorGrey40); } std::pair nsNativeBasicTheme::ComputeMeterchunkColors( const EventStates& aMeterState, const Colors& aColors) { - if (aColors.UseSystemColors()) { + if (aColors.HighContrast()) { return ComputeProgressColors(aColors); } sRGBColor borderColor = sColorMeterGreen20; @@ -666,10 +617,10 @@ std::pair nsNativeBasicTheme::ComputeMeterchunkColors( std::array nsNativeBasicTheme::ComputeFocusRectColors( const Colors& aColors) { - if (aColors.UseSystemColors()) { - return {SystemColor(StyleSystemColor::Selecteditem), - SystemColor(StyleSystemColor::Buttontext), - SystemColor(StyleSystemColor::TextBackground)}; + if (aColors.HighContrast()) { + return {aColors.System(StyleSystemColor::Selecteditem), + aColors.System(StyleSystemColor::Buttontext), + aColors.System(StyleSystemColor::TextBackground)}; } return {aColors.Accent().Get(), sColorWhiteAlpha80, @@ -687,8 +638,8 @@ sRGBColor nsNativeBasicTheme::ComputeScrollbarTrackColor( nsIFrame* aFrame, const ComputedStyle& aStyle, const EventStates& aDocumentState, const Colors& aColors) { const nsStyleUI* ui = aStyle.StyleUI(); - if (aColors.UseSystemColors()) { - return SystemColor(StyleSystemColor::TextBackground); + if (aColors.HighContrast()) { + return aColors.System(StyleSystemColor::TextBackground); } if (ShouldUseDarkScrollbar(aFrame, aStyle)) { return sRGBColor::FromU8(20, 20, 25, 77); @@ -698,11 +649,11 @@ sRGBColor nsNativeBasicTheme::ComputeScrollbarTrackColor( ui->mScrollbarColor.AsColors().track.CalcColor(aStyle)); } if (aDocumentState.HasAllStates(NS_DOCUMENT_STATE_WINDOW_INACTIVE)) { - return SystemColorOrElse(StyleSystemColor::ThemedScrollbarInactive, - [] { return sScrollbarColor; }); + return aColors.SystemOrElse(StyleSystemColor::ThemedScrollbarInactive, + [] { return sScrollbarColor; }); } - return SystemColorOrElse(StyleSystemColor::ThemedScrollbar, - [] { return sScrollbarColor; }); + return aColors.SystemOrElse(StyleSystemColor::ThemedScrollbar, + [] { return sScrollbarColor; }); } nscolor nsNativeBasicTheme::AdjustUnthemedScrollbarThumbColor( @@ -834,7 +785,7 @@ sRGBColor nsNativeBasicTheme::ComputeScrollbarThumbColor( nsIFrame* aFrame, const ComputedStyle& aStyle, const EventStates& aElementState, const EventStates& aDocumentState, const Colors& aColors) { - if (!aColors.UseSystemColors() && ShouldUseDarkScrollbar(aFrame, aStyle)) { + if (!aColors.HighContrast() && ShouldUseDarkScrollbar(aFrame, aStyle)) { if (aElementState.HasState(NS_EVENT_STATE_ACTIVE) && StaticPrefs::widget_non_native_theme_scrollbar_active_always_themed()) { auto color = LookAndFeel::GetColor( @@ -859,24 +810,24 @@ sRGBColor nsNativeBasicTheme::ComputeScrollbarThumbColor( return StyleSystemColor::ThemedScrollbarThumbInactive; } if (aElementState.HasState(NS_EVENT_STATE_ACTIVE)) { - if (aColors.UseSystemColors()) { + if (aColors.HighContrast()) { return StyleSystemColor::Selecteditem; } return StyleSystemColor::ThemedScrollbarThumbActive; } if (aElementState.HasState(NS_EVENT_STATE_HOVER)) { - if (aColors.UseSystemColors()) { + if (aColors.HighContrast()) { return StyleSystemColor::Selecteditem; } return StyleSystemColor::ThemedScrollbarThumbHover; } - if (aColors.UseSystemColors()) { + if (aColors.HighContrast()) { return StyleSystemColor::TextForeground; } return StyleSystemColor::ThemedScrollbarThumb; }(); - return SystemColorOrElse(systemColor, [&] { + return aColors.SystemOrElse(systemColor, [&] { return sRGBColor::FromABGR(AdjustUnthemedScrollbarThumbColor( sScrollbarThumbColor.ToABGR(), aElementState)); }); @@ -887,14 +838,14 @@ nsNativeBasicTheme::ComputeScrollbarButtonColors( nsIFrame* aFrame, StyleAppearance aAppearance, const ComputedStyle& aStyle, const EventStates& aElementState, const EventStates& aDocumentState, const Colors& aColors) { - if (aColors.UseSystemColors()) { + if (aColors.HighContrast()) { if (aElementState.HasAtLeastOneOfStates(NS_EVENT_STATE_ACTIVE | NS_EVENT_STATE_HOVER)) { - return SystemColorPair(StyleSystemColor::Selecteditem, - StyleSystemColor::Buttonface); + return aColors.SystemPair(StyleSystemColor::Selecteditem, + StyleSystemColor::Buttonface); } - return SystemColorPair(StyleSystemColor::TextBackground, - StyleSystemColor::TextForeground); + return aColors.SystemPair(StyleSystemColor::TextBackground, + StyleSystemColor::TextForeground); } auto trackColor = @@ -1805,14 +1756,13 @@ static LayoutDeviceRect ToSnappedRect( return LayoutDeviceRect::FromAppUnits(aRect, aTwipsPerPixel); } -auto nsNativeBasicTheme::ShouldUseSystemColors(const nsPresContext& aPc) - -> UseSystemColors { +bool nsNativeBasicTheme::ShouldBeHighContrast(const nsPresContext& aPc) { // We make sure that we're drawing backgrounds, since otherwise layout will // darken our used text colors etc anyways, and that can cause contrast issues // with dark high-contrast themes. - return UseSystemColors(aPc.GetBackgroundColorDraw() && - PreferenceSheet::PrefsFor(*aPc.Document()) - .NonNativeThemeShouldUseSystemColors()); + return aPc.GetBackgroundColorDraw() && + PreferenceSheet::PrefsFor(*aPc.Document()) + .NonNativeThemeShouldBeHighContrast(); } template diff --git a/widget/nsNativeBasicTheme.h b/widget/nsNativeBasicTheme.h index 245c60258b13..285593a87895 100644 --- a/widget/nsNativeBasicTheme.h +++ b/widget/nsNativeBasicTheme.h @@ -43,12 +43,8 @@ static constexpr gfx::sRGBColor sColorGrey40Alpha50( gfx::sRGBColor::UnusualFromARGB(0x7f8f8f9d)); static constexpr gfx::sRGBColor sColorGrey50( gfx::sRGBColor::UnusualFromARGB(0xff676774)); -static constexpr gfx::sRGBColor sColorGrey50Alpha50( - gfx::sRGBColor::UnusualFromARGB(0x7f676774)); static constexpr gfx::sRGBColor sColorGrey60( gfx::sRGBColor::UnusualFromARGB(0xff484851)); -static constexpr gfx::sRGBColor sColorGrey60Alpha50( - gfx::sRGBColor::UnusualFromARGB(0x7f484851)); static constexpr gfx::sRGBColor sColorMeterGreen10( gfx::sRGBColor::UnusualFromARGB(0xff00ab60)); @@ -187,8 +183,7 @@ class nsNativeBasicTheme : protected nsNativeTheme, public nsITheme { static DPIRatio GetDPIRatio(nsIFrame*, StyleAppearance); // Whether we should use system colors (for high contrast mode). - enum class UseSystemColors : bool { No, Yes }; - static UseSystemColors ShouldUseSystemColors(const nsPresContext&); + static bool ShouldBeHighContrast(const nsPresContext&); std::pair ComputeCheckboxColors(const EventStates&, StyleAppearance, diff --git a/widget/nsXPLookAndFeel.cpp b/widget/nsXPLookAndFeel.cpp index 886e3f80bb8d..80cd2c15387a 100644 --- a/widget/nsXPLookAndFeel.cpp +++ b/widget/nsXPLookAndFeel.cpp @@ -240,6 +240,7 @@ static const char sColorPrefs[][41] = { "ui.buttontext", "ui.captiontext", "ui.-moz-field", + "ui.-moz-disabledfield", "ui.-moz-fieldtext", "ui.graytext", "ui.highlight", @@ -280,6 +281,7 @@ static const char sColorPrefs[][41] = { "ui.-moz_oddtreerow", "ui.-moz-buttonactivetext", "ui.-moz-buttonactiveface", + "ui.-moz-buttondisabledface", "ui.-moz_mac_chrome_active", "ui.-moz_mac_chrome_inactive", "ui.-moz-mac-defaultbuttontext", @@ -512,23 +514,37 @@ nscolor nsXPLookAndFeel::GetStandinForNativeColor(ColorID aID, } } - // The stand-in colors are taken from the Windows 7 Aero theme - // except Mac-specific colors which are taken from Mac OS 10.7. + // The stand-in colors are taken from what the non-native theme needs (for + // field/button colors), the Windows 7 Aero theme except Mac-specific colors + // which are taken from Mac OS 10.7. #define COLOR(name_, r, g, b) \ case ColorID::name_: \ return NS_RGB(r, g, b); +#define COLORA(name_, r, g, b, a) \ + case ColorID::name_: \ + return NS_RGBA(r, g, b, a); + switch (aID) { // CSS 2 colors: COLOR(Activeborder, 0xB4, 0xB4, 0xB4) COLOR(Activecaption, 0x99, 0xB4, 0xD1) COLOR(Appworkspace, 0xAB, 0xAB, 0xAB) COLOR(Background, 0x00, 0x00, 0x00) - COLOR(Buttonface, 0xF0, 0xF0, 0xF0) COLOR(Buttonhighlight, 0xFF, 0xFF, 0xFF) COLOR(Buttonshadow, 0xA0, 0xA0, 0xA0) + + // Buttons and comboboxes should be kept in sync since they are drawn with + // the same colors by the non-native theme. + COLOR(Buttonface, 0xe9, 0xe9, 0xed) + COLORA(MozButtondisabledface, 0xe9, 0xe9, 0xed, 128) + + COLOR(MozCombobox, 0xe9, 0xe9, 0xed) + COLOR(Buttontext, 0x00, 0x00, 0x00) + COLOR(MozComboboxtext, 0x00, 0x00, 0x00) + COLOR(Captiontext, 0x00, 0x00, 0x00) COLOR(Graytext, 0x6D, 0x6D, 0x6D) COLOR(Highlight, 0x33, 0x99, 0xFF) @@ -551,6 +567,7 @@ nscolor nsXPLookAndFeel::GetStandinForNativeColor(ColorID aID, COLOR(Windowtext, 0x00, 0x00, 0x00) COLOR(MozButtondefault, 0x69, 0x69, 0x69) COLOR(Field, 0xFF, 0xFF, 0xFF) + COLORA(MozDisabledfield, 0xFF, 0xFF, 0xFF, 128) COLOR(Fieldtext, 0x00, 0x00, 0x00) COLOR(MozDialog, 0xF0, 0xF0, 0xF0) COLOR(MozDialogtext, 0x00, 0x00, 0x00) @@ -561,9 +578,9 @@ nscolor nsXPLookAndFeel::GetStandinForNativeColor(ColorID aID, COLOR(MozCellhighlighttext, 0x00, 0x00, 0x00) COLOR(Selecteditem, 0x33, 0x99, 0xFF) COLOR(Selecteditemtext, 0xFF, 0xFF, 0xFF) - COLOR(MozButtonhoverface, 0xF0, 0xF0, 0xF0) + COLOR(MozButtonhoverface, 0xd0, 0xd0, 0xd7) COLOR(MozButtonhovertext, 0x00, 0x00, 0x00) - COLOR(MozButtonactiveface, 0xF0, 0xF0, 0xF0) + COLOR(MozButtonactiveface, 0xb1, 0xb1, 0xb9) COLOR(MozButtonactivetext, 0x00, 0x00, 0x00) COLOR(MozMenuhover, 0x33, 0x99, 0xFF) COLOR(MozMenuhovertext, 0x00, 0x00, 0x00) @@ -593,8 +610,6 @@ nscolor nsXPLookAndFeel::GetStandinForNativeColor(ColorID aID, COLOR(MozWinCommunicationstext, 0xFF, 0xFF, 0xFF) COLOR(MozNativehyperlinktext, 0x00, 0x66, 0xCC) COLOR(MozNativevisitedhyperlinktext, 0x55, 0x1A, 0x8B) - COLOR(MozComboboxtext, 0x00, 0x00, 0x00) - COLOR(MozCombobox, 0xFF, 0xFF, 0xFF) default: break; } @@ -602,16 +617,19 @@ nscolor nsXPLookAndFeel::GetStandinForNativeColor(ColorID aID, } #undef COLOR +#undef COLORA // Taken from in-content/common.inc.css's dark theme. Maybe nsXPLookAndFeel::GenericDarkColor(ColorID aID) { nscolor color = NS_RGB(0, 0, 0); + static constexpr nscolor kWindowBackground = NS_RGB(28, 27, 34); + static constexpr nscolor kWindowText = NS_RGB(251, 251, 254); switch (aID) { case ColorID::Window: // --in-content-page-background case ColorID::WindowBackground: case ColorID::Background: case ColorID::TextBackground: - color = NS_RGB(28, 27, 34); + color = kWindowBackground; break; case ColorID::MozDialog: // --in-content-box-background color = NS_RGB(35, 34, 43); @@ -623,23 +641,37 @@ Maybe nsXPLookAndFeel::GenericDarkColor(ColorID aID) { case ColorID::Fieldtext: case ColorID::Buttontext: // --in-content-button-text-color (via // --in-content-page-color) + case ColorID::MozComboboxtext: case ColorID::MozButtonhovertext: case ColorID::MozButtonactivetext: - color = NS_RGB(251, 251, 254); + color = kWindowText; break; - case ColorID::Graytext: // --in-content-deemphasized-text - color = NS_RGB(191, 191, 201); + case ColorID::Threedlightshadow: // --in-content-box-border-color computed + // with kWindowText above + // kWindowBackground. + case ColorID::Graytext: // opacity: 0.4 of kWindowText blended over the + // "Window" background color, which happens to be + // the same :-) + color = NS_ComposeColors(kWindowBackground, NS_RGBA(251, 251, 254, 102)); break; case ColorID::Selecteditem: // --in-content-primary-button-background / // --in-content-item-selected color = NS_RGB(0, 221, 255); break; case ColorID::Field: - case ColorID::Buttonface: // --in-content-button-background + case ColorID::Buttonface: // --in-content-button-background + case ColorID::MozCombobox: case ColorID::Selecteditemtext: // --in-content-primary-button-text-color / // --in-content-item-selected-text color = NS_RGB(43, 42, 51); break; + case ColorID::Threeddarkshadow: // Same as Threedlightshadow but with the + // background. + case ColorID::MozDisabledfield: // opacity: 0.4 of the face above blended + // over the "Window" background color. + case ColorID::MozButtondisabledface: + color = NS_ComposeColors(kWindowBackground, NS_RGBA(43, 42, 51, 102)); + break; case ColorID::MozButtonhoverface: // --in-content-button-background-hover color = NS_RGB(82, 82, 94); break; @@ -979,9 +1011,9 @@ static bool ShouldUseStandinsForNativeColorForNonNativeTheme( return false; } - // The native theme doesn't use system colors backgrounds etc, except when in - // high-contrast mode, so spoof some of the colors with stand-ins to prevent - // lack of contrast. + // The native theme doesn't use native system colors backgrounds etc, except + // when in high-contrast mode, so spoof some of the colors with stand-ins to + // prevent lack of contrast. switch (aColor) { case ColorID::Buttonface: case ColorID::Buttontext: @@ -989,17 +1021,23 @@ static bool ShouldUseStandinsForNativeColorForNonNativeTheme( case ColorID::MozButtonhovertext: case ColorID::MozButtonactiveface: case ColorID::MozButtonactivetext: + case ColorID::MozButtondisabledface: + + case ColorID::Threedlightshadow: + case ColorID::Threeddarkshadow: + case ColorID::Threedface: case ColorID::MozCombobox: case ColorID::MozComboboxtext: case ColorID::Field: + case ColorID::MozDisabledfield: case ColorID::Fieldtext: case ColorID::Graytext: return !PreferenceSheet::PrefsFor(aDoc) - .NonNativeThemeShouldUseSystemColors(); + .NonNativeThemeShouldBeHighContrast(); default: break; @@ -1157,19 +1195,13 @@ static bool ColorIsCSSAccessible(LookAndFeel::ColorID aId) { return true; } -LookAndFeel::UseStandins LookAndFeel::ShouldAlwaysUseStandinsForColorInContent( - ColorID aId) { - return UseStandins(nsContentUtils::UseStandinsForNativeColors() && - ColorIsCSSAccessible(aId)); -} - LookAndFeel::UseStandins LookAndFeel::ShouldUseStandins( const dom::Document& aDoc, ColorID aId) { if (ShouldUseStandinsForNativeColorForNonNativeTheme(aDoc, aId)) { return UseStandins::Yes; } - if (ShouldAlwaysUseStandinsForColorInContent(aId) == UseStandins::Yes && - !nsContentUtils::IsChromeDoc(&aDoc)) { + if (nsContentUtils::UseStandinsForNativeColors() && + ColorIsCSSAccessible(aId) && !nsContentUtils::IsChromeDoc(&aDoc)) { return UseStandins::Yes; } if (aDoc.IsStaticDocument() && diff --git a/widget/windows/nsLookAndFeel.cpp b/widget/windows/nsLookAndFeel.cpp index 0246505c9cab..1ad166397fd3 100644 --- a/widget/windows/nsLookAndFeel.cpp +++ b/widget/windows/nsLookAndFeel.cpp @@ -193,6 +193,7 @@ nsresult nsLookAndFeel::NativeGetColor(ColorID aID, ColorScheme aScheme, case ColorID::Buttonface: case ColorID::MozButtonhoverface: case ColorID::MozButtonactiveface: + case ColorID::MozButtondisabledface: idx = COLOR_BTNFACE; break; case ColorID::Buttonhighlight: @@ -279,6 +280,7 @@ nsresult nsLookAndFeel::NativeGetColor(ColorID aID, ColorScheme aScheme, idx = COLOR_3DHIGHLIGHT; break; case ColorID::Threedlightshadow: + case ColorID::MozDisabledfield: idx = COLOR_3DLIGHT; break; case ColorID::Threedshadow: