diff options
Diffstat (limited to 'layout/style/nsMediaFeatures.cpp')
-rw-r--r-- | layout/style/nsMediaFeatures.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp index e44003ce48..9b5331a4a1 100644 --- a/layout/style/nsMediaFeatures.cpp +++ b/layout/style/nsMediaFeatures.cpp @@ -20,6 +20,7 @@ #include "nsIDocument.h" #include "nsIWidget.h" #include "nsContentUtils.h" +#include "mozilla/Preferences.h" #include "mozilla/StyleSheet.h" #include "mozilla/StyleSheetInlines.h" @@ -45,6 +46,12 @@ static const nsCSSProps::KTableEntry kDisplayModeKeywords[] = { { eCSSKeyword_UNKNOWN, -1 } }; +static const nsCSSProps::KTableEntry kPrefersColorSchemeKeywords[] = { + { eCSSKeyword_light, NS_STYLE_PREFERS_COLOR_SCHEME_LIGHT }, + { eCSSKeyword_dark, NS_STYLE_PREFERS_COLOR_SCHEME_DARK }, + { eCSSKeyword_UNKNOWN, -1 }, +}; + #ifdef XP_WIN struct WindowsThemeName { LookAndFeel::WindowsTheme id; @@ -456,6 +463,25 @@ GetOperatingSystemVersion(nsPresContext* aPresContext, const nsMediaFeature* aFe } static nsresult +GetPrefersColorScheme(nsPresContext* aPresContext, const nsMediaFeature* aFeature, + nsCSSValue& aResult) +{ + switch(Preferences::GetInt("browser.display.prefers_color_scheme", 1)) { + case 1: + aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_LIGHT, + eCSSUnit_Enumerated); + break; + case 2: + aResult.SetIntValue(NS_STYLE_PREFERS_COLOR_SCHEME_DARK, + eCSSUnit_Enumerated); + break; + default: + aResult.Reset(); + } + return NS_OK; +} + +static nsresult GetIsGlyph(nsPresContext* aPresContext, const nsMediaFeature* aFeature, nsCSSValue& aResult) { @@ -555,6 +581,14 @@ nsMediaFeatures::features[] = { GetMonochrome }, { + &nsGkAtoms::prefers_color_scheme, + nsMediaFeature::eMinMaxNotAllowed, + nsMediaFeature::eEnumerated, + nsMediaFeature::eNoRequirements, + { kPrefersColorSchemeKeywords }, + GetPrefersColorScheme + }, + { &nsGkAtoms::resolution, nsMediaFeature::eMinMaxAllowed, nsMediaFeature::eResolution, |