Depois de surtar durante alguns belos dias eu finalmente consegui reinventar a roda, ou melhor a matemática por trás de uma scrollbar. Então decidi fazer uma biblioteca pra parar de ficar copiando código entre projetos
.
Para calcular o tamanho da thumb:
bigger(1, viewport_size * (viewport_size / content_size))
Para a posição dela dentro da scrollbar:
scroll / (content_size - viewport_size) * (viewport_size - thumb_size)
Você pode muito bem avançar um pixel/row por vez,
mas caso vc queira avançar a quantia que a thumb representa, essa é a quantia:
1 / track_size * content_size
Para saber se é possÃvel continuar rolando:
scroll + viewport_size < content_size
Apesar da biblioteca ser bem simples e ter um funcionamento simples, acho que seria dificil exemplificar com tão poco código (já que ela foi feita para códigos CLI mais completos), então deixo um exemplo.
Icones de Gopher por Egon Elbre