diff --git a/README.md b/README.md index 87e7a90..7cdaf27 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# termui [![Build Status](https://travis-ci.org/gizak/termui.svg)](https://travis-ci.org/gizak/termui) [![Doc Status](https://godoc.org/github.com/gizak/termui?status.png)](https://godoc.org/github.com/gizak/termui) +# termui [![Build Status](https://travis-ci.org/gizak/termui.svg?branch=master)](https://travis-ci.org/gizak/termui) [![Doc Status](https://godoc.org/github.com/gizak/termui?status.png)](https://godoc.org/github.com/gizak/termui) --- diff --git a/example/gauge.go b/example/gauge.go index 45cc29d..a05a2d9 100644 --- a/example/gauge.go +++ b/example/gauge.go @@ -54,6 +54,7 @@ func main() { g3.Y = 11 g3.Border.Label = "Gauge with custom label" g3.Label = "{{percent}}% (100MBs free)" + g3.Align = termui.AlignRight termui.Render(g0, g1, g2, g3) diff --git a/example/gauge.png b/example/gauge.png index 17eb3ea..5c20e6e 100644 Binary files a/example/gauge.png and b/example/gauge.png differ diff --git a/gauge.go b/gauge.go index d5abbcd..cb03eb0 100644 --- a/gauge.go +++ b/gauge.go @@ -20,12 +20,24 @@ import ( g.BarColor = termui.ColorRed g.PercentColor = termui.ColorBlue */ + +// Align is the position of the gauge's label. +type Align int + +// All supported positions. +const ( + AlignLeft Align = iota + AlignCenter + AlignRight +) + type Gauge struct { Block Percent int BarColor Attribute PercentColor Attribute Label string + Align Align } // NewGauge return a new gauge with current theme. @@ -35,6 +47,7 @@ func NewGauge() *Gauge { PercentColor: theme.GaugePercent, BarColor: theme.GaugeBar, Label: "{{percent}}%", + Align: AlignCenter, } g.Width = 12 @@ -64,16 +77,27 @@ func (g *Gauge) Buffer() []Point { // plot percentage s := strings.Replace(g.Label, "{{percent}}", strconv.Itoa(g.Percent), -1) - prx := g.innerX + (g.innerWidth-strWidth(s))/2 pry := g.innerY + g.innerHeight/2 rs := str2runes(s) + var pos int + switch g.Align { + case AlignLeft: + pos = 0 + + case AlignCenter: + pos = (g.innerWidth - strWidth(s)) / 2 + + case AlignRight: + pos = g.innerWidth - strWidth(s) + } + for i, v := range rs { p := Point{} - p.X = prx + i + p.X = 1 + pos + i p.Y = pry p.Ch = v p.Fg = g.PercentColor - if w > (g.innerWidth-strWidth(s))/2+i { + if w > pos+i { p.Bg = g.BarColor if p.Bg == ColorDefault { p.Bg |= AttrReverse