mirror of
https://github.com/zoriya/bubbles.git
synced 2026-08-05 04:36:07 +00:00
fix: normalize yoffset
This commit is contained in:
+16
-11
@@ -350,14 +350,17 @@ func (m *Model) SetCursor(n int) {
|
||||
// It can not go above the first row.
|
||||
func (m *Model) MoveUp(n int) {
|
||||
m.cursor = clamp(m.cursor-n, 0, len(m.rows)-1)
|
||||
|
||||
offset := m.viewport.YOffset()
|
||||
switch {
|
||||
case m.start == 0:
|
||||
m.viewport.SetYOffset(clamp(m.viewport.YOffset, 0, m.cursor))
|
||||
offset = clamp(offset, 0, m.cursor)
|
||||
case m.start < m.viewport.Height():
|
||||
m.viewport.YOffset = (clamp(clamp(m.viewport.YOffset+n, 0, m.cursor), 0, m.viewport.Height()))
|
||||
case m.viewport.YOffset >= 1:
|
||||
m.viewport.YOffset = clamp(m.viewport.YOffset+n, 1, m.viewport.Height())
|
||||
offset = clamp(clamp(offset+n, 0, m.cursor), 0, m.viewport.Height())
|
||||
case offset >= 1:
|
||||
offset = clamp(offset+n, 1, m.viewport.Height())
|
||||
}
|
||||
m.viewport.SetYOffset(offset)
|
||||
m.UpdateViewport()
|
||||
}
|
||||
|
||||
@@ -367,15 +370,17 @@ func (m *Model) MoveDown(n int) {
|
||||
m.cursor = clamp(m.cursor+n, 0, len(m.rows)-1)
|
||||
m.UpdateViewport()
|
||||
|
||||
offset := m.viewport.YOffset()
|
||||
switch {
|
||||
case m.end == len(m.rows) && m.viewport.YOffset > 0:
|
||||
m.viewport.SetYOffset(clamp(m.viewport.YOffset-n, 1, m.viewport.Height()))
|
||||
case m.cursor > (m.end-m.start)/2 && m.viewport.YOffset > 0:
|
||||
m.viewport.SetYOffset(clamp(m.viewport.YOffset-n, 1, m.cursor))
|
||||
case m.viewport.YOffset > 1:
|
||||
case m.cursor > m.viewport.YOffset+m.viewport.Height()-1:
|
||||
m.viewport.SetYOffset(clamp(m.viewport.YOffset+1, 0, 1))
|
||||
case m.end == len(m.rows) && offset > 0:
|
||||
offset = clamp(offset-n, 1, m.viewport.Height())
|
||||
case m.cursor > (m.end-m.start)/2 && offset > 0:
|
||||
offset = clamp(offset-n, 1, m.cursor)
|
||||
case offset > 1:
|
||||
case m.cursor > offset+m.viewport.Height()-1:
|
||||
offset = clamp(offset+1, 0, 1)
|
||||
}
|
||||
m.viewport.SetYOffset(offset)
|
||||
}
|
||||
|
||||
// GotoTop moves the selection to the first row.
|
||||
|
||||
Reference in New Issue
Block a user