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