From 3088e0aaf62e85bc648470210653af710f64b86d Mon Sep 17 00:00:00 2001 From: Pier Luigi Fiorini Date: Sun, 14 Aug 2016 16:45:40 +0200 Subject: [PATCH] Scale surface items by the buffer scale As reported here [1] with a compositor that properly handles HiDPI, surface item size is not scaled at all resulting in windows twice the size on Retina. Issue: #190 Issue: #218 [1] = https://bugreports.qt.io/browse/QTBUG-55303 --- src/server/shell/clientwindow.cpp | 5 +++-- src/waylandcompositor/compositor_api/qwaylandquickitem.cpp | 2 +- src/waylandcompositor/compositor_api/qwaylandquickitem_p.h | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/server/shell/clientwindow.cpp b/src/server/shell/clientwindow.cpp index c234ff11..d018e6b7 100644 --- a/src/server/shell/clientwindow.cpp +++ b/src/server/shell/clientwindow.cpp @@ -639,8 +639,9 @@ QPointF ClientWindow::randomPosition() const Q_D(const ClientWindow); // Surface size - const int w = d->surface->size().width(); - const int h = d->surface->size().height(); + const QSize surfaceSize = d->surface->size() / d->surface->bufferScale(); + const int w = surfaceSize.width(); + const int h = surfaceSize.height(); // Find the output where the pointer is located, defaults // to the default output diff --git a/src/waylandcompositor/compositor_api/qwaylandquickitem.cpp b/src/waylandcompositor/compositor_api/qwaylandquickitem.cpp index 942a5d1c..0ee0e7f3 100644 --- a/src/waylandcompositor/compositor_api/qwaylandquickitem.cpp +++ b/src/waylandcompositor/compositor_api/qwaylandquickitem.cpp @@ -877,7 +877,7 @@ void QWaylandQuickItem::updateSize() { Q_D(QWaylandQuickItem); if (d->sizeFollowsSurface && surface()) { - setSize(surface()->size() * (d->scaleFactor() / surface()->bufferScale())); + setSize(surface()->size() / d->scaleFactor()); } } diff --git a/src/waylandcompositor/compositor_api/qwaylandquickitem_p.h b/src/waylandcompositor/compositor_api/qwaylandquickitem_p.h index ac302167..12d98e77 100644 --- a/src/waylandcompositor/compositor_api/qwaylandquickitem_p.h +++ b/src/waylandcompositor/compositor_api/qwaylandquickitem_p.h @@ -155,7 +155,7 @@ class QWaylandQuickItemPrivate : public QQuickItemPrivate } bool shouldSendInputEvents() const { return view->surface() && inputEventsEnabled; } - int scaleFactor() const { return view->output() ? view->output()->scaleFactor() : 1; } + int scaleFactor() const { return view->surface() ? view->surface()->bufferScale() : 1; } static QMutex *mutex;