summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/winrt/qwinrttheme.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/winrt/qwinrttheme.cpp')
-rw-r--r--src/plugins/platforms/winrt/qwinrttheme.cpp342
1 files changed, 0 insertions, 342 deletions
diff --git a/src/plugins/platforms/winrt/qwinrttheme.cpp b/src/plugins/platforms/winrt/qwinrttheme.cpp
deleted file mode 100644
index 0e1504b1c1..0000000000
--- a/src/plugins/platforms/winrt/qwinrttheme.cpp
+++ /dev/null
@@ -1,342 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qwinrttheme.h"
-#include "qwinrtmessagedialoghelper.h"
-#include "qwinrtfiledialoghelper.h"
-
-#include <QtCore/qfunctions_winrt.h>
-#include <QtGui/QPalette>
-
-#include <QtFontDatabaseSupport/private/qwinrtfontdatabase_p.h>
-
-#include <wrl.h>
-#include <windows.ui.h>
-#include <windows.ui.viewmanagement.h>
-#if _MSC_VER >= 1900
-#include <windows.foundation.metadata.h>
-using namespace ABI::Windows::Foundation::Metadata;
-#endif
-
-using namespace Microsoft::WRL;
-using namespace Microsoft::WRL::Wrappers;
-using namespace ABI::Windows::UI;
-using namespace ABI::Windows::UI::ViewManagement;
-
-QT_BEGIN_NAMESPACE
-
-Q_LOGGING_CATEGORY(lcQpaTheme, "qt.qpa.theme")
-
-class QWinRTApiInformationHandler {
-public:
- QWinRTApiInformationHandler()
- {
- HRESULT hr;
- hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Foundation_Metadata_ApiInformation).Get(),
- IID_PPV_ARGS(&m_apiInformationStatics));
- Q_ASSERT_SUCCEEDED(hr);
- }
-
- ComPtr<IApiInformationStatics> apiInformationStatics() const
- {
- return m_apiInformationStatics;
- }
-
-private:
- ComPtr<IApiInformationStatics> m_apiInformationStatics;
-};
-Q_GLOBAL_STATIC(QWinRTApiInformationHandler, gApiHandler);
-
-static IUISettings *uiSettings()
-{
- static ComPtr<IUISettings> settings;
- if (!settings) {
- HRESULT hr;
- hr = RoActivateInstance(Wrappers::HString::MakeReference(RuntimeClass_Windows_UI_ViewManagement_UISettings).Get(),
- &settings);
- Q_ASSERT_SUCCEEDED(hr);
- }
- return settings.Get();
-}
-
-class QWinRTThemePrivate
-{
-public:
- QWinRTThemePrivate()
- : monospaceFont(QWinRTFontDatabase::familyForStyleHint(QFont::Monospace))
- {
- }
-
- QPalette palette;
- QFont monospaceFont;
-};
-
-static inline QColor fromColor(const Color &color)
-{
- return QColor(color.R, color.G, color.B, color.A);
-}
-
-static bool uiColorSettings(const wchar_t *value, UIElementType type, Color *color)
-{
- ComPtr<IApiInformationStatics> apiInformationStatics = gApiHandler->apiInformationStatics();
- if (!apiInformationStatics) {
- qErrnoWarning("Could not get ApiInformationStatics");
- return false;
- }
-
- static const HStringReference enumRef(L"Windows.UI.ViewManagement.UIElementType");
- HStringReference valueRef(value);
-
- HRESULT hr;
- boolean exists;
- hr = apiInformationStatics->IsEnumNamedValuePresent(enumRef.Get(), valueRef.Get(), &exists);
-
- if (hr != S_OK || !exists)
- return false;
-
- return SUCCEEDED(uiSettings()->UIElementColor(type, color));
-}
-
-static void nativeColorSettings(QPalette &p)
-{
- Color color;
-
- if (uiColorSettings(L"ActiveCaption", UIElementType_ActiveCaption, &color))
- p.setColor(QPalette::ToolTipBase, fromColor(color));
-
- if (uiColorSettings(L"Background", UIElementType_Background, &color))
- p.setColor(QPalette::AlternateBase, fromColor(color));
-
- if (uiColorSettings(L"ButtonFace", UIElementType_ButtonFace, &color)) {
- p.setColor(QPalette::Button, fromColor(color));
- p.setColor(QPalette::Midlight, fromColor(color).lighter(110));
- p.setColor(QPalette::Light, fromColor(color).lighter(150));
- p.setColor(QPalette::Mid, fromColor(color).dark(130));
- p.setColor(QPalette::Dark, fromColor(color).dark(150));
- }
-
- if (uiColorSettings(L"ButtonText", UIElementType_ButtonText, &color)) {
- p.setColor(QPalette::ButtonText, fromColor(color));
- p.setColor(QPalette::Text, fromColor(color));
- }
-
- if (uiColorSettings(L"CaptionText", UIElementType_CaptionText, &color))
- p.setColor(QPalette::ToolTipText, fromColor(color));
-
- if (uiColorSettings(L"Highlight", UIElementType_Highlight, &color))
- p.setColor(QPalette::Highlight, fromColor(color));
-
- if (uiColorSettings(L"HighlightText", UIElementType_HighlightText, &color))
- p.setColor(QPalette::HighlightedText, fromColor(color));
-
- if (uiColorSettings(L"Window", UIElementType_Window, &color)) {
- p.setColor(QPalette::Window, fromColor(color));
- p.setColor(QPalette::Base, fromColor(color));
- }
-
- if (uiColorSettings(L"Hotlight", UIElementType_Hotlight, &color))
- p.setColor(QPalette::BrightText, fromColor(color));
-
- // Starting with SDK 15063 those have been removed.
-#ifndef QT_WINRT_DISABLE_PHONE_COLORS
- //Phone related
- ComPtr<IApiInformationStatics> apiInformationStatics = gApiHandler->apiInformationStatics();
- boolean phoneApiPresent = false;
- HRESULT hr;
- HStringReference phoneRef(L"Windows.Phone.PhoneContract");
- hr = apiInformationStatics.Get()->IsApiContractPresentByMajor(phoneRef.Get(), 1, &phoneApiPresent);
- if (FAILED(hr) || !phoneApiPresent)
- return;
-
- if (uiColorSettings(L"PopupBackground", UIElementType_PopupBackground, &color)) {
- p.setColor(QPalette::ToolTipBase, fromColor(color));
- p.setColor(QPalette::AlternateBase, fromColor(color));
- }
-
- if (uiColorSettings(L"NonTextMedium", UIElementType_NonTextMedium, &color))
- p.setColor(QPalette::Button, fromColor(color));
-
- if (uiColorSettings(L"NonTextMediumHigh", UIElementType_NonTextMediumHigh, &color))
- p.setColor(QPalette::Midlight, fromColor(color));
-
- if (uiColorSettings(L"NonTextHigh", UIElementType_NonTextHigh, &color))
- p.setColor(QPalette::Light, fromColor(color));
-
- if (uiColorSettings(L"NonTextMediumLow", UIElementType_NonTextMediumLow, &color))
- p.setColor(QPalette::Mid, fromColor(color));
-
- if (uiColorSettings(L"NonTextLow", UIElementType_NonTextLow, &color))
- p.setColor(QPalette::Dark, fromColor(color));
-
- if (uiColorSettings(L"TextHigh", UIElementType_TextHigh, &color)) {
- p.setColor(QPalette::ButtonText, fromColor(color));
- p.setColor(QPalette::Text, fromColor(color));
- p.setColor(QPalette::WindowText, fromColor(color));
- }
-
- if (uiColorSettings(L"TextMedium", UIElementType_TextMedium, &color))
- p.setColor(QPalette::ToolTipText, fromColor(color));
-
- if (uiColorSettings(L"AccentColor", UIElementType_AccentColor, &color))
- p.setColor(QPalette::Highlight, fromColor(color));
-
- if (uiColorSettings(L"PageBackground", UIElementType_PageBackground, &color)) {
- p.setColor(QPalette::Window, fromColor(color));
- p.setColor(QPalette::Base, fromColor(color));
- }
-
- if (uiColorSettings(L"TextContrastWithHigh", UIElementType_TextContrastWithHigh, &color))
- p.setColor(QPalette::BrightText, fromColor(color));
-#endif // QT_WINRT_DISABLE_PHONE_COLORS
-}
-
-QWinRTTheme::QWinRTTheme()
- : d_ptr(new QWinRTThemePrivate)
-{
- Q_D(QWinRTTheme);
- qCDebug(lcQpaTheme) << __FUNCTION__;
-
- nativeColorSettings(d->palette);
-}
-
-bool QWinRTTheme::usePlatformNativeDialog(DialogType type) const
-{
- qCDebug(lcQpaTheme) << __FUNCTION__ << type;
- static bool useNativeDialogs = qEnvironmentVariableIsSet("QT_USE_WINRT_NATIVE_DIALOGS")
- ? qEnvironmentVariableIntValue("QT_USE_WINRT_NATIVE_DIALOGS") : true;
-
- if (type == FileDialog || type == MessageDialog)
- return useNativeDialogs;
- return false;
-}
-
-QPlatformDialogHelper *QWinRTTheme::createPlatformDialogHelper(DialogType type) const
-{
- qCDebug(lcQpaTheme) << __FUNCTION__ << type;
- switch (type) {
- case FileDialog:
- return new QWinRTFileDialogHelper;
- case MessageDialog:
- return new QWinRTMessageDialogHelper(this);
- default:
- break;
- }
- return QPlatformTheme::createPlatformDialogHelper(type);
-}
-
-QVariant QWinRTTheme::styleHint(QPlatformIntegration::StyleHint hint)
-{
- qCDebug(lcQpaTheme) << __FUNCTION__ << hint;
- HRESULT hr;
- switch (hint) {
- case QPlatformIntegration::CursorFlashTime: {
- quint32 blinkRate;
- hr = uiSettings()->get_CaretBlinkRate(&blinkRate);
- RETURN_IF_FAILED("Failed to get caret blink rate", return defaultThemeHint(CursorFlashTime));
- return blinkRate;
- }
- case QPlatformIntegration::KeyboardInputInterval:
- return defaultThemeHint(KeyboardInputInterval);
- case QPlatformIntegration::MouseDoubleClickInterval: {
- quint32 doubleClickTime;
- hr = uiSettings()->get_DoubleClickTime(&doubleClickTime);
- RETURN_IF_FAILED("Failed to get double click time", return defaultThemeHint(MouseDoubleClickInterval));
- return doubleClickTime;
- }
- case QPlatformIntegration::StartDragDistance:
- return defaultThemeHint(StartDragDistance);
- case QPlatformIntegration::StartDragTime:
- return defaultThemeHint(StartDragTime);
- case QPlatformIntegration::KeyboardAutoRepeatRate:
- return defaultThemeHint(KeyboardAutoRepeatRate);
- case QPlatformIntegration::ShowIsFullScreen:
- return false;
- case QPlatformIntegration::PasswordMaskDelay:
- return defaultThemeHint(PasswordMaskDelay);
- case QPlatformIntegration::FontSmoothingGamma:
- return qreal(1.7);
- case QPlatformIntegration::StartDragVelocity:
- return defaultThemeHint(StartDragVelocity);
- case QPlatformIntegration::UseRtlExtensions:
- return false;
- case QPlatformIntegration::PasswordMaskCharacter:
- return defaultThemeHint(PasswordMaskCharacter);
- case QPlatformIntegration::SetFocusOnTouchRelease:
- return true;
- case QPlatformIntegration::ShowIsMaximized:
- return true;
- case QPlatformIntegration::MousePressAndHoldInterval:
- return defaultThemeHint(MousePressAndHoldInterval);
- default:
- break;
- }
- return QVariant();
-}
-
-QVariant QWinRTTheme::themeHint(ThemeHint hint) const
-{
- qCDebug(lcQpaTheme) << __FUNCTION__ << hint;
- switch (hint) {
- case StyleNames:
- return QStringList() << QStringLiteral("fusion") << QStringLiteral("windows");
- default:
- return QPlatformTheme::themeHint(hint);
- }
-}
-
-const QPalette *QWinRTTheme::palette(Palette type) const
-{
- Q_D(const QWinRTTheme);
- qCDebug(lcQpaTheme) << __FUNCTION__ << type;
- if (type == SystemPalette)
- return &d->palette;
- return QPlatformTheme::palette(type);
-}
-
-const QFont *QWinRTTheme::font(QPlatformTheme::Font type) const
-{
- Q_D(const QWinRTTheme);
- qCDebug(lcQpaTheme) << __FUNCTION__ << type;
- if (type == QPlatformTheme::FixedFont)
- return &d->monospaceFont;
-
- return QPlatformTheme::font(type);
-}
-
-QT_END_NAMESPACE