Added more list scrolling functionality.

You can now go up and down by half a page, and to top and bottom. I also added a function called 'scrollAmount' that allows you to scroll by the number of rows you would like to scroll by.
This commit is contained in:
hmmmmmmmm 2019-02-01 14:07:54 +00:00 committed by GitHub
parent ed41775aa5
commit 8e972f7541
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -96,26 +96,46 @@ func (self *List) ScrollDown() {
}
}
// Scrolls by amount given. If amount is < 0, then scroll up.
// There is no need to set self.topRow, as this will be set automatically when drawn,
// since if the selected item is off screen then the topRow variable will change accordingly.
func (self *List) scrollAmount(amount int) {
if len(self.Rows)-int(self.SelectedRow) <= amount {
self.SelectedRow = uint(len(self.Rows)-1)
} else if int(self.SelectedRow)+amount < 0 {
self.SelectedRow = 0
} else {
self.SelectedRow += uint(amount)
}
}
// PageUp scrolls up one whole page.
func (self *List) PageUp() {
// if on the first 'page'
if int(self.SelectedRow)-self.Inner.Dy() < 0 {
// go to the top
self.topRow = 0
} else {
self.topRow = uint(MaxInt(int(self.topRow)-self.Inner.Dy(), 0))
}
// If an item is selected below top row, then go to the top row.
if self.SelectedRow > self.topRow {
self.SelectedRow = self.topRow
} else {
self.scrollAmount(-self.Inner.Dy())
}
}
// PageDown scolls down one whole page.
func (self *List) PageDown() {
// if on last 'page'
if len(self.Rows)-int(self.topRow) <= self.Inner.Dy() {
// select last item
self.scrollAmount(self.Inner.Dy())
}
func (self *List) HalfPageUp() {
self.scrollAmount(-int(FloorFloat64(float64(self.Inner.Dy())/2)))
}
func (self *List) HalfPageDown() {
self.scrollAmount(int(FloorFloat64(float64(self.Inner.Dy())/2)))
}
func (self *List) ScrollTop() {
self.SelectedRow = 0
}
func (self *List) ScrollBottom() {
self.SelectedRow = uint(len(self.Rows)-1)
} else {
self.topRow += uint(self.Inner.Dy())
self.SelectedRow = self.topRow
}
}