diff options
Diffstat (limited to 'widget/nsXPLookAndFeel.h')
-rw-r--r-- | widget/nsXPLookAndFeel.h | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/widget/nsXPLookAndFeel.h b/widget/nsXPLookAndFeel.h new file mode 100644 index 0000000000..0f308f6935 --- /dev/null +++ b/widget/nsXPLookAndFeel.h @@ -0,0 +1,96 @@ +/* -*- 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 __nsXPLookAndFeel +#define __nsXPLookAndFeel + +#include "mozilla/Maybe.h" +#include "mozilla/LookAndFeel.h" +#include "mozilla/widget/LookAndFeelTypes.h" +#include "nsTArray.h" + +class nsLookAndFeel; + +class nsXPLookAndFeel : public mozilla::LookAndFeel { + public: + using FullLookAndFeel = mozilla::widget::FullLookAndFeel; + using LookAndFeelFont = mozilla::widget::LookAndFeelFont; + + virtual ~nsXPLookAndFeel(); + + static nsXPLookAndFeel* GetInstance(); + static void Shutdown(); + + void Init(); + + // Gets the pref name for a given color, just for debugging purposes. + static const char* GetColorPrefName(ColorID); + + // These functions will return a value specified by an override pref, if it + // exists, and otherwise will call into the NativeGetXxx function to get the + // platform-specific value. + // + // NS_ERROR_NOT_AVAILABLE is returned if there is neither an override pref or + // a platform-specific value. + nsresult GetColorValue(ColorID, ColorScheme, UseStandins, nscolor& aResult); + nsresult GetIntValue(IntID aID, int32_t& aResult); + nsresult GetFloatValue(FloatID aID, float& aResult); + // Same, but returns false if there is no platform-specific value. + // (There are no override prefs for font values.) + bool GetFontValue(FontID aID, nsString& aName, gfxFontStyle& aStyle); + + virtual nsresult NativeGetInt(IntID aID, int32_t& aResult) = 0; + virtual nsresult NativeGetFloat(FloatID aID, float& aResult) = 0; + virtual nsresult NativeGetColor(ColorID, ColorScheme, nscolor& aResult) = 0; + virtual bool NativeGetFont(FontID aID, nsString& aName, + gfxFontStyle& aStyle) = 0; + + virtual void RefreshImpl(); + + virtual char16_t GetPasswordCharacterImpl() { return char16_t('*'); } + + virtual bool GetEchoPasswordImpl() { return false; } + + virtual uint32_t GetPasswordMaskDelayImpl() { return 600; } + + virtual bool GetDefaultDrawInTitlebar() { return true; } + + virtual TitlebarAction GetTitlebarAction(TitlebarEvent aEvent) { + return TitlebarAction::None; + } + + static bool LookAndFeelFontToStyle(const LookAndFeelFont&, nsString& aName, + gfxFontStyle&); + static LookAndFeelFont StyleToLookAndFeelFont(const nsAString& aName, + const gfxFontStyle&); + + virtual void SetDataImpl(FullLookAndFeel&& aTables) {} + + virtual void NativeInit() = 0; + + virtual void GetThemeInfo(nsACString&) {} + + protected: + nsXPLookAndFeel() = default; + + static nscolor GetStandinForNativeColor(ColorID, ColorScheme); + + // A platform-agnostic dark-color scheme, for platforms where we don't have + // "native" dark colors, like Windows and Android. + static mozilla::Maybe<nscolor> GenericDarkColor(ColorID); + mozilla::Maybe<nscolor> GetUncachedColor(ColorID, ColorScheme, UseStandins); + + void RecordTelemetry(); + virtual void RecordLookAndFeelSpecificTelemetry() {} + + static void OnPrefChanged(const char* aPref, void* aClosure); + + static bool sInitialized; + + static nsXPLookAndFeel* sInstance; + static bool sShutdown; +}; + +#endif |