diff --git a/v3/widgets/barchart.go b/v3/widgets/barchart.go index d76de3b..a5044e6 100644 --- a/v3/widgets/barchart.go +++ b/v3/widgets/barchart.go @@ -71,7 +71,7 @@ func (self *BarChart) Draw(buf *Buffer) { } // draw number - numberXCoordinate := barXCoordinate + int((float64(self.BarWidth) / 2)) + numberXCoordinate := barXCoordinate + self.calcNumberXPos(data) if numberXCoordinate <= self.Inner.Max.X { buf.SetString( self.NumFormatter(data), @@ -87,3 +87,21 @@ func (self *BarChart) Draw(buf *Buffer) { barXCoordinate += (self.BarWidth + self.BarGap) } } + +// +// Compute bar text position based on character length. +// +func (self *BarChart) calcNumberXPos(data float64) int { + numFormatterData := self.NumFormatter(data) + + numberCharsLen := len(numFormatterData) + barWidthCenter := int(float64(self.BarWidth / 2)) + + var numberXCharPos int = barWidthCenter - numberCharsLen + (numberCharsLen / 2) + + if numberCharsLen > barWidthCenter { + numberXCharPos = numberCharsLen - barWidthCenter + } + + return int(numberXCharPos) +}