![trop[bot]](/assets/img/avatar_default.png)
feat: expose shouldUseDarkColorsForSystemIntegratedUI Closes https://github.com/electron/electron/issues/46429. Refs https://github.com/electron/electron/pull/19735. This PR adds a new API `shouldUseDarkColorsForSystemIntegratedUI` to the `nativeTheme` module. This API returns a boolean indicating whether the system is using dark colors for system integrated UI elements. This is useful for applications that want to adapt their UI to match the system theme, especially for those that use system integrated UI elements like the shell theme or taskbar appearance. Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
80 lines
2.4 KiB
C++
80 lines
2.4 KiB
C++
// Copyright (c) 2019 Slack Technologies, Inc.
|
|
// Use of this source code is governed by the MIT license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef ELECTRON_SHELL_BROWSER_API_ELECTRON_API_NATIVE_THEME_H_
|
|
#define ELECTRON_SHELL_BROWSER_API_ELECTRON_API_NATIVE_THEME_H_
|
|
|
|
#include "base/memory/raw_ptr.h"
|
|
#include "gin/wrappable.h"
|
|
#include "shell/browser/event_emitter_mixin.h"
|
|
#include "ui/native_theme/native_theme.h"
|
|
#include "ui/native_theme/native_theme_observer.h"
|
|
|
|
namespace gin {
|
|
template <typename T>
|
|
class handle;
|
|
} // namespace gin
|
|
|
|
namespace electron::api {
|
|
|
|
class NativeTheme final : public gin::Wrappable<NativeTheme>,
|
|
public gin_helper::EventEmitterMixin<NativeTheme>,
|
|
private ui::NativeThemeObserver {
|
|
public:
|
|
static gin::Handle<NativeTheme> Create(v8::Isolate* isolate);
|
|
|
|
// gin::Wrappable
|
|
static gin::WrapperInfo kWrapperInfo;
|
|
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
|
|
v8::Isolate* isolate) override;
|
|
const char* GetTypeName() override;
|
|
|
|
// disable copy
|
|
NativeTheme(const NativeTheme&) = delete;
|
|
NativeTheme& operator=(const NativeTheme&) = delete;
|
|
|
|
protected:
|
|
NativeTheme(v8::Isolate* isolate,
|
|
ui::NativeTheme* ui_theme,
|
|
ui::NativeTheme* web_theme);
|
|
~NativeTheme() override;
|
|
|
|
void SetThemeSource(ui::NativeTheme::ThemeSource override);
|
|
#if BUILDFLAG(IS_MAC)
|
|
void UpdateMacOSAppearanceForOverrideValue(
|
|
ui::NativeTheme::ThemeSource override);
|
|
#endif
|
|
ui::NativeTheme::ThemeSource GetThemeSource() const;
|
|
bool ShouldUseDarkColors();
|
|
bool ShouldUseHighContrastColors();
|
|
bool ShouldUseDarkColorsForSystemIntegratedUI();
|
|
bool ShouldUseInvertedColorScheme();
|
|
bool InForcedColorsMode();
|
|
bool GetPrefersReducedTransparency();
|
|
|
|
// ui::NativeThemeObserver:
|
|
void OnNativeThemeUpdated(ui::NativeTheme* theme) override;
|
|
void OnNativeThemeUpdatedOnUI();
|
|
|
|
private:
|
|
raw_ptr<ui::NativeTheme> ui_theme_;
|
|
raw_ptr<ui::NativeTheme> web_theme_;
|
|
};
|
|
|
|
} // namespace electron::api
|
|
|
|
namespace gin {
|
|
|
|
template <>
|
|
struct Converter<ui::NativeTheme::ThemeSource> {
|
|
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
const ui::NativeTheme::ThemeSource& val);
|
|
static bool FromV8(v8::Isolate* isolate,
|
|
v8::Local<v8::Value> val,
|
|
ui::NativeTheme::ThemeSource* out);
|
|
};
|
|
|
|
} // namespace gin
|
|
|
|
#endif // ELECTRON_SHELL_BROWSER_API_ELECTRON_API_NATIVE_THEME_H_
|