-
Notifications
You must be signed in to change notification settings - Fork 1
/
flex.go
108 lines (87 loc) · 2.39 KB
/
flex.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package gel
import l "github.com/p9c/gio/layout"
type Flex struct {
flex l.Flex
ctx *l.Context
children []l.FlexChild
}
// Flex creates a new flex layout
func (th *Theme) Flex() (out *Flex) {
return new(Flex)
}
// VFlex creates a new vertical flex layout
func (th *Theme) VFlex() (out *Flex) {
return new(Flex).Vertical()
}
// alignment setters
// AlignStart sets alignment for layout from Start
func (f *Flex) AlignStart() (out *Flex) {
f.flex.Alignment = l.Start
return f
}
// AlignEnd sets alignment for layout from End
func (f *Flex) AlignEnd() (out *Flex) {
f.flex.Alignment = l.End
return f
}
// AlignMiddle sets alignment for layout from Middle
func (f *Flex) AlignMiddle() (out *Flex) {
f.flex.Alignment = l.Middle
return f
}
// AlignBaseline sets alignment for layout from Baseline
func (f *Flex) AlignBaseline() (out *Flex) {
f.flex.Alignment = l.Baseline
return f
}
// Axis setters
// Vertical sets axis to vertical, otherwise it is horizontal
func (f *Flex) Vertical() (out *Flex) {
f.flex.Axis = l.Vertical
return f
}
// Spacing setters
// SpaceStart sets the corresponding flex spacing parameter
func (f *Flex) SpaceStart() (out *Flex) {
f.flex.Spacing = l.SpaceStart
return f
}
// SpaceEnd sets the corresponding flex spacing parameter
func (f *Flex) SpaceEnd() (out *Flex) {
f.flex.Spacing = l.SpaceEnd
return f
}
// SpaceSides sets the corresponding flex spacing parameter
func (f *Flex) SpaceSides() (out *Flex) {
f.flex.Spacing = l.SpaceSides
return f
}
// SpaceAround sets the corresponding flex spacing parameter
func (f *Flex) SpaceAround() (out *Flex) {
f.flex.Spacing = l.SpaceAround
return f
}
// SpaceBetween sets the corresponding flex spacing parameter
func (f *Flex) SpaceBetween() (out *Flex) {
f.flex.Spacing = l.SpaceBetween
return f
}
// SpaceEvenly sets the corresponding flex spacing parameter
func (f *Flex) SpaceEvenly() (out *Flex) {
f.flex.Spacing = l.SpaceEvenly
return f
}
// Rigid inserts a rigid widget into the flex
func (f *Flex) Rigid(w l.Widget) (out *Flex) {
f.children = append(f.children, l.Rigid(w))
return f
}
// Flexed inserts a flexed widget into the flex
func (f *Flex) Flexed(wgt float32, w l.Widget) (out *Flex) {
f.children = append(f.children, l.Flexed(wgt, w))
return f
}
// Fn runs the ops in the context using the FlexChildren inside it
func (f *Flex) Fn(c l.Context) l.Dimensions {
return f.flex.Layout(c, f.children...)
}