List relies more on the bounds insetting from theme

This commit is contained in:
Sasha Koshka 2023-01-29 12:51:43 -05:00
parent 92aeb48a1f
commit 44b9a1e717
3 changed files with 14 additions and 18 deletions

View File

@ -165,7 +165,7 @@ func (element *List) ScrollAxes () (horizontal, vertical bool) {
func (element *List) scrollViewportHeight () (height int) { func (element *List) scrollViewportHeight () (height int) {
_, inset := theme.ListPattern(theme.PatternState { }) _, inset := theme.ListPattern(theme.PatternState { })
return element.Bounds().Dy() - theme.Padding() - inset[0] - inset[2] return element.Bounds().Dy() - inset[0] - inset[2]
} }
func (element *List) maxScrollHeight () (height int) { func (element *List) maxScrollHeight () (height int) {
@ -288,11 +288,12 @@ func (element *List) Replace (index int, entry ListEntry) {
} }
func (element *List) selectUnderMouse (x, y int) (updated bool) { func (element *List) selectUnderMouse (x, y int) (updated bool) {
bounds := element.Bounds() _, inset := theme.ListPattern(theme.PatternState { })
bounds := inset.Apply(element.Bounds())
mousePoint := image.Pt(x, y) mousePoint := image.Pt(x, y)
dot := image.Pt ( dot := image.Pt (
bounds.Min.X + theme.Padding() / 2, bounds.Min.X,
bounds.Min.Y - element.scroll + theme.Padding() / 2) bounds.Min.Y - element.scroll)
newlySelectedEntryIndex := -1 newlySelectedEntryIndex := -1
for index, entry := range element.entries { for index, entry := range element.entries {
@ -344,7 +345,6 @@ func (element *List) updateMinimumSize () {
minimumHeight := element.forcedMinimumHeight minimumHeight := element.forcedMinimumHeight
if minimumWidth == 0 { if minimumWidth == 0 {
minimumWidth = theme.Padding()
for _, entry := range element.entries { for _, entry := range element.entries {
entryWidth := entry.Bounds().Dx() entryWidth := entry.Bounds().Dx()
if entryWidth > minimumWidth { if entryWidth > minimumWidth {
@ -354,10 +354,9 @@ func (element *List) updateMinimumSize () {
} }
if minimumHeight == 0 { if minimumHeight == 0 {
minimumHeight = element.contentHeight + theme.Padding() minimumHeight = element.contentHeight
} }
_, inset := theme.ListPattern(theme.PatternState { }) _, inset := theme.ListPattern(theme.PatternState { })
minimumWidth += inset[1] + inset[3] minimumWidth += inset[1] + inset[3]
minimumHeight += inset[0] + inset[2] minimumHeight += inset[0] + inset[2]
@ -377,7 +376,7 @@ func (element *List) draw () {
bounds = inset.Apply(bounds) bounds = inset.Apply(bounds)
dot := image.Point { dot := image.Point {
bounds.Min.X, bounds.Min.X,
bounds.Min.Y - element.scroll + theme.Padding() / 2, bounds.Min.Y - element.scroll,
} }
for index, entry := range element.entries { for index, entry := range element.entries {
entryPosition := dot entryPosition := dot

View File

@ -33,22 +33,19 @@ func (entry *ListEntry) Collapse (width int) {
} }
func (entry *ListEntry) updateBounds () { func (entry *ListEntry) updateBounds () {
padding := theme.Padding()
entry.bounds = image.Rectangle { } entry.bounds = image.Rectangle { }
entry.bounds.Max.Y = entry.drawer.LineHeight().Round() + padding entry.bounds.Max.Y = entry.drawer.LineHeight().Round()
if entry.forcedMinimumWidth > 0 { if entry.forcedMinimumWidth > 0 {
entry.bounds.Max.X = entry.forcedMinimumWidth entry.bounds.Max.X = entry.forcedMinimumWidth
} else { } else {
entry.bounds.Max.X = entry.bounds.Max.X = entry.drawer.LayoutBounds().Dx()
entry.drawer.LayoutBounds().Dx() + padding * 2
} }
_, inset := theme.ItemPattern(theme.PatternState { }) _, inset := theme.ItemPattern(theme.PatternState { })
entry.bounds.Max.Y += inset[0] + inset[2] entry.bounds.Max.Y += inset[0] + inset[2]
entry.textPoint = entry.textPoint =
image.Pt(inset[3] + padding, inset[0] + padding / 2). image.Pt(inset[3], inset[0]).
Sub(entry.drawer.LayoutBounds().Min) Sub(entry.drawer.LayoutBounds().Min)
} }

View File

@ -119,18 +119,18 @@ func InputPattern (state PatternState) (pattern artist.Pattern, inset Inset) {
// ListPattern returns a background pattern for a list of things. // ListPattern returns a background pattern for a list of things.
func ListPattern (state PatternState) (pattern artist.Pattern, inset Inset) { func ListPattern (state PatternState) (pattern artist.Pattern, inset Inset) {
if state.Selected { if state.Selected {
return selectedListPattern, Inset { } return selectedListPattern, Inset { 4, 0, 4, 0 }
} else { } else {
return listPattern, Inset { } return listPattern, Inset { 4, 0, 4, 0 }
} }
} }
// ItemPattern returns a background pattern for a list item. // ItemPattern returns a background pattern for a list item.
func ItemPattern (state PatternState) (pattern artist.Pattern, inset Inset) { func ItemPattern (state PatternState) (pattern artist.Pattern, inset Inset) {
if state.On { if state.On {
return selectedListEntryPattern, Inset { 1, 1, 1, 1 } return selectedListEntryPattern, Inset { 4, 8, 4, 8 }
} else { } else {
return listEntryPattern, Inset { 1, 1, 1, 1 } return listEntryPattern, Inset { 4, 8, 4, 8 }
} }
} }