Theme map lookup
This commit is contained in:
		
							parent
							
								
									1cb28b0a3c
								
							
						
					
					
						commit
						196d9aae34
					
				
							
								
								
									
										14
									
								
								block.go
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								block.go
									
									
									
									
									
								
							@ -125,22 +125,22 @@ type Block struct {
 | 
			
		||||
func NewBlock() *Block {
 | 
			
		||||
	b := Block{}
 | 
			
		||||
	b.Display = true
 | 
			
		||||
	b.Border = theme.HasBorder
 | 
			
		||||
	b.Border = true
 | 
			
		||||
	b.BorderLeft = true
 | 
			
		||||
	b.BorderRight = true
 | 
			
		||||
	b.BorderTop = true
 | 
			
		||||
	b.BorderBottom = true
 | 
			
		||||
	b.BorderBg = theme.BorderBg
 | 
			
		||||
	b.BorderFg = theme.BorderFg
 | 
			
		||||
	b.BorderLabelBg = theme.BorderLabelTextBg
 | 
			
		||||
	b.BorderLabelFg = theme.BorderLabelTextFg
 | 
			
		||||
	b.Bg = theme.BlockBg
 | 
			
		||||
	b.BorderBg = ThemeAttr("border.bg")
 | 
			
		||||
	b.BorderFg = ThemeAttr("border.fg")
 | 
			
		||||
	b.BorderLabelBg = ThemeAttr("label.bg")
 | 
			
		||||
	b.BorderLabelFg = ThemeAttr("label.fg")
 | 
			
		||||
	b.Bg = ThemeAttr("block.bg")
 | 
			
		||||
	b.Width = 2
 | 
			
		||||
	b.Height = 2
 | 
			
		||||
	return &b
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Align computes box mob.l
 | 
			
		||||
// Align computes box model
 | 
			
		||||
func (b *Block) Align() {
 | 
			
		||||
	b.area.Min.X = b.X
 | 
			
		||||
	b.area.Min.Y = b.Y
 | 
			
		||||
 | 
			
		||||
@ -233,8 +233,7 @@ func (es *EvtStream) Loop() {
 | 
			
		||||
			es.RLock()
 | 
			
		||||
			defer es.RUnlock()
 | 
			
		||||
			if pattern := es.match(a.Path); pattern != "" {
 | 
			
		||||
				h := es.Handlers[pattern]
 | 
			
		||||
				h(a)
 | 
			
		||||
				es.Handlers[pattern](a)
 | 
			
		||||
			}
 | 
			
		||||
		}(e)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -22,18 +22,18 @@ var ps = []string{
 | 
			
		||||
	"/a/b/c/d/"}
 | 
			
		||||
 | 
			
		||||
func TestMatchScore(t *testing.T) {
 | 
			
		||||
	chk := func(a, b string, s int) {
 | 
			
		||||
		if c := MatchScore(a, b); c != s {
 | 
			
		||||
			t.Errorf("\na:%s\nb:%s\nshould:%d\nscore:%d", a, b, s, c)
 | 
			
		||||
	chk := func(a, b string, s bool) {
 | 
			
		||||
		if c := isPathMatch(a, b); c != s {
 | 
			
		||||
			t.Errorf("\na:%s\nb:%s\nshould:%t\nactual:%t", a, b, s, c)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	chk(ps[1], ps[1], 0)
 | 
			
		||||
	chk(ps[1], ps[2], -1)
 | 
			
		||||
	chk(ps[2], ps[1], 0)
 | 
			
		||||
	chk(ps[4], ps[1], 0)
 | 
			
		||||
	chk(ps[6], ps[2], 1)
 | 
			
		||||
	chk(ps[4], ps[5], -1)
 | 
			
		||||
	chk(ps[1], ps[1], true)
 | 
			
		||||
	chk(ps[1], ps[2], true)
 | 
			
		||||
	chk(ps[2], ps[1], false)
 | 
			
		||||
	chk(ps[4], ps[1], false)
 | 
			
		||||
	chk(ps[6], ps[2], false)
 | 
			
		||||
	chk(ps[4], ps[5], false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCrtEvt(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
@ -63,7 +63,7 @@ func TermHeight() int {
 | 
			
		||||
// right could overlap on left ones.
 | 
			
		||||
func Render(bs ...Bufferer) {
 | 
			
		||||
	// set tm bg
 | 
			
		||||
	tm.Clear(tm.ColorDefault, toTmAttr(theme.BodyBg))
 | 
			
		||||
	tm.Clear(tm.ColorDefault, toTmAttr(ThemeAttr("bg")))
 | 
			
		||||
	for _, b := range bs {
 | 
			
		||||
		buf := b.Buffer()
 | 
			
		||||
		// set cels in buf
 | 
			
		||||
 | 
			
		||||
@ -40,7 +40,6 @@ func main() {
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	termui.Handle("/timer/1s", func(e termui.Event) {
 | 
			
		||||
		//debug.Logf("<-%v\n", e)
 | 
			
		||||
		t := e.Data.(termui.EvtTimer)
 | 
			
		||||
 | 
			
		||||
		if t.Count%2 == 0 {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										54
									
								
								theme.go
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								theme.go
									
									
									
									
									
								
							@ -4,6 +4,9 @@
 | 
			
		||||
 | 
			
		||||
package termui
 | 
			
		||||
 | 
			
		||||
import "strings"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
// A ColorScheme represents the current look-and-feel of the dashboard.
 | 
			
		||||
type ColorScheme struct {
 | 
			
		||||
	BodyBg            Attribute
 | 
			
		||||
@ -82,3 +85,54 @@ func UseTheme(th string) {
 | 
			
		||||
		theme = themeDefault
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
var ColorMap = map[string]Attribute{
 | 
			
		||||
	"fg":           ColorWhite,
 | 
			
		||||
	"bg":           ColorDefault,
 | 
			
		||||
	"border.fg":    ColorWhite,
 | 
			
		||||
	"label.fg":     ColorGreen,
 | 
			
		||||
	"par.fg":       ColorYellow,
 | 
			
		||||
	"par.label.bg": ColorWhite,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ThemeAttr(name string) Attribute {
 | 
			
		||||
	return lookUpAttr(ColorMap, name)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookUpAttr(clrmap map[string]Attribute, name string) Attribute {
 | 
			
		||||
 | 
			
		||||
	a, ok := clrmap[name]
 | 
			
		||||
	if ok {
 | 
			
		||||
		return a
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ns := strings.Split(name, ".")
 | 
			
		||||
	for i := range ns {
 | 
			
		||||
		nn := strings.Join(ns[i:len(ns)], ".")
 | 
			
		||||
		a, ok = ColorMap[nn]
 | 
			
		||||
		if ok {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return a
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 0<=r,g,b <= 5
 | 
			
		||||
func ColorRGB(r, g, b int) Attribute {
 | 
			
		||||
	within := func(n int) int {
 | 
			
		||||
		if n < 0 {
 | 
			
		||||
			return 0
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if n > 5 {
 | 
			
		||||
			return 5
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return n
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r, b, g = within(r), within(b), within(g)
 | 
			
		||||
	return Attribute(0x0f + 36*r + 6*g + b)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								theme_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								theme_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
package termui
 | 
			
		||||
 | 
			
		||||
import "testing"
 | 
			
		||||
 | 
			
		||||
var cmap = map[string]Attribute{
 | 
			
		||||
	"fg":           ColorWhite,
 | 
			
		||||
	"bg":           ColorDefault,
 | 
			
		||||
	"border.fg":    ColorWhite,
 | 
			
		||||
	"label.fg":     ColorGreen,
 | 
			
		||||
	"par.fg":       ColorYellow,
 | 
			
		||||
	"par.label.bg": ColorWhite,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestLoopUpAttr(t *testing.T) {
 | 
			
		||||
	tbl := []struct {
 | 
			
		||||
		name   string
 | 
			
		||||
		should Attribute
 | 
			
		||||
	}{
 | 
			
		||||
		{"par.label.bg", ColorWhite},
 | 
			
		||||
		{"par.label.fg", ColorGreen},
 | 
			
		||||
		{"par.bg", ColorDefault},
 | 
			
		||||
		{"bar.border.fg", ColorWhite},
 | 
			
		||||
		{"bar.label.bg", ColorDefault},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, v := range tbl {
 | 
			
		||||
		if lookUpAttr(cmap, v.name) != v.should {
 | 
			
		||||
			t.Error(v.name)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user