package allegro5 // #include // #include // #include import "C" import ( "fmt" "unsafe" ) type Font struct { font *C.ALLEGRO_FONT } type HorizontalAlignment int const ( AlignLeft HorizontalAlignment = iota AlignCenter AlignRight ) func LoadTTFFont(path string, size int) (*Font, error) { p := C.CString(path) defer C.free(unsafe.Pointer(p)) f := C.al_load_ttf_font(p, C.int(size), 0) if nil == f { return nil, fmt.Errorf("unable to load ttf font '%s'", path) } return &Font{f}, nil } func (f *Font) drawFlags(a HorizontalAlignment) C.int { switch a { case AlignLeft: return C.ALLEGRO_ALIGN_LEFT case AlignCenter: return C.ALLEGRO_ALIGN_CENTRE case AlignRight: return C.ALLEGRO_ALIGN_RIGHT } return C.ALLEGRO_ALIGN_LEFT } func (f *Font) Draw(left, top float32, color Color, align HorizontalAlignment, text string) { t := C.CString(text) defer C.free(unsafe.Pointer(t)) flags := f.drawFlags(align) C.al_draw_text(f.font, color.color, C.float(left), C.float(top), flags, t) } func (f *Font) TextWidth(text string) float32 { t := C.CString(text) defer C.free(unsafe.Pointer(t)) return float32(C.al_get_text_width(f.font, t)) } func (f *Font) Destroy() { C.al_destroy_font(f.font) }