mirror of
https://github.com/anotherhadi/spilltea.git
synced 2026-05-20 01:32:33 +02:00
refactor page/list movement
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
package util
|
||||
|
||||
// CursorMovePage moves cursor forward or backward by one page (perPage items),
|
||||
// clamped to [0, total-1].
|
||||
func CursorMovePage(cursor, total, perPage int, forward bool) int {
|
||||
step := perPage
|
||||
if step < 1 {
|
||||
step = 1
|
||||
}
|
||||
if forward {
|
||||
cursor += step
|
||||
} else {
|
||||
cursor -= step
|
||||
}
|
||||
if cursor < 0 || total <= 0 {
|
||||
return 0
|
||||
}
|
||||
if cursor >= total {
|
||||
return total - 1
|
||||
}
|
||||
return cursor
|
||||
}
|
||||
|
||||
// CursorGotoBottom returns the last valid cursor index for a list of total items.
|
||||
func CursorGotoBottom(total int) int {
|
||||
if total <= 0 {
|
||||
return 0
|
||||
}
|
||||
return total - 1
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"charm.land/bubbles/v2/viewport"
|
||||
tea "charm.land/bubbletea/v2"
|
||||
)
|
||||
|
||||
// ScrollViewport scrolls vp vertically by half its height.
|
||||
// delta should be -1 for up, +1 for down.
|
||||
func ScrollViewport(vp *viewport.Model, delta int) {
|
||||
step := vp.Height() / 2
|
||||
if step < 1 {
|
||||
step = 1
|
||||
}
|
||||
vp.SetYOffset(vp.YOffset() + delta*step)
|
||||
}
|
||||
|
||||
// HandleMouseWheel applies standard mouse wheel scrolling to vp.
|
||||
// Vertical: one line at a time. Shift+vertical or horizontal: scroll 6 columns.
|
||||
func HandleMouseWheel(msg tea.MouseWheelMsg, vp *viewport.Model) {
|
||||
switch msg.Button {
|
||||
case tea.MouseWheelUp:
|
||||
if msg.Mod.Contains(tea.ModShift) {
|
||||
vp.ScrollLeft(6)
|
||||
} else {
|
||||
vp.SetYOffset(vp.YOffset() - 1)
|
||||
}
|
||||
case tea.MouseWheelDown:
|
||||
if msg.Mod.Contains(tea.ModShift) {
|
||||
vp.ScrollRight(6)
|
||||
} else {
|
||||
vp.SetYOffset(vp.YOffset() + 1)
|
||||
}
|
||||
case tea.MouseWheelLeft:
|
||||
vp.ScrollLeft(6)
|
||||
case tea.MouseWheelRight:
|
||||
vp.ScrollRight(6)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user