forked from hugelgupf/u-root
-
Notifications
You must be signed in to change notification settings - Fork 7
/
render.go
54 lines (45 loc) · 1.24 KB
/
render.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package ui
// Renderer wraps the Render method.
type Renderer interface {
// Render renders onto a Buffer.
Render(b *Buffer)
}
// Render creates a new Buffer with the given width, and lets a Renderer render
// onto it.
func Render(r Renderer, width int) *Buffer {
if r == nil {
return nil
}
b := NewBuffer(width)
r.Render(b)
return b
}
// NewModeLineRenderer returns a Renderer for a mode line.
func NewModeLineRenderer(title, filter string) Renderer {
return modeLineRenderer{title, filter}
}
type modeLineRenderer struct {
title string
filter string
}
func (ml modeLineRenderer) Render(b *Buffer) {
b.WriteString(ml.title, styleForMode.String())
b.WriteSpaces(1, "")
b.WriteString(ml.filter, styleForFilter.String())
b.Dot = b.Cursor()
}
func NewModeLineWithScrollBarRenderer(base Renderer, n, low, high int) Renderer {
return &modeLineWithScrollBarRenderer{base, n, low, high}
}
type modeLineWithScrollBarRenderer struct {
base Renderer
n, low, high int
}
func (ml modeLineWithScrollBarRenderer) Render(b *Buffer) {
ml.base.Render(b)
scrollbarWidth := b.Width - CellsWidth(b.Lines[len(b.Lines)-1]) - 2
if scrollbarWidth >= 3 {
b.WriteSpaces(1, "")
writeHorizontalScrollbar(b, ml.n, ml.low, ml.high, scrollbarWidth)
}
}