|
|
|
@ -27,6 +27,10 @@ func (wm *WindowManager) Add(w ...*Window) {
|
|
|
|
|
wm.Lock()
|
|
|
|
|
defer wm.Unlock()
|
|
|
|
|
|
|
|
|
|
for _, window := range w {
|
|
|
|
|
window.SetBorder(true)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wm.windows = append(wm.windows, w...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -81,11 +85,10 @@ func (wm *WindowManager) Draw(screen tcell.Screen) {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
w.SetBorder(false)
|
|
|
|
|
w.SetRect(x, y+1, width, height-1)
|
|
|
|
|
w.Draw(screen)
|
|
|
|
|
|
|
|
|
|
hasFullScreen = true
|
|
|
|
|
w.SetRect(x-1, y, width+2, height+1)
|
|
|
|
|
|
|
|
|
|
w.Draw(screen)
|
|
|
|
|
}
|
|
|
|
|
if hasFullScreen {
|
|
|
|
|
return
|
|
|
|
@ -95,8 +98,27 @@ func (wm *WindowManager) Draw(screen tcell.Screen) {
|
|
|
|
|
if !w.GetVisible() {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
w.SetBorder(true)
|
|
|
|
|
w.SetRect(x+w.x, x+w.y, w.width, w.height)
|
|
|
|
|
|
|
|
|
|
// Reposition out of bounds windows
|
|
|
|
|
margin := 3
|
|
|
|
|
wx, wy, ww, wh := w.GetRect()
|
|
|
|
|
ox, oy := wx, wy
|
|
|
|
|
if wx > x+width-margin {
|
|
|
|
|
wx = x + width - margin
|
|
|
|
|
}
|
|
|
|
|
if wx+ww < x+margin {
|
|
|
|
|
wx = x - ww + margin
|
|
|
|
|
}
|
|
|
|
|
if wy > y+height-margin {
|
|
|
|
|
wy = y + height - margin
|
|
|
|
|
}
|
|
|
|
|
if wy < y {
|
|
|
|
|
wy = y // No top margin
|
|
|
|
|
}
|
|
|
|
|
if wx != ox || wy != oy {
|
|
|
|
|
w.SetRect(wx, wy, ww, wh)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
w.Draw(screen)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|