Characters are now rendered with their proper descent

This commit is contained in:
Sasha Koshka 2022-11-06 16:35:16 -05:00
parent 3a879d9a5f
commit 509c6f0bc6

View File

@ -20,6 +20,7 @@ type Backend struct {
fontAtlas *text.Atlas fontAtlas *text.Atlas
textDrawer *text.Text textDrawer *text.Text
showBounds bool showBounds bool
showCellBounds bool
metrics struct { metrics struct {
cellWidth int cellWidth int
@ -27,16 +28,24 @@ type Backend struct {
padding int padding int
paddingX int paddingX int
paddingY int paddingY int
descent int
} }
} }
func (backend *Backend) Run (callback func (application *stone.Application)) { func (backend *Backend) Run (callback func (application *stone.Application)) {
// backend.showBounds = true
backend.showCellBounds = true
if backend.fontFace == nil { if backend.fontFace == nil {
backend.fontFace = basicfont.Face7x13 backend.fontFace = basicfont.Face7x13
} }
faceMetrics := backend.fontFace.Metrics() backend.backgroundStamper = imdraw.New(nil)
backend.metrics.cellHeight = faceMetrics.Height.Round() backend.fontAtlas = text.NewAtlas(backend.fontFace, text.ASCII)
backend.textDrawer = text.New(pixel.V(0, 0), backend.fontAtlas)
backend.metrics.descent = int(backend.fontAtlas.Descent())
backend.metrics.cellHeight = int(backend.fontAtlas.LineHeight())
// FIXME?: this might not be the best way to get the cell width // FIXME?: this might not be the best way to get the cell width
faceAdvance, ok := backend.fontFace.GlyphAdvance('M') faceAdvance, ok := backend.fontFace.GlyphAdvance('M')
if ok { if ok {
@ -56,9 +65,6 @@ func (backend *Backend) Run (callback func (application *stone.Application)) {
Title: backend.application.Title(), Title: backend.application.Title(),
Bounds: backend.calculateWindowSize(), Bounds: backend.calculateWindowSize(),
}) })
backend.backgroundStamper = imdraw.New(nil)
backend.fontAtlas = text.NewAtlas(backend.fontFace, text.ASCII)
backend.textDrawer = text.New(pixel.V(0, 0), backend.fontAtlas)
backend.Poll() backend.Poll()
if err != nil { panic(err.Error()) } if err != nil { panic(err.Error()) }
@ -166,6 +172,17 @@ func (backend *Backend) draw () {
backend.vectorAtPosition(x + 1, y + 1)) backend.vectorAtPosition(x + 1, y + 1))
backend.backgroundStamper.Rectangle(0) backend.backgroundStamper.Rectangle(0)
// didDrawing = true // didDrawing = true
if backend.showCellBounds {
backend.backgroundStamper.Color =
backend.config.Color(stone.ColorForeground)
backend.backgroundStamper.Push (
backend.vectorAtPosition(x, y),
backend.vectorAtPosition(x + 1, y + 1))
backend.backgroundStamper.Rectangle(1)
backend.backgroundStamper.Color =
backend.config.Color(stone.ColorApplication)
}
} }
} }
backend.backgroundStamper.Draw(backend.window) backend.backgroundStamper.Draw(backend.window)
@ -185,7 +202,15 @@ func (backend *Backend) draw () {
if content < 32 { continue } if content < 32 { continue }
// draw cell // draw cell
backend.textDrawer.Dot = backend.vectorAtPosition(x, y + 1) backend.textDrawer.Dot = pixel.V (
float64 (
x * backend.metrics.cellWidth +
backend.metrics.paddingX),
backend.windowBounds.Y - float64 (
(y + 1) * backend.metrics.cellHeight +
backend.metrics.paddingY -
backend.metrics.descent))
backend.textDrawer.WriteRune(content) backend.textDrawer.WriteRune(content)
backend.textDrawer.Draw(backend.window, pixel.IM) backend.textDrawer.Draw(backend.window, pixel.IM)
} }