Resize canvas when the window is resized
This commit is contained in:
parent
f807c8df35
commit
4536932dde
@ -1,7 +1,6 @@
|
|||||||
package x
|
package x
|
||||||
|
|
||||||
import "image"
|
import "image"
|
||||||
import "image/color"
|
|
||||||
// import "golang.org/x/image/font"
|
// import "golang.org/x/image/font"
|
||||||
// import "golang.org/x/image/font/basicfont"
|
// import "golang.org/x/image/font/basicfont"
|
||||||
|
|
||||||
@ -91,11 +90,52 @@ func (backend *Backend) handleXEvent (event xgb.Event) {
|
|||||||
backend.metrics.windowHeight = newHeight
|
backend.metrics.windowHeight = newHeight
|
||||||
|
|
||||||
if sizeChanged {
|
if sizeChanged {
|
||||||
// TODO: resize and rebind canvas
|
// compress events
|
||||||
|
configureEvent =
|
||||||
|
backend.compressConfigureNotify(configureEvent)
|
||||||
|
|
||||||
|
// resize and rebind canvas
|
||||||
|
backend.canvas.Destroy()
|
||||||
|
backend.canvas = xgraphics.New (
|
||||||
|
backend.connection,
|
||||||
|
image.Rect (
|
||||||
|
0, 0,
|
||||||
|
backend.metrics.windowWidth,
|
||||||
|
backend.metrics.windowHeight))
|
||||||
|
// FIXME (?): this doesn't work. if it were to work, it
|
||||||
|
// would possibly be a cleaner way to resize the canvas.
|
||||||
|
// backend.canvas.Scale (
|
||||||
|
// backend.metrics.windowWidth,
|
||||||
|
// backend.metrics.windowHeight)
|
||||||
|
backend.bindCanvas()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (backend *Backend) compressConfigureNotify (
|
||||||
|
firstEvent xproto.ConfigureNotifyEvent,
|
||||||
|
) (
|
||||||
|
lastEvent xproto.ConfigureNotifyEvent,
|
||||||
|
) {
|
||||||
|
backend.connection.Sync()
|
||||||
|
xevent.Read(backend.connection, false)
|
||||||
|
lastEvent = firstEvent
|
||||||
|
|
||||||
|
for index, untypedEvent := range xevent.Peek(backend.connection) {
|
||||||
|
if untypedEvent.Err != nil { continue }
|
||||||
|
|
||||||
|
typedEvent, ok := untypedEvent.Event.(xproto.ConfigureNotifyEvent)
|
||||||
|
if !ok { continue }
|
||||||
|
|
||||||
|
lastEvent = typedEvent
|
||||||
|
defer func (index int) {
|
||||||
|
xevent.DequeueAt(backend.connection, index)
|
||||||
|
} (index)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (backend *Backend) shutDown () {
|
func (backend *Backend) shutDown () {
|
||||||
backend.channel <- stone.EventQuit { }
|
backend.channel <- stone.EventQuit { }
|
||||||
}
|
}
|
||||||
@ -160,10 +200,6 @@ func factory (application *stone.Application) (output stone.Backend, err error)
|
|||||||
0, 0,
|
0, 0,
|
||||||
backend.metrics.windowWidth,
|
backend.metrics.windowWidth,
|
||||||
backend.metrics.windowHeight))
|
backend.metrics.windowHeight))
|
||||||
|
|
||||||
for i := 8; i < 64; i ++ {
|
|
||||||
backend.canvas.Set(8, i, color.RGBA { R: 0xFF, A: 0xFF })
|
|
||||||
}
|
|
||||||
backend.bindCanvas()
|
backend.bindCanvas()
|
||||||
|
|
||||||
// attatch graceful close handler
|
// attatch graceful close handler
|
||||||
|
Loading…
Reference in New Issue
Block a user