ref: e83fc0ac32af17baeae1a29e23de8c0decea7154
parent: ecec95e7ba212a744f32dd47981f3187b3634a55
author: Philip Silva <philip.silva@protonmail.com>
date: Thu May 22 11:40:06 EDT 2025
inline elements
--- a/box/box.go
+++ b/box/box.go
@@ -108,7 +108,7 @@
ims := make([]*memdraw.Image, len(b.Elements))
wg := sync.WaitGroup{}
for i, el := range b.Elements {
- if runtime.GOARCH != "arm64" {
+ if /* otherwise an error happens */false && runtime.GOARCH != "arm64" {
wg.Add(1)
go func(ii int) {
ims[ii] = el.Render() //b.boxImg, b.Rs[i].Min)
@@ -131,6 +131,10 @@
return b.boxImg
}
+// Populate
+//
+// - b.Rs[i]
+// - b.boxImg
func (b *Box) layoutBoxImg() {
// 0. Validations
@@ -140,8 +144,8 @@
rEl, marginEl := el.Geom()
b.Rs[i] = rEl.Add(dxy)
b.Rs[i] = b.Rs[i].Add(marginEl.TopLeft())
- switch b.Dir {
- case Horizontal:
+ switch {
+ case b.Dir == Horizontal || (b.Wrap && (b.Width == 0 || rEl.Dx()+dxy.X <= b.Width)):
//log.Printf("horiz.")
dxy = dxy.Add(image.Point{X: rEl.Dx()+marginEl.Left.Val})
if i > 0 {
@@ -148,7 +152,7 @@
_, marginLast := b.Elements[i-1].Geom()
dxy = dxy.Add(image.Point{X: marginLast.Right.Val})
}
- case Vertical:
+ case b.Dir == Vertical:
//log.Printf("vert.")
fallthrough
default:
@@ -157,6 +161,7 @@
_, marginLast := b.Elements[i-1].Geom()
dxy = dxy.Add(image.Point{Y: marginLast.Bottom.Val})
}
+ dxy.X = 0
}
}
@@ -170,6 +175,17 @@
//Min: b.Rs[0].Min,
Max: b.Rs[len(b.Rs)-1].Max.Add(b.Rs[0].Min).
Add(b.Padding.Size()),
+ }
+
+ // Expand outer rectangle if inner element rectangles don't fit
+ for _, el := range b.Elements {
+ rEl, _ := el.Geom()
+ if rEl.Dx() > r.Dx() {
+ r.Max.X += rEl.Dx()-r.Dx()
+ }
+ if rEl.Dy() > r.Dy() {
+ r.Max.X += rEl.Dy()-r.Dy()
+ }
}
}
// Allocate image
--- a/cmd/hello/hello.go
+++ b/cmd/hello/hello.go
@@ -33,6 +33,12 @@
l := label.New(image.Point{10, 5}, "Hello, world!!") //, c)
l.Margin = space.New(5, 10)
+ l2 := label.New(image.Point{10, 5}, "Additional text!!") //, c)
+ l2.Margin = space.New(5, 10)
+ l3 := label.New(image.Point{10, 5}, "A really long subsequent text to fill the horizontal space!") //, c)
+ l3.Margin = space.New(5, 10)
+ l4 := label.New(image.Point{10, 5}, "Wrap into the next line for sure!!!") //, c)
+ l4.Margin = space.New(5, 10)
f, err := os.Open("animated-computer-image-0064.gif")
//f, err := os.Open("g3Ys.gif")
@@ -76,9 +82,19 @@
fl := field.New(x, image.ZP, " ", x.Rect(0,0, 150, 50))
fl.Margin = x.Space(5, 10)
-
+ b2 := box.New([]element.Interface{
+ l,
+ l2,
+ l3,
+ l4,
+ })
+ b2.Wrap = true
+ log.Printf("xui screen image width: %v", x.R().Dx())
+ b2.Width = x.R().Dx()/2
b := box.New([]element.Interface{
- a, l, btn, fl,
+ a,
+ b2,
+ btn, fl,
})
//b.Dir = box.Horizontal
x.SetRoot(b)
--
⑨