diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2024-04-10 14:51:44 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-04-19 10:57:57 +0000 |
commit | ed2775627444cc035b3896d7a875cfdb83b514a2 (patch) | |
tree | 11c4dd372d9db076cadc421cac1834ee039080ef | |
parent | cmake: Add opt-out for adding -no_warn_duplicate_libraries linker flag (diff) | |
download | qtbase-ed2775627444cc035b3896d7a875cfdb83b514a2.tar.xz qtbase-ed2775627444cc035b3896d7a875cfdb83b514a2.zip |
rhiwindow: Set DPR on image texture to ensure DPR-agnostic drawing
Otherwise the 20x20 margins will produce different layouts depending
on the DPR, which is not what we want.
Change-Id: I4153d0843ef51c8e0f60d7d5166b153d45201c95
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
(cherry picked from commit a78938e0f686263540e06d923f2949169f3219e4)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | examples/gui/doc/src/rhiwindow.qdoc | 5 | ||||
-rw-r--r-- | examples/gui/rhiwindow/rhiwindow.cpp | 9 |
2 files changed, 10 insertions, 4 deletions
diff --git a/examples/gui/doc/src/rhiwindow.qdoc b/examples/gui/doc/src/rhiwindow.qdoc index b6fc279816..3ee33c8002 100644 --- a/examples/gui/doc/src/rhiwindow.qdoc +++ b/examples/gui/doc/src/rhiwindow.qdoc @@ -427,6 +427,11 @@ QRhiShaderResourceBindings, continue to be valid all the time. It is only the underlying native resources that come and go over time. + Note also that we set a device pixel ratio on the image that matches + the window that we're drawing into. This ensures that the drawing code + can be DPR-agnostic, producing the same layout regardless of the DPR, + while also taking advantage of the additional pixels for improved fidelity. + \snippet rhiwindow/rhiwindow.cpp ensure-texture Once a QImage is generated and the QPainter-based drawing into it has diff --git a/examples/gui/rhiwindow/rhiwindow.cpp b/examples/gui/rhiwindow/rhiwindow.cpp index 5022244b86..4747745255 100644 --- a/examples/gui/rhiwindow/rhiwindow.cpp +++ b/examples/gui/rhiwindow/rhiwindow.cpp @@ -281,17 +281,18 @@ void HelloWindow::ensureFullscreenTexture(const QSize &pixelSize, QRhiResourceUp m_texture->create(); QImage image(pixelSize, QImage::Format_RGBA8888_Premultiplied); + image.setDevicePixelRatio(devicePixelRatio()); //! [ensure-texture] QPainter painter(&image); - painter.fillRect(QRectF(QPointF(0, 0), pixelSize), QColor::fromRgbF(0.4f, 0.7f, 0.0f, 1.0f)); + painter.fillRect(QRectF(QPointF(0, 0), size()), QColor::fromRgbF(0.4f, 0.7f, 0.0f, 1.0f)); painter.setPen(Qt::transparent); painter.setBrush({ QGradient(QGradient::DeepBlue) }); - painter.drawRoundedRect(QRectF(QPointF(20, 20), pixelSize - QSize(40, 40)), 16, 16); + painter.drawRoundedRect(QRectF(QPointF(20, 20), size() - QSize(40, 40)), 16, 16); painter.setPen(Qt::black); QFont font; - font.setPixelSize(0.05 * qMin(pixelSize.width(), pixelSize.height())); + font.setPixelSize(0.05 * qMin(width(), height())); painter.setFont(font); - painter.drawText(QRectF(QPointF(60, 60), pixelSize - QSize(120, 120)), 0, + painter.drawText(QRectF(QPointF(60, 60), size() - QSize(120, 120)), 0, QLatin1String("Rendering with QRhi to a resizable QWindow.\nThe 3D API is %1.\nUse the command-line options to choose a different API.") .arg(graphicsApiName())); painter.end(); |