mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-30 00:12:50 -05:00
fix: slider movement for edge cases at 2% and 97% fill (#142)
* fix: slider movement for edge cases at 2% and 97% fill * fix: slider movement drag offset
This commit is contained in:
@@ -52,8 +52,9 @@ Item {
|
|||||||
StyledRect {
|
StyledRect {
|
||||||
id: sliderFill
|
id: sliderFill
|
||||||
|
|
||||||
width: parent.width * ((slider.value - slider.minimum)
|
width: (parent.width - sliderHandle.width) * (
|
||||||
/ (slider.maximum - slider.minimum))
|
(slider.value - slider.minimum) / (slider.maximum - slider.minimum)
|
||||||
|
) + sliderHandle.width
|
||||||
height: parent.height
|
height: parent.height
|
||||||
radius: parent.radius
|
radius: parent.radius
|
||||||
color: slider.enabled ? Theme.primary : Theme.surfaceVariantText
|
color: slider.enabled ? Theme.primary : Theme.surfaceVariantText
|
||||||
@@ -78,8 +79,7 @@ Item {
|
|||||||
Theme.surfaceVariantText,
|
Theme.surfaceVariantText,
|
||||||
1.3)
|
1.3)
|
||||||
border.width: 2
|
border.width: 2
|
||||||
x: Math.max(0, Math.min(parent.width - width,
|
x: sliderFill.width - width
|
||||||
sliderFill.width - width / 2))
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
scale: sliderMouseArea.containsMouse
|
scale: sliderMouseArea.containsMouse
|
||||||
|| sliderMouseArea.pressed ? 1.2 : 1
|
|| sliderMouseArea.pressed ? 1.2 : 1
|
||||||
@@ -181,7 +181,9 @@ Item {
|
|||||||
slider.isDragging = true
|
slider.isDragging = true
|
||||||
sliderMouseArea.isDragging = true
|
sliderMouseArea.isDragging = true
|
||||||
let ratio = Math.max(
|
let ratio = Math.max(
|
||||||
0, Math.min(1, mouse.x / width))
|
0, Math.min(1, (
|
||||||
|
mouse.x - sliderHandle.width / 2) / (
|
||||||
|
width - sliderHandle.width)))
|
||||||
let newValue = Math.round(
|
let newValue = Math.round(
|
||||||
slider.minimum + ratio
|
slider.minimum + ratio
|
||||||
* (slider.maximum - slider.minimum))
|
* (slider.maximum - slider.minimum))
|
||||||
@@ -200,8 +202,9 @@ Item {
|
|||||||
if (pressed && slider.isDragging
|
if (pressed && slider.isDragging
|
||||||
&& slider.enabled) {
|
&& slider.enabled) {
|
||||||
let ratio = Math.max(
|
let ratio = Math.max(
|
||||||
0, Math.min(1,
|
0, Math.min(1, (
|
||||||
mouse.x / width))
|
mouse.x - sliderHandle.width / 2) / (
|
||||||
|
width - sliderHandle.width)))
|
||||||
let newValue = Math.round(
|
let newValue = Math.round(
|
||||||
slider.minimum + ratio
|
slider.minimum + ratio
|
||||||
* (slider.maximum - slider.minimum))
|
* (slider.maximum - slider.minimum))
|
||||||
@@ -213,7 +216,9 @@ Item {
|
|||||||
onClicked: mouse => {
|
onClicked: mouse => {
|
||||||
if (slider.enabled && !slider.isDragging) {
|
if (slider.enabled && !slider.isDragging) {
|
||||||
let ratio = Math.max(
|
let ratio = Math.max(
|
||||||
0, Math.min(1, mouse.x / width))
|
0, Math.min(1, (
|
||||||
|
mouse.x - sliderHandle.width / 2) / (
|
||||||
|
width - sliderHandle.width)))
|
||||||
let newValue = Math.round(
|
let newValue = Math.round(
|
||||||
slider.minimum + ratio
|
slider.minimum + ratio
|
||||||
* (slider.maximum - slider.minimum))
|
* (slider.maximum - slider.minimum))
|
||||||
|
|||||||
Reference in New Issue
Block a user