- bitmap.go format
- c.go cleanup
This commit is contained in:
Sander Schobers 2017-10-03 20:41:45 +02:00
parent 2924980035
commit 27eae9dc8b
2 changed files with 57 additions and 61 deletions

View File

@ -5,93 +5,93 @@ package allegro5
import "C" import "C"
import ( import (
"fmt" "fmt"
"unsafe" "unsafe"
) )
// Bitmap represents an in memory bitmap // Bitmap represents an in memory bitmap
type Bitmap struct { type Bitmap struct {
bitmap *C.ALLEGRO_BITMAP bitmap *C.ALLEGRO_BITMAP
width int width int
height int height int
} }
type DrawOptions struct { type DrawOptions struct {
Center bool Center bool
Scale *Scale Scale *Scale
Tint *Color Tint *Color
} }
type Scale struct { type Scale struct {
Horizontal float32 Horizontal float32
Vertical float32 Vertical float32
} }
// NewBitmap creates a new bitmap of given width and height // NewBitmap creates a new bitmap of given width and height
func NewBitmap(width, height int) (*Bitmap, error) { func NewBitmap(width, height int) (*Bitmap, error) {
b := C.al_create_bitmap(C.int(width), C.int(height)) b := C.al_create_bitmap(C.int(width), C.int(height))
if nil == b { if nil == b {
return nil, fmt.Errorf("Error creating bitmap") return nil, fmt.Errorf("Error creating bitmap")
} }
return &Bitmap{b, width, height}, nil return &Bitmap{b, width, height}, nil
} }
// LoadBitmap tries to load the image at the specified path as a bitmap // LoadBitmap tries to load the image at the specified path as a bitmap
func LoadBitmap(path string) (*Bitmap, error) { func LoadBitmap(path string) (*Bitmap, error) {
p := C.CString(path) p := C.CString(path)
defer C.free(unsafe.Pointer(p)) defer C.free(unsafe.Pointer(p))
b := C.al_load_bitmap(p) b := C.al_load_bitmap(p)
if nil == b { if nil == b {
return nil, fmt.Errorf("Error loading bitmap") return nil, fmt.Errorf("Error loading bitmap")
} }
width := int(C.al_get_bitmap_width(b)) width := int(C.al_get_bitmap_width(b))
height := int(C.al_get_bitmap_height(b)) height := int(C.al_get_bitmap_height(b))
return &Bitmap{b, width, height}, nil return &Bitmap{b, width, height}, nil
} }
// Draw draws the bitmap at the given location // Draw draws the bitmap at the given location
func (b *Bitmap) Draw(left, top float32) { func (b *Bitmap) Draw(left, top float32) {
C.al_draw_bitmap(b.bitmap, C.float(left), C.float(top), 0) C.al_draw_bitmap(b.bitmap, C.float(left), C.float(top), 0)
} }
func (b *Bitmap) DrawOptions(left, top float32, options DrawOptions) { func (b *Bitmap) DrawOptions(left, top float32, options DrawOptions) {
width := float32(b.width) width := float32(b.width)
height := float32(b.height) height := float32(b.height)
scale := nil != options.Scale scale := nil != options.Scale
if scale { if scale {
width *= options.Scale.Horizontal width *= options.Scale.Horizontal
height *= options.Scale.Vertical height *= options.Scale.Vertical
} }
if options.Center { if options.Center {
left -= width * 0.5 left -= width * 0.5
top -= height * 0.5 top -= height * 0.5
} }
if scale { if scale {
if nil == options.Tint { if nil == options.Tint {
C.al_draw_scaled_bitmap(b.bitmap, 0, 0, C.float(b.width), C.float(b.height), C.float(left), C.float(top), C.float(width), C.float(height), 0) C.al_draw_scaled_bitmap(b.bitmap, 0, 0, C.float(b.width), C.float(b.height), C.float(left), C.float(top), C.float(width), C.float(height), 0)
} else { } else {
C.al_draw_tinted_scaled_bitmap(b.bitmap, options.Tint.color, 0, 0, C.float(b.width), C.float(b.height), C.float(left), C.float(top), C.float(width), C.float(height), 0) C.al_draw_tinted_scaled_bitmap(b.bitmap, options.Tint.color, 0, 0, C.float(b.width), C.float(b.height), C.float(left), C.float(top), C.float(width), C.float(height), 0)
} }
} else { } else {
if nil == options.Tint { if nil == options.Tint {
C.al_draw_bitmap(b.bitmap, C.float(left), C.float(top), 0) C.al_draw_bitmap(b.bitmap, C.float(left), C.float(top), 0)
} else { } else {
C.al_draw_tinted_bitmap(b.bitmap, options.Tint.color, C.float(left), C.float(top), 0) C.al_draw_tinted_bitmap(b.bitmap, options.Tint.color, C.float(left), C.float(top), 0)
} }
} }
} }
func (b *Bitmap) Width() int { func (b *Bitmap) Width() int {
return b.width return b.width
} }
func (b *Bitmap) Height() int { func (b *Bitmap) Height() int {
return b.height return b.height
} }
// Destroy destroys the bitmap // Destroy destroys the bitmap
func (b *Bitmap) Destroy() { func (b *Bitmap) Destroy() {
C.al_destroy_bitmap(b.bitmap) C.al_destroy_bitmap(b.bitmap)
} }

View File

@ -1,9 +1,5 @@
package allegro5 package allegro5
// #cgo linux pkg-config: allegro-5 allegro_font-5 allegro_image-5 allegro_primitives-5 allegro_ttf-5 // #cgo !windows pkg-config: allegro-5 allegro_font-5 allegro_image-5 allegro_primitives-5 allegro_ttf-5
// #cgo windows LDFLAGS: -lallegro // #cgo windows LDFLAGS: -lallegro -lallegro_font -lallegro_image -lallegro_primitives -lallegro_ttf
// #cgo windows LDFLAGS: -lallegro_font
// #cgo windows LDFLAGS: -lallegro_image
// #cgo windows LDFLAGS: -lallegro_primitives
// #cgo windows LDFLAGS: -lallegro_ttf
import "C" import "C"