Anchor

Anchor layout allows the child containers to be anchored to a specific constraint.

preview

  1package main
  2
  3import (
  4	"github.com/ebitenui/ebitenui"
  5	"github.com/ebitenui/ebitenui/image"
  6	"github.com/ebitenui/ebitenui/widget"
  7	"github.com/hajimehoshi/ebiten/v2"
  8	"golang.org/x/image/colornames"
  9)
 10
 11type Game struct {
 12	ui *ebitenui.UI
 13}
 14
 15func NewGame() *Game {
 16	left := widget.NewContainer(
 17		widget.ContainerOpts.BackgroundImage(
 18			image.NewNineSliceColor(colornames.Indianred),
 19		),
 20		widget.ContainerOpts.WidgetOpts(
 21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 22				HorizontalPosition: widget.AnchorLayoutPositionStart,
 23				StretchVertical:    true,
 24			}),
 25			widget.WidgetOpts.MinSize(50, 50),
 26		),
 27	)
 28	right := widget.NewContainer(
 29		widget.ContainerOpts.BackgroundImage(
 30			image.NewNineSliceColor(colornames.Mediumseagreen),
 31		),
 32		widget.ContainerOpts.WidgetOpts(
 33			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 34				HorizontalPosition: widget.AnchorLayoutPositionEnd,
 35				StretchVertical:    true,
 36			}),
 37			widget.WidgetOpts.MinSize(50, 50),
 38		),
 39	)
 40	up := widget.NewContainer(
 41		widget.ContainerOpts.BackgroundImage(
 42			image.NewNineSliceColor(colornames.Goldenrod),
 43		),
 44		widget.ContainerOpts.WidgetOpts(
 45			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 46				VerticalPosition:  widget.AnchorLayoutPositionStart,
 47				StretchHorizontal: true,
 48			}),
 49			widget.WidgetOpts.MinSize(50, 50),
 50		),
 51	)
 52	down := widget.NewContainer(
 53		widget.ContainerOpts.BackgroundImage(
 54			image.NewNineSliceColor(colornames.Steelblue),
 55		),
 56		widget.ContainerOpts.WidgetOpts(
 57			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 58				VerticalPosition:  widget.AnchorLayoutPositionEnd,
 59				StretchHorizontal: true,
 60			}),
 61			widget.WidgetOpts.MinSize(50, 50),
 62		),
 63	)
 64	center := widget.NewContainer(
 65		widget.ContainerOpts.BackgroundImage(
 66			image.NewNineSliceColor(colornames.Darkslategray),
 67		),
 68		widget.ContainerOpts.WidgetOpts(
 69			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 70				VerticalPosition:   widget.AnchorLayoutPositionCenter,
 71				HorizontalPosition: widget.AnchorLayoutPositionCenter,
 72				StretchHorizontal:  true,
 73				StretchVertical:    true,
 74			}),
 75			widget.WidgetOpts.MinSize(50, 50),
 76		),
 77	)
 78	root := widget.NewContainer(
 79		widget.ContainerOpts.BackgroundImage(
 80			image.NewNineSliceColor(colornames.Gainsboro),
 81		),
 82		widget.ContainerOpts.Layout(widget.NewAnchorLayout(
 83			widget.AnchorLayoutOpts.Padding(widget.NewInsetsSimple(50)),
 84		)),
 85	)
 86	root.AddChild(center)
 87	root.AddChild(left)
 88	root.AddChild(right)
 89	root.AddChild(up)
 90	root.AddChild(down)
 91
 92	return &Game{
 93		ui: &ebitenui.UI{Container: root},
 94	}
 95}
 96
 97func (g *Game) Update() error {
 98	g.ui.Update()
 99	return nil
100}
101
102func (g *Game) Draw(screen *ebiten.Image) {
103	g.ui.Draw(screen)
104}
105
106func (g *Game) Layout(w, h int) (int, int) {
107	return w, h
108}
109
110func main() {
111	ebiten.SetWindowSize(480, 320)
112	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
113	if err := ebiten.RunGame(NewGame()); err != nil {
114		panic(err)
115	}
116}

Layout options

Padding

Layout allows you to specify padding for all child elements but not the itself.

Padding:
 1root := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Gainsboro),
 4	),
 5	widget.ContainerOpts.Layout(widget.NewAnchorLayout(
 6		widget.AnchorLayoutOpts.Padding(widget.Insets{
 7			Left: 50,
 8		}),
 9	)),
10)

