60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"time"
|
||
|
|
||
|
"github.com/mediocregopher/ginger/gim/geo"
|
||
|
"github.com/mediocregopher/ginger/gim/terminal"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
b := terminal.NewBuffer()
|
||
|
b.WriteString("this is fun")
|
||
|
|
||
|
b.SetFGColor(terminal.Blue)
|
||
|
b.SetBGColor(terminal.Green)
|
||
|
b.SetPos(geo.XY{18, 0})
|
||
|
b.WriteString("blue and green")
|
||
|
|
||
|
b.ResetStyle()
|
||
|
b.SetFGColor(terminal.Red)
|
||
|
b.SetPos(geo.XY{3, 3})
|
||
|
b.WriteString("red!!!")
|
||
|
|
||
|
b.ResetStyle()
|
||
|
b.SetFGColor(terminal.Blue)
|
||
|
b.SetPos(geo.XY{20, 0})
|
||
|
b.WriteString("boo")
|
||
|
|
||
|
bcp := b.Copy()
|
||
|
b.DrawBuffer(geo.XY{2, 2}, bcp)
|
||
|
b.DrawBuffer(geo.XY{-1, 1}, bcp)
|
||
|
|
||
|
brect := terminal.NewBuffer()
|
||
|
brect.DrawRect(geo.Rect{Size: b.Size().Add(geo.XY{2, 2})}, terminal.SingleLine)
|
||
|
log.Printf("b.Size:%v", b.Size())
|
||
|
brect.DrawBuffer(geo.XY{1, 1}, b)
|
||
|
|
||
|
t := terminal.New()
|
||
|
p := geo.XY{0, 0}
|
||
|
dirH, dirV := geo.Right, geo.Down
|
||
|
wsize := t.WindowSize()
|
||
|
for range time.Tick(time.Second / 15) {
|
||
|
t.Clear()
|
||
|
t.WriteBuffer(p, brect)
|
||
|
t.Draw()
|
||
|
|
||
|
brectSize := brect.Size()
|
||
|
p = p.Add(dirH).Add(dirV)
|
||
|
if p[0] < 0 || p[0]+brectSize[0] > wsize[0] {
|
||
|
dirH = dirH.Scale(-1)
|
||
|
p = p.Add(dirH.Scale(2))
|
||
|
}
|
||
|
if p[1] < 0 || p[1]+brectSize[1] > wsize[1] {
|
||
|
dirV = dirV.Scale(-1)
|
||
|
p = p.Add(dirV.Scale(2))
|
||
|
}
|
||
|
}
|
||
|
}
|