summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorHubert Hirtz <hubert@hirtz.pm>2021-10-26 18:41:19 +0200
committerHubert Hirtz <hubert@hirtz.pm>2021-10-26 18:41:19 +0200
commit97685359be3244cedc64b10a3cab273aaa2988e4 (patch)
tree072f818c632eaece4041b44605d7b0e217d9583a /ui
parenttimeline drawing: fix off-by-one error (diff)
Scroll up/down highlight by highlight
Diffstat (limited to 'ui')
-rw-r--r--ui/buffers.go30
-rw-r--r--ui/ui.go8
2 files changed, 38 insertions, 0 deletions
diff --git a/ui/buffers.go b/ui/buffers.go
index 0c24248..c126408 100644
--- a/ui/buffers.go
+++ b/ui/buffers.go
@@ -374,6 +374,36 @@ func (bs *BufferList) ScrollDown(n int) {
}
}
+func (bs *BufferList) ScrollUpHighlight() bool {
+ b := &bs.list[bs.current]
+ ymin := b.scrollAmt + bs.tlHeight
+ y := 0
+ for i := len(b.lines) - 1; 0 <= i; i-- {
+ line := &b.lines[i]
+ if ymin <= y && line.Highlight {
+ b.scrollAmt = y - bs.tlHeight + 1
+ return true
+ }
+ y += len(line.NewLines(bs.tlInnerWidth)) + 1
+ }
+ return false
+}
+
+func (bs *BufferList) ScrollDownHighlight() bool {
+ b := &bs.list[bs.current]
+ yLastHighlight := 0
+ y := 0
+ for i := len(b.lines) - 1; 0 <= i && y < b.scrollAmt; i-- {
+ line := &b.lines[i]
+ if line.Highlight {
+ yLastHighlight = y
+ }
+ y += len(line.NewLines(bs.tlInnerWidth)) + 1
+ }
+ b.scrollAmt = yLastHighlight
+ return b.scrollAmt != 0
+}
+
func (bs *BufferList) IsAtTop() bool {
b := &bs.list[bs.current]
return b.isAtTop
diff --git a/ui/ui.go b/ui/ui.go
index 7291042..ef81827 100644
--- a/ui/ui.go
+++ b/ui/ui.go
@@ -132,6 +132,14 @@ func (ui *UI) ScrollDownBy(n int) {
ui.bs.ScrollDown(n)
}
+func (ui *UI) ScrollUpHighlight() bool {
+ return ui.bs.ScrollUpHighlight()
+}
+
+func (ui *UI) ScrollDownHighlight() bool {
+ return ui.bs.ScrollDownHighlight()
+}
+
func (ui *UI) ScrollMemberUpBy(n int) {
ui.memberOffset -= n
if ui.memberOffset < 0 {