Applications can now manually call a screen redraw in a way that I think is thread safe
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user