left

  1package main
  2
  3import (
  4	"github.com/ebitenui/ebitenui"
  5	"github.com/ebitenui/ebitenui/image"
  6	"github.com/ebitenui/ebitenui/widget"
  7	"github.com/hajimehoshi/ebiten/v2"
  8	"golang.org/x/image/colornames"
  9)
 10
 11type Game struct {
 12	ui *ebitenui.UI
 13}
 14
 15func NewGame() *Game {
 16	left := widget.NewContainer(
 17		widget.ContainerOpts.BackgroundImage(
 18			image.NewNineSliceColor(colornames.Indianred),
 19		),
 20		widget.ContainerOpts.WidgetOpts(
 21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 22				HorizontalPosition: widget.AnchorLayoutPositionStart,
 23				StretchVertical:    true,
 24			}),
 25			widget.WidgetOpts.MinSize(50, 50),
 26		),
 27	)
 28	right := widget.NewContainer(
 29		widget.ContainerOpts.BackgroundImage(
 30			image.NewNineSliceColor(colornames.Mediumseagreen),
 31		),
 32		widget.ContainerOpts.WidgetOpts(
 33			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 34				HorizontalPosition: widget.AnchorLayoutPositionEnd,
 35				StretchVertical:    true,
 36			}),
 37			widget.WidgetOpts.MinSize(50, 50),
 38		),
 39	)
 40	up := widget.NewContainer(
 41		widget.ContainerOpts.BackgroundImage(
 42			image.NewNineSliceColor(colornames.Goldenrod),
 43		),
 44		widget.ContainerOpts.WidgetOpts(
 45			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 46				VerticalPosition:  widget.AnchorLayoutPositionStart,
 47				StretchHorizontal: true,
 48			}),
 49			widget.WidgetOpts.MinSize(50, 50),
 50		),
 51	)
 52	down := widget.NewContainer(
 53		widget.ContainerOpts.BackgroundImage(
 54			image.NewNineSliceColor(colornames.Steelblue),
 55		),
 56		widget.ContainerOpts.WidgetOpts(
 57			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 58				VerticalPosition:  widget.AnchorLayoutPositionEnd,
 59				StretchHorizontal: true,
 60			}),
 61			widget.WidgetOpts.MinSize(50, 50),
 62		),
 63	)
 64	center := widget.NewContainer(
 65		widget.ContainerOpts.BackgroundImage(
 66			image.NewNineSliceColor(colornames.Darkslategray),
 67		),
 68		widget.ContainerOpts.WidgetOpts(
 69			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 70				VerticalPosition:   widget.AnchorLayoutPositionCenter,
 71				HorizontalPosition: widget.AnchorLayoutPositionCenter,
 72				StretchHorizontal:  true,
 73				StretchVertical:    true,
 74			}),
 75			widget.WidgetOpts.MinSize(50, 50),
 76		),
 77	)
 78	root := widget.NewContainer(
 79		widget.ContainerOpts.BackgroundImage(
 80			image.NewNineSliceColor(colornames.Gainsboro),
 81		),
 82		widget.ContainerOpts.Layout(widget.NewAnchorLayout(
 83			widget.AnchorLayoutOpts.Padding(widget.Insets{
 84				Left: 50,
 85			}),
 86		)),
 87	)
 88	root.AddChild(center)
 89	root.AddChild(left)
 90	root.AddChild(right)
 91	root.AddChild(up)
 92	root.AddChild(down)
 93
 94	return &Game{
 95		ui: &ebitenui.UI{Container: root},
 96	}
 97}
 98
 99func (g *Game) Update() error {
100	g.ui.Update()
101	return nil
102}
103
104func (g *Game) Draw(screen *ebiten.Image) {
105	g.ui.Draw(screen)
106}
107
108func (g *Game) Layout(w, h int) (int, int) {
109	return w, h
110}
111
112func main() {
113	ebiten.SetWindowSize(480, 320)
114	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
115	if err := ebiten.RunGame(NewGame()); err != nil {
116		panic(err)
117	}
118}
 1root := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Gainsboro),
 4	),
 5	widget.ContainerOpts.Layout(widget.NewAnchorLayout(
 6		widget.AnchorLayoutOpts.Padding(widget.Insets{
 7			Right: 50,
 8		}),
 9	)),
10)

