xous-core/libs/blitstr2/codegen/lib/fontspec.go

40 lines
1.7 KiB
Go

// Copyright (c) 2022 Sam Blenny
// SPDX-License-Identifier: Apache-2.0 OR MIT
//
package lib
// Holds description of sprite sheet and character map for generating a font
type FontSpec struct {
Name string // Name of font
Sprites string // Which file holds the sprite sheet image with the grid of glyphs?
Size int // How many pixels on a side is each glyph (precondition: square glyphs)
Cols int // How many glyphs wide is the grid?
Gutter int // How many px between glyphs?
Border int // How many px wide are top and left borders?
Legal string // Credits or license notices to included in .rs font file comments
CSList []CharSpec // Map of grapheme clusters to glyph grid coordinates
RustOut string // Where should the generated rust source code go?
GlyphTrim string // How should bitmap glyphs be trimmed (proportional or CJK)?
LoaderOut string // Path to the split of the glyph data into the loader, to reduce the RAM load
Small bool // Is this font part of the "small" configuration set
}
// Look up trim limits based on row & column in glyph grid
func (f FontSpec) TrimLimits(row int, col int) [4]int {
if f.Name == "Bold" || f.Name == "Regular" || f.Name == "Small" || f.Name == "Tall" {
// Space gets 4px width and 2px height
if col == 2 && row == 0 {
lr := (f.Size / 2) - 2
tb := (f.Size / 2) - 1
return [4]int{tb, lr, tb, lr}
}
} else if f.GlyphTrim == "CJK" {
// No trim for CJK
return [4]int{0, 0, 0, 0}
} else if f.GlyphTrim == "monospace" {
// Monospace gets 4 left, 4 right, none top & bottom
return [4]int{0, 4, 0, 4}
}
// Everything else gets max trim
return [4]int{f.Size, f.Size, f.Size, f.Size}
}