Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qwindowsdirect2dintegration.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#include <QtCore/qt_windows.h>
12
14
15#include <qplatformdefs.h>
16#include <QtCore/qcoreapplication.h>
17#include <QtCore/qversionnumber.h>
18#include <QtGui/private/qpixmap_raster_p.h>
19#include <QtGui/qpa/qwindowsysteminterface.h>
20
21#include <QVarLengthArray>
22
24
31
33{
34 static const int bufSize = 512;
35 TCHAR filename[bufSize];
36
37 UINT i = GetSystemDirectory(filename, bufSize);
38 if (i > 0 && i < bufSize) {
39 if (_tcscat_s(filename, bufSize, __TEXT("\\d2d1.dll")) == 0) {
40 DWORD versionInfoSize = GetFileVersionInfoSize(filename, nullptr);
41 if (versionInfoSize) {
42 QVarLengthArray<BYTE> info(static_cast<int>(versionInfoSize));
43 if (GetFileVersionInfo(filename, 0, versionInfoSize, info.data())) {
44 UINT size;
45 DWORD *fi;
46
47 if (VerQueryValue(info.constData(), __TEXT("\\"),
48 reinterpret_cast<void **>(&fi), &size) && size) {
49 const auto *verInfo = reinterpret_cast<const VS_FIXEDFILEINFO *>(fi);
50 return QVersionNumber{HIWORD(verInfo->dwFileVersionMS), LOWORD(verInfo->dwFileVersionMS),
51 HIWORD(verInfo->dwFileVersionLS), LOWORD(verInfo->dwFileVersionLS)};
52 }
53 }
54 }
55 }
56 }
57 return QVersionNumber();
58}
59
61{
62 // 6.2.9200.16492 corresponds to Direct2D 1.1 on Windows 7 SP1 with Platform Update
63 enum : int {
64 D2DMinVersionPart1 = 6,
65 D2DMinVersionPart2 = 2,
66 D2DMinVersionPart3 = 9200,
67 D2DMinVersionPart4 = 16492
68 };
69
70 return QVersionNumber{D2DMinVersionPart1, D2DMinVersionPart2, D2DMinVersionPart3, D2DMinVersionPart4};
71}
72
73QWindowsDirect2DIntegration *QWindowsDirect2DIntegration::create(const QStringList &paramList)
74{
75 const QVersionNumber systemVersion = systemD2DVersion();
76 const QVersionNumber minimumVersion = minimumD2DVersion();
77 if (!systemVersion.isNull() && systemVersion < minimumVersion) {
78 QString msg = QCoreApplication::translate("QWindowsDirect2DIntegration",
79 "Qt cannot load the direct2d platform plugin because "
80 "the Direct2D version on this system is too old. The "
81 "minimum system requirement for this platform plugin "
82 "is Windows 7 SP1 with Platform Update.\n\n"
83 "The minimum Direct2D version required is %1. "
84 "The Direct2D version on this system is %2.")
85 .arg(minimumVersion.toString(), systemVersion.toString());
86
87 QString caption = QCoreApplication::translate("QWindowsDirect2DIntegration",
88 "Cannot load direct2d platform plugin");
89
90 MessageBoxW(nullptr,
91 msg.toStdWString().c_str(),
92 caption.toStdWString().c_str(),
93 MB_OK | MB_ICONERROR);
94
95 return nullptr;
96 }
97
98 auto *integration = new QWindowsDirect2DIntegration(paramList);
99
100 if (!integration->init()) {
101 delete integration;
102 integration = nullptr;
103 }
104
105 return integration;
106}
107
112
114 {
115 return static_cast<QWindowsDirect2DIntegration *>(QWindowsIntegration::instance());
116 }
117
118
120{
121 return new QWindowsDirect2DWindow(window, data);
122}
123
125 {
126 return &d->m_nativeInterface;
127 }
128
130{
131 switch (type) {
132 case QPlatformPixmap::BitmapType:
133 return new QRasterPlatformPixmap(type);
134 break;
135 default:
136 return new QWindowsDirect2DPlatformPixmap(type);
137 break;
138 }
139}
140
145
147{
148 return &d->m_d2dContext;
149}
150
151QWindowsDirect2DIntegration::QWindowsDirect2DIntegration(const QStringList &paramList)
152 : QWindowsIntegration(paramList)
153 , d(new QWindowsDirect2DIntegrationPrivate)
154{
155}
156
158{
159 return d->m_d2dContext.init();
160}
161
162QT_END_NAMESPACE
QWindowsDirect2DNativeInterface m_nativeInterface
QWindowsWindow * createPlatformWindowHelper(QWindow *window, const QWindowsWindowData &) const override
QPlatformNativeInterface * nativeInterface() const override
QWindowsDirect2DContext * direct2DContext() const
QPlatformPixmap * createPlatformPixmap(QPlatformPixmap::PixelType type) const override
Factory function for QPlatformPixmap.
QPlatformBackingStore * createPlatformBackingStore(QWindow *window) const override
Factory function for QPlatformBackingStore.
static QWindowsDirect2DIntegration * instance()
Raster or OpenGL Window.
Combined button and popup list for selecting options.
static QVersionNumber minimumD2DVersion()
static QVersionNumber systemD2DVersion()