Applications can now manually call a screen redraw in a way that I think is thread safe

This commit is contained in:
2022-11-11 22:30:59 -05:00
parent ea32b7899b
commit 05c448f058
4 changed files with 69 additions and 24 deletions

View File

@@ -1,6 +1,7 @@
package x
import "os"
import "sync"
import "image"
import "image/draw"
import "golang.org/x/image/font"
@@ -28,6 +29,8 @@ type Backend struct {
canvas *xgraphics.Image
channel chan(stone.Event)
drawLock sync.Mutex
ping struct {
before chan(struct { })
after chan(struct { })
@@ -80,6 +83,17 @@ func (backend *Backend) Run (channel chan(stone.Event)) {
}
}
func (backend *Backend) Draw () {
backend.drawLock.Lock()
defer backend.drawLock.Unlock()
backend.drawCells(true)
backend.canvas.XDraw()
backend.canvas.XPaint(backend.window.Id)
// FIXME use this instead once it works
// backend.updateWindowAreas(...)
}
func (backend *Backend) SetTitle (title string) (err error) {
err = ewmh.WmNameSet(backend.connection, backend.window.Id, title)
return
@@ -191,6 +205,9 @@ func (backend *Backend) calculateWindowSize () (x, y int) {
}
func (backend *Backend) reallocateCanvas () {
backend.drawLock.Lock()
defer backend.drawLock.Unlock()
if backend.canvas != nil {
backend.canvas.Destroy()
}