package main import "github.com/nsf/termbox-go" type Screen interface { handleKeyEvent(event termbox.Event) int performLayout() drawScreen(style Style) } type ViewPort struct { bytes_per_row int number_of_rows int first_row int } const ( MAIN_SCREEN_INDEX = iota ABOUT_SCREEN_INDEX EXIT_SCREEN_INDEX ) func defaultScreens() []Screen { //var view_port ViewPort main_screen := MainScreen{} about_screen := AboutScreen(0) screens := [...]Screen{ &main_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() }