From bfc7d10d54d8bf55523537bef74c8389c8a94b7d Mon Sep 17 00:00:00 2001 From: FPabl0 Date: Mon, 22 Mar 2021 22:17:13 -0500 Subject: [PATCH 1/3] call OnChanged only when the slider.Value has changed --- widget/slider.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/widget/slider.go b/widget/slider.go index 9623555f7a..c452e2bb17 100644 --- a/widget/slider.go +++ b/widget/slider.go @@ -100,10 +100,12 @@ func (s *Slider) DragEnd() { func (s *Slider) Dragged(e *fyne.DragEvent) { ratio := s.getRatio(&(e.PointEvent)) + lastValue := s.Value + s.updateValue(ratio) s.Refresh() - if s.OnChanged != nil { + if s.OnChanged != nil && lastValue != s.Value { s.OnChanged(s.Value) } } From b307cea14337b0570b6ed81c152eb5daeb4ade9e Mon Sep 17 00:00:00 2001 From: FPabl0 Date: Mon, 22 Mar 2021 22:47:54 -0500 Subject: [PATCH 2/3] fix slider.SetValue method, update TestSlider_OnChanged --- widget/slider.go | 6 ++++++ widget/slider_test.go | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/widget/slider.go b/widget/slider.go index c452e2bb17..c05cc2a95d 100644 --- a/widget/slider.go +++ b/widget/slider.go @@ -176,9 +176,15 @@ func (s *Slider) SetValue(value float64) { return } + lastValue := s.Value + s.Value = value s.clampValueToRange() + if lastValue == s.Value { + return + } + if s.OnChanged != nil { s.OnChanged(s.Value) } diff --git a/widget/slider_test.go b/widget/slider_test.go index 52292d76bc..67eb4e230c 100644 --- a/widget/slider_test.go +++ b/widget/slider_test.go @@ -118,7 +118,8 @@ func TestSlider_VerticalLayout(t *testing.T) { } func TestSlider_OnChanged(t *testing.T) { - slider := NewSlider(0, 1) + slider := NewSlider(0, 2) + slider.Resize(slider.MinSize()) assert.Empty(t, slider.OnChanged) changes := 0 @@ -130,9 +131,18 @@ func TestSlider_OnChanged(t *testing.T) { assert.Equal(t, 0, changes) slider.SetValue(0.5) + assert.Equal(t, 0, changes) + + drag := &fyne.DragEvent{} + drag.PointEvent.Position = fyne.NewPos(25, 2) + slider.Dragged(drag) + assert.Equal(t, 1, changes) + + drag.PointEvent.Position = fyne.NewPos(25, 2) + slider.Dragged(drag) assert.Equal(t, 1, changes) - drag := &fyne.DragEvent{Dragged: fyne.NewDelta(10, 2)} + drag.PointEvent.Position = fyne.NewPos(50, 2) slider.Dragged(drag) assert.Equal(t, 2, changes) } From 59192e88e1b5d255daaf3d2d4079a25227b3f877 Mon Sep 17 00:00:00 2001 From: FPabl0 Date: Mon, 22 Mar 2021 22:58:25 -0500 Subject: [PATCH 3/3] don't call Refresh if slider.Value has not changed --- widget/slider.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/widget/slider.go b/widget/slider.go index c05cc2a95d..0798939fa6 100644 --- a/widget/slider.go +++ b/widget/slider.go @@ -103,9 +103,14 @@ func (s *Slider) Dragged(e *fyne.DragEvent) { lastValue := s.Value s.updateValue(ratio) + + if lastValue == s.Value { + return + } + s.Refresh() - if s.OnChanged != nil && lastValue != s.Value { + if s.OnChanged != nil { s.OnChanged(s.Value) } }