left

  1package main
  2
  3import (
  4	"github.com/ebitenui/ebitenui"
  5	"github.com/ebitenui/ebitenui/image"
  6	"github.com/ebitenui/ebitenui/widget"
  7	"github.com/hajimehoshi/ebiten/v2"
  8	"golang.org/x/image/colornames"
  9)
 10
 11type Game struct {
 12	ui *ebitenui.UI
 13}
 14
 15func NewGame() *Game {
 16	left := widget.NewContainer(
 17		widget.ContainerOpts.BackgroundImage(
 18			image.NewNineSliceColor(colornames.Indianred),
 19		),
 20		widget.ContainerOpts.WidgetOpts(
 21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 22				HorizontalPosition: widget.AnchorLayoutPositionStart,
 23				StretchVertical:    true,
 24			}),
 25			widget.WidgetOpts.MinSize(50, 50),
 26		),
 27	)
 28	right := widget.NewContainer(
 29		widget.ContainerOpts.BackgroundImage(
 30			image.NewNineSliceColor(colornames.Mediumseagreen),
 31		),
 32		widget.ContainerOpts.WidgetOpts(
 33			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 34				HorizontalPosition: widget.AnchorLayoutPositionEnd,
 35				StretchVertical:    true,
 36			}),
 37			widget.WidgetOpts.MinSize(50, 50),
 38		),
 39	)
 40	up := widget.NewContainer(
 41		widget.ContainerOpts.BackgroundImage(
 42			image.NewNineSliceColor(colornames.Goldenrod),
 43		),
 44		widget.ContainerOpts.WidgetOpts(
 45			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 46				VerticalPosition:  widget.AnchorLayoutPositionStart,
 47				StretchHorizontal: true,
 48			}),
 49			widget.WidgetOpts.MinSize(50, 50),
 50		),
 51	)
 52	down := widget.NewContainer(
 53		widget.ContainerOpts.BackgroundImage(
 54			image.NewNineSliceColor(colornames.Steelblue),
 55		),
 56		widget.ContainerOpts.WidgetOpts(
 57			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 58				VerticalPosition:  widget.AnchorLayoutPositionEnd,
 59				StretchHorizontal: true,
 60			}),
 61			widget.WidgetOpts.MinSize(50, 50),
 62		),
 63	)
 64	center := widget.NewContainer(
 65		widget.ContainerOpts.BackgroundImage(
 66			image.NewNineSliceColor(colornames.Darkslategray),
 67		),
 68		widget.ContainerOpts.WidgetOpts(
 69			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 70				VerticalPosition:   widget.AnchorLayoutPositionCenter,
 71				HorizontalPosition: widget.AnchorLayoutPositionCenter,
 72				StretchHorizontal:  true,
 73				StretchVertical:    true,
 74			}),
 75			widget.WidgetOpts.MinSize(50, 50),
 76		),
 77	)
 78	root := widget.NewContainer(
 79		widget.ContainerOpts.BackgroundImage(
 80			image.NewNineSliceColor(colornames.Gainsboro),
 81		),
 82		widget.ContainerOpts.Layout(widget.NewAnchorLayout(
 83			widget.AnchorLayoutOpts.Padding(widget.Insets{
 84				Right: 50,
 85			}),
 86		)),
 87	)
 88	root.AddChild(center)
 89	root.AddChild(left)
 90	root.AddChild(right)
 91	root.AddChild(up)
 92	root.AddChild(down)
 93
 94	return &Game{
 95		ui: &ebitenui.UI{Container: root},
 96	}
 97}
 98
 99func (g *Game) Update() error {
100	g.ui.Update()
101	return nil
102}
103
104func (g *Game) Draw(screen *ebiten.Image) {
105	g.ui.Draw(screen)
106}
107
108func (g *Game) Layout(w, h int) (int, int) {
109	return w, h
110}
111
112func main() {
113	ebiten.SetWindowSize(480, 320)
114	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
115	if err := ebiten.RunGame(NewGame()); err != nil {
116		panic(err)
117	}
118}
 1root := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Gainsboro),
 4	),
 5	widget.ContainerOpts.Layout(widget.NewAnchorLayout(
 6		widget.AnchorLayoutOpts.Padding(widget.Insets{
 7			Top: 50,
 8		}),
 9	)),
10)

