Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
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
>
6
#
include
"qwindowsdirect2dcontext.h"
7
#
include
"qwindowsdirect2dintegration.h"
8
#
include
"qwindowsdirect2dbackingstore.h"
9
#
include
"qwindowsdirect2dplatformpixmap.h"
10
#
include
"qwindowsdirect2dnativeinterface.h"
11
#
include
"qwindowsdirect2dwindow.h"
12
13
#
include
"qwindowscontext.h"
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
23
QT_BEGIN_NAMESPACE
24
25
class
QWindowsDirect2DIntegrationPrivate
26
{
27
public
:
28
QWindowsDirect2DNativeInterface
m_nativeInterface
;
29
QWindowsDirect2DContext
m_d2dContext
;
30
};
31
32
static
QVersionNumber
systemD2DVersion
()
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
60
static
QVersionNumber
minimumD2DVersion
()
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
73
QWindowsDirect2DIntegration
*
QWindowsDirect2DIntegration
::create(
const
QStringList ¶mList)
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
108
QWindowsDirect2DIntegration
::~
QWindowsDirect2DIntegration
()
109
{
110
111
}
112
113
QWindowsDirect2DIntegration
*
QWindowsDirect2DIntegration
::
instance
()
114
{
115
return
static_cast
<QWindowsDirect2DIntegration *>(QWindowsIntegration::instance());
116
}
117
118
119
QWindowsWindow
*
QWindowsDirect2DIntegration
::
createPlatformWindowHelper
(QWindow *window,
const
QWindowsWindowData
&data)
const
120
{
121
return
new
QWindowsDirect2DWindow
(window, data);
122
}
123
124
QPlatformNativeInterface
*
QWindowsDirect2DIntegration
::
nativeInterface
()
const
125
{
126
return
&d->m_nativeInterface;
127
}
128
129
QPlatformPixmap
*
QWindowsDirect2DIntegration
::
createPlatformPixmap
(QPlatformPixmap::PixelType type)
const
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
141
QPlatformBackingStore
*
QWindowsDirect2DIntegration
::
createPlatformBackingStore
(QWindow *window)
const
142
{
143
return
new
QWindowsDirect2DBackingStore
(window);
144
}
145
146
QWindowsDirect2DContext
*
QWindowsDirect2DIntegration
::
direct2DContext
()
const
147
{
148
return
&d->m_d2dContext;
149
}
150
151
QWindowsDirect2DIntegration
::QWindowsDirect2DIntegration(
const
QStringList ¶mList)
152
:
QWindowsIntegration
(paramList)
153
, d(
new
QWindowsDirect2DIntegrationPrivate)
154
{
155
}
156
157
bool
QWindowsDirect2DIntegration
::init()
158
{
159
return
d->m_d2dContext.init();
160
}
161
162
QT_END_NAMESPACE
QWindowsDirect2DBackingStore
Backing store for windows.
Definition
qwindowsdirect2dbackingstore.h:15
QWindowsDirect2DContext
Definition
qwindowsdirect2dcontext.h:22
QWindowsDirect2DIntegrationPrivate
Definition
qwindowsdirect2dintegration.cpp:26
QWindowsDirect2DIntegrationPrivate::m_d2dContext
QWindowsDirect2DContext m_d2dContext
Definition
qwindowsdirect2dintegration.cpp:29
QWindowsDirect2DIntegrationPrivate::m_nativeInterface
QWindowsDirect2DNativeInterface m_nativeInterface
Definition
qwindowsdirect2dintegration.cpp:28
QWindowsDirect2DIntegration
Definition
qwindowsdirect2dintegration.h:18
QWindowsDirect2DIntegration::createPlatformWindowHelper
QWindowsWindow * createPlatformWindowHelper(QWindow *window, const QWindowsWindowData &) const override
Definition
qwindowsdirect2dintegration.cpp:119
QWindowsDirect2DIntegration::nativeInterface
QPlatformNativeInterface * nativeInterface() const override
Definition
qwindowsdirect2dintegration.cpp:124
QWindowsDirect2DIntegration::direct2DContext
QWindowsDirect2DContext * direct2DContext() const
Definition
qwindowsdirect2dintegration.cpp:146
QWindowsDirect2DIntegration::createPlatformPixmap
QPlatformPixmap * createPlatformPixmap(QPlatformPixmap::PixelType type) const override
Factory function for QPlatformPixmap.
Definition
qwindowsdirect2dintegration.cpp:129
QWindowsDirect2DIntegration::~QWindowsDirect2DIntegration
virtual ~QWindowsDirect2DIntegration()
Definition
qwindowsdirect2dintegration.cpp:108
QWindowsDirect2DIntegration::createPlatformBackingStore
QPlatformBackingStore * createPlatformBackingStore(QWindow *window) const override
Factory function for QPlatformBackingStore.
Definition
qwindowsdirect2dintegration.cpp:141
QWindowsDirect2DIntegration::instance
static QWindowsDirect2DIntegration * instance()
Definition
qwindowsdirect2dintegration.cpp:113
QWindowsDirect2DNativeInterface
Definition
qwindowsdirect2dnativeinterface.h:13
QWindowsDirect2DPlatformPixmap
Definition
qwindowsdirect2dplatformpixmap.h:18
QWindowsDirect2DWindow
Definition
qwindowsdirect2dwindow.h:19
QWindowsIntegration
Definition
qwindowsintegration.h:31
QWindowsWindow
Raster or OpenGL Window.
Definition
qwindowswindow.h:188
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
minimumD2DVersion
static QVersionNumber minimumD2DVersion()
Definition
qwindowsdirect2dintegration.cpp:60
systemD2DVersion
static QVersionNumber systemD2DVersion()
Definition
qwindowsdirect2dintegration.cpp:32
QWindowsWindowData
Definition
qwindowswindow.h:79
qtbase
src
plugins
platforms
direct2d
qwindowsdirect2dintegration.cpp
Generated on
for Qt by
1.18.0