}
func (l *Label) uiDraw() {
+ l.ui.beginDraw()
+ defer l.ui.endDraw()
+
reader := strings.NewReader(l.Text)
for y := l.y0; y < l.y1; y++ {
for x := l.x0; x < l.x1; x++ {
}
func (t *Textbox) uiDraw() {
+ t.ui.beginDraw()
+ defer t.ui.endDraw()
+
var setCursor = false
reader := strings.NewReader(t.Text)
for y := t.y0; y < t.y1; y++ {
}
if redraw {
t.uiDraw()
- termbox.Flush()
}
}
func (t *Textbox) uiCharacterEvent(chr rune) {
t.Text = t.Text + string(chr)
t.uiDraw()
- termbox.Flush()
}
}
func (t *Textview) uiDraw() {
+ t.ui.beginDraw()
+ defer t.ui.endDraw()
+
var reader *strings.Reader
line := len(t.parsedLines) - 1 - t.CurrentLine
if line < 0 {
}
func (t *Tree) uiDraw() {
+ t.ui.beginDraw()
+ defer t.ui.endDraw()
+
if t.lines == nil {
t.Rebuild()
}
import (
"errors"
+ "sync/atomic"
"github.com/nsf/termbox-go"
)
close chan bool
manager UiManager
+ drawCount int32
elements map[string]*uiElement
activeElement *uiElement
func (ui *Ui) Refresh() {
if termbox.IsInit {
+ ui.beginDraw()
+ defer ui.endDraw()
+
termbox.Clear(termbox.Attribute(ui.Fg), termbox.Attribute(ui.Bg))
termbox.HideCursor()
for _, element := range ui.elements {
element.View.uiDraw()
}
+ }
+}
+
+func (ui *Ui) beginDraw() {
+ atomic.AddInt32(&ui.drawCount, 1)
+}
+
+func (ui *Ui) endDraw() {
+ if count := atomic.AddInt32(&ui.drawCount, -1); count == 0 {
termbox.Flush()
}
}