left

  1package main
  2
  3import (
  4	"github.com/ebitenui/ebitenui"
  5	"github.com/ebitenui/ebitenui/image"
  6	"github.com/ebitenui/ebitenui/widget"
  7	"github.com/hajimehoshi/ebiten/v2"
  8	"golang.org/x/image/colornames"
  9)
 10
 11type Game struct {
 12	ui *ebitenui.UI
 13}
 14
 15func NewGame() *Game {
 16	left := widget.NewContainer(
 17		widget.ContainerOpts.BackgroundImage(
 18			image.NewNineSliceColor(colornames.Indianred),
 19		),
 20		widget.ContainerOpts.WidgetOpts(
 21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 22				HorizontalPosition: widget.AnchorLayoutPositionStart,
 23				StretchVertical:    true,
 24			}),
 25			widget.WidgetOpts.MinSize(50, 50),
 26		),
 27	)
 28	right := widget.NewContainer(
 29		widget.ContainerOpts.BackgroundImage(
 30			image.NewNineSliceColor(colornames.Mediumseagreen),
 31		),
 32		widget.ContainerOpts.WidgetOpts(
 33			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 34				HorizontalPosition: widget.AnchorLayoutPositionEnd,
 35				StretchVertical:    true,
 36			}),
 37			widget.WidgetOpts.MinSize(50, 50),
 38		),
 39	)
 40	up := widget.NewContainer(
 41		widget.ContainerOpts.BackgroundImage(
 42			image.NewNineSliceColor(colornames.Goldenrod),
 43		),
 44		widget.ContainerOpts.WidgetOpts(
 45			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 46				VerticalPosition:  widget.AnchorLayoutPositionStart,
 47				StretchHorizontal: true,
 48			}),
 49			widget.WidgetOpts.MinSize(50, 50),
 50		),
 51	)
 52	down := widget.NewContainer(
 53		widget.ContainerOpts.BackgroundImage(
 54			image.NewNineSliceColor(colornames.Steelblue),
 55		),
 56		widget.ContainerOpts.WidgetOpts(
 57			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 58				VerticalPosition:  widget.AnchorLayoutPositionEnd,
 59				StretchHorizontal: true,
 60			}),
 61			widget.WidgetOpts.MinSize(50, 50),
 62		),
 63	)
 64	center := widget.NewContainer(
 65		widget.ContainerOpts.BackgroundImage(
 66			image.NewNineSliceColor(colornames.Darkslategray),
 67		),
 68		widget.ContainerOpts.WidgetOpts(
 69			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 70				VerticalPosition:   widget.AnchorLayoutPositionCenter,
 71				HorizontalPosition: widget.AnchorLayoutPositionCenter,
 72				StretchHorizontal:  true,
 73				StretchVertical:    true,
 74			}),
 75			widget.WidgetOpts.MinSize(50, 50),
 76		),
 77	)
 78	root := widget.NewContainer(
 79		widget.ContainerOpts.BackgroundImage(
 80			image.NewNineSliceColor(colornames.Gainsboro),
 81		),
 82		widget.ContainerOpts.Layout(widget.NewAnchorLayout(
 83			widget.AnchorLayoutOpts.Padding(widget.Insets{
 84				Top: 50,
 85			}),
 86		)),
 87	)
 88	root.AddChild(center)
 89	root.AddChild(left)
 90	root.AddChild(right)
 91	root.AddChild(up)
 92	root.AddChild(down)
 93
 94	return &Game{
 95		ui: &ebitenui.UI{Container: root},
 96	}
 97}
 98
 99func (g *Game) Update() error {
100	g.ui.Update()
101	return nil
102}
103
104func (g *Game) Draw(screen *ebiten.Image) {
105	g.ui.Draw(screen)
106}
107
108func (g *Game) Layout(w, h int) (int, int) {
109	return w, h
110}
111
112func main() {
113	ebiten.SetWindowSize(480, 320)
114	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
115	if err := ebiten.RunGame(NewGame()); err != nil {
116		panic(err)
117	}
118}
 1root := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Gainsboro),
 4	),
 5	widget.ContainerOpts.Layout(widget.NewAnchorLayout(
 6		widget.AnchorLayoutOpts.Padding(widget.Insets{
 7			Bottom: 50,
 8		}),
 9	)),
10)

left

  1package main
  2
  3import (
  4	"github.com/ebitenui/ebitenui"
  5	"github.com/ebitenui/ebitenui/image"
  6	"github.com/ebitenui/ebitenui/widget"
  7	"github.com/hajimehoshi/ebiten/v2"
  8	"golang.org/x/image/colornames"
  9)
 10
 11type Game struct {
 12	ui *ebitenui.UI
 13}
 14
 15func NewGame() *Game {
 16	left := widget.NewContainer(
 17		widget.ContainerOpts.BackgroundImage(
 18			image.NewNineSliceColor(colornames.Indianred),
 19		),
 20		widget.ContainerOpts.WidgetOpts(
 21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 22				HorizontalPosition: widget.AnchorLayoutPositionStart,
 23				StretchVertical:    true,
 24			}),
 25			widget.WidgetOpts.MinSize(50, 50),
 26		),
 27	)
 28	right := widget.NewContainer(
 29		widget.ContainerOpts.BackgroundImage(
 30			image.NewNineSliceColor(colornames.Mediumseagreen),
 31		),
 32		widget.ContainerOpts.WidgetOpts(
 33			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 34				HorizontalPosition: widget.AnchorLayoutPositionEnd,
 35				StretchVertical:    true,
 36			}),
 37			widget.WidgetOpts.MinSize(50, 50),
 38		),
 39	)
 40	up := widget.NewContainer(
 41		widget.ContainerOpts.BackgroundImage(
 42			image.NewNineSliceColor(colornames.Goldenrod),
 43		),
 44		widget.ContainerOpts.WidgetOpts(
 45			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 46				VerticalPosition:  widget.AnchorLayoutPositionStart,
 47				StretchHorizontal: true,
 48			}),
 49			widget.WidgetOpts.MinSize(50, 50),
 50		),
 51	)
 52	down := widget.NewContainer(
 53		widget.ContainerOpts.BackgroundImage(
 54			image.NewNineSliceColor(colornames.Steelblue),
 55		),
 56		widget.ContainerOpts.WidgetOpts(
 57			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 58				VerticalPosition:  widget.AnchorLayoutPositionEnd,
 59				StretchHorizontal: true,
 60			}),
 61			widget.WidgetOpts.MinSize(50, 50),
 62		),
 63	)
 64	center := widget.NewContainer(
 65		widget.ContainerOpts.BackgroundImage(
 66			image.NewNineSliceColor(colornames.Darkslategray),
 67		),
 68		widget.ContainerOpts.WidgetOpts(
 69			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 70				VerticalPosition:   widget.AnchorLayoutPositionCenter,
 71				HorizontalPosition: widget.AnchorLayoutPositionCenter,
 72				StretchHorizontal:  true,
 73				StretchVertical:    true,
 74			}),
 75			widget.WidgetOpts.MinSize(50, 50),
 76		),
 77	)
 78	root := widget.NewContainer(
 79		widget.ContainerOpts.BackgroundImage(
 80			image.NewNineSliceColor(colornames.Gainsboro),
 81		),
 82		widget.ContainerOpts.Layout(widget.NewAnchorLayout(
 83			widget.AnchorLayoutOpts.Padding(widget.Insets{
 84				Bottom: 50,
 85			}),
 86		)),
 87	)
 88	root.AddChild(center)
 89	root.AddChild(left)
 90	root.AddChild(right)
 91	root.AddChild(up)
 92	root.AddChild(down)
 93
 94	return &Game{
 95		ui: &ebitenui.UI{Container: root},
 96	}
 97}
 98
 99func (g *Game) Update() error {
100	g.ui.Update()
101	return nil
102}
103
104func (g *Game) Draw(screen *ebiten.Image) {
105	g.ui.Draw(screen)
106}
107
108func (g *Game) Layout(w, h int) (int, int) {
109	return w, h
110}
111
112func main() {
113	ebiten.SetWindowSize(480, 320)
114	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
115	if err := ebiten.RunGame(NewGame()); err != nil {
116		panic(err)
117	}
118}

