diff --git a/bar_option.go b/bar_option.go index b07fb43..024f2e1 100644 --- a/bar_option.go +++ b/bar_option.go @@ -11,15 +11,14 @@ type BarOption func(*bState) func inspect(decorators []decor.Decorator) (dest []decor.Decorator) { - type mergeWrapper interface { - MergeUnwrap() []decor.Decorator - } for _, decorator := range decorators { if decorator == nil { continue } - if mw, ok := decorator.(mergeWrapper); ok { - dest = append(dest, mw.MergeUnwrap()...) + if d, ok := decorator.(interface { + PlaceHolders() []decor.Decorator + }); ok { + dest = append(dest, d.PlaceHolders()...) } dest = append(dest, decorator) } diff --git a/decor/merge.go b/decor/merge.go index aa0fcb9..02b7a93 100644 --- a/decor/merge.go +++ b/decor/merge.go @@ -31,7 +31,7 @@ md := &mergeDecorator{ Decorator: decorator, wc: decorator.GetConf(), - placeHolders: make([]*placeHolderDecorator, len(placeholders)), + placeHolders: make([]Decorator, len(placeholders)), } decorator.SetConf(WC{}) for i, wc := range placeholders { @@ -46,7 +46,7 @@ type mergeDecorator struct { Decorator wc WC - placeHolders []*placeHolderDecorator + placeHolders []Decorator } func (d *mergeDecorator) GetConf() WC { @@ -57,12 +57,8 @@ d.wc = conf.Init() } -func (d *mergeDecorator) MergeUnwrap() []Decorator { - decorators := make([]Decorator, len(d.placeHolders)) - for i, ph := range d.placeHolders { - decorators[i] = ph - } - return decorators +func (d *mergeDecorator) PlaceHolders() []Decorator { + return d.placeHolders } func (d *mergeDecorator) Sync() (chan int, bool) { @@ -82,21 +78,21 @@ cellCount++ } - total := runewidth.StringWidth(d.placeHolders[0].FormatMsg("")) + total := runewidth.StringWidth(d.placeHolders[0].GetConf().FormatMsg("")) pw := (cellCount - total) / len(d.placeHolders) rem := (cellCount - total) % len(d.placeHolders) var diff int for i := 1; i < len(d.placeHolders); i++ { - ph := d.placeHolders[i] + wc := d.placeHolders[i].GetConf() width := pw - diff - if (ph.WC.C & DextraSpace) != 0 { + if (wc.C & DextraSpace) != 0 { width-- if width < 0 { width = 0 } } - max := runewidth.StringWidth(ph.FormatMsg(strings.Repeat(" ", width))) + max := runewidth.StringWidth(wc.FormatMsg(strings.Repeat(" ", width))) total += max diff = max - pw }