Add inverted-color-scheme-changed event

This commit is contained in:
Kevin Sawicki 2016-10-07 09:38:19 -07:00
parent 223e9d97a0
commit 8b16b82ce9
3 changed files with 45 additions and 3 deletions

View file

@ -16,9 +16,9 @@ namespace api {
SystemPreferences::SystemPreferences(v8::Isolate* isolate) { SystemPreferences::SystemPreferences(v8::Isolate* isolate) {
Init(isolate); Init(isolate);
#if defined(OS_WIN) #if defined(OS_WIN)
InitializeWindow(); InitializeWindow();
#endif #endif
} }
SystemPreferences::~SystemPreferences() { SystemPreferences::~SystemPreferences() {
@ -30,6 +30,10 @@ bool SystemPreferences::IsDarkMode() {
} }
#endif #endif
bool SystemPreferences::IsInvertedColorScheme() {
return color_utils::IsInvertedColorScheme();
}
// static // static
mate::Handle<SystemPreferences> SystemPreferences::Create( mate::Handle<SystemPreferences> SystemPreferences::Create(
v8::Isolate* isolate) { v8::Isolate* isolate) {
@ -62,7 +66,7 @@ void SystemPreferences::BuildPrototype(
&SystemPreferences::IsSwipeTrackingFromScrollEventsEnabled) &SystemPreferences::IsSwipeTrackingFromScrollEventsEnabled)
#endif #endif
.SetMethod("isInvertedColorScheme", .SetMethod("isInvertedColorScheme",
&color_utils::IsInvertedColorScheme) &SystemPreferences::IsInvertedColorScheme)
.SetMethod("isDarkMode", &SystemPreferences::IsDarkMode); .SetMethod("isDarkMode", &SystemPreferences::IsDarkMode);
} }

View file

@ -12,6 +12,10 @@
#include "base/values.h" #include "base/values.h"
#include "native_mate/handle.h" #include "native_mate/handle.h"
#if defined(OS_WIN)
#include "ui/gfx/sys_color_change_listener.h"
#endif
namespace base { namespace base {
class DictionaryValue; class DictionaryValue;
} }
@ -39,6 +43,8 @@ class SystemPreferences : public mate::EventEmitter<SystemPreferences> {
void InitializeWindow(); void InitializeWindow();
void OnColorChanged();
#elif defined(OS_MACOSX) #elif defined(OS_MACOSX)
using NotificationCallback = base::Callback< using NotificationCallback = base::Callback<
@ -59,6 +65,7 @@ class SystemPreferences : public mate::EventEmitter<SystemPreferences> {
bool IsSwipeTrackingFromScrollEventsEnabled(); bool IsSwipeTrackingFromScrollEventsEnabled();
#endif #endif
bool IsDarkMode(); bool IsDarkMode();
bool IsInvertedColorScheme();
protected: protected:
explicit SystemPreferences(v8::Isolate* isolate); explicit SystemPreferences(v8::Isolate* isolate);
@ -93,6 +100,10 @@ class SystemPreferences : public mate::EventEmitter<SystemPreferences> {
HWND window_; HWND window_;
std::string current_color_; std::string current_color_;
bool invertered_color_scheme_ = false;
std::unique_ptr<gfx::ScopedSysColorChangeListener> color_change_listener_;
#endif #endif
DISALLOW_COPY_AND_ASSIGN(SystemPreferences); DISALLOW_COPY_AND_ASSIGN(SystemPreferences);
}; };

View file

@ -19,6 +19,21 @@ const wchar_t kSystemPreferencesWindowClass[] =
namespace api { namespace api {
class SystemPreferencesColorChangeListener :
public gfx::SysColorChangeListener {
public:
explicit SystemPreferencesColorChangeListener(SystemPreferences* prefs):
prefs_(prefs) {
}
void OnSysColorChange() {
prefs_->OnColorChanged();
}
private:
SystemPreferences* prefs_;
};
bool SystemPreferences::IsAeroGlassEnabled() { bool SystemPreferences::IsAeroGlassEnabled() {
return ui::win::IsAeroGlassEnabled(); return ui::win::IsAeroGlassEnabled();
} }
@ -59,6 +74,10 @@ void SystemPreferences::InitializeWindow() {
0, WS_POPUP, 0, 0, 0, 0, 0, 0, instance_, 0); 0, WS_POPUP, 0, 0, 0, 0, 0, 0, instance_, 0);
gfx::CheckWindowCreated(window_); gfx::CheckWindowCreated(window_);
gfx::SetWindowUserData(window_, this); gfx::SetWindowUserData(window_, this);
color_change_listener_.reset(
new gfx::ScopedSysColorChangeListener(
new SystemPreferencesColorChangeListener(this)));
} }
LRESULT CALLBACK SystemPreferences::WndProcStatic(HWND hwnd, LRESULT CALLBACK SystemPreferences::WndProcStatic(HWND hwnd,
@ -88,6 +107,14 @@ LRESULT CALLBACK SystemPreferences::WndProc(HWND hwnd,
return ::DefWindowProc(hwnd, message, wparam, lparam); return ::DefWindowProc(hwnd, message, wparam, lparam);
} }
void SystemPreferences::OnColorChanged() {
bool new_invertered_color_scheme = IsInvertedColorScheme();
if (new_invertered_color_scheme != invertered_color_scheme_) {
Emit("inverted-color-scheme-changed", new_invertered_color_scheme);
invertered_color_scheme_ = new_invertered_color_scheme;
}
}
} // namespace api } // namespace api
} // namespace atom } // namespace atom