Fonts now render properly with a baseline and all that

This commit is contained in:
Sasha Koshka 2022-11-11 17:25:17 -05:00
parent 8ef81ecc7f
commit 85b6e5495e
2 changed files with 28 additions and 6 deletions

View File

@ -32,7 +32,7 @@ func (application *Application) Run () (
color.RGBA { R: 0x2E, G: 0x34, B: 0x40, A: 0xFF }, color.RGBA { R: 0x2E, G: 0x34, B: 0x40, A: 0xFF },
color.RGBA { R: 0xA8, G: 0x55, B: 0x5D, A: 0xFF }, color.RGBA { R: 0xA8, G: 0x55, B: 0x5D, A: 0xFF },
} }
application.config.fontName = "DMMono" application.config.fontName = ""
application.config.fontSize = 11 application.config.fontSize = 11
application.config.padding = 2 application.config.padding = 2

View File

@ -209,6 +209,14 @@ func (backend *Backend) reallocateCanvas () {
backend.drawRune(6, 0, 'i') backend.drawRune(6, 0, 'i')
backend.drawRune(7, 0, 'c') backend.drawRune(7, 0, 'c')
backend.drawRune(8, 0, 'k') backend.drawRune(8, 0, 'k')
backend.drawRune(0, 1, 'b')
backend.drawRune(1, 1, 'r')
backend.drawRune(2, 1, 'o')
backend.drawRune(3, 1, 'w')
backend.drawRune(4, 1, 'n')
backend.drawRune(6, 1, 'f')
backend.drawRune(7, 1, 'o')
backend.drawRune(8, 1, 'x')
backend.canvas.XSurfaceSet(backend.window.Id) backend.canvas.XSurfaceSet(backend.window.Id)
backend.canvas.XDraw() backend.canvas.XDraw()
@ -219,18 +227,31 @@ func (backend *Backend) drawRune (x, y int, character rune) {
// TODO: cache these draws as non-transparent buffers with the // TODO: cache these draws as non-transparent buffers with the
// application background color as the background. that way, we won't // application background color as the background. that way, we won't
// need to redraw the characters *or* composite them. // need to redraw the characters *or* composite them.
_, mask, maskPoint, _, _ := backend.font.face.Glyph ( origin := backend.originOfCell(x, y + 1)
fixed.Point26_6 { }, destinationRectangle, mask, maskPoint, _, _ := backend.font.face.Glyph (
fixed.Point26_6 {
X: fixed.I(origin.X),
Y: fixed.I(origin.Y - backend.metrics.descent),
},
character) character)
strokeRectangle (
fillRectangle (
&image.Uniform { &image.Uniform {
C: backend.config.Color(stone.ColorForeground), C: backend.config.Color(stone.ColorApplication),
}, },
backend.canvas, backend.canvas,
backend.boundsOfCell(x, y)) backend.boundsOfCell(x, y))
// strokeRectangle (
// &image.Uniform {
// C: backend.config.Color(stone.ColorForeground),
// },
// backend.canvas,
// backend.boundsOfCell(x, y))
draw.DrawMask ( draw.DrawMask (
backend.canvas, backend.canvas,
backend.boundsOfCell(x, y), destinationRectangle,
&image.Uniform { &image.Uniform {
C: backend.config.Color(stone.ColorForeground), C: backend.config.Color(stone.ColorForeground),
}, },
@ -342,6 +363,7 @@ func factory (application *stone.Application) (output stone.Backend, err error)
} }
func findAndLoadFont (name string, size float64) (face font.Face) { func findAndLoadFont (name string, size float64) (face font.Face) {
if name == "" { return }
fontPath, err := findfont.Find(name) fontPath, err := findfont.Find(name)
if err != nil { return } if err != nil { return }
fontFile, err := os.Open(fontPath) fontFile, err := os.Open(fontPath)