diff options
| author | citrons <citrons@mondecitronne.com> | 2025-06-07 14:57:04 -0500 |
|---|---|---|
| committer | citrons <citrons@mondecitronne.com> | 2025-06-07 16:02:18 -0500 |
| commit | 855e61c53c8a401c6f0be84a63808cb94cb19903 (patch) | |
| tree | 5f03c5357cf6aa75db05376cf6a42cc67d1e33c8 /tui | |
| parent | 553ebc26cda61b567418205f7ee60be122b3c84f (diff) | |
channel list scrolling
Diffstat (limited to 'tui')
| -rw-r--r-- | tui/layout.go | 38 | ||||
| -rw-r--r-- | tui/scroll_state.go | 43 |
2 files changed, 46 insertions, 35 deletions
diff --git a/tui/layout.go b/tui/layout.go index 1835d72..ede0fa6 100644 --- a/tui/layout.go +++ b/tui/layout.go @@ -43,37 +43,8 @@ type textRun struct { hasCursor bool } -type ScrollState struct { - at string - offset int - absolute int - atFirst bool - atLast bool -} - var Selected string -func (s *ScrollState) ToStart() { - *s = ScrollState {} -} - -func (s *ScrollState) AtFirst() bool { - return s.atFirst -} - -func (s *ScrollState) AtLast() bool { - return s.atLast -} - -func (s *ScrollState) Scroll(amnt int) { - s.offset += amnt - s.absolute += amnt -} - -func (s *ScrollState) Get() int { - return s.absolute -} - var layout struct { front map[string]*Box back map[string]*Box @@ -319,12 +290,7 @@ func (b *Box) computePositions(axis int) { if b.Dir.reverse() { p = b.computedSize[axis] - p } - b.Scroll.absolute = p - if !b.Dir.reverse() { - b.Scroll.absolute += b.Scroll.offset - } else { - b.Scroll.absolute += b.Scroll.offset - } + b.Scroll.absolute = p + b.Scroll.offset } if !b.Dir.reverse() { @@ -467,10 +433,12 @@ func (b *Box) mouseEvents(ev MouseEvent) { bev.Y -= b.computedRect.min[1] bev.Pressed = false bev.Released = false + bev.Scroll = 0 if bev.X >= 0 && bev.Y >= 0 && bev.X < b.computedSize[0] && bev.Y < b.computedSize[1] { bev.Pressed = ev.Pressed bev.Released = ev.Released + bev.Scroll = ev.Scroll } b.mouseEvent = bev for _, c := range b.children { diff --git a/tui/scroll_state.go b/tui/scroll_state.go new file mode 100644 index 0000000..75797b1 --- /dev/null +++ b/tui/scroll_state.go @@ -0,0 +1,43 @@ +package tui + +type ScrollState struct { + at string + offset int + absolute int + atFirst bool + atLast bool +} + +func (s *ScrollState) ToStart() { + *s = ScrollState {} +} + +func (s *ScrollState) AtFirst() bool { + return s.atFirst +} + +func (s *ScrollState) AtLast() bool { + return s.atLast +} + +func (s *ScrollState) Scroll(amnt int) { + s.offset += amnt + s.absolute += amnt +} + +func (s *ScrollState) ByMouse(ev MouseEvent, reverse bool) { + scroll := ev.Scroll * 5 + if reverse { + scroll *= -1 + } + s.Scroll(scroll) +} + +func (s *ScrollState) Get() int { + return s.absolute +} + +func (s *ScrollState) Set(amnt int) { + s.at = "" + s.absolute = amnt +} |
