diff options
Diffstat (limited to 'src/plugins/platforms/direct2d')
11 files changed, 94 insertions, 160 deletions
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h b/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h index 670c4e9840..f72ea2b038 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h @@ -54,12 +54,12 @@ public: QWindowsDirect2DBackingStore(QWindow *window); ~QWindowsDirect2DBackingStore(); - void beginPaint(const QRegion &) Q_DECL_OVERRIDE; - void endPaint() Q_DECL_OVERRIDE; + void beginPaint(const QRegion &) override; + void endPaint() override; - QPaintDevice *paintDevice() Q_DECL_OVERRIDE; - void flush(QWindow *targetWindow, const QRegion ®ion, const QPoint &offset) Q_DECL_OVERRIDE; - void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE; + QPaintDevice *paintDevice() override; + void flush(QWindow *targetWindow, const QRegion ®ion, const QPoint &offset) override; + void resize(const QSize &size, const QRegion &staticContents) override; QImage toImage() const override; }; diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp index 643ae877d0..d578a58982 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp @@ -161,7 +161,7 @@ void QWindowsDirect2DDeviceContextSuspender::resume() { if (m_dc) { m_dc->resume(); - m_dc = Q_NULLPTR; + m_dc = nullptr; } } diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp index ea51135583..6d98da5be5 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp @@ -48,6 +48,7 @@ #include <qplatformdefs.h> #include <QtCore/QCoreApplication> +#include <QtCore/QVersionNumber> #include <QtGui/private/qpixmap_raster_p.h> #include <QtGui/qpa/qwindowsysteminterface.h> #include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h> @@ -73,127 +74,60 @@ public: QWindowsDirect2DContext m_d2dContext; }; -class Direct2DVersion +static QVersionNumber systemD2DVersion() { -private: - Direct2DVersion() = default; - - Direct2DVersion(int one, int two, int three, int four) - : partOne(one) - , partTwo(two) - , partThree(three) - , partFour(four) - {} + static const int bufSize = 512; + TCHAR filename[bufSize]; + + UINT i = GetSystemDirectory(filename, bufSize); + if (i > 0 && i < bufSize) { + if (_tcscat_s(filename, bufSize, __TEXT("\\d2d1.dll")) == 0) { + DWORD versionInfoSize = GetFileVersionInfoSize(filename, NULL); + if (versionInfoSize) { + QVarLengthArray<BYTE> info(static_cast<int>(versionInfoSize)); + if (GetFileVersionInfo(filename, 0, versionInfoSize, info.data())) { + UINT size; + DWORD *fi; + + if (VerQueryValue(info.constData(), __TEXT("\\"), + reinterpret_cast<void **>(&fi), &size) && size) { + const VS_FIXEDFILEINFO *verInfo = reinterpret_cast<const VS_FIXEDFILEINFO *>(fi); + return QVersionNumber{HIWORD(verInfo->dwFileVersionMS), LOWORD(verInfo->dwFileVersionMS), + HIWORD(verInfo->dwFileVersionLS), LOWORD(verInfo->dwFileVersionLS)}; + } + } + } + } + } + return QVersionNumber(); +} -public: +static QVersionNumber minimumD2DVersion() +{ // 6.2.9200.16492 corresponds to Direct2D 1.1 on Windows 7 SP1 with Platform Update - enum { + enum : int { D2DMinVersionPart1 = 6, D2DMinVersionPart2 = 2, D2DMinVersionPart3 = 9200, D2DMinVersionPart4 = 16492 }; - static Direct2DVersion systemVersion() { - static const int bufSize = 512; - TCHAR filename[bufSize]; - - UINT i = GetSystemDirectory(filename, bufSize); - if (i > 0 && i < bufSize) { - if (_tcscat_s(filename, bufSize, __TEXT("\\d2d1.dll")) == 0) { - DWORD versionInfoSize = GetFileVersionInfoSize(filename, NULL); - if (versionInfoSize) { - QVarLengthArray<BYTE> info(static_cast<int>(versionInfoSize)); - if (GetFileVersionInfo(filename, 0, versionInfoSize, info.data())) { - UINT size; - DWORD *fi; - - if (VerQueryValue(info.constData(), __TEXT("\\"), - reinterpret_cast<void **>(&fi), &size) && size) { - const VS_FIXEDFILEINFO *verInfo = reinterpret_cast<const VS_FIXEDFILEINFO *>(fi); - return Direct2DVersion(HIWORD(verInfo->dwFileVersionMS), - LOWORD(verInfo->dwFileVersionMS), - HIWORD(verInfo->dwFileVersionLS), - LOWORD(verInfo->dwFileVersionLS)); - } - } - } - } - } - - return Direct2DVersion(); - } - - static Direct2DVersion minimumVersion() { - return Direct2DVersion(D2DMinVersionPart1, - D2DMinVersionPart2, - D2DMinVersionPart3, - D2DMinVersionPart4); - } - - bool isValid() const { - return partOne || partTwo || partThree || partFour; - } - - bool operator<(const Direct2DVersion &other) { - int c = cmp(partOne, other.partOne); - if (c > 0) - return false; - if (c < 0) - return true; - - c = cmp(partTwo, other.partTwo); - if (c > 0) - return false; - if (c < 0) - return true; - - c = cmp(partThree, other.partThree); - if (c > 0) - return false; - if (c < 0) - return true; - - c = cmp(partFour, other.partFour); - if (c > 0) - return false; - if (c < 0) - return true; - - return false; - } - - static Q_DECL_CONSTEXPR int cmp(int a, int b) { - return a - b; - } - - int partOne = 0; - int partTwo = 0; - int partThree = 0; - int partFour = 0; -}; + return QVersionNumber{D2DMinVersionPart1, D2DMinVersionPart2, D2DMinVersionPart3, D2DMinVersionPart4}; +} QWindowsDirect2DIntegration *QWindowsDirect2DIntegration::create(const QStringList ¶mList) { - Direct2DVersion systemVersion = Direct2DVersion::systemVersion(); - - if (systemVersion.isValid() && systemVersion < Direct2DVersion::minimumVersion()) { + const QVersionNumber systemVersion = systemD2DVersion(); + const QVersionNumber minimumVersion = minimumD2DVersion(); + if (!systemVersion.isNull() && systemVersion < minimumVersion) { QString msg = QCoreApplication::translate("QWindowsDirect2DIntegration", "Qt cannot load the direct2d platform plugin because " \ "the Direct2D version on this system is too old. The " \ "minimum system requirement for this platform plugin " \ "is Windows 7 SP1 with Platform Update.\n\n" \ - "The minimum Direct2D version required is %1.%2.%3.%4. " \ - "The Direct2D version on this system is %5.%6.%7.%8."); - - msg = msg.arg(Direct2DVersion::D2DMinVersionPart1) - .arg(Direct2DVersion::D2DMinVersionPart2) - .arg(Direct2DVersion::D2DMinVersionPart3) - .arg(Direct2DVersion::D2DMinVersionPart4) - .arg(systemVersion.partOne) - .arg(systemVersion.partTwo) - .arg(systemVersion.partThree) - .arg(systemVersion.partFour); + "The minimum Direct2D version required is %1. " \ + "The Direct2D version on this system is %2.") + .arg(minimumVersion.toString(), systemVersion.toString()); QString caption = QCoreApplication::translate("QWindowsDirect2DIntegration", "Cannot load direct2d platform plugin"); @@ -203,7 +137,7 @@ QWindowsDirect2DIntegration *QWindowsDirect2DIntegration::create(const QStringLi caption.toStdWString().c_str(), MB_OK | MB_ICONERROR); - return Q_NULLPTR; + return nullptr; } QWindowsDirect2DIntegration *integration = new QWindowsDirect2DIntegration(paramList); diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.h b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.h index 43f2a08745..39ca1d0dbf 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.h @@ -58,15 +58,15 @@ public: static QWindowsDirect2DIntegration *instance(); - QPlatformNativeInterface *nativeInterface() const Q_DECL_OVERRIDE; - QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const Q_DECL_OVERRIDE; - QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE; - QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE; + QPlatformNativeInterface *nativeInterface() const override; + QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const override; + QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override; + QAbstractEventDispatcher *createEventDispatcher() const override; QWindowsDirect2DContext *direct2DContext() const; protected: - QWindowsWindow *createPlatformWindowHelper(QWindow *window, const QWindowsWindowData &) const Q_DECL_OVERRIDE; + QWindowsWindow *createPlatformWindowHelper(QWindow *window, const QWindowsWindowData &) const override; private: explicit QWindowsDirect2DIntegration(const QStringList ¶mList); diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dnativeinterface.h b/src/plugins/platforms/direct2d/qwindowsdirect2dnativeinterface.h index d57136129b..fce6ff9969 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dnativeinterface.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dnativeinterface.h @@ -48,7 +48,7 @@ class QWindowsDirect2DNativeInterface : public QWindowsNativeInterface { Q_OBJECT public: - void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs) Q_DECL_OVERRIDE; + void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs) override; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.h b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.h index f434ef993c..1f23d604f5 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.h @@ -58,11 +58,11 @@ public: QWindowsDirect2DPaintEngine::Flags paintFlags = QWindowsDirect2DPaintEngine::NoFlag); ~QWindowsDirect2DPaintDevice(); - QPaintEngine *paintEngine() const Q_DECL_OVERRIDE; - int devType() const Q_DECL_OVERRIDE; + QPaintEngine *paintEngine() const override; + int devType() const override; protected: - int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE; + int metric(PaintDeviceMetric metric) const override; private: QScopedPointer<QWindowsDirect2DPaintDevicePrivate> d_ptr; diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp index 164429ba30..95fbd37247 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp @@ -804,7 +804,7 @@ public: const bool alias = !q->antiAliasingEnabled(); QVectorPath::CacheEntry *cacheEntry = path.isCacheable() ? path.lookupCacheData(q) - : Q_NULLPTR; + : nullptr; if (cacheEntry) { D2DVectorPathCache *e = static_cast<D2DVectorPathCache *>(cacheEntry->data); diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.h b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.h index a8f63af5d5..b9616acd6a 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.h @@ -65,45 +65,45 @@ public: QWindowsDirect2DPaintEngine(QWindowsDirect2DBitmap *bitmap, Flags flags); - bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE; - bool end() Q_DECL_OVERRIDE; + bool begin(QPaintDevice *pdev) override; + bool end() override; - Type type() const Q_DECL_OVERRIDE; + Type type() const override; - void setState(QPainterState *s) Q_DECL_OVERRIDE; + void setState(QPainterState *s) override; - void draw(const QVectorPath &path) Q_DECL_OVERRIDE; + void draw(const QVectorPath &path) override; - void fill(const QVectorPath &path, const QBrush &brush) Q_DECL_OVERRIDE; + void fill(const QVectorPath &path, const QBrush &brush) override; void fill(ID2D1Geometry *geometry, const QBrush &brush); - void stroke(const QVectorPath &path, const QPen &pen) Q_DECL_OVERRIDE; + void stroke(const QVectorPath &path, const QPen &pen) override; void stroke(ID2D1Geometry *geometry, const QPen &pen); - void clip(const QVectorPath &path, Qt::ClipOperation op) Q_DECL_OVERRIDE; + void clip(const QVectorPath &path, Qt::ClipOperation op) override; - void clipEnabledChanged() Q_DECL_OVERRIDE; - void penChanged() Q_DECL_OVERRIDE; - void brushChanged() Q_DECL_OVERRIDE; - void brushOriginChanged() Q_DECL_OVERRIDE; - void opacityChanged() Q_DECL_OVERRIDE; - void compositionModeChanged() Q_DECL_OVERRIDE; - void renderHintsChanged() Q_DECL_OVERRIDE; - void transformChanged() Q_DECL_OVERRIDE; + void clipEnabledChanged() override; + void penChanged() override; + void brushChanged() override; + void brushOriginChanged() override; + void opacityChanged() override; + void compositionModeChanged() override; + void renderHintsChanged() override; + void transformChanged() override; - void fillRect(const QRectF &rect, const QBrush &brush) Q_DECL_OVERRIDE; + void fillRect(const QRectF &rect, const QBrush &brush) override; - void drawRects(const QRect *rects, int rectCount) Q_DECL_OVERRIDE; - void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE; + void drawRects(const QRect *rects, int rectCount) override; + void drawRects(const QRectF *rects, int rectCount) override; - void drawEllipse(const QRectF &r) Q_DECL_OVERRIDE; - void drawEllipse(const QRect &r) Q_DECL_OVERRIDE; + void drawEllipse(const QRectF &r) override; + void drawEllipse(const QRect &r) override; - void drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE; - void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE; + void drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor) override; + void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override; - void drawStaticTextItem(QStaticTextItem *staticTextItem) Q_DECL_OVERRIDE; - void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE; + void drawStaticTextItem(QStaticTextItem *staticTextItem) override; + void drawTextItem(const QPointF &p, const QTextItem &textItem) override; private: void ensureBrush(); diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.h b/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.h index 5f65a2313a..0448613a95 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.h @@ -59,21 +59,21 @@ public: QWindowsDirect2DPlatformPixmap(PixelType pixelType, QWindowsDirect2DPaintEngine::Flags flags, QWindowsDirect2DBitmap *bitmap); ~QWindowsDirect2DPlatformPixmap(); - void resize(int width, int height) Q_DECL_OVERRIDE; - void fromImage(const QImage &image, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE; + void resize(int width, int height) override; + void fromImage(const QImage &image, Qt::ImageConversionFlags flags) override; - int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE; - void fill(const QColor &color) Q_DECL_OVERRIDE; + int metric(QPaintDevice::PaintDeviceMetric metric) const override; + void fill(const QColor &color) override; - bool hasAlphaChannel() const Q_DECL_OVERRIDE; + bool hasAlphaChannel() const override; - QImage toImage() const Q_DECL_OVERRIDE; - QImage toImage(const QRect &rect) const Q_DECL_OVERRIDE; + QImage toImage() const override; + QImage toImage(const QRect &rect) const override; - QPaintEngine* paintEngine() const Q_DECL_OVERRIDE; + QPaintEngine* paintEngine() const override; - qreal devicePixelRatio() const Q_DECL_OVERRIDE; - void setDevicePixelRatio(qreal scaleFactor) Q_DECL_OVERRIDE; + qreal devicePixelRatio() const override; + void setDevicePixelRatio(qreal scaleFactor) override; QWindowsDirect2DBitmap *bitmap() const; diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp index 21294cfb15..f81182e0b1 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp @@ -209,7 +209,7 @@ void QWindowsDirect2DWindow::resizeSwapChain(const QSize &size) { m_pixmap.reset(); m_bitmap.reset(); - m_deviceContext->SetTarget(Q_NULLPTR); + m_deviceContext->SetTarget(nullptr); m_needsFullFlush = true; if (!m_swapChain) @@ -241,7 +241,7 @@ QSharedPointer<QWindowsDirect2DBitmap> QWindowsDirect2DWindow::copyBackBuffer() dpiX, // FLOAT dpiX; dpiY, // FLOAT dpiY; D2D1_BITMAP_OPTIONS_TARGET, // D2D1_BITMAP_OPTIONS bitmapOptions; - Q_NULLPTR // _Field_size_opt_(1) ID2D1ColorContext *colorContext; + nullptr // _Field_size_opt_(1) ID2D1ColorContext *colorContext; }; ComPtr<ID2D1Bitmap1> copy; HRESULT hr = m_deviceContext.Get()->CreateBitmap(size, NULL, 0, properties, ©); @@ -257,7 +257,7 @@ QSharedPointer<QWindowsDirect2DBitmap> QWindowsDirect2DWindow::copyBackBuffer() return null_result; } - return QSharedPointer<QWindowsDirect2DBitmap>(new QWindowsDirect2DBitmap(copy.Get(), Q_NULLPTR)); + return QSharedPointer<QWindowsDirect2DBitmap>(new QWindowsDirect2DBitmap(copy.Get(), nullptr)); } void QWindowsDirect2DWindow::setupBitmap() diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h index 156d4660d1..3ac532d938 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h @@ -56,7 +56,7 @@ public: QWindowsDirect2DWindow(QWindow *window, const QWindowsWindowData &data); ~QWindowsDirect2DWindow(); - void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE; + void setWindowFlags(Qt::WindowFlags flags) override; QPixmap *pixmap(); void flush(QWindowsDirect2DBitmap *bitmap, const QRegion ®ion, const QPoint &offset); |