Add Bounds, InnerBounds to x.Window
This commit is contained in:
parent
93d7eed21f
commit
ab6bdeaba3
19
x/event.go
19
x/event.go
@ -145,12 +145,15 @@ func (window *window) updateBounds () {
|
|||||||
// need to sum up all their positions.
|
// need to sum up all their positions.
|
||||||
decorGeometry, _ := window.xWindow.DecorGeometry()
|
decorGeometry, _ := window.xWindow.DecorGeometry()
|
||||||
windowGeometry, _ := window.xWindow.Geometry()
|
windowGeometry, _ := window.xWindow.Geometry()
|
||||||
origin := image.Pt(
|
origin := image.Pt (
|
||||||
windowGeometry.X() + decorGeometry.X(),
|
decorGeometry.X(),
|
||||||
windowGeometry.Y() + decorGeometry.Y())
|
decorGeometry.Y())
|
||||||
window.metrics.bounds = image.Rectangle {
|
innerOrigin := origin.Add(image.Pt (
|
||||||
Min: origin,
|
windowGeometry.X(),
|
||||||
Max: origin.Add(image.Pt(windowGeometry.Width(), windowGeometry.Height())),
|
windowGeometry.Y()))
|
||||||
|
window.metrics.innerBounds = image.Rectangle {
|
||||||
|
Min: innerOrigin,
|
||||||
|
Max: innerOrigin.Add(image.Pt(windowGeometry.Width(), windowGeometry.Height())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,9 +164,9 @@ func (window *window) handleConfigureNotify (
|
|||||||
configureEvent := *event.ConfigureNotifyEvent
|
configureEvent := *event.ConfigureNotifyEvent
|
||||||
configureEvent = window.compressConfigureNotify(configureEvent)
|
configureEvent = window.compressConfigureNotify(configureEvent)
|
||||||
|
|
||||||
oldBounds := window.metrics.bounds
|
oldBounds := window.metrics.innerBounds
|
||||||
window.updateBounds()
|
window.updateBounds()
|
||||||
newBounds := window.metrics.bounds
|
newBounds := window.metrics.innerBounds
|
||||||
|
|
||||||
sizeChanged :=
|
sizeChanged :=
|
||||||
oldBounds.Dx() != newBounds.Dx() ||
|
oldBounds.Dx() != newBounds.Dx() ||
|
||||||
|
33
x/window.go
33
x/window.go
@ -37,7 +37,8 @@ type window struct {
|
|||||||
resizeY bool
|
resizeY bool
|
||||||
|
|
||||||
metrics struct {
|
metrics struct {
|
||||||
bounds image.Rectangle
|
bounds image.Rectangle // bounds, including frame
|
||||||
|
innerBounds image.Rectangle // bounds of the drawable area
|
||||||
}
|
}
|
||||||
|
|
||||||
onClose event.FuncBroadcaster
|
onClose event.FuncBroadcaster
|
||||||
@ -156,7 +157,7 @@ func (this *Backend) newWindow (
|
|||||||
// xevent.SelectionRequestFun(window.handleSelectionRequest).
|
// xevent.SelectionRequestFun(window.handleSelectionRequest).
|
||||||
// Connect(this.x, window.xWindow.Id)
|
// Connect(this.x, window.xWindow.Id)
|
||||||
|
|
||||||
window.metrics.bounds = bounds
|
window.metrics.innerBounds = bounds
|
||||||
window.doMinimumSize()
|
window.doMinimumSize()
|
||||||
|
|
||||||
this.windows[window.xWindow.Id] = window
|
this.windows[window.xWindow.Id] = window
|
||||||
@ -165,6 +166,14 @@ func (this *Backend) newWindow (
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (this *window) Bounds () image.Rectangle {
|
||||||
|
return this.metrics.bounds.Sub(this.metrics.innerBounds.Min)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *window) InnerBounds () image.Rectangle {
|
||||||
|
return this.metrics.innerBounds.Sub(this.metrics.innerBounds.Min)
|
||||||
|
}
|
||||||
|
|
||||||
func (this *window) SetRoot (root tomo.Object) {
|
func (this *window) SetRoot (root tomo.Object) {
|
||||||
if root == nil {
|
if root == nil {
|
||||||
this.hierarchy.SetRoot(nil)
|
this.hierarchy.SetRoot(nil)
|
||||||
@ -242,7 +251,7 @@ func (this *window) NewChild (bounds image.Rectangle) (tomo.Window, error) {
|
|||||||
leader := this.leader
|
leader := this.leader
|
||||||
|
|
||||||
child, err := this.backend.newWindow (
|
child, err := this.backend.newWindow (
|
||||||
bounds.Add(this.metrics.bounds.Min), false)
|
bounds.Add(this.metrics.innerBounds.Min), false)
|
||||||
child.leader = leader
|
child.leader = leader
|
||||||
if err != nil { return nil, err }
|
if err != nil { return nil, err }
|
||||||
|
|
||||||
@ -260,7 +269,7 @@ func (this *window) NewChild (bounds image.Rectangle) (tomo.Window, error) {
|
|||||||
|
|
||||||
func (this *window) NewMenu (bounds image.Rectangle) (tomo.Window, error) {
|
func (this *window) NewMenu (bounds image.Rectangle) (tomo.Window, error) {
|
||||||
menu, err := this.backend.newWindow (
|
menu, err := this.backend.newWindow (
|
||||||
bounds.Add(this.metrics.bounds.Min), true)
|
bounds.Add(this.metrics.innerBounds.Min), true)
|
||||||
menu.shy = true
|
menu.shy = true
|
||||||
icccm.WmTransientForSet (
|
icccm.WmTransientForSet (
|
||||||
this.backend.x,
|
this.backend.x,
|
||||||
@ -273,7 +282,7 @@ func (this *window) NewMenu (bounds image.Rectangle) (tomo.Window, error) {
|
|||||||
|
|
||||||
func (this *window) NewModal (bounds image.Rectangle) (tomo.Window, error) {
|
func (this *window) NewModal (bounds image.Rectangle) (tomo.Window, error) {
|
||||||
modal, err := this.backend.newWindow (
|
modal, err := this.backend.newWindow (
|
||||||
bounds.Add(this.metrics.bounds.Min), false)
|
bounds.Add(this.metrics.innerBounds.Min), false)
|
||||||
icccm.WmTransientForSet (
|
icccm.WmTransientForSet (
|
||||||
this.backend.x,
|
this.backend.x,
|
||||||
modal.xWindow.Id,
|
modal.xWindow.Id,
|
||||||
@ -382,8 +391,8 @@ func (this *window) reallocateCanvas () {
|
|||||||
previousHeight = this.xCanvas.Bounds().Dy()
|
previousHeight = this.xCanvas.Bounds().Dy()
|
||||||
}
|
}
|
||||||
|
|
||||||
newWidth := this.metrics.bounds.Dx()
|
newWidth := this.metrics.innerBounds.Dx()
|
||||||
newHeight := this.metrics.bounds.Dy()
|
newHeight := this.metrics.innerBounds.Dy()
|
||||||
larger := newWidth > previousWidth || newHeight > previousHeight
|
larger := newWidth > previousWidth || newHeight > previousHeight
|
||||||
smaller := newWidth < previousWidth / 2 || newHeight < previousHeight / 2
|
smaller := newWidth < previousWidth / 2 || newHeight < previousHeight / 2
|
||||||
|
|
||||||
@ -403,7 +412,7 @@ func (this *window) reallocateCanvas () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.hierarchy.SetCanvas(this.xCanvas.SubCanvas (
|
this.hierarchy.SetCanvas(this.xCanvas.SubCanvas (
|
||||||
this.metrics.bounds.Sub(this.metrics.bounds.Min)))
|
this.metrics.innerBounds.Sub(this.metrics.innerBounds.Min)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *window) pushAll () {
|
func (this *window) pushAll () {
|
||||||
@ -458,12 +467,12 @@ func (this *window) doMinimumSize () {
|
|||||||
this.backend.x,
|
this.backend.x,
|
||||||
this.xWindow.Id,
|
this.xWindow.Id,
|
||||||
&hints)
|
&hints)
|
||||||
newWidth := this.metrics.bounds.Dx()
|
newWidth := this.metrics.innerBounds.Dx()
|
||||||
newHeight := this.metrics.bounds.Dy()
|
newHeight := this.metrics.innerBounds.Dy()
|
||||||
if newWidth < size.X { newWidth = size.X }
|
if newWidth < size.X { newWidth = size.X }
|
||||||
if newHeight < size.Y { newHeight = size.Y }
|
if newHeight < size.Y { newHeight = size.Y }
|
||||||
if newWidth != this.metrics.bounds.Dx() ||
|
if newWidth != this.metrics.innerBounds.Dx() ||
|
||||||
newHeight != this.metrics.bounds.Dy() {
|
newHeight != this.metrics.innerBounds.Dy() {
|
||||||
this.xWindow.Resize(newWidth, newHeight)
|
this.xWindow.Resize(newWidth, newHeight)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user