/* 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 mozilla_widget_WindowsUIUtils_h_ #define mozilla_widget_WindowsUIUtils_h_ #include "mozilla/Maybe.h" #include "mozilla/MozPromise.h" #include "nsColor.h" #include "nsIWindowsUIUtils.h" #include "nsString.h" // Avoid including windef.h to get this, which improves // build times. typedef struct HWND__* HWND; using SharePromise = mozilla::MozPromise; namespace mozilla { enum class ColorScheme : uint8_t; } class WindowsUIUtils final : public nsIWindowsUIUtils { public: NS_DECL_ISUPPORTS NS_DECL_NSIWINDOWSUIUTILS WindowsUIUtils() = default; static RefPtr Share(nsAutoString aTitle, nsAutoString aText, nsAutoString aUrl); // Why the Win11 tablet-mode state is being recomputed. Receiving an OS-level // ConvertibleSlateMode notification is itself evidence that the device is // tablet-capable, and so overrides a negative result from the capability // heuristic enum class TabletModeUpdateReason : uint8_t { Notification, LazyQuery }; static void UpdateInWin10TabletMode(); static void UpdateInWin11TabletMode(TabletModeUpdateReason); // Check whether we're in Win10 tablet mode. // // (Win10 tablet mode is considered sufficiently different from Win11 tablet // mode that there is no single getter to retrieve whether we're in a generic // "tablet mode".) static bool GetInWin10TabletMode(); // Check whether we're in Win11 tablet mode. // // (Win11 tablet mode is considered sufficiently different from Win10 tablet // mode that there is no single getter to retrieve whether we're in a generic // "tablet mode".) static bool GetInWin11TabletMode(); // Check whether this device can enter tablet mode at all. Unlike the // GetIn*TabletMode() getters, this is a stable property of the device rather // than a momentary state, so it's the right question to ask when deciding // whether to offer tablet-mode-related UI. static bool GetIsTabletCapable(); // Gets the system accent color, or one of the darker / lighter variants // (darker = -1/2/3, lighter=+1/2/3, values outside of that range are // disallowed). static mozilla::Maybe GetAccentColor(int aTone = 0); static mozilla::Maybe GetSystemColor(mozilla::ColorScheme, int); // Use LookAndFeel for a cached getter. static bool ComputeOverlayScrollbars(); static double ComputeTextScaleFactor(); static bool ComputeTransparencyEffects(); static void AssociateWithWinAppSDK(HWND aWnd); static void SetIsTitlebarCollapsed(HWND aWnd, bool aIsCollapsed); protected: ~WindowsUIUtils() = default; }; #endif // mozilla_widget_WindowsUIUtils_h_