Browse Source

UI: Fix packing bug in the GUITest

menus
Noah Petherbridge 2 years ago
parent
commit
aaa795245a
3 changed files with 20 additions and 11 deletions
  1. +8
    -8
      frame_pack.go
  2. +1
    -1
      label.go
  3. +11
    -2
      widget.go

+ 8
- 8
frame_pack.go View File

@@ -86,12 +86,12 @@ func (w *Frame) computePacked(e render.Engine) {
xDirection int32 = 1
)

if anchor.IsSouth() { // TODO: these need tuning
if anchor.IsSouth() {
y = frameSize.H - w.BoxThickness(4)
yDirection = -1 * w.BoxThickness(4) // parent + child BoxThickness(1) = 2
} else if anchor == E {
yDirection = -1
} else if anchor.IsEast() {
x = frameSize.W - w.BoxThickness(4)
xDirection = -1 - w.BoxThickness(4) // - w.BoxThickness(2)
xDirection = -1
}

for _, packedWidget := range w.packs[anchor] {
@@ -104,8 +104,8 @@ func (w *Frame) computePacked(e render.Engine) {
continue
}

x += pack.PadX
y += pack.PadY
x += pack.PadX * xDirection
y += pack.PadY * yDirection

var (
// point = child.Point()
@@ -150,8 +150,8 @@ func (w *Frame) computePacked(e render.Engine) {
if len(expanded) > 0 && !frameSize.IsZero() && frameSize.Bigger(computedSize) {
// Divy up the size available.
growBy := render.Rect{
W: ((frameSize.W - computedSize.W) / int32(len(expanded))), // - w.BoxThickness(2),
H: ((frameSize.H - computedSize.H) / int32(len(expanded))), // - w.BoxThickness(2),
W: ((frameSize.W - computedSize.W) / int32(len(expanded))) - w.BoxThickness(4),
H: ((frameSize.H - computedSize.H) / int32(len(expanded))) - w.BoxThickness(4),
}
for _, pw := range expanded {
pw.widget.ResizeBy(growBy)


+ 1
- 1
label.go View File

@@ -91,7 +91,7 @@ func (w *Label) Compute(e render.Engine) {
)

if !w.FixedSize() {
w.resizeAuto(render.Rect{
w.ResizeAuto(render.Rect{
W: maxRect.W + (padX * 2),
H: maxRect.H + (padY * 2),
})


+ 11
- 2
widget.go View File

@@ -1,6 +1,8 @@
package ui

import (
"fmt"

"git.kirsle.net/apps/doodle/lib/render"
"git.kirsle.net/apps/doodle/lib/ui/theme"
)
@@ -29,6 +31,7 @@ type Widget interface {
BoxSize() render.Rect // Return the full size including the border and outline.
Resize(render.Rect)
ResizeBy(render.Rect)
ResizeAuto(render.Rect)
Rect() render.Rect // Return the full absolute rect combining the Size() and Point()

Handle(Event, func(render.Point))
@@ -249,8 +252,14 @@ func (w *BaseWidget) ResizeBy(v render.Rect) {
w.height += v.H
}

// resizeAuto sets the size of the widget but doesn't set the fixedSize flag.
func (w *BaseWidget) resizeAuto(v render.Rect) {
// ResizeAuto sets the size of the widget but doesn't set the fixedSize flag.
func (w *BaseWidget) ResizeAuto(v render.Rect) {
if w.ID() == "Frame<Window Body>" {
fmt.Printf("%s: ResizeAuto Called: %+v\n",
w.ID(),
v,
)
}
w.width = v.W
w.height = v.H
}


Loading…
Cancel
Save