diff options
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbbackingstore.cpp')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbbackingstore.cpp | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.cpp b/src/plugins/platforms/xcb/qxcbbackingstore.cpp index ce2329724a..5c9293c03d 100644 --- a/src/plugins/platforms/xcb/qxcbbackingstore.cpp +++ b/src/plugins/platforms/xcb/qxcbbackingstore.cpp @@ -310,7 +310,13 @@ void QXcbBackingStore::beginPaint(const QRegion ®ion) { if (!m_image) return; - const int dpr = int(m_image->image()->devicePixelRatio()); + int dpr = int(m_image->image()->devicePixelRatio()); + const int windowDpr = int(window()->devicePixelRatio()); + if (windowDpr != dpr) { + resize(window()->size(), QRegion()); + dpr = int(m_image->image()->devicePixelRatio()); + } + QRegion xRegion = dpr == 1 ? region : QTransform::fromScale(dpr,dpr).map(region); m_image->preparePaint(xRegion); @@ -342,7 +348,15 @@ void QXcbBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoin if (!m_image || m_image->size().isEmpty()) return; - QSize imageSize = m_image->size(); + const int dpr = int(window->devicePixelRatio()); + +#ifndef QT_NO_DEBUG + const int imageDpr = int(m_image->image()->devicePixelRatio()); + if (dpr != imageDpr) + qWarning() << "QXcbBackingStore::flush() wrong devicePixelRatio for backingstore image" << dpr << imageDpr; +#endif + + QSize imageSize = m_image->size() / dpr; //because we multiply with the DPR later QRegion clipped = region; clipped &= QRect(0, 0, window->width(), window->height()); @@ -361,8 +375,6 @@ void QXcbBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoin return; } - const int dpr = int(window->devicePixelRatio()); - QVector<QRect> rects = clipped.rects(); for (int i = 0; i < rects.size(); ++i) { QRect rect = QRect(rects.at(i).topLeft() * dpr, rects.at(i).size() * dpr); @@ -399,8 +411,7 @@ void QXcbBackingStore::resize(const QSize &size, const QRegion &) { const int dpr = int(window()->devicePixelRatio()); const QSize xSize = size * dpr; - - if (m_image && xSize == m_image->size()) + if (m_image && xSize == m_image->size() && dpr == m_image->image()->devicePixelRatio()) return; Q_XCB_NOOP(connection()); |