v0.1.0 initial commit
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
package tui
|
||||
|
||||
import "github.com/lixenwraith/terminal"
|
||||
|
||||
// Default spinner frames for Region.Spinner
|
||||
var spinnerFrames = spinnerSets[SpinnerBraille]
|
||||
|
||||
// Text renders text at position, truncates at region edge
|
||||
func (r Region) Text(x, y int, s string, fg, bg terminal.RGB, attr terminal.Attr) {
|
||||
if y < 0 || y >= r.H {
|
||||
return
|
||||
}
|
||||
col := 0
|
||||
for _, ch := range s {
|
||||
if x+col >= r.W {
|
||||
break
|
||||
}
|
||||
if x+col >= 0 {
|
||||
r.Cell(x+col, y, ch, fg, bg, attr)
|
||||
}
|
||||
col++
|
||||
}
|
||||
}
|
||||
|
||||
// TextStyled renders text using Style struct
|
||||
func (r Region) TextStyled(x, y int, s string, style Style) {
|
||||
if y < 0 || y >= r.H {
|
||||
return
|
||||
}
|
||||
col := 0
|
||||
for _, ch := range s {
|
||||
if x+col >= r.W {
|
||||
break
|
||||
}
|
||||
if x+col >= 0 {
|
||||
r.Cell(x+col, y, ch, style.Fg, style.Bg, style.Attr)
|
||||
}
|
||||
col++
|
||||
}
|
||||
}
|
||||
|
||||
// TextRight renders text right-aligned on row
|
||||
func (r Region) TextRight(y int, s string, fg, bg terminal.RGB, attr terminal.Attr) {
|
||||
x := r.W - RuneLen(s)
|
||||
r.Text(x, y, s, fg, bg, attr)
|
||||
}
|
||||
|
||||
// TextCenter renders text centered on row
|
||||
func (r Region) TextCenter(y int, s string, fg, bg terminal.RGB, attr terminal.Attr) {
|
||||
x := (r.W - RuneLen(s)) / 2
|
||||
r.Text(x, y, s, fg, bg, attr)
|
||||
}
|
||||
|
||||
// TextBlock renders wrapped text within region bounds, returns number of lines rendered
|
||||
func (r Region) TextBlock(x, y int, text string, fg, bg terminal.RGB, attr terminal.Attr) int {
|
||||
if x >= r.W || y >= r.H || text == "" {
|
||||
return 0
|
||||
}
|
||||
|
||||
availW := r.W - x
|
||||
if availW < 1 {
|
||||
return 0
|
||||
}
|
||||
|
||||
lines := WrapText(text, availW)
|
||||
rendered := 0
|
||||
|
||||
for i, line := range lines {
|
||||
lineY := y + i
|
||||
if lineY >= r.H {
|
||||
break
|
||||
}
|
||||
r.Text(x, lineY, line, fg, bg, attr)
|
||||
rendered++
|
||||
}
|
||||
|
||||
return rendered
|
||||
}
|
||||
|
||||
// TextBlockStyled renders wrapped text using Style struct, returns number of lines rendered
|
||||
func (r Region) TextBlockStyled(x, y int, text string, style Style) int {
|
||||
return r.TextBlock(x, y, text, style.Fg, style.Bg, style.Attr)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user