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