From dea8efcc97162267db7bbd44515294a298525eb1 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Mon, 27 Apr 2026 21:49:21 +1000 Subject: [PATCH] fix: handle hidpi properly --- components/images/CachingImage.qml | 6 +++++- modules/launcher/items/WallpaperItem.qml | 6 +++++- plugin/src/Caelestia/Images/iutils.cpp | 3 +++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/components/images/CachingImage.qml b/components/images/CachingImage.qml index e782b882..1e932dba 100644 --- a/components/images/CachingImage.qml +++ b/components/images/CachingImage.qml @@ -1,4 +1,5 @@ import QtQuick +import Quickshell import Caelestia.Images Image { @@ -9,5 +10,8 @@ Image { asynchronous: true fillMode: Image.PreserveAspectCrop source: IUtils.urlForPath(path, fillMode) - sourceSize: Qt.size(width, height) + sourceSize: { + const dpr = (QsWindow.window as QsWindow)?.devicePixelRatio ?? 1; + return Qt.size(width * dpr, height * dpr); + } } diff --git a/modules/launcher/items/WallpaperItem.qml b/modules/launcher/items/WallpaperItem.qml index ddf0d61a..d09a894c 100644 --- a/modules/launcher/items/WallpaperItem.qml +++ b/modules/launcher/items/WallpaperItem.qml @@ -1,4 +1,5 @@ import QtQuick +import Quickshell import Caelestia.Config import Caelestia.Models import qs.components @@ -66,7 +67,10 @@ Item { anchors.fill: parent path: root.modelData.path smooth: !root.PathView.view.moving - sourceSize: Qt.size(image.implicitWidth, image.implicitHeight) + sourceSize: { + const dpr = (QsWindow.window as QsWindow)?.devicePixelRatio ?? 1; + return Qt.size(image.implicitWidth * dpr, image.implicitHeight * dpr); + } } } diff --git a/plugin/src/Caelestia/Images/iutils.cpp b/plugin/src/Caelestia/Images/iutils.cpp index aeee7684..996f93dd 100644 --- a/plugin/src/Caelestia/Images/iutils.cpp +++ b/plugin/src/Caelestia/Images/iutils.cpp @@ -16,6 +16,9 @@ IUtils* IUtils::create(QQmlEngine* engine, QJSEngine* jsEngine) { } QUrl IUtils::urlForPath(const QString& path, int fillMode) { + if (path.isEmpty()) + return QUrl(); + QString prefix; switch (fillMode) { case 1: // Image.PreserveAspectFit