display-test/drawer/drawer.go
2024-09-15 20:21:57 +03:00

66 lines
873 B
Go

package drawer
import (
"image"
"sync"
"gitea.unprism.ru/yotia/display-test/display"
)
type drawer struct {
dev display.Display
img *image.Gray
imgMutex sync.Mutex
}
type Drawer interface {
// Lowlevel image
GetImg() *image.Gray
Lock()
Unlock()
Clear()
Flush() error
PutText(x, y int, text string)
PutBar(x0, y0, x1, y1, color int)
FillBar(x0, y0, x1, y1, color int)
}
func New(dev display.Display) Drawer {
return &drawer{
dev: dev,
img: image.NewGray(dev.GetBounds()),
}
}
func (d *drawer) GetImg() *image.Gray {
return d.img
}
func (d *drawer) Lock() {
d.imgMutex.Lock()
}
func (d *drawer) Unlock() {
d.imgMutex.Unlock()
}
func (d *drawer) Clear() {
d.Lock()
defer d.Unlock()
for i := range d.img.Pix {
d.img.Pix[i] = 0
}
}
func (d *drawer) Flush() error {
d.Lock()
defer d.Unlock()
return d.dev.Flush(d.img)
}