make boxes cover anything behind them
This commit is contained in:
		
							
								
								
									
										43
									
								
								ui/ui.go
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								ui/ui.go
									
									
									
									
									
								
							@@ -185,24 +185,26 @@ func (c *Container) SetContents(con Contents) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// A Box draws a ASCII box around its contents, with an optional title and footer.
 | 
					// A Box draws a ASCII box around its contents, with an optional title and footer.
 | 
				
			||||||
type Box struct {
 | 
					type Box struct {
 | 
				
			||||||
	x, y      int
 | 
						x, y        int
 | 
				
			||||||
	h, w      int
 | 
						h, w        int
 | 
				
			||||||
	title     Drawable
 | 
						title       Drawable
 | 
				
			||||||
	menuItems Drawable
 | 
						menuItems   Drawable
 | 
				
			||||||
	contents  Contents
 | 
						contents    Contents
 | 
				
			||||||
	style     tcell.Style
 | 
						style       tcell.Style
 | 
				
			||||||
	cascade   bool
 | 
						cascade     bool
 | 
				
			||||||
	visible   bool
 | 
						visible     bool
 | 
				
			||||||
 | 
						transparent bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewBox(title string, menuItems []string, contents Contents, initialStyle tcell.Style, cascade bool) *Box {
 | 
					func NewBox(title string, menuItems []string, contents Contents, initialStyle tcell.Style, cascade bool) *Box {
 | 
				
			||||||
	return &Box{
 | 
						return &Box{
 | 
				
			||||||
		title:     NewPaddedText(title),
 | 
							title:       NewPaddedText(title),
 | 
				
			||||||
		menuItems: NewPaddedText(strings.Join(menuItems, " ")),
 | 
							menuItems:   NewPaddedText(strings.Join(menuItems, " ")),
 | 
				
			||||||
		contents:  contents,
 | 
							contents:    contents,
 | 
				
			||||||
		style:     initialStyle,
 | 
							style:       initialStyle,
 | 
				
			||||||
		cascade:   cascade,
 | 
							cascade:     cascade,
 | 
				
			||||||
		visible:   true,
 | 
							visible:     true,
 | 
				
			||||||
 | 
							transparent: false,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -223,6 +225,15 @@ func (b *Box) Draw(s tcell.Screen) {
 | 
				
			|||||||
	if !b.visible {
 | 
						if !b.visible {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						// blank out inner area
 | 
				
			||||||
 | 
						if !b.transparent {
 | 
				
			||||||
 | 
							for m := b.x + 1; m < b.x+b.w-1; m++ {
 | 
				
			||||||
 | 
								for n := b.y + 1; n < b.y+b.h-1; n++ {
 | 
				
			||||||
 | 
									s.SetContent(m, n, ' ', nil, b.style)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// draw outside bars
 | 
				
			||||||
	for m := b.x + 1; m < b.x+b.w-1; m++ {
 | 
						for m := b.x + 1; m < b.x+b.w-1; m++ {
 | 
				
			||||||
		s.SetContent(m, b.y, tcell.RuneHLine, nil, b.style)
 | 
							s.SetContent(m, b.y, tcell.RuneHLine, nil, b.style)
 | 
				
			||||||
		s.SetContent(m, b.y+b.h-1, tcell.RuneHLine, nil, b.style)
 | 
							s.SetContent(m, b.y+b.h-1, tcell.RuneHLine, nil, b.style)
 | 
				
			||||||
@@ -262,6 +273,10 @@ func (b *Box) SetVisible(v bool) {
 | 
				
			|||||||
	b.visible = v
 | 
						b.visible = v
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (b *Box) SetTransparent(v bool) {
 | 
				
			||||||
 | 
						b.transparent = v
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (b *Box) Contents() Contents {
 | 
					func (b *Box) Contents() Contents {
 | 
				
			||||||
	return b.contents
 | 
						return b.contents
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user