summaryrefslogtreecommitdiff
path: root/kde-frameworks/qqc2-desktop-style/files/qqc2-desktop-style-5.96.0-fix-precision.patch
blob: 36705ce0c8b6f6be18381435ad834cc55753176e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
From efb795efbe0579cb30cc042d61214c139c5fb110 Mon Sep 17 00:00:00 2001
From: ivan tkachenko <me@ratijas.tk>
Date: Fri, 22 Jul 2022 20:31:48 +0300
Subject: [PATCH] ProgressBar,Slider: Adapt great precision to the harsh
 reality

Test case: `to` values >= 214749 should work.

BUG: 455339
---
 org.kde.desktop/ProgressBar.qml | 10 +++++++---
 org.kde.desktop/Slider.qml      | 12 ++++++++----
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/org.kde.desktop/ProgressBar.qml b/org.kde.desktop/ProgressBar.qml
index 18d879b..77beb1b 100644
--- a/org.kde.desktop/ProgressBar.qml
+++ b/org.kde.desktop/ProgressBar.qml
@@ -22,11 +22,15 @@ T.ProgressBar {
     contentItem: Item {}
 
     background: StylePrivate.StyleItem {
+        // Rescale for extra precision. Adapts to the range of `from` & `to` to avoid integer overflow.
+        property int factor: (Math.abs(controlRoot.from) < 100000 && Math.abs(controlRoot.to) < 100000)
+            ? 10000 : 1
+
         elementType: "progressbar"
         control: controlRoot
-        maximum: indeterminate ? 0 : 10000 * controlRoot.to
-        minimum: indeterminate ? 0 : 10000 * controlRoot.from
-        value: indeterminate ? 0 : 10000 * controlRoot.value
+        maximum: indeterminate ? 0 : factor * controlRoot.to
+        minimum: indeterminate ? 0 : factor * controlRoot.from
+        value: indeterminate ? 0 : factor * controlRoot.value
         horizontal: true
         enabled: controlRoot.enabled
 
diff --git a/org.kde.desktop/Slider.qml b/org.kde.desktop/Slider.qml
index 58bc99a..49b8ccb 100644
--- a/org.kde.desktop/Slider.qml
+++ b/org.kde.desktop/Slider.qml
@@ -28,6 +28,10 @@ T.Slider {
     snapMode: T.Slider.SnapOnRelease
 
     background: StylePrivate.StyleItem {
+        // Rescale for extra precision. Adapts to the range of `from` & `to` to avoid integer overflow.
+        property int factor: (Math.abs(controlRoot.from) < 100000 && Math.abs(controlRoot.to) < 100000)
+            ? 10000 : 1
+
         control: controlRoot
         elementType: "slider"
         sunken: controlRoot.pressed
@@ -36,10 +40,10 @@ T.Slider {
         contentHeight: horizontal ? (Kirigami.Settings.tabletMode ? 24 : 22) : controlRoot.implicitHeight
         anchors.verticalCenter: controlRoot.verticalCenter
 
-        maximum: 10000 * controlRoot.to
-        minimum: 10000 * controlRoot.from
-        step: 10000 * controlRoot.stepSize
-        value: 10000 * controlRoot.value
+        maximum: factor * controlRoot.to
+        minimum: factor * controlRoot.from
+        step: factor * controlRoot.stepSize
+        value: factor * controlRoot.value
         horizontal: controlRoot.orientation === Qt.Horizontal
         enabled: controlRoot.enabled
         hasFocus: controlRoot.activeFocus
-- 
GitLab