2020-10-01 13:56:05 +02:00
|
|
|
package buf2d
|
|
|
|
|
2021-01-15 21:40:09 +01:00
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"strings"
|
|
|
|
)
|
2020-10-01 15:08:17 +02:00
|
|
|
|
2020-10-01 13:56:05 +02:00
|
|
|
// WriteString writes a whole string to the buffer at position (x,y)
|
|
|
|
// no word wrap is applied at all. If the string does not fit, it will be truncated
|
|
|
|
func (b *Buffer) WriteString(str string, x, y int) {
|
2020-10-01 14:46:28 +02:00
|
|
|
dx := x
|
|
|
|
for _, r := range str {
|
|
|
|
if dx >= b.width {
|
2020-10-01 13:56:05 +02:00
|
|
|
return
|
|
|
|
}
|
2021-01-15 21:40:09 +01:00
|
|
|
b.Set(dx, y, newStringerFromRune(r))
|
2020-10-01 14:46:28 +02:00
|
|
|
dx++
|
2020-10-01 13:56:05 +02:00
|
|
|
}
|
|
|
|
}
|
2020-10-01 14:14:43 +02:00
|
|
|
|
2020-10-01 15:08:17 +02:00
|
|
|
// WriteMultiLineString writes a multi-line string to the buffer at position (x,y)
|
|
|
|
// no word wrap is applied at all. If a line does not fit horizontally, it will be truncated
|
|
|
|
// All lines which do not fit vertically will be truncated as well
|
|
|
|
func (b *Buffer) WriteMultiLineString(str string, x, y int) {
|
|
|
|
lines := strings.Split(str, "\n")
|
|
|
|
for dy, line := range lines {
|
|
|
|
if dy >= b.height {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
b.WriteString(line, x, y+dy)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-10-01 14:14:43 +02:00
|
|
|
// Fill fills the whole buffer with c
|
2021-01-15 21:40:09 +01:00
|
|
|
func (b *Buffer) Fill(c fmt.Stringer) {
|
2020-10-01 14:14:43 +02:00
|
|
|
for _, col := range b.data {
|
|
|
|
for ri := range col {
|
|
|
|
col[ri] = c
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|