package main import ( "io" "os" "time" "github.com/golang/freetype/truetype" "github.com/gopxl/pixel" "github.com/gopxl/pixel/pixelgl" "github.com/gopxl/pixel/text" "golang.org/x/image/colornames" "golang.org/x/image/font" ) func loadTTF(path string, size float64) (font.Face, error) { file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() bytes, err := io.ReadAll(file) if err != nil { return nil, err } font, err := truetype.Parse(bytes) if err != nil { return nil, err } return truetype.NewFace(font, &truetype.Options{ Size: size, GlyphCacheEntries: 1, }), nil } func run() { cfg := pixelgl.WindowConfig{ Title: "Cobra Monitor", Bounds: pixel.R(0, 0, 1024, 768), } win, err := pixelgl.NewWindow(cfg) if err != nil { panic(err) } win.SetSmooth(true) face, err := loadTTF("intuitive.ttf", 80) if err != nil { panic(err) } atlas := text.NewAtlas(face, text.ASCII) txt := text.New(pixel.V(50, 500), atlas) txt.Color = colornames.Lightgrey fps := time.Tick(time.Second / 120) for !win.Closed() { txt.WriteString(win.Typed()) if win.JustPressed(pixelgl.KeyEnter) || win.Repeated(pixelgl.KeyEnter) { txt.WriteRune('\n') } win.Clear(colornames.Darkcyan) txt.Draw(win, pixel.IM.Moved(win.Bounds().Center().Sub(txt.Bounds().Center()))) win.Update() <-fps } } func main() { pixelgl.Run(run) }