diff options
author | Louai Al-Khanji <louai.al-khanji@digia.com> | 2014-04-28 08:32:17 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-29 11:59:18 +0200 |
commit | 81fde3a976dec66b0c3eeb006033c0369752e386 (patch) | |
tree | 88db2e8af43c376e24d38111b9cb9cb3328bf89b /src/plugins/platforms | |
parent | 774082e2ee2b9d7f290b84c3a483cc7710bbe8d4 (diff) |
Direct2D QPA: Speed up widget painting
By only starting/ending drawing once in the backing store, we can avoid
multiple start/ends and thus flushes of the direct2d device context. This
can potentially be much faster with some drivers when many widgets that
draw to the same backing store need to redraw. Because starts/ends of
QWindowsDirect2DDeviceContext are already refcounted this works out of the
box.
Change-Id: Ib48edceef6a1041ae0509587c77ac0caa8b29fc6
Reviewed-by: Risto Avila <risto.avila@digia.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r-- | src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.cpp | 10 | ||||
-rw-r--r-- | src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h | 3 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.cpp index 079ad6f127..e4ce81bd24 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.cpp +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.cpp @@ -75,6 +75,16 @@ QWindowsDirect2DBackingStore::~QWindowsDirect2DBackingStore() { } +void QWindowsDirect2DBackingStore::beginPaint(const QRegion &) +{ + platformPixmap(m_pixmap.data())->bitmap()->deviceContext()->begin(); +} + +void QWindowsDirect2DBackingStore::endPaint() +{ + platformPixmap(m_pixmap.data())->bitmap()->deviceContext()->end(); +} + QPaintDevice *QWindowsDirect2DBackingStore::paintDevice() { return m_pixmap.data(); diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h b/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h index 9776d234e8..fc6802aaa2 100644 --- a/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h +++ b/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h @@ -58,6 +58,9 @@ public: QWindowsDirect2DBackingStore(QWindow *window); ~QWindowsDirect2DBackingStore(); + void beginPaint(const QRegion &); + void endPaint(); + QPaintDevice *paintDevice() Q_DECL_OVERRIDE; void flush(QWindow *window, const QRegion ®ion, const QPoint &offset) Q_DECL_OVERRIDE; void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE; |