From e4ea5ccadfa293bb04ded6b5c18b567ec8d427bc Mon Sep 17 00:00:00 2001 From: LiWenhao Date: Mon, 1 Apr 2024 14:34:06 +0800 Subject: [PATCH 1/3] Fix Range Slider --- src/Ursa/Controls/RangeSlider/RangeSlider.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Ursa/Controls/RangeSlider/RangeSlider.cs b/src/Ursa/Controls/RangeSlider/RangeSlider.cs index 92f8298..f567d0f 100644 --- a/src/Ursa/Controls/RangeSlider/RangeSlider.cs +++ b/src/Ursa/Controls/RangeSlider/RangeSlider.cs @@ -212,7 +212,7 @@ public class RangeSlider: TemplatedControl { if (_track is null) return; var value = GetValueByPoint(posOnTrack); - var thumb = GetThumbByPoint(posOnTrack); + var thumb = _isDragging ? _currentThumb : GetThumbByPoint(posOnTrack); if (_currentThumb !=null && _currentThumb != thumb) return; if (thumb is null) return; if (thumb == _track.LowerThumb) @@ -221,6 +221,7 @@ public class RangeSlider: TemplatedControl } else { + if (LowerValue >= value) SetCurrentValue(LowerValueProperty, IsSnapToTick ? SnapToTick(value) : value); SetCurrentValue(UpperValueProperty, IsSnapToTick ? SnapToTick(value) : value); } } From e32f59f277cbbd023aac06772f4c948b0e5ef6d0 Mon Sep 17 00:00:00 2001 From: LiWenhao Date: Mon, 1 Apr 2024 14:51:20 +0800 Subject: [PATCH 2/3] Fix --- src/Ursa/Controls/RangeSlider/RangeSlider.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Ursa/Controls/RangeSlider/RangeSlider.cs b/src/Ursa/Controls/RangeSlider/RangeSlider.cs index f567d0f..70b21ff 100644 --- a/src/Ursa/Controls/RangeSlider/RangeSlider.cs +++ b/src/Ursa/Controls/RangeSlider/RangeSlider.cs @@ -217,11 +217,12 @@ public class RangeSlider: TemplatedControl if (thumb is null) return; if (thumb == _track.LowerThumb) { + if (UpperValue < value) SetCurrentValue(UpperValueProperty, IsSnapToTick ? SnapToTick(value) : value); SetCurrentValue(LowerValueProperty, IsSnapToTick ? SnapToTick(value) : value); } else { - if (LowerValue >= value) SetCurrentValue(LowerValueProperty, IsSnapToTick ? SnapToTick(value) : value); + if (LowerValue > value) SetCurrentValue(LowerValueProperty, IsSnapToTick ? SnapToTick(value) : value); SetCurrentValue(UpperValueProperty, IsSnapToTick ? SnapToTick(value) : value); } } From 258a8f0bf6ff6bece18729fba9e4fca7b2e95461 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Tue, 2 Apr 2024 18:11:48 +0800 Subject: [PATCH 3/3] feat: make an assumption that user want to drag to opposite direction when two thumbs overlap. --- src/Ursa/Controls/RangeSlider/RangeSlider.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Ursa/Controls/RangeSlider/RangeSlider.cs b/src/Ursa/Controls/RangeSlider/RangeSlider.cs index 70b21ff..e7351ad 100644 --- a/src/Ursa/Controls/RangeSlider/RangeSlider.cs +++ b/src/Ursa/Controls/RangeSlider/RangeSlider.cs @@ -271,6 +271,7 @@ public class RangeSlider: TemplatedControl var isHorizontal = Orientation == Orientation.Horizontal; var lowerThumbPosition = isHorizontal? _track?.LowerThumb?.Bounds.Center.X : _track?.LowerThumb?.Bounds.Center.Y; var upperThumbPosition = isHorizontal? _track?.UpperThumb?.Bounds.Center.X : _track?.UpperThumb?.Bounds.Center.Y; + var mid = isHorizontal? _track?.Bounds.Center.X : _track?.Bounds.Center.Y; var pointerPosition = isHorizontal? point.Position.X : point.Position.Y; var lowerDistance = Math.Abs((lowerThumbPosition ?? 0) - pointerPosition); @@ -280,10 +281,12 @@ public class RangeSlider: TemplatedControl { return _track?.LowerThumb; } - else + if(lowerDistance>upperDistance) { return _track?.UpperThumb; } + if (IsDirectionReversed) return pointerPosition < mid ? _track?.LowerThumb : _track?.UpperThumb; + return pointerPosition > mid ? _track?.LowerThumb : _track?.UpperThumb; } private double GetValueByPoint(PointerPoint point)