package main import "github.com/nsf/termbox-go" type Screen interface { handleKeyEvent(event termbox.Event) int performLayout() drawScreen(style Style) } const ( BROWSER_SCREEN_INDEX = iota ABOUT_SCREEN_INDEX EXIT_SCREEN_INDEX ) func defaultScreensForData(db *BoltDB) []Screen { var view_port ViewPort browser_screen := BrowserScreen{db: db, view_port: view_port} about_screen := AboutScreen(0) screens := [...]Screen{ &browser_screen, &about_screen, } return screens[:] } func drawBackground(bg termbox.Attribute) { termbox.Clear(0, bg) } func layoutAndDrawScreen(screen Screen, style Style) { screen.performLayout() drawBackground(style.default_bg) screen.drawScreen(style) termbox.Flush() }