Split UI library and widgets
This commit is contained in:
parent
661e3ec2a4
commit
1418e1b9dc
11 changed files with 34 additions and 25 deletions
|
@ -11,12 +11,13 @@ import (
|
|||
tb "github.com/nsf/termbox-go"
|
||||
|
||||
"git.sr.ht/~sircmpwn/aerc2/config"
|
||||
"git.sr.ht/~sircmpwn/aerc2/ui"
|
||||
libui "git.sr.ht/~sircmpwn/aerc2/lib/ui"
|
||||
"git.sr.ht/~sircmpwn/aerc2/widgets"
|
||||
)
|
||||
|
||||
type fill rune
|
||||
|
||||
func (f fill) Draw(ctx *ui.Context) {
|
||||
func (f fill) Draw(ctx *libui.Context) {
|
||||
for x := 0; x < ctx.Width(); x += 1 {
|
||||
for y := 0; y < ctx.Height(); y += 1 {
|
||||
ctx.SetCell(x, y, rune(f), tb.ColorDefault, tb.ColorDefault)
|
||||
|
@ -24,7 +25,7 @@ func (f fill) Draw(ctx *ui.Context) {
|
|||
}
|
||||
}
|
||||
|
||||
func (f fill) OnInvalidate(callback func(d ui.Drawable)) {
|
||||
func (f fill) OnInvalidate(callback func(d libui.Drawable)) {
|
||||
// no-op
|
||||
}
|
||||
|
||||
|
@ -48,38 +49,39 @@ func main() {
|
|||
panic(err)
|
||||
}
|
||||
|
||||
tabs := ui.NewTabs()
|
||||
tabs := libui.NewTabs()
|
||||
tabs.Add(fill('★'), "白い星")
|
||||
tabs.Add(fill('☆'), "empty stars")
|
||||
|
||||
grid := ui.NewGrid().Rows([]ui.GridSpec{
|
||||
ui.GridSpec{ui.SIZE_EXACT, 1},
|
||||
ui.GridSpec{ui.SIZE_WEIGHT, 1},
|
||||
ui.GridSpec{ui.SIZE_EXACT, 1},
|
||||
}).Columns([]ui.GridSpec{
|
||||
ui.GridSpec{ui.SIZE_EXACT, 20},
|
||||
ui.GridSpec{ui.SIZE_WEIGHT, 1},
|
||||
grid := libui.NewGrid().Rows([]libui.GridSpec{
|
||||
libui.GridSpec{libui.SIZE_EXACT, 1},
|
||||
libui.GridSpec{libui.SIZE_WEIGHT, 1},
|
||||
libui.GridSpec{libui.SIZE_EXACT, 1},
|
||||
}).Columns([]libui.GridSpec{
|
||||
libui.GridSpec{libui.SIZE_EXACT, 20},
|
||||
libui.GridSpec{libui.SIZE_WEIGHT, 1},
|
||||
})
|
||||
|
||||
// TODO: move sidebar into tab content, probably
|
||||
grid.AddChild(ui.NewText("aerc").
|
||||
Strategy(ui.TEXT_CENTER).
|
||||
grid.AddChild(libui.NewText("aerc").
|
||||
Strategy(libui.TEXT_CENTER).
|
||||
Color(tb.ColorBlack, tb.ColorWhite))
|
||||
// sidebar placeholder:
|
||||
grid.AddChild(ui.NewBordered(
|
||||
fill('.'), ui.BORDER_RIGHT)).At(1, 0).Span(2, 1)
|
||||
grid.AddChild(libui.NewBordered(
|
||||
fill('.'), libui.BORDER_RIGHT)).At(1, 0).Span(2, 1)
|
||||
grid.AddChild(tabs.TabStrip).At(0, 1)
|
||||
grid.AddChild(tabs.TabContent).At(1, 1)
|
||||
exline := ui.NewExLine()
|
||||
exline := widgets.NewExLine()
|
||||
grid.AddChild(exline).At(2, 1)
|
||||
|
||||
_ui, err := ui.Initialize(conf, grid)
|
||||
ui, err := libui.Initialize(conf, grid)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer _ui.Close()
|
||||
defer ui.Close()
|
||||
|
||||
_ui.AddInteractive(exline)
|
||||
// TODO: this should be a stack
|
||||
ui.AddInteractive(exline)
|
||||
|
||||
go (func() {
|
||||
for {
|
||||
|
@ -88,8 +90,8 @@ func main() {
|
|||
}
|
||||
})()
|
||||
|
||||
for !_ui.Exit {
|
||||
if !_ui.Tick() {
|
||||
for !ui.Exit {
|
||||
if !ui.Tick() {
|
||||
// ~60 FPS
|
||||
time.Sleep(16 * time.Millisecond)
|
||||
}
|
||||
|
|
|
@ -8,3 +8,8 @@ type Interactive interface {
|
|||
// Returns true if the event was handled by this component
|
||||
Event(event tb.Event) bool
|
||||
}
|
||||
|
||||
type Simulator interface {
|
||||
// Queues up the given input events for simulation
|
||||
Simulate(events []tb.Event)
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
package ui
|
||||
package widgets
|
||||
|
||||
import (
|
||||
tb "github.com/nsf/termbox-go"
|
||||
|
||||
"git.sr.ht/~sircmpwn/aerc2/lib/ui"
|
||||
)
|
||||
|
||||
// TODO: history
|
||||
|
@ -16,7 +18,7 @@ type ExLine struct {
|
|||
index int
|
||||
scroll int
|
||||
|
||||
onInvalidate func(d Drawable)
|
||||
onInvalidate func(d ui.Drawable)
|
||||
}
|
||||
|
||||
func NewExLine() *ExLine {
|
||||
|
@ -24,7 +26,7 @@ func NewExLine() *ExLine {
|
|||
return &ExLine{command: &cmd}
|
||||
}
|
||||
|
||||
func (ex *ExLine) OnInvalidate(onInvalidate func(d Drawable)) {
|
||||
func (ex *ExLine) OnInvalidate(onInvalidate func(d ui.Drawable)) {
|
||||
ex.onInvalidate = onInvalidate
|
||||
}
|
||||
|
||||
|
@ -34,7 +36,7 @@ func (ex *ExLine) Invalidate() {
|
|||
}
|
||||
}
|
||||
|
||||
func (ex *ExLine) Draw(ctx *Context) {
|
||||
func (ex *ExLine) Draw(ctx *ui.Context) {
|
||||
cell := tb.Cell{
|
||||
Fg: tb.ColorDefault,
|
||||
Bg: tb.ColorDefault,
|
Loading…
Reference in a new issue