From 8a94058d44e1152e27288fd777ad407faae22784 Mon Sep 17 00:00:00 2001 From: vsariola <5684185+vsariola@users.noreply.github.com> Date: Wed, 12 May 2021 23:14:48 +0300 Subject: [PATCH] feat(gioui): make split bars snap to window edges --- tracker/gioui/split.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tracker/gioui/split.go b/tracker/gioui/split.go index 1211ab0..d7a526f 100644 --- a/tracker/gioui/split.go +++ b/tracker/gioui/split.go @@ -68,6 +68,7 @@ func (s *Split) Layout(gtx layout.Context, first, second layout.Widget) layout.D } else { s.dragCoord = e.Position.Y } + s.drag = true case pointer.Drag: if s.dragID != e.PointerID { @@ -94,6 +95,27 @@ func (s *Split) Layout(gtx layout.Context, first, second layout.Widget) layout.D } } + low := -1 + float32(bar)/float32(coord)*2 + const snapMargin = 0.1 + + if s.Ratio < low { + s.Ratio = low + } + + if s.Ratio > 1 { + s.Ratio = 1 + } + + if s.Ratio < low+snapMargin { + firstSize = 0 + secondOffset = bar + secondSize = coord - bar + } else if s.Ratio > 1-snapMargin { + firstSize = coord - bar + secondOffset = coord + secondSize = 0 + } + // register for input var barRect image.Rectangle if s.Axis == layout.Horizontal {