Index: sources/gui/qml/components/ValueControl.qml =================================================================== diff -u -rea5d186e9fc5e9581bcf3d7a7faba230f2035686 -r7dd8afa47f44f25221b167e3dc506df6dd287606 --- sources/gui/qml/components/ValueControl.qml (.../ValueControl.qml) (revision ea5d186e9fc5e9581bcf3d7a7faba230f2035686) +++ sources/gui/qml/components/ValueControl.qml (.../ValueControl.qml) (revision 7dd8afa47f44f25221b167e3dc506df6dd287606) @@ -32,6 +32,7 @@ property bool canIncrement : active ? value > minimum : true property bool canDecrement : active ? value < maximum : true + property int holdInterval : 600 onActiveChanged : if ( active ) { _root.value = _root.defaultValue } @@ -56,7 +57,6 @@ Slider { id: _slider property real pos : 0 - property int holdInterval : 600 anchors.fill : parent anchors.rightMargin : Variables.defaultMargin @@ -80,41 +80,44 @@ } MouseArea { id: _sliderMouseArea - anchors.fill: parent property bool grabbed: false - onClicked: if ( _root.editable ) { active = focus = true } + anchors.fill: parent + pressAndHoldInterval: _root.holdInterval - onPressed: { - _slider.opacity = 0.3 - _holdTimer.restart() + onClicked: { + if ( _root.editable ) { active = focus = true } + + _slider.opacity = 0 } onReleased: { - _holdTimer.stop() grabbed = false _slider.opacity = 0 } + onPressAndHold: { + if ( _root.editable ) { _root.active = focus = true } + + _sliderMouseArea.grabbed = true + } + onPositionChanged: { if (grabbed) { _slider.pos = Math.max(0, Math.min(1, mouse.x / parent.width)) - var raw = _slider.from + _slider.pos * (_slider.to - _slider.from) - var stepped = Math.round((raw - _slider.from) / _root.step) * _root.step + _slider.from + let raw = _slider.from + _slider.pos * (_slider.to - _slider.from) + let stepped = Math.round((raw - _slider.from) / _root.step) * _root.step + _slider.from _root.value = stepped } } } - Timer { id: _holdTimer - interval : _slider.holdInterval - repeat : false - onTriggered : { - if ( _root.editable ) { _root.active = focus = true } - - _slider.opacity = 1 - _sliderMouseArea.grabbed = true - } + OpacityAnimator { + target : _slider + from : 0 + to : 1 + duration: _root.holdInterval + running : _sliderMouseArea.pressed } Behavior on opacity { NumberAnimation { duration: 200 } }