// Extents returns the FontExtents for a font. // TODO needs to read this https://developer.apple.com/fonts/TrueType-Reference-Manual/RM02/Chap2.html#intro func Extents(font *truetype.Font, size float64) FontExtents { bounds := font.Bounds(fixed.Int26_6(font.FUnitsPerEm())) scale := size / float64(font.FUnitsPerEm()) return FontExtents{ Ascent: float64(bounds.YMax) * scale, Descent: float64(bounds.YMin) * scale, Height: float64(bounds.YMax-bounds.YMin) * scale, } }
// https://code.google.com/p/plotinum/source/browse/vg/font.go#160 func widthOfString(font *truetype.Font, size float64, s string) float64 { // scale converts truetype.FUnit to float64 scale := size / float64(font.FUnitsPerEm()) width := 0 prev, hasPrev := truetype.Index(0), false for _, rune := range s { index := font.Index(rune) if hasPrev { width += int(font.Kern(fixed.Int26_6(font.FUnitsPerEm()), prev, index)) } width += int(font.HMetric(fixed.Int26_6(font.FUnitsPerEm()), index).AdvanceWidth) prev, hasPrev = index, true } return float64(width) * scale }