Files
tubestation/widget/windows/WindowsUIUtils.h
Ray Kraesig 28f8d3d9cf Bug 1819421 - [1/2] create parallel check for Win11 tablet mode r=win-reviewers,Gijs,gsvelto,gstoll
Win11's tablet mode is different from Win10's tablet mode in ways both
subtle and gross. Avoid unifying them implicitly, and make it clear that
they should not be unified _explicitly_ without testing.

Unfortunately, Windows 11's API for checking whether the device is in
tablet mode is broken -- it requires one to know whether the device is a
tablet to interpret the return value, but there is no documented API
providing that information. We use a heuristic partly borrowed from
Chromium and partly based on independent investigation.

As all of the code using WindowsUIUtils effectively only checked for
Win10's tablet mode, this commit technically has no functional
changes.

Differential Revision: https://phabricator.services.mozilla.com/D224244
2024-11-04 13:56:20 +00:00

64 lines
2.1 KiB
C++

/* -*- Mode: C++; tab-width: 2; 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 mozilla_widget_WindowsUIUtils_h__
#define mozilla_widget_WindowsUIUtils_h__
#include "nsIWindowsUIUtils.h"
#include "nsString.h"
#include "nsColor.h"
#include "mozilla/Maybe.h"
#include "mozilla/MozPromise.h"
using SharePromise =
mozilla::MozPromise<bool, nsresult, /* IsExclusive */ true>;
namespace mozilla {
enum class ColorScheme : uint8_t;
}
class WindowsUIUtils final : public nsIWindowsUIUtils {
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIWINDOWSUIUTILS
WindowsUIUtils();
static RefPtr<SharePromise> Share(nsAutoString aTitle, nsAutoString aText,
nsAutoString aUrl);
static void UpdateInWin10TabletMode();
static void UpdateInWin11TabletMode();
// 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();
// 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<nscolor> GetAccentColor(int aTone = 0);
static mozilla::Maybe<nscolor> GetSystemColor(mozilla::ColorScheme, int);
// Use LookAndFeel for a cached getter.
static bool ComputeOverlayScrollbars();
static double ComputeTextScaleFactor();
static bool ComputeTransparencyEffects();
protected:
~WindowsUIUtils();
};
#endif // mozilla_widget_WindowsUIUtils_h__