From db1b2cd53f5dc7bfbfb6ee54ad0bb0882ea2cc03 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Wed, 10 Jan 2018 22:03:56 -0500 Subject: Renderer scaffolding --- ui/render.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 ui/render.go (limited to 'ui/render.go') diff --git a/ui/render.go b/ui/render.go new file mode 100644 index 0000000..bca0cf6 --- /dev/null +++ b/ui/render.go @@ -0,0 +1,45 @@ +package ui + +import ( + tb "github.com/nsf/termbox-go" + + "git.sr.ht/~sircmpwn/aerc2/config" +) + +func Initialize(conf *config.AercConfig) (*UIState, error) { + state := UIState{ + InvalidPanes: InvalidateAll, + Tabs: make([]AercTab, len(conf.Accounts)), + } + // TODO: Initialize each tab to a mailbox tab + if err := tb.Init(); err != nil { + return nil, err + } + tb.SetInputMode(tb.InputEsc | tb.InputMouse) + tb.SetOutputMode(tb.Output256) + return &state, nil +} + +func (state *UIState) Close() { + tb.Close() +} + +func (state *UIState) Invalidate(what uint) { + state.InvalidPanes |= what +} + +func (state *UIState) Tick() bool { + switch e := tb.PollEvent(); e.Type { + case tb.EventKey: + if e.Key == tb.KeyEsc { + state.Exit = true + } + case tb.EventResize: + state.Invalidate(InvalidateAll) + } + if state.InvalidPanes != 0 { + // TODO: re-render + state.InvalidPanes = 0 + } + return true +} -- cgit v1.2.3