Skip to content

Commit

Permalink
Merge pull request #3348 from itsjustdel/fixes/split-container-hidden…
Browse files Browse the repository at this point in the history
…-sizing
  • Loading branch information
andydotxyz committed Oct 22, 2022
2 parents 939f8ab + 3ee7c91 commit 1ab550a
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 2 deletions.
32 changes: 30 additions & 2 deletions container/split.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ func (r *splitContainerRenderer) Layout(size fyne.Size) {
var dividerSize, leadingSize, trailingSize fyne.Size

if r.split.Horizontal {
lw, tw := r.computeSplitLengths(size.Width, r.split.Leading.MinSize().Width, r.split.Trailing.MinSize().Width)
lw, tw := r.computeSplitLengths(size.Width, r.minLeadingWidth(), r.minTrailingWidth())
leadingPos.X = 0
leadingSize.Width = lw
leadingSize.Height = size.Height
Expand All @@ -106,7 +106,7 @@ func (r *splitContainerRenderer) Layout(size fyne.Size) {
trailingSize.Width = tw
trailingSize.Height = size.Height
} else {
lh, th := r.computeSplitLengths(size.Height, r.split.Leading.MinSize().Height, r.split.Trailing.MinSize().Height)
lh, th := r.computeSplitLengths(size.Height, r.minLeadingHeight(), r.minTrailingHeight())
leadingPos.Y = 0
leadingSize.Width = size.Width
leadingSize.Height = lh
Expand Down Expand Up @@ -183,6 +183,34 @@ func (r *splitContainerRenderer) computeSplitLengths(total, lMin, tMin float32)
return float32(ld), float32(tr)
}

func (r *splitContainerRenderer) minLeadingWidth() float32 {
if r.split.Leading.Visible() {
return r.split.Leading.MinSize().Width
}
return 0
}

func (r *splitContainerRenderer) minLeadingHeight() float32 {
if r.split.Leading.Visible() {
return r.split.Leading.MinSize().Height
}
return 0
}

func (r *splitContainerRenderer) minTrailingWidth() float32 {
if r.split.Trailing.Visible() {
return r.split.Trailing.MinSize().Width
}
return 0
}

func (r *splitContainerRenderer) minTrailingHeight() float32 {
if r.split.Trailing.Visible() {
return r.split.Trailing.MinSize().Height
}
return 0
}

// Declare conformity with interfaces
var _ fyne.CanvasObject = (*divider)(nil)
var _ fyne.Draggable = (*divider)(nil)
Expand Down
45 changes: 45 additions & 0 deletions container/split_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -413,3 +413,48 @@ func TestSplitContainer_divider_MinSize(t *testing.T) {
assert.Equal(t, dividerThickness(), min.Height)
})
}

func TestSplitContainer_Hidden(t *testing.T) {
dt := dividerThickness()
size := fyne.NewSize(10, 10)
objA := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})
objA.SetMinSize(size)
objB := canvas.NewRectangle(color.NRGBA{0, 0, 0, 0})

t.Run("Horizontal_Leading", func(t *testing.T) {
sc := NewHSplit(objA, objB)
sc.Resize(fyne.NewSize(100, 100))
assert.Equal(t, 50-(dt/2), sc.Leading.Size().Width)

objA.Hide()
sc.SetOffset(0)
assert.Equal(t, float32(0), sc.Leading.Size().Width)
})
t.Run("Horizontal_Trailing", func(t *testing.T) {
sc := NewHSplit(objA, objB)
sc.Resize(fyne.NewSize(100, 100))
assert.Equal(t, 50-(dt/2), sc.Trailing.Size().Width)

objB.Hide()
sc.SetOffset(1)
assert.Equal(t, float32(0), sc.Trailing.Size().Width)
})
t.Run("Vertical_Leading", func(t *testing.T) {
sc := NewVSplit(objA, objB)
sc.Resize(fyne.NewSize(100, 100))
assert.Equal(t, 50-(dt/2), sc.Leading.Size().Height)

objA.Hide()
sc.SetOffset(0)
assert.Equal(t, float32(0), sc.Leading.Size().Height)
})
t.Run("Vertical_Trailing", func(t *testing.T) {
sc := NewVSplit(objA, objB)
sc.Resize(fyne.NewSize(100, 100))
assert.Equal(t, 50-(dt/2), sc.Trailing.Size().Height)

objB.Hide()
sc.SetOffset(1)
assert.Equal(t, float32(0), sc.Trailing.Size().Height)
})
}

0 comments on commit 1ab550a

Please sign in to comment.