Updated the X backend to reflect the new API change
The window no longer behaves like an element, and it sets an entire ParentHooks struct instead of individual callbacks.
This commit is contained in:
parent
192a91757f
commit
7c6b9317fc
@ -1,7 +1,6 @@
|
|||||||
package x
|
package x
|
||||||
|
|
||||||
import "image"
|
import "image"
|
||||||
import "image/color"
|
|
||||||
import "github.com/jezek/xgb/xproto"
|
import "github.com/jezek/xgb/xproto"
|
||||||
import "github.com/jezek/xgbutil/ewmh"
|
import "github.com/jezek/xgbutil/ewmh"
|
||||||
import "github.com/jezek/xgbutil/icccm"
|
import "github.com/jezek/xgbutil/icccm"
|
||||||
@ -78,90 +77,16 @@ func (backend *Backend) NewWindow (
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (window *Window) ColorModel () (model color.Model) {
|
|
||||||
return color.RGBAModel
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) At (x, y int) (pixel color.Color) {
|
|
||||||
pixel = window.xCanvas.At(x, y)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) RGBAAt (x, y int) (pixel color.RGBA) {
|
|
||||||
sourcePixel := window.xCanvas.At(x, y).(xgraphics.BGRA)
|
|
||||||
pixel = color.RGBA {
|
|
||||||
R: sourcePixel.R,
|
|
||||||
G: sourcePixel.G,
|
|
||||||
B: sourcePixel.B,
|
|
||||||
A: sourcePixel.A,
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) Bounds () (bounds image.Rectangle) {
|
|
||||||
bounds.Max = image.Point {
|
|
||||||
X: window.metrics.width,
|
|
||||||
Y: window.metrics.height,
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) Handle (event tomo.Event) () {
|
|
||||||
switch event.(type) {
|
|
||||||
case tomo.EventResize:
|
|
||||||
resizeEvent := event.(tomo.EventResize)
|
|
||||||
// we will receive a resize event from X later which will be
|
|
||||||
// handled by our event handler callbacks.
|
|
||||||
if resizeEvent.Width < window.MinimumWidth() {
|
|
||||||
resizeEvent.Width = window.MinimumWidth()
|
|
||||||
}
|
|
||||||
if resizeEvent.Height < window.MinimumHeight() {
|
|
||||||
resizeEvent.Height = window.MinimumHeight()
|
|
||||||
}
|
|
||||||
window.xWindow.Resize(resizeEvent.Width, resizeEvent.Height)
|
|
||||||
default:
|
|
||||||
if window.child != nil { window.child.Handle(event) }
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) SetDrawCallback (draw func (region tomo.Image)) {
|
|
||||||
window.drawCallback = draw
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) SetMinimumSizeChangeCallback (
|
|
||||||
notify func (width, height int),
|
|
||||||
) {
|
|
||||||
window.minimumSizeChangeCallback = notify
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) Selectable () (selectable bool) {
|
|
||||||
if window.child != nil { selectable = window.child.Selectable() }
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) MinimumWidth () (minimum int) {
|
|
||||||
if window.child != nil { minimum = window.child.MinimumWidth() }
|
|
||||||
minimum = 8
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) MinimumHeight () (minimum int) {
|
|
||||||
if window.child != nil { minimum = window.child.MinimumHeight() }
|
|
||||||
minimum = 8
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (window *Window) Adopt (child tomo.Element) {
|
func (window *Window) Adopt (child tomo.Element) {
|
||||||
if window.child != nil {
|
if window.child != nil {
|
||||||
window.child.SetDrawCallback(nil)
|
child.SetParentHooks (tomo.ParentHooks {})
|
||||||
window.child.SetMinimumSizeChangeCallback(nil)
|
|
||||||
}
|
}
|
||||||
window.child = child
|
window.child = child
|
||||||
if child != nil {
|
if child != nil {
|
||||||
child.SetDrawCallback(window.childDrawCallback)
|
child.SetParentHooks (tomo.ParentHooks {
|
||||||
child.SetMinimumSizeChangeCallback (
|
Draw: window.childDrawCallback,
|
||||||
window.childMinimumSizeChangeCallback)
|
MinimumSizeChange: window.childMinimumSizeChangeCallback,
|
||||||
|
})
|
||||||
window.resizeChildToFit()
|
window.resizeChildToFit()
|
||||||
}
|
}
|
||||||
window.childMinimumSizeChangeCallback (
|
window.childMinimumSizeChangeCallback (
|
||||||
|
Reference in New Issue
Block a user