diff --git a/Modules/Settings/Common/WallpaperCropper.qml b/Modules/Settings/Common/WallpaperCropper.qml index 68076b0..bd1e8b0 100644 --- a/Modules/Settings/Common/WallpaperCropper.qml +++ b/Modules/Settings/Common/WallpaperCropper.qml @@ -13,13 +13,23 @@ import qs.Services Item { id: wrapper + readonly property var currentScreen: screens.length > selectedScreenIndex ? screens[selectedScreenIndex] : null + readonly property real maxZoom: 5.0 + property int buttonRowHeight: Tokens.padding.large * 3 property bool changesMade: false - readonly property var currentScreen: screens.length > selectedScreenIndex ? screens[selectedScreenIndex] : null property var screens: [] property int selectedScreenIndex: 0 property bool shouldBeActive: true + function zoomFromSlider(t: real): real { + return 1 / (1 - t * (1 - 1 / maxZoom)); + } + + function sliderFromZoom(zoom: real): real { + return (1 - 1 / zoom) / (1 - 1 / maxZoom); + } + function applyCrop(): void { if (!cropRectLoader.item || !currentScreen) return; @@ -144,14 +154,12 @@ Item { Layout.leftMargin: Tokens.padding.small Layout.preferredHeight: Tokens.padding.medium * 3 Layout.rightMargin: Tokens.padding.small - from: 1.0 implicitHeight: Tokens.padding.small * 3 insetIcon: "crop" - to: 5.0 - value: cropRectLoader.item ? cropRectLoader.item.zoom : 1.0 + value: cropRectLoader.item ? wrapper.sliderFromZoom(cropRectLoader.item.zoom) : 0 onInteraction: value => { - wrapper.zoomClipRect(1 + (value * 4)); + wrapper.zoomClipRect(wrapper.zoomFromSlider(value)); } onPosChanged: wrapper.changesMade = true