package allegro5 // #include import "C" import ( "errors" "unsafe" ) // Display represents a display type Display struct { display *C.ALLEGRO_DISPLAY } type NewDisplayOptions struct { Fullscreen bool Resizable bool Windowed bool Maximized bool Frameless bool } // NewDisplay creates a display func NewDisplay(width, height int, options NewDisplayOptions) (*Display, error) { var flags C.int = C.ALLEGRO_WINDOWED if options.Fullscreen { if options.Windowed { flags |= C.ALLEGRO_FULLSCREEN_WINDOW } else { flags = C.ALLEGRO_FULLSCREEN } } else if options.Frameless { flags |= C.ALLEGRO_FRAMELESS } if options.Resizable { flags |= C.ALLEGRO_RESIZABLE if options.Maximized { flags |= C.ALLEGRO_MAXIMIZED } } C.al_set_new_display_flags(flags) d := C.al_create_display(C.int(width), C.int(height)) if nil == d { return nil, errors.New("error creating display") } return &Display{d}, nil } // Flips flips the buffer to the display func (d *Display) Flip() { C.al_flip_display() } func (d *Display) Width() int { return int(C.al_get_display_width(d.display)) } func (d *Display) Height() int { return int(C.al_get_display_height(d.display)) } func (d *Display) Position() (int, int) { var x, y C.int C.al_get_window_position(d.display, &x, &y) return int(x), int(y) } func (d *Display) Resize(w, h int) { C.al_resize_display(d.display, C.int(w), C.int(h)) } func (d *Display) SetAsTarget() { C.al_set_target_backbuffer(d.display) } func (d *Display) SetMousePosition(x, y int) { C.al_set_mouse_xy(d.display, C.int(x), C.int(y)) } func (d *Display) SetPosition(x, y int) { C.al_set_window_position(d.display, C.int(x), C.int(y)) } func (d *Display) SetWindowTitle(title string) { t := C.CString(title) defer C.free(unsafe.Pointer(t)) C.al_set_window_title(d.display, t) } // Destroy destroys the display func (d *Display) Destroy() { C.al_destroy_display(d.display) } func SetNewWindowTitle(title string) { t := C.CString(title) defer C.free(unsafe.Pointer(t)) C.al_set_new_window_title(t) }