gosl/data/screen.go

81 lines
1.1 KiB
Go
Raw Normal View History

2016-01-18 23:19:51 +01:00
package data // code.bitsetter.de/fun/gosl/data
2016-01-19 16:38:15 +01:00
import (
"fmt"
"log"
"os"
"sync"
2016-01-19 16:38:15 +01:00
2016-02-06 01:48:29 +01:00
nc "github.com/rthornton128/goncurses"
2016-01-19 16:38:15 +01:00
)
var (
win *nc.Window
ncquit = make(chan bool)
winMutex = &sync.Mutex{}
)
func RenderFrame(f *Frame) {
winMutex.Lock()
if win != nil {
2016-02-06 14:42:38 +01:00
//win.Clear()
for k, _ := range f.Data {
win.MovePrint(k, 0, string(f.Data[k]))
}
}
winMutex.Unlock()
}
2016-02-06 11:11:09 +01:00
func InitNC(killchan chan<- os.Signal) {
var err error
winMutex.Lock()
win, err = nc.Init()
if err != nil {
log.Fatal(err)
os.Exit(1)
}
2016-02-06 11:11:09 +01:00
win.Timeout(1)
winMutex.Unlock()
2016-02-06 11:11:09 +01:00
go func() {
select {
case <-ncquit:
log.Println("Exiting NC")
killchan <- os.Kill
}
}()
}
func ExitNC() {
winMutex.Lock()
if win != nil {
win = nil
nc.End()
ncquit <- true
}
winMutex.Unlock()
2016-02-06 11:11:09 +01:00
}
func GetChar() int {
winMutex.Lock()
defer winMutex.Unlock()
2016-02-06 11:11:09 +01:00
if win != nil {
k := win.GetChar()
return int(k)
}
return 0
2016-01-18 23:19:51 +01:00
}
2016-01-19 16:38:15 +01:00
func testNC() (int, int) {
2016-02-06 01:48:29 +01:00
win, err := nc.Init()
2016-01-19 16:38:15 +01:00
if err != nil {
log.Fatal(err)
os.Exit(1)
}
win.Clear()
2016-01-22 20:17:03 +01:00
h, w := win.MaxYX()
2016-02-06 01:48:29 +01:00
nc.End()
2016-01-22 20:17:03 +01:00
fmt.Printf("screen: %d x %d\n", w, h)
2016-02-06 01:48:29 +01:00
return w, h
2016-01-19 16:38:15 +01:00
}