]> git.0d.be Git - barnard.git/commitdiff
uiterm: add prevention of doing possibly unneeded screen flushes
authorTim Cooper <tim.cooper@layeh.com>
Sun, 7 Dec 2014 02:30:16 +0000 (22:30 -0400)
committerTim Cooper <tim.cooper@layeh.com>
Sun, 7 Dec 2014 02:30:16 +0000 (22:30 -0400)
uiterm/label.go
uiterm/textbox.go
uiterm/textview.go
uiterm/tree.go
uiterm/ui.go

index 259c22d05eaba399aac4c9fb74638f571cc2a7f9..39394ff2d8baac14997e91876e5d9ba82883bbc7 100644 (file)
@@ -30,6 +30,9 @@ func (l *Label) uiSetBounds(x0, y0, x1, y1 int) {
 }
 
 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++ {
index cda0c41c6561060dba0319b446ebf88f028588b4..60c7ab26108773f1307adaf6ea588afc115eb862 100644 (file)
@@ -35,6 +35,9 @@ func (t *Textbox) uiSetBounds(x0, y0, x1, y1 int) {
 }
 
 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++ {
@@ -80,12 +83,10 @@ func (t *Textbox) uiKeyEvent(mod Modifier, key Key) {
        }
        if redraw {
                t.uiDraw()
-               termbox.Flush()
        }
 }
 
 func (t *Textbox) uiCharacterEvent(chr rune) {
        t.Text = t.Text + string(chr)
        t.uiDraw()
-       termbox.Flush()
 }
index 395772e1b533caff2ee58a51e5765a27adb3220e..f9cd0a98f784886cb6b48ced0a6e47680a5a6c11 100644 (file)
@@ -103,6 +103,9 @@ func (t *Textview) Clear() {
 }
 
 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 {
index c72a67f1ee124d3badf620aa4737ccf581422996..ed6f45a2370135dd10b69da313a72205750177a7 100644 (file)
@@ -96,6 +96,9 @@ func (t *Tree) rebuild_rec(parent TreeItem, level int) []renderedTreeItem {
 }
 
 func (t *Tree) uiDraw() {
+       t.ui.beginDraw()
+       defer t.ui.endDraw()
+
        if t.lines == nil {
                t.Rebuild()
        }
index b9b1f8fd8fedd8022f4f92f48bd74100188f261e..65fb6a995917d0ecb3f6c3e26799e579bee35190 100644 (file)
@@ -2,6 +2,7 @@ package uiterm
 
 import (
        "errors"
+       "sync/atomic"
 
        "github.com/nsf/termbox-go"
 )
@@ -20,6 +21,7 @@ type Ui struct {
        close   chan bool
        manager UiManager
 
+       drawCount     int32
        elements      map[string]*uiElement
        activeElement *uiElement
 
@@ -50,11 +52,23 @@ func (ui *Ui) Close() {
 
 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()
        }
 }