diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-01-10 22:54:55 -0500 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2018-01-10 22:54:55 -0500 |
commit | 55e84533022c1f9bf9fd9e2cd2db930394b590b8 (patch) | |
tree | 513ee239f641aa5154427776efa18fda752e642d /ui | |
parent | 77a0f68758905faa74407499ff92c90929e27989 (diff) | |
download | aerc-55e84533022c1f9bf9fd9e2cd2db930394b590b8.tar.gz |
Improve invalidation logic
Diffstat (limited to 'ui')
-rw-r--r-- | ui/account.go | 13 | ||||
-rw-r--r-- | ui/types.go | 11 | ||||
-rw-r--r-- | ui/ui.go (renamed from ui/render.go) | 14 |
3 files changed, 26 insertions, 12 deletions
diff --git a/ui/account.go b/ui/account.go index 0949e52..9c16cc5 100644 --- a/ui/account.go +++ b/ui/account.go @@ -11,6 +11,8 @@ type AccountTab struct { Config *config.AccountConfig Worker *worker.Worker Parent *UIState + + counter int } func NewAccountTab(conf *config.AccountConfig, work *worker.Worker) *AccountTab { @@ -24,10 +26,6 @@ func (acc *AccountTab) Name() string { return acc.Config.Name } -func (acc *AccountTab) Invalid() bool { - return false -} - func (acc *AccountTab) SetParent(parent *UIState) { acc.Parent = parent } @@ -37,5 +35,10 @@ func (acc *AccountTab) Render(at Geometry) { Fg: tb.ColorDefault, Bg: tb.ColorDefault, } - TPrintf(&at, cell, "%s", acc.Name()) + TPrintf(&at, cell, "%s %d", acc.Name(), acc.counter) + acc.counter++ + if acc.counter%10000 == 0 { + acc.counter = 0 + } + acc.Parent.InvalidateFrom(acc) } diff --git a/ui/types.go b/ui/types.go index 588c3b3..14a91c3 100644 --- a/ui/types.go +++ b/ui/types.go @@ -7,14 +7,18 @@ import ( ) const ( - Valid = 0 - InvalidateTabs = 1 << iota + Valid = 0 + InvalidateTabList = 1 << iota + InvalidateTabView InvalidateSidebar InvalidateStatusBar ) const ( - InvalidateAll = InvalidateTabs | InvalidateSidebar | InvalidateStatusBar + InvalidateAll = InvalidateTabList | + InvalidateTabView | + InvalidateSidebar | + InvalidateStatusBar ) type Geometry struct { @@ -26,7 +30,6 @@ type Geometry struct { type AercTab interface { Name() string - Invalid() bool Render(at Geometry) SetParent(parent *UIState) } diff --git a/ui/render.go b/ui/ui.go index 4fedc2c..f01af08 100644 --- a/ui/render.go +++ b/ui/ui.go @@ -31,6 +31,7 @@ func (state *UIState) Close() { } func (state *UIState) AddTab(tab AercTab) { + tab.SetParent(state) state.Tabs = append(state.Tabs, tab) } @@ -38,6 +39,12 @@ func (state *UIState) Invalidate(what uint) { state.InvalidPanes |= what } +func (state *UIState) InvalidateFrom(tab AercTab) { + if state.Tabs[state.SelectedTab] == tab { + state.Invalidate(InvalidateTabView) + } +} + func (state *UIState) calcGeometries() { width, height := tb.Size() // TODO: more @@ -65,16 +72,17 @@ func (state *UIState) Tick() bool { break } if state.InvalidPanes != 0 { - if state.InvalidPanes&InvalidateAll == InvalidateAll { + invalid := state.InvalidPanes + state.InvalidPanes = 0 + if invalid&InvalidateAll == InvalidateAll { tb.Clear(tb.ColorDefault, tb.ColorDefault) state.calcGeometries() } - if state.InvalidPanes&InvalidateTabs != 0 { + if invalid&InvalidateTabView != 0 { tab := state.Tabs[state.SelectedTab] tab.Render(state.Panes.TabView) } tb.Flush() - state.InvalidPanes = 0 } return true } |