Issue #1784 - Add -moz-dark-theme media query and allow prefers-color-scheme to follow it.

This commit is contained in:
athenian200 2021-06-22 18:14:44 +00:00 committed by roytam1
commit efc6048941
3 changed files with 64 additions and 7 deletions

View file

@ -2267,6 +2267,7 @@ GK_ATOM(windows_theme_generic, "windows-theme-generic")
// And the same again, as media query keywords.
GK_ATOM(_moz_color_picker_available, "-moz-color-picker-available")
GK_ATOM(_moz_dark_theme, "-moz-dark-theme")
GK_ATOM(_moz_scrollbar_start_backward, "-moz-scrollbar-start-backward")
GK_ATOM(_moz_scrollbar_start_forward, "-moz-scrollbar-start-forward")
GK_ATOM(_moz_scrollbar_end_backward, "-moz-scrollbar-end-backward")

View file

@ -466,20 +466,60 @@ GetOperatingSystemVersion(nsPresContext* aPresContext, const nsMediaFeature* aFe
static nsresult
GetPrefersColorScheme(nsPresContext* aPresContext, const nsMediaFeature* aFeature,
nsCSSValue& aResult)
nsCSSValue& aResult)
{
switch(Preferences::GetInt("browser.display.prefers_color_scheme", 1)) {
case 1:
aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_LIGHT,
eCSSUnit_Enumerated);
break;
aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_LIGHT,
eCSSUnit_Enumerated);
break;
case 2:
aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_DARK,
eCSSUnit_Enumerated);
break;
aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_DARK,
eCSSUnit_Enumerated);
break;
case 3:
// If the pref is 3, we follow ui.color_scheme instead. When following
// ui.color_scheme, light theme is the fallback behavior.
switch(Preferences::GetInt("ui.color_scheme", 1)) {
case 2:
aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_DARK,
eCSSUnit_Enumerated);
break;
default:
aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_LIGHT,
eCSSUnit_Enumerated);
}
break;
default:
aResult.Reset();
aResult.Reset();
}
return NS_OK;
}
static nsresult
GetDarkTheme(nsPresContext* aPresContext, const nsMediaFeature* aFeature,
nsCSSValue& aResult)
{
#ifdef XP_WIN
// Under Windows, do nothing if High Contrast Theme is on.
if (LookAndFeel::GetInt(LookAndFeel::eIntID_UseAccessibilityTheme, 0)) {
aResult.Reset();
return NS_OK;
}
#endif
switch(Preferences::GetInt("ui.color_scheme", 1)) {
case 1:
aResult.SetIntValue(0, eCSSUnit_Integer);
break;
case 2:
aResult.SetIntValue(1, eCSSUnit_Integer);
break;
default:
aResult.Reset();
}
return NS_OK;
}
@ -645,6 +685,14 @@ nsMediaFeatures::features[] = {
},
// Mozilla extensions
{
&nsGkAtoms::_moz_dark_theme,
nsMediaFeature::eMinMaxNotAllowed,
nsMediaFeature::eBoolInteger,
nsMediaFeature::eNoRequirements,
{ nullptr },
GetDarkTheme
},
{
&nsGkAtoms::_moz_device_pixel_ratio,
nsMediaFeature::eMinMaxAllowed,

View file

@ -250,6 +250,13 @@ pref("browser.sessionhistory.max_total_viewers", -1);
// See https://github.com/MoonchildProductions/UXP/issues/719
pref("browser.newtabpage.add_to_session_history", false);
// Determines whether the browser's current theme should be light or dark.
// 0 = feature disabled
// 1 = default: light theme
// 2 = dark theme
pref("ui.color_scheme", 1);
pref("ui.use_native_colors", true);
#ifdef MOZ_WIDGET_GTK
// Determines whether the menubar is shown in the global menubar or not.
@ -269,6 +276,7 @@ pref("browser.display.document_color_use", 0);
// 0 = feature disabled
// 1 = default: light theme preferred
// 2 = dark theme preferred
// 3 = match ui.color_scheme
pref("browser.display.prefers_color_scheme", 1);
pref("browser.display.use_system_colors", false);
pref("browser.display.foreground_color", "#000000");