Add padding and margin layouts
This commit is contained in:
parent
bfd94a9e26
commit
050b94dd3a
@ -43,7 +43,9 @@ func (c Canvas) Build(
|
||||
return
|
||||
}
|
||||
|
||||
decorator = applyDecorators(e, cnv)
|
||||
decorator = applyPadding(e, cnv)
|
||||
decorator = applyDecorators(e, decorator)
|
||||
decorator = applyMargins(e, decorator)
|
||||
|
||||
if e.Hidden {
|
||||
decorator.Hide()
|
||||
|
@ -67,7 +67,9 @@ func (cnt Container) Build(
|
||||
return
|
||||
}
|
||||
|
||||
decorator = applyDecorators(e, cont)
|
||||
decorator = applyPadding(e, cont)
|
||||
decorator = applyDecorators(e, decorator)
|
||||
decorator = applyMargins(e, decorator)
|
||||
|
||||
if e.Hidden {
|
||||
decorator.Hide()
|
||||
|
@ -25,6 +25,28 @@ type Color struct {
|
||||
Alpha uint8 `yaml:"alpha"`
|
||||
}
|
||||
|
||||
type Margins struct {
|
||||
Top float32 `yaml:"top"`
|
||||
Bottom float32 `yaml:"bottom"`
|
||||
Left float32 `yaml:"left"`
|
||||
Right float32 `yaml:"right"`
|
||||
}
|
||||
|
||||
func (m *Margins) HasMargins() bool {
|
||||
return m.Top > 0 || m.Bottom > 0 || m.Left > 0 || m.Right > 0
|
||||
}
|
||||
|
||||
type Padding struct {
|
||||
Top float32 `yaml:"top"`
|
||||
Bottom float32 `yaml:"bottom"`
|
||||
Left float32 `yaml:"left"`
|
||||
Right float32 `yaml:"right"`
|
||||
}
|
||||
|
||||
func (p *Padding) HasPadding() bool {
|
||||
return p.Top > 0 || p.Bottom > 0 || p.Left > 0 || p.Right > 0
|
||||
}
|
||||
|
||||
// Element represents the yaml description of a ui element
|
||||
type Element struct {
|
||||
ID string `yaml:"id"`
|
||||
@ -34,6 +56,9 @@ type Element struct {
|
||||
Widget Widget `yaml:"widget"`
|
||||
Canvas Canvas `yaml:"canvas"`
|
||||
|
||||
Padding Padding `yaml:"padding"`
|
||||
Margins Margins `yaml:"margins"`
|
||||
|
||||
// Border Layout Elements
|
||||
Top *Element `yaml:"top"`
|
||||
Bottom *Element `yaml:"bottom"`
|
||||
|
@ -112,7 +112,9 @@ func (l Layout) Build(
|
||||
return
|
||||
}
|
||||
|
||||
decorator = applyDecorators(e, lay)
|
||||
decorator = applyPadding(e, lay)
|
||||
decorator = applyDecorators(e, decorator)
|
||||
decorator = applyMargins(e, decorator)
|
||||
|
||||
if e.Hidden {
|
||||
decorator.Hide()
|
||||
|
25
screen/margin.go
Normal file
25
screen/margin.go
Normal file
@ -0,0 +1,25 @@
|
||||
package screen
|
||||
|
||||
import (
|
||||
"bitbucket.org/hevanto/ui/uilayout"
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/container"
|
||||
)
|
||||
|
||||
func applyMargins(
|
||||
e *Element,
|
||||
obj fyne.CanvasObject,
|
||||
) (
|
||||
margin fyne.CanvasObject,
|
||||
) {
|
||||
margin = obj
|
||||
if e.Margins.HasMargins() {
|
||||
margin = container.New(uilayout.NewMargin(
|
||||
e.Margins.Top,
|
||||
e.Margins.Bottom,
|
||||
e.Margins.Left,
|
||||
e.Margins.Right,
|
||||
), obj)
|
||||
}
|
||||
return
|
||||
}
|
25
screen/padding.go
Normal file
25
screen/padding.go
Normal file
@ -0,0 +1,25 @@
|
||||
package screen
|
||||
|
||||
import (
|
||||
"bitbucket.org/hevanto/ui/uilayout"
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/container"
|
||||
)
|
||||
|
||||
func applyPadding(
|
||||
e *Element,
|
||||
obj fyne.CanvasObject,
|
||||
) (
|
||||
padding fyne.CanvasObject,
|
||||
) {
|
||||
padding = obj
|
||||
if e.Padding.HasPadding() {
|
||||
padding = container.New(uilayout.NewPadding(
|
||||
e.Padding.Top,
|
||||
e.Padding.Bottom,
|
||||
e.Padding.Left,
|
||||
e.Padding.Right,
|
||||
), obj)
|
||||
}
|
||||
return
|
||||
}
|
@ -255,7 +255,9 @@ func (w Widget) Build(
|
||||
return
|
||||
}
|
||||
|
||||
decorator = applyDecorators(e, widget)
|
||||
decorator = applyPadding(e, widget)
|
||||
decorator = applyDecorators(e, decorator)
|
||||
decorator = applyMargins(e, decorator)
|
||||
|
||||
if e.Hidden {
|
||||
decorator.Hide()
|
||||
|
45
uilayout/margin.go
Normal file
45
uilayout/margin.go
Normal file
@ -0,0 +1,45 @@
|
||||
package uilayout
|
||||
|
||||
import "fyne.io/fyne/v2"
|
||||
|
||||
type Margin struct {
|
||||
top float32
|
||||
bottom float32
|
||||
left float32
|
||||
right float32
|
||||
}
|
||||
|
||||
func NewMargin(
|
||||
top, bottom, left, right float32,
|
||||
) *Margin {
|
||||
return &Margin{
|
||||
top: top,
|
||||
bottom: bottom,
|
||||
left: left,
|
||||
right: right,
|
||||
}
|
||||
}
|
||||
|
||||
func (m *Margin) MinSize(objects []fyne.CanvasObject) fyne.Size {
|
||||
w := m.left + m.right
|
||||
h := m.top + m.bottom
|
||||
if len(objects) > 0 {
|
||||
w += objects[0].MinSize().Width
|
||||
h += objects[0].MinSize().Height
|
||||
}
|
||||
return fyne.NewSize(w, h)
|
||||
}
|
||||
|
||||
func (m *Margin) Layout(
|
||||
objects []fyne.CanvasObject,
|
||||
containerSize fyne.Size,
|
||||
) {
|
||||
pos := fyne.NewPos(m.left, m.top)
|
||||
if len(objects) > 0 {
|
||||
o := objects[0]
|
||||
size := containerSize.Subtract(
|
||||
fyne.NewSize(m.left+m.right, m.top+m.bottom))
|
||||
o.Resize(size)
|
||||
o.Move(pos)
|
||||
}
|
||||
}
|
45
uilayout/padding.go
Normal file
45
uilayout/padding.go
Normal file
@ -0,0 +1,45 @@
|
||||
package uilayout
|
||||
|
||||
import "fyne.io/fyne/v2"
|
||||
|
||||
type Padding struct {
|
||||
top float32
|
||||
bottom float32
|
||||
left float32
|
||||
right float32
|
||||
}
|
||||
|
||||
func NewPadding(
|
||||
top, bottom, left, right float32,
|
||||
) *Padding {
|
||||
return &Padding{
|
||||
top: top,
|
||||
bottom: bottom,
|
||||
left: left,
|
||||
right: right,
|
||||
}
|
||||
}
|
||||
|
||||
func (p *Padding) MinSize(objects []fyne.CanvasObject) fyne.Size {
|
||||
w := p.left + p.right
|
||||
h := p.top + p.bottom
|
||||
if len(objects) > 0 {
|
||||
w += objects[0].MinSize().Width
|
||||
h += objects[0].MinSize().Height
|
||||
}
|
||||
return fyne.NewSize(w, h)
|
||||
}
|
||||
|
||||
func (p *Padding) Layout(
|
||||
objects []fyne.CanvasObject,
|
||||
containerSize fyne.Size,
|
||||
) {
|
||||
pos := fyne.NewPos(p.left, p.top)
|
||||
if len(objects) > 0 {
|
||||
o := objects[0]
|
||||
size := containerSize.Subtract(
|
||||
fyne.NewSize(p.left+p.right, p.top+p.bottom))
|
||||
o.Resize(size)
|
||||
o.Move(pos)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user