Add a '-moz-win-accentcolor' color keyword to expose the Win10 accent color.

This commit is contained in:
Pale Moon
2017-07-09 04:23:16 +02:00
committed by Roy Tam
parent dabd6dc169
commit cbd7f2de83
7 changed files with 79 additions and 0 deletions
+1
View File
@@ -685,6 +685,7 @@ CSS_KEY(button-focus, button_focus)
CSS_KEY(-moz-win-media-toolbox, _moz_win_media_toolbox)
CSS_KEY(-moz-win-communications-toolbox, _moz_win_communications_toolbox)
CSS_KEY(-moz-win-browsertabbar-toolbox, _moz_win_browsertabbar_toolbox)
CSS_KEY(-moz-win-accentcolor, _moz_win_accentcolor)
CSS_KEY(-moz-win-mediatext, _moz_win_mediatext)
CSS_KEY(-moz-win-communicationstext, _moz_win_communicationstext)
CSS_KEY(-moz-win-glass, _moz_win_glass)
+1
View File
@@ -971,6 +971,7 @@ const KTableValue nsCSSProps::kColorKTable[] = {
eCSSKeyword__moz_oddtreerow, LookAndFeel::eColorID__moz_oddtreerow,
eCSSKeyword__moz_visitedhyperlinktext, NS_COLOR_MOZ_VISITEDHYPERLINKTEXT,
eCSSKeyword_currentcolor, NS_COLOR_CURRENTCOLOR,
eCSSKeyword__moz_win_accentcolor, LookAndFeel::eColorID__moz_win_accentcolor,
eCSSKeyword__moz_win_mediatext, LookAndFeel::eColorID__moz_win_mediatext,
eCSSKeyword__moz_win_communicationstext, LookAndFeel::eColorID__moz_win_communicationstext,
eCSSKeyword__moz_nativehyperlinktext, LookAndFeel::eColorID__moz_nativehyperlinktext,
+2
View File
@@ -151,6 +151,8 @@ public:
// vista rebars
// accent color for title bar
eColorID__moz_win_accentcolor,
// media rebar text
eColorID__moz_win_mediatext,
// communications rebar text
+1
View File
@@ -226,6 +226,7 @@ const char nsXPLookAndFeel::sColorPrefs[][38] =
"ui.-moz-mac-menutextselect",
"ui.-moz_mac_disabledtoolbartext",
"ui.-moz-mac-secondaryhighlight",
"ui.-moz-win-accentcolor",
"ui.-moz-win-mediatext",
"ui.-moz-win-communicationstext",
"ui.-moz-nativehyperlinktext",
+50
View File
@@ -277,6 +277,16 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor &aColor)
case eColorID__moz_cellhighlight:
idx = COLOR_3DFACE;
break;
case eColorID__moz_win_accentcolor:
res = GetAccentColor(aColor);
if (NS_SUCCEEDED(res)) {
return res;
}
NS_WARNING("Using fallback for accent color - UI code failed to use the "
"-moz-windows-accent-color-applies media query properly");
// Seems to be the default color (hardcoded because of bug 1065998)
aColor = NS_RGB(158, 158, 158);
return NS_OK;
case eColorID__moz_win_mediatext:
if (IsVistaOrLater() && IsAppThemed()) {
res = ::GetColorFromTheme(eUXMediaToolbar,
@@ -677,3 +687,43 @@ nsLookAndFeel::GetPasswordCharacterImpl()
#define UNICODE_BLACK_CIRCLE_CHAR 0x25cf
return UNICODE_BLACK_CIRCLE_CHAR;
}
/* static */ nsresult
nsLookAndFeel::GetAccentColor(nscolor& aColor)
{
nsresult rv;
if (!mDwmKey) {
mDwmKey = do_CreateInstance("@mozilla.org/windows-registry-key;1", &rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
}
rv = mDwmKey->Open(nsIWindowsRegKey::ROOT_KEY_CURRENT_USER,
NS_LITERAL_STRING("SOFTWARE\\Microsoft\\Windows\\DWM"),
nsIWindowsRegKey::ACCESS_QUERY_VALUE);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
// The ColorPrevalence value is set to 1 when the "Show color on title bar"
// setting in the Color section of Window's Personalization settings is
// turned on.
uint32_t accentColor, colorPrevalence;
if (NS_SUCCEEDED(mDwmKey->ReadIntValue(NS_LITERAL_STRING("AccentColor"), &accentColor)) &&
NS_SUCCEEDED(mDwmKey->ReadIntValue(NS_LITERAL_STRING("ColorPrevalence"), &colorPrevalence)) &&
colorPrevalence == 1) {
// The order of the color components in the DWORD stored in the registry
// happens to be the same order as we store the components in nscolor
// so we can just assign directly here.
aColor = accentColor;
rv = NS_OK;
} else {
rv = NS_ERROR_NOT_AVAILABLE;
}
mDwmKey->Close();
return rv;
}
+11
View File
@@ -5,7 +5,9 @@
#ifndef __nsLookAndFeel
#define __nsLookAndFeel
#include "nsXPLookAndFeel.h"
#include "nsIWindowsRegKey.h"
/*
* Gesture System Metrics
@@ -34,6 +36,15 @@ public:
gfxFontStyle& aFontStyle,
float aDevPixPerCSSPixel);
virtual char16_t GetPasswordCharacterImpl();
private:
/**
* Fetches the Windows accent color from the Windows settings if
* the accent color is set to apply to the title bar, otherwise
* returns an error code.
*/
nsresult GetAccentColor(nscolor& aColor);
nsCOMPtr<nsIWindowsRegKey> mDwmKey;
};
#endif
+13
View File
@@ -4630,6 +4630,19 @@ nsWindow::ProcessMessage(UINT msg, WPARAM& wParam, LPARAM& lParam,
}
break;
case WM_SETTINGCHANGE:
{
if (lParam) {
auto lParamString = reinterpret_cast<const wchar_t*>(lParam);
if (!wcscmp(lParamString, L"ImmersiveColorSet")) {
// WM_SYSCOLORCHANGE is not dispatched for accent color changes
OnSysColorChanged();
break;
}
}
}
break;
case WM_NCCALCSIZE:
{
if (mCustomNonClient) {