mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-11 16:32:59 +00:00
eedd09df7f
Based on the implementation and issues on prefers-reduced-motion, it seems we have the same issue on the dark mode. In child processes on MacOSX we don't spin native event loop at all. Without native event loops, the global preference returned from `SystemWantsDarkTheme()` doesn't return up-to-date value when the system setting changed for some reasons. To workaround this we call `SystemWantsDarkTheme()` only on the parent process which spins native event loop or when it's the initial query on the child process. And we give the up-to-date value to the child process via an IPC call just like other cached values do. Differential Revision: https://phabricator.services.mozilla.com/D21303 --HG-- extra : moz-landing-system : lando
95 lines
2.8 KiB
C++
95 lines
2.8 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef nsLookAndFeel_h_
|
|
#define nsLookAndFeel_h_
|
|
#include "nsXPLookAndFeel.h"
|
|
|
|
class nsLookAndFeel final : public nsXPLookAndFeel {
|
|
public:
|
|
nsLookAndFeel();
|
|
virtual ~nsLookAndFeel();
|
|
|
|
void NativeInit() final;
|
|
virtual void RefreshImpl() override;
|
|
virtual nsresult NativeGetColor(ColorID aID, nscolor& aResult) override;
|
|
virtual nsresult GetIntImpl(IntID aID, int32_t& aResult) override;
|
|
virtual nsresult GetFloatImpl(FloatID aID, float& aResult) override;
|
|
virtual bool GetFontImpl(FontID aID, nsString& aFontName,
|
|
gfxFontStyle& aFontStyle) override;
|
|
|
|
virtual char16_t GetPasswordCharacterImpl() override {
|
|
// unicode value for the bullet character, used for password textfields.
|
|
return 0x2022;
|
|
}
|
|
|
|
static bool UseOverlayScrollbars();
|
|
|
|
virtual nsTArray<LookAndFeelInt> GetIntCacheImpl() override;
|
|
virtual void SetIntCacheImpl(
|
|
const nsTArray<LookAndFeelInt>& aLookAndFeelIntCache) override;
|
|
|
|
protected:
|
|
static bool SystemWantsOverlayScrollbars();
|
|
static bool AllowOverlayScrollbarsOverlap();
|
|
|
|
static bool SystemWantsDarkTheme();
|
|
static nscolor ProcessSelectionBackground(nscolor aColor);
|
|
|
|
private:
|
|
int32_t mUseOverlayScrollbars;
|
|
bool mUseOverlayScrollbarsCached;
|
|
|
|
int32_t mAllowOverlayScrollbarsOverlap;
|
|
bool mAllowOverlayScrollbarsOverlapCached;
|
|
|
|
int32_t mPrefersReducedMotion;
|
|
bool mPrefersReducedMotionCached;
|
|
|
|
int32_t mSystemUsesDarkTheme;
|
|
bool mSystemUsesDarkThemeCached;
|
|
|
|
nscolor mColorTextSelectBackground;
|
|
nscolor mColorTextSelectBackgroundDisabled;
|
|
nscolor mColorHighlight;
|
|
nscolor mColorMenuHover;
|
|
nscolor mColorTextSelectForeground;
|
|
nscolor mColorMenuHoverText;
|
|
nscolor mColorButtonText;
|
|
bool mHasColorButtonText;
|
|
nscolor mColorButtonHoverText;
|
|
nscolor mColorText;
|
|
nscolor mColorWindowText;
|
|
nscolor mColorActiveCaption;
|
|
nscolor mColorActiveBorder;
|
|
nscolor mColorGrayText;
|
|
nscolor mColorInactiveBorder;
|
|
nscolor mColorInactiveCaption;
|
|
nscolor mColorScrollbar;
|
|
nscolor mColorThreeDHighlight;
|
|
nscolor mColorMenu;
|
|
nscolor mColorWindowFrame;
|
|
nscolor mColorFieldText;
|
|
nscolor mColorDialog;
|
|
nscolor mColorDialogText;
|
|
nscolor mColorDragTargetZone;
|
|
nscolor mColorChromeActive;
|
|
nscolor mColorChromeInactive;
|
|
nscolor mColorFocusRing;
|
|
nscolor mColorTextSelect;
|
|
nscolor mColorDisabledToolbarText;
|
|
nscolor mColorMenuSelect;
|
|
nscolor mColorCellHighlight;
|
|
nscolor mColorEvenTreeRow;
|
|
nscolor mColorOddTreeRow;
|
|
nscolor mColorActiveSourceListSelection;
|
|
|
|
bool mInitialized;
|
|
|
|
void EnsureInit();
|
|
};
|
|
|
|
#endif // nsLookAndFeel_h_
|