Layout data

Position

Responsible for aligning the child container along the horizontal and vertical axes.

Position:
 1center := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Darkslategray),
 4	),
 5	widget.ContainerOpts.WidgetOpts(
 6		widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 7			HorizontalPosition: widget.AnchorLayoutPositionStart,
 8			VerticalPosition:   widget.AnchorLayoutPositionStart,
 9		}),
10		widget.WidgetOpts.MinSize(50, 50),
11	),
12)

wid

 1package main
 2
 3import (
 4	"github.com/ebitenui/ebitenui"
 5	"github.com/ebitenui/ebitenui/image"
 6	"github.com/ebitenui/ebitenui/widget"
 7	"github.com/hajimehoshi/ebiten/v2"
 8	"golang.org/x/image/colornames"
 9)
10
11type Game struct {
12	ui *ebitenui.UI
13}
14
15func NewGame() *Game {
16	center := widget.NewContainer(
17		widget.ContainerOpts.BackgroundImage(
18			image.NewNineSliceColor(colornames.Darkslategray),
19		),
20		widget.ContainerOpts.WidgetOpts(
21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
22				HorizontalPosition: widget.AnchorLayoutPositionStart,
23				VerticalPosition:   widget.AnchorLayoutPositionStart,
24			}),
25			widget.WidgetOpts.MinSize(50, 50),
26		),
27	)
28	root := widget.NewContainer(
29		widget.ContainerOpts.BackgroundImage(
30			image.NewNineSliceColor(colornames.Gainsboro),
31		),
32		widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
33	)
34	root.AddChild(center)
35
36	return &Game{
37		ui: &ebitenui.UI{Container: root},
38	}
39}
40
41func (g *Game) Update() error {
42	g.ui.Update()
43	return nil
44}
45
46func (g *Game) Draw(screen *ebiten.Image) {
47	g.ui.Draw(screen)
48}
49
50func (g *Game) Layout(w, h int) (int, int) {
51	return w, h
52}
53
54func main() {
55	ebiten.SetWindowSize(480, 320)
56	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
57	if err := ebiten.RunGame(NewGame()); err != nil {
58		panic(err)
59	}
60}
 1center := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Darkslategray),
 4	),
 5	widget.ContainerOpts.WidgetOpts(
 6		widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 7			HorizontalPosition: widget.AnchorLayoutPositionCenter,
 8			VerticalPosition:   widget.AnchorLayoutPositionStart,
 9		}),
10		widget.WidgetOpts.MinSize(50, 50),
11	),
12)

wid

 1package main
 2
 3import (
 4	"github.com/ebitenui/ebitenui"
 5	"github.com/ebitenui/ebitenui/image"
 6	"github.com/ebitenui/ebitenui/widget"
 7	"github.com/hajimehoshi/ebiten/v2"
 8	"golang.org/x/image/colornames"
 9)
10
11type Game struct {
12	ui *ebitenui.UI
13}
14
15func NewGame() *Game {
16	center := widget.NewContainer(
17		widget.ContainerOpts.BackgroundImage(
18			image.NewNineSliceColor(colornames.Darkslategray),
19		),
20		widget.ContainerOpts.WidgetOpts(
21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
22				HorizontalPosition: widget.AnchorLayoutPositionCenter,
23				VerticalPosition:   widget.AnchorLayoutPositionStart,
24			}),
25			widget.WidgetOpts.MinSize(50, 50),
26		),
27	)
28	root := widget.NewContainer(
29		widget.ContainerOpts.BackgroundImage(
30			image.NewNineSliceColor(colornames.Gainsboro),
31		),
32		widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
33	)
34	root.AddChild(center)
35
36	return &Game{
37		ui: &ebitenui.UI{Container: root},
38	}
39}
40
41func (g *Game) Update() error {
42	g.ui.Update()
43	return nil
44}
45
46func (g *Game) Draw(screen *ebiten.Image) {
47	g.ui.Draw(screen)
48}
49
50func (g *Game) Layout(w, h int) (int, int) {
51	return w, h
52}
53
54func main() {
55	ebiten.SetWindowSize(480, 320)
56	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
57	if err := ebiten.RunGame(NewGame()); err != nil {
58		panic(err)
59	}
60}
 1center := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Darkslategray),
 4	),
 5	widget.ContainerOpts.WidgetOpts(
 6		widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 7			HorizontalPosition: widget.AnchorLayoutPositionEnd,
 8			VerticalPosition:   widget.AnchorLayoutPositionStart,
 9		}),
