Resize backingstore properly on devicePixelRatio changes
Task-number: QTBUG-45076 Change-Id: Ib2f2408abf7bd0b6d1c8a05fbbdc665e77ea6392 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
parent
667f3abc50
commit
dc62f15d79
|
|
@ -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());
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue