Codebase list golang-github-vbauerster-mpb / cb89f4e
mergeDecorator: placeHolders as []Decorator Vladimir Bauer 3 years ago
2 changed file(s) with 12 addition(s) and 17 deletion(s). Raw diff Collapse all Expand all
1010 type BarOption func(*bState)
1111
1212 func inspect(decorators []decor.Decorator) (dest []decor.Decorator) {
13 type mergeWrapper interface {
14 MergeUnwrap() []decor.Decorator
15 }
1613 for _, decorator := range decorators {
1714 if decorator == nil {
1815 continue
1916 }
20 if mw, ok := decorator.(mergeWrapper); ok {
21 dest = append(dest, mw.MergeUnwrap()...)
17 if d, ok := decorator.(interface {
18 PlaceHolders() []decor.Decorator
19 }); ok {
20 dest = append(dest, d.PlaceHolders()...)
2221 }
2322 dest = append(dest, decorator)
2423 }
3030 md := &mergeDecorator{
3131 Decorator: decorator,
3232 wc: decorator.GetConf(),
33 placeHolders: make([]*placeHolderDecorator, len(placeholders)),
33 placeHolders: make([]Decorator, len(placeholders)),
3434 }
3535 decorator.SetConf(WC{})
3636 for i, wc := range placeholders {
4545 type mergeDecorator struct {
4646 Decorator
4747 wc WC
48 placeHolders []*placeHolderDecorator
48 placeHolders []Decorator
4949 }
5050
5151 func (d *mergeDecorator) GetConf() WC {
5656 d.wc = conf.Init()
5757 }
5858
59 func (d *mergeDecorator) MergeUnwrap() []Decorator {
60 decorators := make([]Decorator, len(d.placeHolders))
61 for i, ph := range d.placeHolders {
62 decorators[i] = ph
63 }
64 return decorators
59 func (d *mergeDecorator) PlaceHolders() []Decorator {
60 return d.placeHolders
6561 }
6662
6763 func (d *mergeDecorator) Sync() (chan int, bool) {
8177 cellCount++
8278 }
8379
84 total := runewidth.StringWidth(d.placeHolders[0].FormatMsg(""))
80 total := runewidth.StringWidth(d.placeHolders[0].GetConf().FormatMsg(""))
8581 pw := (cellCount - total) / len(d.placeHolders)
8682 rem := (cellCount - total) % len(d.placeHolders)
8783
8884 var diff int
8985 for i := 1; i < len(d.placeHolders); i++ {
90 ph := d.placeHolders[i]
86 wc := d.placeHolders[i].GetConf()
9187 width := pw - diff
92 if (ph.WC.C & DextraSpace) != 0 {
88 if (wc.C & DextraSpace) != 0 {
9389 width--
9490 if width < 0 {
9591 width = 0
9692 }
9793 }
98 max := runewidth.StringWidth(ph.FormatMsg(strings.Repeat(" ", width)))
94 max := runewidth.StringWidth(wc.FormatMsg(strings.Repeat(" ", width)))
9995 total += max
10096 diff = max - pw
10197 }