summaryrefslogtreecommitdiff
path: root/tui
diff options
context:
space:
mode:
authorcitrons <citrons@mondecitronne.com>2025-06-07 14:57:04 -0500
committercitrons <citrons@mondecitronne.com>2025-06-07 16:02:18 -0500
commit855e61c53c8a401c6f0be84a63808cb94cb19903 (patch)
tree5f03c5357cf6aa75db05376cf6a42cc67d1e33c8 /tui
parent553ebc26cda61b567418205f7ee60be122b3c84f (diff)
channel list scrolling
Diffstat (limited to 'tui')
-rw-r--r--tui/layout.go38
-rw-r--r--tui/scroll_state.go43
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
+}