package main import ( termbox "github.com/nsf/termbox-go" ) type Screen interface { handleKeyEvent(termbox.Event) int initialize(Bundle) error drawScreen() } const ( ScreenMain = iota ScreenTask ScreenAbout ScreenExit DefaultBg = termbox.ColorBlack DefaultFg = termbox.ColorWhite TitleFg = termbox.ColorWhite TitleBg = termbox.ColorBlue CursorFg = termbox.ColorBlack CursorBg = termbox.ColorGreen ) func (a *AppState) BuildScreens() { mainScreen := MainScreen{ viewPort: &ViewPort{}, } aboutScreen := AboutScreen{} taskScreen := TaskScreen{ viewPort: &ViewPort{}, } a.screens = append(a.screens, &mainScreen) a.screens = append(a.screens, &taskScreen) a.screens = append(a.screens, &aboutScreen) } func (a *AppState) drawBackground(bg termbox.Attribute) { termbox.Clear(0, bg) } func (a *AppState) layoutAndDrawScreen(s Screen) { a.drawBackground(DefaultBg) s.drawScreen() termbox.Flush() } // ViewPort helps keep track of what's being displayed on the screen type ViewPort struct { bytesPerRow int numberOfRows int firstRow int cursor int } func readUserInput(e chan termbox.Event) { for { e <- termbox.PollEvent() } }