Merge pull request #727 from dimonomid/dropdown-hor-alignment-fix

Fix the DropDown list when too close to the right screen edge
This commit is contained in:
rivo 2022-11-13 18:35:39 +01:00 committed by GitHub
commit 12a29444c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 2 deletions

View File

@ -396,12 +396,20 @@ func (d *DropDown) Draw(screen tcell.Screen) {
// Draw options list. // Draw options list.
if d.HasFocus() && d.open { if d.HasFocus() && d.open {
// We prefer to drop down but if there is no space, maybe drop up?
lx := x lx := x
ly := y + 1 ly := y + 1
lwidth := maxWidth lwidth := maxWidth
lheight := len(d.options) lheight := len(d.options)
_, sheight := screen.Size() swidth, sheight := screen.Size()
// We prefer to align the left sides of the list and the main widget, but
// if there is no space to the right, then shift the list to the left.
if lx+lwidth >= swidth {
lx = swidth - lwidth
if lx < 0 {
lx = 0
}
}
// We prefer to drop down but if there is no space, maybe drop up?
if ly+lheight >= sheight && ly-2 > lheight-ly { if ly+lheight >= sheight && ly-2 > lheight-ly {
ly = y - lheight ly = y - lheight
if ly < 0 { if ly < 0 {