The scroll bar is better

This commit is contained in:
Sasha Koshka 2023-03-09 23:27:08 -05:00
parent 8e1638e054
commit 1c28613981
2 changed files with 34 additions and 17 deletions

View File

@ -70,7 +70,9 @@ func (element *ScrollBar) HandleMouseDown (x, y int, button input.Button) {
// the mouse is pressed down within the bar's handle
element.dragging = true
element.drawAndPush()
element.dragOffset = point
element.dragOffset =
point.Sub(element.bar.Min).
Add(element.Bounds().Min)
element.dragTo(point)
} else {
// the mouse is pressed down within the bar's gutter
@ -178,9 +180,11 @@ func (element *ScrollBar) isAfterHandle (point image.Point) bool {
func (element *ScrollBar) fallbackDragOffset () image.Point {
if element.vertical {
return element.bar.Min.Add(image.Pt(0, element.bar.Dy() / 2))
return element.Bounds().Min.
Add(image.Pt(0, element.bar.Dy() / 2))
} else {
return element.bar.Min.Add(image.Pt(element.bar.Dx() / 2, 0))
return element.Bounds().Min.
Add(image.Pt(element.bar.Dx() / 2, 0))
}
}

View File

@ -24,17 +24,27 @@ func run () {
Gap: true,
})
list := basicElements.NewList (
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil),
basicElements.NewListEntry("something", nil))
basicElements.NewListEntry("This is list item 0", nil),
basicElements.NewListEntry("This is list item 1", nil),
basicElements.NewListEntry("This is list item 2", nil),
basicElements.NewListEntry("This is list item 3", nil),
basicElements.NewListEntry("This is list item 4", nil),
basicElements.NewListEntry("This is list item 5", nil),
basicElements.NewListEntry("This is list item 6", nil),
basicElements.NewListEntry("This is list item 7", nil),
basicElements.NewListEntry("This is list item 8", nil),
basicElements.NewListEntry("This is list item 9", nil),
basicElements.NewListEntry("This is list item 10", nil),
basicElements.NewListEntry("This is list item 11", nil),
basicElements.NewListEntry("This is list item 12", nil),
basicElements.NewListEntry("This is list item 13", nil),
basicElements.NewListEntry("This is list item 14", nil),
basicElements.NewListEntry("This is list item 15", nil),
basicElements.NewListEntry("This is list item 16", nil),
basicElements.NewListEntry("This is list item 17", nil),
basicElements.NewListEntry("This is list item 18", nil),
basicElements.NewListEntry("This is list item 19", nil),
basicElements.NewListEntry("This is list item 20", nil))
list.Collapse(0, 32)
scrollBar := basicElements.NewScrollBar(true)
list.OnScrollBoundsChange (func () {
@ -46,12 +56,15 @@ func run () {
list.ScrollTo(viewport)
})
container.Adopt(basicElements.NewLabel("look at this non sense", false), false)
container.Adopt(basicElements.NewLabel("A ScrollContainer:", false), false)
scrollContainer.Adopt(textBox)
container.Adopt(scrollContainer, false)
container.Adopt(basicElements.NewLabel("what does that scrollbar do?", false), false)
disconnectedContainer.Adopt(list, false)
disconnectedContainer.Adopt(basicElements.NewSpacer(true), true)
disconnectedContainer.Adopt (basicElements.NewLabel (
"Notice how the scroll bar to the right can be used to " +
"control the list, despite not even touching it. It is " +
"indeed a thing you can do. It is also terrible UI design so " +
"don't do it.", true), true)
disconnectedContainer.Adopt(scrollBar, false)
container.Adopt(disconnectedContainer, true)