gregoryv/draw

View on GitHub
font.go

Summary

Maintainability
A
0 mins
Test Coverage
package draw

type Font struct {
    Height int

    // It is allowed to have a smaller line height than height.
    LineHeight int

    charWidths map[rune]float32
}

func (f *Font) SetScale(v float64) {
    f.Height = int(float64(f.Height) * v)
    f.LineHeight = int(float64(f.LineHeight) * v)
}

// TextWidth returns the width of the given text based on a 12px arial
// font.
func (f Font) TextWidth(txt string) int {
    var width float32
    for _, r := range txt {
        w, found := f.charWidths[r]
        if !found {
            w = 8.0
        }
        width += float32(w) * float32(f.Height) / float32(12)
    }
    return int(width)
}

// font-size: 12px, most ascii characters
var arial = map[rune]float32{
    '!':  3,
    '"':  4,
    '#':  7,
    '$':  7,
    '%':  11,
    '&':  8,
    '\'': 2,
    '(':  4,
    ')':  4,
    '*':  5,
    '+':  7,
    ',':  3,
    '-':  4,
    '.':  3,
    '/':  3,
    '0':  7,
    '1':  7,
    '2':  7,
    '3':  7,
    '4':  7,
    '5':  7,
    '6':  7,
    '7':  7,
    '8':  7,
    '9':  7,
    ':':  3,
    ';':  3,
    '<':  7,
    '=':  7,
    '>':  7,
    '?':  7,
    '@':  12,
    'A':  8,
    'B':  8,
    'C':  9,
    'D':  9,
    'E':  8,
    'F':  7,
    'G':  9,
    'H':  9,
    'I':  3,
    'J':  6,
    'K':  8,
    'L':  7,
    'M':  10,
    'N':  9,
    'O':  9,
    'P':  8,
    'Q':  9,
    'R':  9,
    'S':  8,
    'T':  7,
    'U':  9,
    'V':  8,
    'W':  11,
    'X':  8,
    'Y':  8,
    'Z':  7,
    '[':  3,
    '\\': 3,
    ']':  3,
    '^':  5,
    '_':  7,
    '`':  4,
    'a':  7,
    'b':  7,
    'c':  6,
    'd':  7,
    'e':  7,
    'f':  3,
    'g':  7,
    'h':  7,
    'i':  3,
    'j':  3,
    'k':  6,
    'l':  3,
    'm':  10,
    'n':  7,
    'o':  7,
    'p':  7,
    'q':  7,
    'r':  4,
    's':  6,
    't':  3,
    'u':  7,
    'v':  6,
    'w':  9,
    'x':  6,
    'y':  6,
    'z':  6,
    '{':  4,
    '|':  3,
    '}':  4,
    '~':  7,
    ' ':  3,
    '¡':  4,
    '¢':  7,
    '£':  7,
    '¤':  7,
    '¥':  7,
    '¦':  3,
    '§':  7,
    '¨':  4,
    '©':  9,
    'ª':  5,
    '«':  7,
    '¬':  7,
    '­':  0,
    '®':  9,
    '¯':  7,
    '°':  5,
    '±':  7,
    '²':  4,
    '³':  4,
    '´':  4,
    'µ':  7,
    '¶':  7,
    '·':  4,
    '¸':  4,
    '¹':  4,
    'º':  4,
    '»':  7,
    '¼':  10,
    '½':  10,
    '¾':  10,
    '¿':  7,
    'À':  8,
    'Á':  8,
    'Â':  8,
    'Ã':  8,
    'Ä':  8,
    'Å':  8,
    'Æ':  12,
    'Ç':  9,
    'È':  8,
    'É':  8,
    'Ê':  8,
    'Ë':  8,
    'Ì':  3,
    'Í':  3,
    'Î':  3,
    'Ï':  3,
    'Ð':  9,
    'Ñ':  9,
    'Ò':  9,
    'Ó':  9,
    'Ô':  9,
    'Õ':  9,
    'Ö':  9,
    '×':  7,
    'Ø':  9,
    'Ù':  9,
    'Ú':  9,
    'Û':  9,
    'Ü':  9,
    'Ý':  8,
    'Þ':  8,
    'ß':  7,
    'à':  7,
    'á':  7,
    'â':  7,
    'ã':  7,
    'ä':  7,
    'å':  7,
    'æ':  11,
    'ç':  6,
    'è':  7,
    'é':  7,
    'ê':  7,
    'ë':  7,
    'ì':  3,
    'í':  3,
    'î':  3,
    'ï':  3,
    'ð':  7,
    'ñ':  7,
    'ò':  7,
    'ó':  7,
    'ô':  7,
    'õ':  7,
    'ö':  7,
    '÷':  7,
    'ø':  7,
    'ù':  7,
    'ú':  7,
    'û':  7,
    'ü':  7,
    'ý':  6,
    'þ':  7,
}