// SetRune writes a rune at the given point, relative to the top-left // corner of the terminal. It checks if the position is valid and applies // the gui's colors. func (g *Gui) SetRune(x, y int, ch rune) error { if x < 0 || y < 0 || x >= g.maxX || y >= g.maxY { return errors.New("invalid point") } termbox.SetCell(x, y, ch, termbox.Attribute(g.FgColor), termbox.Attribute(g.BgColor)) return nil }
// Flush updates the gui, re-drawing frames and buffers. func (g *Gui) Flush() error { if g.layout == nil { return errors.New("Null layout") } termbox.Clear(termbox.Attribute(g.FgColor), termbox.Attribute(g.BgColor)) g.maxX, g.maxY = termbox.Size() if err := g.layout(g); err != nil { return err } for _, v := range g.views { if err := g.drawFrame(v); err != nil { return err } if err := g.draw(v); err != nil { return err } } if err := g.drawIntersections(); err != nil { return err } termbox.Flush() return nil }
// clearRunes erases all the cells in the view. func (v *View) clearRunes() { maxX, maxY := v.Size() for x := 0; x < maxX; x++ { for y := 0; y < maxY; y++ { termbox.SetCell(v.x0+x+1, v.y0+y+1, ' ', termbox.Attribute(v.fgColor), termbox.Attribute(v.bgColor)) } } }
// setRune writes a rune at the given point, relative to the view. It // checks if the position is valid and applies the view's colors, taking // into account if the cell must be highlighted. func (v *View) SetRune(x, y int, ch rune) error { maxX, maxY := v.Size() if x < 0 || x >= maxX || y < 0 || y >= maxY { return errors.New("invalid point") } var fgColor, bgColor Attribute if v.Highlight && y == v.cy { fgColor = v.selFgColor bgColor = v.selBgColor } else { fgColor = v.fgColor bgColor = v.bgColor } termbox.SetCell(v.x0+x+1, v.y0+y+1, ch, termbox.Attribute(fgColor), termbox.Attribute(bgColor)) return nil }