2020-02-14 22:29:58 +01:00
|
|
|
package render
|
|
|
|
|
|
|
|
import (
|
|
|
|
"image"
|
|
|
|
"image/color"
|
|
|
|
|
|
|
|
"golang.org/x/image/draw"
|
|
|
|
"golang.org/x/image/font"
|
|
|
|
"golang.org/x/image/font/basicfont"
|
|
|
|
"golang.org/x/image/math/fixed"
|
|
|
|
)
|
|
|
|
|
|
|
|
func pt(p fixed.Point26_6) image.Point {
|
|
|
|
return image.Point{
|
|
|
|
X: int(p.X+32) >> 6,
|
|
|
|
Y: int(p.Y+32) >> 6,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-15 13:58:01 +01:00
|
|
|
func RenderText(text string, scale int, col, bgCol color.Color) *image.NRGBA {
|
2020-02-14 22:29:58 +01:00
|
|
|
// @incomplete: draw with texture via Drawer.Src
|
|
|
|
face := basicfont.Face7x13
|
|
|
|
stringBounds, _ := font.BoundString(face, text)
|
|
|
|
|
|
|
|
b := image.Rectangle{pt(stringBounds.Min), pt(stringBounds.Max)}
|
|
|
|
img := image.NewNRGBA(b)
|
|
|
|
|
2020-02-15 13:58:01 +01:00
|
|
|
// fill with black bg
|
|
|
|
if (bgCol != color.NRGBA{}) {
|
|
|
|
draw.Draw(img, b, image.NewUniform(bgCol), image.Point{}, draw.Src)
|
|
|
|
}
|
2020-02-14 22:29:58 +01:00
|
|
|
|
|
|
|
d := font.Drawer{
|
|
|
|
Dst: img,
|
|
|
|
Src: image.NewUniform(col),
|
|
|
|
Face: face,
|
|
|
|
}
|
|
|
|
d.DrawString(text)
|
|
|
|
|
|
|
|
// normalize bounds to start at 0,0
|
|
|
|
img.Rect = img.Bounds().Sub(img.Bounds().Min)
|
|
|
|
|
|
|
|
// scale up, as this font is quite small
|
|
|
|
return ScaleImage(img, scale)
|
|
|
|
}
|