mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-15 08:53:07 +09:00
Issue #1752 - Implement "prefers-color-scheme" as a user preference.
This PR passes all current tests for this feature, and implements the "prefers-color-scheme" media query as an enumerated keyword that is controlled by an integer preference. Currently, the possible options are 0 to see a website's fallback code and essentially behave like this isn't implemented (our current behavior), 1 to express a preference for a light theme (the default for spec reasons), and 2 to express a preference for a dark theme. Over time, this list may expand to include other preferences like a preference for a sepia theme or something, and this leaves us prepared for that future.
This commit is contained in:
parent
407a983af1
commit
da2461fa57
5 changed files with 45 additions and 0 deletions
|
|
@ -2240,6 +2240,7 @@ GK_ATOM(scrollbar_end_backward, "scrollbar-end-backward")
|
|||
GK_ATOM(scrollbar_end_forward, "scrollbar-end-forward")
|
||||
GK_ATOM(scrollbar_thumb_proportional, "scrollbar-thumb-proportional")
|
||||
GK_ATOM(overlay_scrollbars, "overlay-scrollbars")
|
||||
GK_ATOM(prefers_color_scheme, "prefers-color-scheme")
|
||||
GK_ATOM(windows_accent_color_applies, "windows-accent-color-applies")
|
||||
GK_ATOM(windows_accent_color_is_dark, "windows-accent-color-is-dark")
|
||||
GK_ATOM(windows_default_theme, "windows-default-theme")
|
||||
|
|
|
|||
|
|
@ -224,6 +224,7 @@ CSS_KEY(crosshair, crosshair)
|
|||
CSS_KEY(currentcolor, currentcolor)
|
||||
CSS_KEY(cursive, cursive)
|
||||
CSS_KEY(cyclic, cyclic)
|
||||
CSS_KEY(dark, dark)
|
||||
CSS_KEY(darken, darken)
|
||||
CSS_KEY(dashed, dashed)
|
||||
CSS_KEY(dense, dense)
|
||||
|
|
@ -364,6 +365,7 @@ CSS_KEY(last baseline, last_baseline) // only used for DevTools auto-completion
|
|||
CSS_KEY(layout, layout)
|
||||
CSS_KEY(left, left)
|
||||
CSS_KEY(legacy, legacy)
|
||||
CSS_KEY(light, light)
|
||||
CSS_KEY(lighten, lighten)
|
||||
CSS_KEY(lighter, lighter)
|
||||
CSS_KEY(line-through, line_through)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -457,6 +464,25 @@ GetOperatingSystemVersion(nsPresContext* aPresContext, const nsMediaFeature* aFe
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
@ -556,6 +582,14 @@ nsMediaFeatures::features[] = {
|
|||
{ nullptr },
|
||||
GetMonochrome
|
||||
},
|
||||
{
|
||||
&nsGkAtoms::prefers_color_scheme,
|
||||
nsMediaFeature::eMinMaxNotAllowed,
|
||||
nsMediaFeature::eEnumerated,
|
||||
nsMediaFeature::eNoRequirements,
|
||||
{ kPrefersColorSchemeKeywords },
|
||||
GetPrefersColorScheme
|
||||
},
|
||||
{
|
||||
&nsGkAtoms::resolution,
|
||||
nsMediaFeature::eMinMaxAllowed,
|
||||
|
|
|
|||
|
|
@ -1306,6 +1306,10 @@ enum class StyleDisplay : uint8_t {
|
|||
#define NS_STYLE_DISPLAY_MODE_STANDALONE 2
|
||||
#define NS_STYLE_DISPLAY_MODE_FULLSCREEN 3
|
||||
|
||||
// prefers-color-scheme
|
||||
#define NS_STYLE_PREFERS_COLOR_SCHEME_LIGHT 0
|
||||
#define NS_STYLE_PREFERS_COLOR_SCHEME_DARK 1
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
#endif /* nsStyleConsts_h___ */
|
||||
|
|
|
|||
|
|
@ -266,6 +266,10 @@ pref("browser.display.use_document_fonts", 1); // 0 = never, 1 = quick, 2 = al
|
|||
// 1 = always
|
||||
// 2 = never
|
||||
pref("browser.display.document_color_use", 0);
|
||||
// 0 = feature disabled
|
||||
// 1 = default: light theme preferred
|
||||
// 2 = dark theme preferred
|
||||
pref("browser.display.prefers_color_scheme", 1);
|
||||
pref("browser.display.use_system_colors", false);
|
||||
pref("browser.display.foreground_color", "#000000");
|
||||
pref("browser.display.background_color", "#FFFFFF");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue