experiment: more granular scrolling

This commit is contained in:
Kartik K. Agaram 2021-08-11 21:58:47 -07:00
parent 9c25023a20
commit faf242c498
1 changed files with 35 additions and 0 deletions

View File

@ -109,6 +109,10 @@ fn render-menu screen: (addr screen) {
draw-text-rightward-from-cursor screen, " next page ", width, 0xf/fg, 0/bg
draw-text-rightward-from-cursor screen, " ^b ", width, 0/fg 0xf/bg
draw-text-rightward-from-cursor screen, " previous page ", width, 0xf/fg, 0/bg
draw-text-rightward-from-cursor screen, " ^n ", width, 0/fg 0xf/bg
draw-text-rightward-from-cursor screen, " next (older) item ", width, 0xf/fg, 0/bg
draw-text-rightward-from-cursor screen, " ^p ", width, 0/fg 0xf/bg
draw-text-rightward-from-cursor screen, " previous (more recent) item ", width, 0xf/fg, 0/bg
}
fn render-item screen: (addr screen), _item: (addr item), _users: (addr array user), y: int, screen-height: int -> _/ecx: int {
@ -173,6 +177,18 @@ fn render-item screen: (addr screen), _item: (addr item), _users: (addr array us
}
fn update-environment env: (addr environment), key: byte, items: (addr item-list) {
{
compare key, 0xe/ctrl-n
break-if-!=
next-item env, items
return
}
{
compare key, 0x10/ctrl-p
break-if-!=
previous-item env, items
return
}
{
compare key, 6/ctrl-f
break-if-!=
@ -187,6 +203,25 @@ fn update-environment env: (addr environment), key: byte, items: (addr item-list
}
}
fn next-item _env: (addr environment), _items: (addr item-list) {
var env/edi: (addr environment) <- copy _env
var dest/eax: (addr int) <- get env, item-index
compare *dest, 0
break-if-<=
decrement *dest
}
fn previous-item _env: (addr environment), _items: (addr item-list) {
var env/edi: (addr environment) <- copy _env
var items/esi: (addr item-list) <- copy _items
var newest-item-index-a/ecx: (addr int) <- get items, newest
var newest-item-index/ecx: int <- copy *newest-item-index-a
var dest/eax: (addr int) <- get env, item-index
compare *dest, newest-item-index
break-if->=
increment *dest
}
fn page-down _env: (addr environment), _items: (addr item-list) {
var env/edi: (addr environment) <- copy _env
var items/esi: (addr item-list) <- copy _items