change Text properties to fields
This commit is contained in:
parent
1d928485d6
commit
f7aac5ed09
66
text/text.go
66
text/text.go
|
@ -73,10 +73,23 @@ type Text struct {
|
||||||
// when writing to a Text object, but you can also manipulate it manually
|
// when writing to a Text object, but you can also manipulate it manually
|
||||||
Dot pixel.Vec
|
Dot pixel.Vec
|
||||||
|
|
||||||
atlas *Atlas
|
// Color is the color of the text that is to be written. Defaults to white.
|
||||||
|
Color color.Color
|
||||||
|
|
||||||
lineHeight float64
|
// LineHeight is the vertical distance between two lines of text.
|
||||||
tabWidth float64
|
//
|
||||||
|
// Example:
|
||||||
|
// txt.LineHeight = 1.5 * txt.Atlas().LineHeight()
|
||||||
|
LineHeight float64
|
||||||
|
|
||||||
|
// TabWidth is the horizontal tab width. Tab characters will align to the multiples of this
|
||||||
|
// width.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// txt.TabWidth = 8 * txt.Atlas().Glyph(' ').Advance
|
||||||
|
TabWidth float64
|
||||||
|
|
||||||
|
atlas *Atlas
|
||||||
|
|
||||||
buf []byte
|
buf []byte
|
||||||
prevR rune
|
prevR rune
|
||||||
|
@ -107,9 +120,10 @@ func New(orig pixel.Vec, atlas *Atlas) *Text {
|
||||||
txt := &Text{
|
txt := &Text{
|
||||||
Orig: orig,
|
Orig: orig,
|
||||||
Dot: orig,
|
Dot: orig,
|
||||||
|
Color: pixel.Alpha(1),
|
||||||
|
LineHeight: atlas.LineHeight(),
|
||||||
|
TabWidth: atlas.Glyph(' ').Advance * 4,
|
||||||
atlas: atlas,
|
atlas: atlas,
|
||||||
lineHeight: atlas.LineHeight(),
|
|
||||||
tabWidth: atlas.Glyph(' ').Advance * 4,
|
|
||||||
mat: pixel.IM,
|
mat: pixel.IM,
|
||||||
col: pixel.Alpha(1),
|
col: pixel.Alpha(1),
|
||||||
}
|
}
|
||||||
|
@ -196,31 +210,6 @@ func (txt *Text) BoundsOf(s string) pixel.Rect {
|
||||||
return bounds
|
return bounds
|
||||||
}
|
}
|
||||||
|
|
||||||
// Color sets the text color. This does not affect any previously written text.
|
|
||||||
func (txt *Text) Color(c color.Color) {
|
|
||||||
rgba := pixel.ToRGBA(c)
|
|
||||||
for i := range txt.glyph {
|
|
||||||
txt.glyph[i].Color = rgba
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// LineHeight sets the vertical distance between two lines of text. This does not affect any
|
|
||||||
// previously written text.
|
|
||||||
//
|
|
||||||
// Example:
|
|
||||||
// txt.LineHeight(1.5 * txt.Atlas().LineHeight())
|
|
||||||
func (txt *Text) LineHeight(height float64) {
|
|
||||||
txt.lineHeight = height
|
|
||||||
}
|
|
||||||
|
|
||||||
// TabWidth sets the horizontal tab width. Tab characters will align to the multiples of this width.
|
|
||||||
//
|
|
||||||
// Example:
|
|
||||||
// txt.TabWidth(8 * txt.Atlas().Glyph(' ').Advance)
|
|
||||||
func (txt *Text) TabWidth(width float64) {
|
|
||||||
txt.tabWidth = width
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear removes all written text from the Text.
|
// Clear removes all written text from the Text.
|
||||||
func (txt *Text) Clear() {
|
func (txt *Text) Clear() {
|
||||||
txt.prevR = -1
|
txt.prevR = -1
|
||||||
|
@ -285,15 +274,15 @@ func (txt *Text) Draw(t pixel.Target) {
|
||||||
func (txt *Text) controlRune(r rune, dot pixel.Vec) (newDot pixel.Vec, control bool) {
|
func (txt *Text) controlRune(r rune, dot pixel.Vec) (newDot pixel.Vec, control bool) {
|
||||||
switch r {
|
switch r {
|
||||||
case '\n':
|
case '\n':
|
||||||
dot -= pixel.Y(txt.lineHeight)
|
dot -= pixel.Y(txt.LineHeight)
|
||||||
dot = dot.WithX(txt.Orig.X())
|
dot = dot.WithX(txt.Orig.X())
|
||||||
case '\r':
|
case '\r':
|
||||||
dot = dot.WithX(txt.Orig.X())
|
dot = dot.WithX(txt.Orig.X())
|
||||||
case '\t':
|
case '\t':
|
||||||
rem := math.Mod(dot.X()-txt.Orig.X(), txt.tabWidth)
|
rem := math.Mod(dot.X()-txt.Orig.X(), txt.TabWidth)
|
||||||
rem = math.Mod(rem, rem+txt.tabWidth)
|
rem = math.Mod(rem, rem+txt.TabWidth)
|
||||||
if rem == 0 {
|
if rem == 0 {
|
||||||
rem = txt.tabWidth
|
rem = txt.TabWidth
|
||||||
}
|
}
|
||||||
dot += pixel.X(rem)
|
dot += pixel.X(rem)
|
||||||
default:
|
default:
|
||||||
|
@ -303,6 +292,15 @@ func (txt *Text) controlRune(r rune, dot pixel.Vec) (newDot pixel.Vec, control b
|
||||||
}
|
}
|
||||||
|
|
||||||
func (txt *Text) drawBuf() {
|
func (txt *Text) drawBuf() {
|
||||||
|
if !utf8.FullRune(txt.buf) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
rgba := pixel.ToRGBA(txt.Color)
|
||||||
|
for i := range txt.glyph {
|
||||||
|
txt.glyph[i].Color = rgba
|
||||||
|
}
|
||||||
|
|
||||||
for utf8.FullRune(txt.buf) {
|
for utf8.FullRune(txt.buf) {
|
||||||
r, size := utf8.DecodeRune(txt.buf)
|
r, size := utf8.DecodeRune(txt.buf)
|
||||||
txt.buf = txt.buf[size:]
|
txt.buf = txt.buf[size:]
|
||||||
|
|
Loading…
Reference in New Issue