QRasterBackingStore: Correct high-dpi image size

Fix QT_SCALE_FACTOR usage on macOS. Follow-up to
2d2d9078

QRasterBackingStore should account for native scaling
only. Any Qt scaling will have already been factored
into the size argument.

Change-Id: I26a67addfcbec3d45f4ed87f03b8dd79fd99cb62
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Morten Johan Sørvig 2017-03-28 12:23:44 +02:00
parent 6a83f9aa98
commit 5b78fcd03b

View File

@ -42,6 +42,9 @@
#include <QtGui/qbackingstore.h>
#include <QtGui/qpainter.h>
#include <private/qhighdpiscaling_p.h>
#include <qpa/qplatformwindow.h>
QT_BEGIN_NAMESPACE
QRasterBackingStore::QRasterBackingStore(QWindow *window)
@ -57,14 +60,14 @@ void QRasterBackingStore::resize(const QSize &size, const QRegion &staticContent
{
Q_UNUSED(staticContents);
int windowDevicePixelRatio = window()->devicePixelRatio();
QSize effectiveBufferSize = size * windowDevicePixelRatio;
qreal nativeWindowDevicePixelRatio = window()->handle()->devicePixelRatio();
QSize effectiveBufferSize = size * nativeWindowDevicePixelRatio;
if (m_image.size() == effectiveBufferSize)
return;
m_image = QImage(effectiveBufferSize, format());
m_image.setDevicePixelRatio(windowDevicePixelRatio);
m_image.setDevicePixelRatio(nativeWindowDevicePixelRatio);
if (m_image.format() == QImage::Format_ARGB32_Premultiplied)
m_image.fill(Qt::transparent);
}
@ -106,8 +109,11 @@ bool QRasterBackingStore::scroll(const QRegion &region, int dx, int dy)
void QRasterBackingStore::beginPaint(const QRegion &region)
{
// Keep backing store device pixel ratio in sync with window
if (m_image.devicePixelRatio() != window()->devicePixelRatio())
resize(backingStore()->size(), backingStore()->staticContents());
qreal nativeWindowDevicePixelRatio = window()->handle()->devicePixelRatio();
if (m_image.devicePixelRatio() != nativeWindowDevicePixelRatio) {
const QSize nativeSize = QHighDpi::toNativePixels(backingStore()->size(), window());
resize(nativeSize, backingStore()->staticContents());
}
if (!m_image.hasAlphaChannel())
return;