Update Application.Draw to accept one or more primitives to draw instead of the whole screen

This commit is contained in:
Trevor Slocum 2021-06-06 20:35:05 -07:00
parent b9d448d0f4
commit ca75748dff
2 changed files with 25 additions and 5 deletions

View File

@ -6,6 +6,7 @@ v1.5.6 (WIP)
- Add DropDown.SetAlwaysDrawDropDownSymbol (DropDown symbols are now shown only when focused by default)
- Add DropDown.SetDropDownOpenSymbolRune
- Draw additional accents when rendering a list divider
- Update Application.Draw to accept one or more primitives to draw instead of the whole screen
- Update List, Table and TreeView to not handle Tab or Backtab
- Allow specifying TabbedPanels switcher height
- Change default colors (fields and buttons are now green)

View File

@ -611,12 +611,31 @@ func (a *Application) Suspend(f func()) bool {
return true
}
// Draw refreshes the screen (during the next update cycle). It calls the Draw()
// function of the application's root primitive and then syncs the screen
// buffer.
func (a *Application) Draw() {
// Draw draws the provided primitives on the screen, or when no primitives are
// provided, draws the application's root primitive (i.e. the entire screen).
//
// When one or more primitives are supplied, the Draw functions of the
// primitives are called. Handlers set via BeforeDrawFunc and AfterDrawFunc are
// not called.
//
// When no primitives are provided, the Draw function of the application's root
// primitive is called. This results in drawing the entire screen. Handlers set
// via BeforeDrawFunc and AfterDrawFunc are also called.
func (a *Application) Draw(p ...Primitive) {
a.QueueUpdate(func() {
a.draw()
if len(p) == 0 {
a.draw()
return
}
a.Lock()
if a.screen != nil {
for _, primitive := range p {
primitive.Draw(a.screen)
}
a.screen.Show()
}
a.Unlock()
})
}