From c8e0b811275b3c8d4e9f8674e5412a1b7b8d2326 Mon Sep 17 00:00:00 2001 From: Kyosuke Fujimoto Date: Sun, 29 Nov 2020 09:26:31 +0900 Subject: [PATCH 1/2] Add test cases of split container divider drag --- widget/splitcontainer_test.go | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/widget/splitcontainer_test.go b/widget/splitcontainer_test.go index 31f47eb7a7..bb847c69f9 100644 --- a/widget/splitcontainer_test.go +++ b/widget/splitcontainer_test.go @@ -280,6 +280,64 @@ func TestSplitContainer_divider_drag(t *testing.T) { }) } +func TestSplitContainer_divider_drag_StartOffsetLessThanMinSize(t *testing.T) { + size := fyne.NewSize(30, 30) + objA := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0}) + objA.SetMinSize(size) + objB := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0}) + objB.SetMinSize(size) + t.Run("Horizontal", func(t *testing.T) { + split := NewHSplitContainer(objA, objB) + split.Resize(fyne.NewSize(100, 100)) + divider := newDivider(split) + t.Run("Leading", func(t *testing.T) { + split.SetOffset(0.1) + + divider.Dragged(&fyne.DragEvent{ + DraggedX: 10, + }) + divider.DragEnd() + + assert.Equal(t, 0.4, split.Offset) + }) + t.Run("Trailing", func(t *testing.T) { + split.SetOffset(0.9) + + divider.Dragged(&fyne.DragEvent{ + DraggedX: -10, + }) + divider.DragEnd() + + assert.Equal(t, 0.6, split.Offset) + }) + }) + t.Run("Vertical", func(t *testing.T) { + split := NewVSplitContainer(objA, objB) + split.Resize(fyne.NewSize(100, 100)) + divider := newDivider(split) + t.Run("Leading", func(t *testing.T) { + split.SetOffset(0.1) + + divider.Dragged(&fyne.DragEvent{ + DraggedY: 10, + }) + divider.DragEnd() + + assert.Equal(t, 0.4, split.Offset) + }) + t.Run("Trailing", func(t *testing.T) { + split.SetOffset(0.9) + + divider.Dragged(&fyne.DragEvent{ + DraggedY: -10, + }) + divider.DragEnd() + + assert.Equal(t, 0.6, split.Offset) + }) + }) +} + func TestSplitContainer_divider_hover(t *testing.T) { t.Run("Horizontal", func(t *testing.T) { divider := newDivider(&SplitContainer{Horizontal: true}) From 9d830a16859b7abb6bed5488b23a5e33a626a366 Mon Sep 17 00:00:00 2001 From: Kyosuke Fujimoto Date: Sun, 29 Nov 2020 09:29:06 +0900 Subject: [PATCH 2/2] Fix when dragging divider of split container --- widget/splitcontainer.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/widget/splitcontainer.go b/widget/splitcontainer.go index 82c1cd95c7..8a97b1c922 100644 --- a/widget/splitcontainer.go +++ b/widget/splitcontainer.go @@ -222,8 +222,20 @@ func (d *divider) DragEnd() { func (d *divider) Dragged(event *fyne.DragEvent) { offset := d.split.Offset if d.split.Horizontal { + if leadingRatio := float64(d.split.Leading.Size().Width) / float64(d.split.Size().Width); offset < leadingRatio { + offset = leadingRatio + } + if trailingRatio := 1. - (float64(d.split.Trailing.Size().Width) / float64(d.split.Size().Width)); offset > trailingRatio { + offset = trailingRatio + } offset += float64(event.DraggedX) / float64(d.split.Size().Width) } else { + if leadingRatio := float64(d.split.Leading.Size().Height) / float64(d.split.Size().Height); offset < leadingRatio { + offset = leadingRatio + } + if trailingRatio := 1. - (float64(d.split.Trailing.Size().Height) / float64(d.split.Size().Height)); offset > trailingRatio { + offset = trailingRatio + } offset += float64(event.DraggedY) / float64(d.split.Size().Height) } d.split.SetOffset(offset)