10		widget.WidgetOpts.MinSize(50, 50),
11	),
12)

hei

 1package main
 2
 3import (
 4	"github.com/ebitenui/ebitenui"
 5	"github.com/ebitenui/ebitenui/image"
 6	"github.com/ebitenui/ebitenui/widget"
 7	"github.com/hajimehoshi/ebiten/v2"
 8	"golang.org/x/image/colornames"
 9)
10
11type Game struct {
12	ui *ebitenui.UI
13}
14
15func NewGame() *Game {
16	center := widget.NewContainer(
17		widget.ContainerOpts.BackgroundImage(
18			image.NewNineSliceColor(colornames.Darkslategray),
19		),
20		widget.ContainerOpts.WidgetOpts(
21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
22				HorizontalPosition: widget.AnchorLayoutPositionEnd,
23				VerticalPosition:   widget.AnchorLayoutPositionStart,
24			}),
25			widget.WidgetOpts.MinSize(50, 50),
26		),
27	)
28	root := widget.NewContainer(
29		widget.ContainerOpts.BackgroundImage(
30			image.NewNineSliceColor(colornames.Gainsboro),
31		),
32		widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
33	)
34	root.AddChild(center)
35
36	return &Game{
37		ui: &ebitenui.UI{Container: root},
38	}
39}
40
41func (g *Game) Update() error {
42	g.ui.Update()
43	return nil
44}
45
46func (g *Game) Draw(screen *ebiten.Image) {
47	g.ui.Draw(screen)
48}
49
50func (g *Game) Layout(w, h int) (int, int) {
51	return w, h
52}
53
54func main() {
55	ebiten.SetWindowSize(480, 320)
56	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
57	if err := ebiten.RunGame(NewGame()); err != nil {
58		panic(err)
59	}
60}
 1center := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Darkslategray),
 4	),
 5	widget.ContainerOpts.WidgetOpts(
 6		widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 7			HorizontalPosition: widget.AnchorLayoutPositionStart,
 8			VerticalPosition:   widget.AnchorLayoutPositionCenter,
 9		}),
10		widget.WidgetOpts.MinSize(50, 50),
11	),
12)

wid

 1package main
 2
 3import (
 4	"github.com/ebitenui/ebitenui"
 5	"github.com/ebitenui/ebitenui/image"
 6	"github.com/ebitenui/ebitenui/widget"
 7	"github.com/hajimehoshi/ebiten/v2"
 8	"golang.org/x/image/colornames"
 9)
10
11type Game struct {
12	ui *ebitenui.UI
13}
14
15func NewGame() *Game {
16	center := widget.NewContainer(
17		widget.ContainerOpts.BackgroundImage(
18			image.NewNineSliceColor(colornames.Darkslategray),
19		),
20		widget.ContainerOpts.WidgetOpts(
21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
22				HorizontalPosition: widget.AnchorLayoutPositionStart,
23				VerticalPosition:   widget.AnchorLayoutPositionCenter,
24			}),
25			widget.WidgetOpts.MinSize(50, 50),
26		),
27	)
28	root := widget.NewContainer(
29		widget.ContainerOpts.BackgroundImage(
30			image.NewNineSliceColor(colornames.Gainsboro),
31		),
32		widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
33	)
34	root.AddChild(center)
35
36	return &Game{
37		ui: &ebitenui.UI{Container: root},
38	}
39}
40
41func (g *Game) Update() error {
42	g.ui.Update()
43	return nil
44}
45
46func (g *Game) Draw(screen *ebiten.Image) {
47	g.ui.Draw(screen)
48}
49
50func (g *Game) Layout(w, h int) (int, int) {
51	return w, h
52}
53
54func main() {
55	ebiten.SetWindowSize(480, 320)
56	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
57	if err := ebiten.RunGame(NewGame()); err != nil {
58		panic(err)
59	}
60}
 1center := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Darkslategray),
 4	),
 5	widget.ContainerOpts.WidgetOpts(
 6		widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 7			HorizontalPosition: widget.AnchorLayoutPositionCenter,
 8			VerticalPosition:   widget.AnchorLayoutPositionCenter,
 9		}),
10		widget.WidgetOpts.MinSize(50, 50),
11	),
12)

