60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
// Components of the UI and various event interfaces.
|
|
|
|
package ui
|
|
|
|
|
|
// The set of event types supported by the UI package.
|
|
|
|
|
|
|
|
|
|
// An interface of a UI component.
|
|
type UiComponent interface {
|
|
|
|
// Request from the manager for the component to draw itself. This is given a drawable context.
|
|
Redraw(context *DrawContext)
|
|
|
|
// Called to remeasure the size of the component. Provided with the maximum dimensions of the component
|
|
// and expected to provide the minimum component size. When called to redraw, the component will be
|
|
// provided with AT LEAST the minimum dimensions returned by this method.
|
|
Remeasure(w, h int) (int, int)
|
|
}
|
|
|
|
|
|
// ==========================================================================
|
|
// UI context.
|
|
|
|
|
|
|
|
|
|
// ==========================================================================
|
|
// Status bar component
|
|
|
|
/*
|
|
type UiStatusBar struct {
|
|
left string // Left aligned string
|
|
right string // Right aligned string
|
|
}
|
|
|
|
// Minimum dimensions
|
|
func (sbar *UiStatusBar) RequestDims() (int, int) {
|
|
return -1, 2
|
|
}
|
|
|
|
// Status bar redraw
|
|
func (sbar *UiStatusBar) Redraw(x int, y int, w int, h int) {
|
|
leftLen := len(sbar.left)
|
|
rightLen := len(sbar.right)
|
|
rightPos := w - rightLen
|
|
|
|
for x1 := 0; x1 < w; x1++ {
|
|
var runeToPrint rune = ' '
|
|
if x1 < leftLen {
|
|
runeToPrint = rune(sbar.left[x1])
|
|
} else if x1 >= rightPos {
|
|
runeToPrint = rune(sbar.right[x1 - rightPos])
|
|
}
|
|
termbox.SetCell(x1, y, runeToPrint, termbox.AttrReverse, termbox.AttrReverse)
|
|
}
|
|
}
|
|
*/ |