Skip to content

Commit

Permalink
Merge pull request #1618 from lusingander/fix/split
Browse files Browse the repository at this point in the history
Fix the behavior when dragging the divider of split container
  • Loading branch information
andydotxyz committed Dec 30, 2020
2 parents 274ed61 + 316c1d1 commit 4ba698d
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
12 changes: 12 additions & 0 deletions widget/splitcontainer.go
Expand Up @@ -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.Dragged.DX) / 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.Dragged.DY) / float64(d.split.Size().Height)
}
d.split.SetOffset(offset)
Expand Down
58 changes: 58 additions & 0 deletions widget/splitcontainer_test.go
Expand Up @@ -278,6 +278,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{
Dragged: fyne.NewDelta(10, 0),
})
divider.DragEnd()

assert.Equal(t, 0.4, split.Offset)
})
t.Run("Trailing", func(t *testing.T) {
split.SetOffset(0.9)

divider.Dragged(&fyne.DragEvent{
Dragged: fyne.NewDelta(-10, 0),
})
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{
Dragged: fyne.NewDelta(0, 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{
Dragged: fyne.NewDelta(0, -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})
Expand Down

0 comments on commit 4ba698d

Please sign in to comment.