wid

 1package main
 2
 3import (
 4	"github.com/ebitenui/ebitenui"
 5	"github.com/ebitenui/ebitenui/image"
 6	"github.com/ebitenui/ebitenui/widget"
 7	"github.com/hajimehoshi/ebiten/v2"
 8	"golang.org/x/image/colornames"
 9)
10
11type Game struct {
12	ui *ebitenui.UI
13}
14
15func NewGame() *Game {
16	center := widget.NewContainer(
17		widget.ContainerOpts.BackgroundImage(
18			image.NewNineSliceColor(colornames.Darkslategray),
19		),
20		widget.ContainerOpts.WidgetOpts(
21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
22				HorizontalPosition: widget.AnchorLayoutPositionCenter,
23				VerticalPosition:   widget.AnchorLayoutPositionCenter,
24			}),
25			widget.WidgetOpts.MinSize(50, 50),
26		),
27	)
28	root := widget.NewContainer(
29		widget.ContainerOpts.BackgroundImage(
30			image.NewNineSliceColor(colornames.Gainsboro),
31		),
32		widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
33	)
34	root.AddChild(center)
35
36	return &Game{
37		ui: &ebitenui.UI{Container: root},
38	}
39}
40
41func (g *Game) Update() error {
42	g.ui.Update()
43	return nil
44}
45
46func (g *Game) Draw(screen *ebiten.Image) {
47	g.ui.Draw(screen)
48}
49
50func (g *Game) Layout(w, h int) (int, int) {
51	return w, h
52}
53
54func main() {
55	ebiten.SetWindowSize(480, 320)
56	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
57	if err := ebiten.RunGame(NewGame()); err != nil {
58		panic(err)
59	}
60}
 1center := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Darkslategray),
 4	),
 5	widget.ContainerOpts.WidgetOpts(
 6		widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 7			HorizontalPosition: widget.AnchorLayoutPositionEnd,
 8			VerticalPosition:   widget.AnchorLayoutPositionCenter,
 9		}),
10		widget.WidgetOpts.MinSize(50, 50),
11	),
12)

wid

 1package main
 2
 3import (
 4	"github.com/ebitenui/ebitenui"
 5	"github.com/ebitenui/ebitenui/image"
 6	"github.com/ebitenui/ebitenui/widget"
 7	"github.com/hajimehoshi/ebiten/v2"
 8	"golang.org/x/image/colornames"
 9)
10
11type Game struct {
12	ui *ebitenui.UI
13}
14
15func NewGame() *Game {
16	center := widget.NewContainer(
17		widget.ContainerOpts.BackgroundImage(
18			image.NewNineSliceColor(colornames.Darkslategray),
19		),
20		widget.ContainerOpts.WidgetOpts(
21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
22				HorizontalPosition: widget.AnchorLayoutPositionEnd,
23				VerticalPosition:   widget.AnchorLayoutPositionCenter,
24			}),
25			widget.WidgetOpts.MinSize(50, 50),
26		),
27	)
28	root := widget.NewContainer(
29		widget.ContainerOpts.BackgroundImage(
30			image.NewNineSliceColor(colornames.Gainsboro),
31		),
32		widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
33	)
34	root.AddChild(center)
35
36	return &Game{
37		ui: &ebitenui.UI{Container: root},
38	}
39}
40
41func (g *Game) Update() error {
42	g.ui.Update()
43	return nil
44}
45
46func (g *Game) Draw(screen *ebiten.Image) {
47	g.ui.Draw(screen)
48}
49
50func (g *Game) Layout(w, h int) (int, int) {
51	return w, h
52}
53
54func main() {
55	ebiten.SetWindowSize(480, 320)
56	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
57	if err := ebiten.RunGame(NewGame()); err != nil {
58		panic(err)
59	}
60}
 1center := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Darkslategray),
 4	),
 5	widget.ContainerOpts.WidgetOpts(
 6		widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 7			HorizontalPosition: widget.AnchorLayoutPositionStart,
 8			VerticalPosition:   widget.AnchorLayoutPositionEnd,
 9		}),
10		widget.WidgetOpts.MinSize(50, 50),
11	),
12)

wid

 1package main
 2
 3import (
 4	"github.com/ebitenui/ebitenui"
 5	"github.com/ebitenui/ebitenui/image"
 6	"github.com/ebitenui/ebitenui/widget"
 7	"github.com/hajimehoshi/ebiten/v2"
 8	"golang.org/x/image/colornames"
 9)
10
11type Game struct {
12	ui *ebitenui.UI
13}
14
15func NewGame() *Game {
16	center := widget.NewContainer(
17		widget.ContainerOpts.BackgroundImage(
18			image.NewNineSliceColor(colornames.Darkslategray),
19		),
20		widget.ContainerOpts.WidgetOpts(
21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
22				HorizontalPosition: widget.AnchorLayoutPositionStart,
23				VerticalPosition:   widget.AnchorLayoutPositionEnd,
24			}),
25			widget.WidgetOpts.MinSize(50, 50),
26		),
27	)
28	root := widget.NewContainer(
29		widget.ContainerOpts.BackgroundImage(
30			image.NewNineSliceColor(colornames.Gainsboro),
31		),
32		widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
33	)
34	root.AddChild(center)
35
36	return &Game{
37		ui: &ebitenui.UI{Container: root},
38	}
39}
40
41func (g *Game) Update() error {
42	g.ui.Update()
43	return nil
44}
45
46func (g *Game) Draw(screen *ebiten.Image) {
47	g.ui.Draw(screen)
48}
49
50func (g *Game) Layout(w, h int) (int, int) {
51	return w, h
52}
53
54func main() {
55	ebiten.SetWindowSize(480, 320)
56	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
57	if err := ebiten.RunGame(NewGame()); err != nil {
58		panic(err)
59	}
60}
 1center := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Darkslategray),
 4	),
 5	widget.ContainerOpts.WidgetOpts(
 6		widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 7			HorizontalPosition: widget.AnchorLayoutPositionCenter,
 8			VerticalPosition:   widget.AnchorLayoutPositionEnd,
 9		}),
10		widget.WidgetOpts.MinSize(50, 50),
11	),
12)

wid

 1package main
 2
 3import (
 4	"github.com/ebitenui/ebitenui"
 5	"github.com/ebitenui/ebitenui/image"
 6	"github.com/ebitenui/ebitenui/widget"
 7	"github.com/hajimehoshi/ebiten/v2"
 8	"golang.org/x/image/colornames"
 9)
10
11type Game struct {
12	ui *ebitenui.UI
13}
14
15func NewGame() *Game {
16	center := widget.NewContainer(
17		widget.ContainerOpts.BackgroundImage(
18			image.NewNineSliceColor(colornames.Darkslategray),
19		),
20		widget.ContainerOpts.WidgetOpts(
21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
22				HorizontalPosition: widget.AnchorLayoutPositionCenter,
23				VerticalPosition:   widget.AnchorLayoutPositionEnd,
24			}),
25			widget.WidgetOpts.MinSize(50, 50),
26		),
27	)
28	root := widget.NewContainer(
29		widget.ContainerOpts.BackgroundImage(
30			image.NewNineSliceColor(colornames.Gainsboro),
31		),
32		widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
33	)
34	root.AddChild(center)
35
36	return &Game{
37		ui: &ebitenui.UI{Container: root},
38	}
39}
40
41func (g *Game) Update() error {
42	g.ui.Update()
43	return nil
44}
45
46func (g *Game) Draw(screen *ebiten.Image) {
47	g.ui.Draw(screen)
48}
49
50func (g *Game) Layout(w, h int) (int, int) {
51	return w, h
52}
53
54func main() {
55	ebiten.SetWindowSize(480, 320)
56	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
57	if err := ebiten.RunGame(NewGame()); err != nil {
58		panic(err)
59	}
60}
 1center := widget.NewContainer(
 2	widget.ContainerOpts.BackgroundImage(
 3		image.NewNineSliceColor(colornames.Darkslategray),
 4	),
 5	widget.ContainerOpts.WidgetOpts(
 6		widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
 7			HorizontalPosition: widget.AnchorLayoutPositionEnd,
 8			VerticalPosition:   widget.AnchorLayoutPositionEnd,
 9		}),
10		widget.WidgetOpts.MinSize(50, 50),
11	),
12)

wid

 1package main
 2
 3import (
 4	"github.com/ebitenui/ebitenui"
 5	"github.com/ebitenui/ebitenui/image"
 6	"github.com/ebitenui/ebitenui/widget"
 7	"github.com/hajimehoshi/ebiten/v2"
 8	"golang.org/x/image/colornames"
 9)
10
11type Game struct {
12	ui *ebitenui.UI
13}
14
15func NewGame() *Game {
16	center := widget.NewContainer(
17		widget.ContainerOpts.BackgroundImage(
18			image.NewNineSliceColor(colornames.Darkslategray),
19		),
20		widget.ContainerOpts.WidgetOpts(
21			widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
22				HorizontalPosition: widget.AnchorLayoutPositionEnd,
23				VerticalPosition:   widget.AnchorLayoutPositionEnd,
24			}),
25			widget.WidgetOpts.MinSize(50, 50),
26		),
27	)
28	root := widget.NewContainer(
29		widget.ContainerOpts.BackgroundImage(
30			image.NewNineSliceColor(colornames.Gainsboro),
31		),
32		widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
33	)
34	root.AddChild(center)
35
36	return &Game{
37		ui: &ebitenui.UI{Container: root},
38	}
39}
40
41func (g *Game) Update() error {
42	g.ui.Update()
43	return nil
44}
45
46func (g *Game) Draw(screen *ebiten.Image) {
47	g.ui.Draw(screen)
48}
49
50func (g *Game) Layout(w, h int) (int, int) {
51	return w, h
52}
53
54func main() {
55	ebiten.SetWindowSize(480, 320)
56	ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
57	if err := ebiten.RunGame(NewGame()); err != nil {
58		panic(err)
59	}
60}