initial commit

This commit is contained in:
NeilClack
2026-08-07 14:51:41 -05:00
commit 9251b3a196
604 changed files with 464448 additions and 0 deletions
+256
View File
@@ -0,0 +1,256 @@
package sdl
/*
#include "sdl_wrapper.h"
#if defined(__WIN32)
#include <SDL2/SDL_syswm.h>
#else
#include <SDL_syswm.h>
#endif
#if !(SDL_VERSION_ATLEAST(2,0,4))
#if defined(WARN_OUTDATED)
#pragma message("SDL_CaptureMouse is not supported before SDL 2.0.4")
#endif
static int SDL_CaptureMouse(SDL_bool enabled)
{
return -1;
}
#if defined(WARN_OUTDATED)
#pragma message("SDL_MOUSEWHEEL_NORMAL is not supported before SDL 2.0.4")
#endif
#define SDL_MOUSEWHEEL_NORMAL (0)
#if defined(WARN_OUTDATED)
#pragma message("SDL_MOUSEWHEEL_FLIPPED is not supported before SDL 2.0.4")
#endif
#define SDL_MOUSEWHEEL_FLIPPED (0)
#if defined(WARN_OUTDATED)
#pragma message("SDL_WarpMouseGlobal is not supported before SDL 2.0.4")
#endif
static int SDL_WarpMouseGlobal(int x, int y)
{
return -1;
}
#if defined(WARN_OUTDATED)
#pragma message("SDL_GetGlobalMouseState is not supported before SDL 2.0.4")
#endif
static Uint32 SDL_GetGlobalMouseState(int *x, int *y)
{
return 0;
}
#endif
*/
import "C"
import "unsafe"
// Cursor types for CreateSystemCursor()
const (
SYSTEM_CURSOR_ARROW = C.SDL_SYSTEM_CURSOR_ARROW // arrow
SYSTEM_CURSOR_IBEAM = C.SDL_SYSTEM_CURSOR_IBEAM // i-beam
SYSTEM_CURSOR_WAIT = C.SDL_SYSTEM_CURSOR_WAIT // wait
SYSTEM_CURSOR_CROSSHAIR = C.SDL_SYSTEM_CURSOR_CROSSHAIR // crosshair
SYSTEM_CURSOR_WAITARROW = C.SDL_SYSTEM_CURSOR_WAITARROW // small wait cursor (or wait if not available)
SYSTEM_CURSOR_SIZENWSE = C.SDL_SYSTEM_CURSOR_SIZENWSE // double arrow pointing northwest and southeast
SYSTEM_CURSOR_SIZENESW = C.SDL_SYSTEM_CURSOR_SIZENESW // double arrow pointing northeast and southwest
SYSTEM_CURSOR_SIZEWE = C.SDL_SYSTEM_CURSOR_SIZEWE // double arrow pointing west and east
SYSTEM_CURSOR_SIZENS = C.SDL_SYSTEM_CURSOR_SIZENS // double arrow pointing north and south
SYSTEM_CURSOR_SIZEALL = C.SDL_SYSTEM_CURSOR_SIZEALL // four pointed arrow pointing north, south, east, and west
SYSTEM_CURSOR_NO = C.SDL_SYSTEM_CURSOR_NO // slashed circle or crossbones
SYSTEM_CURSOR_HAND = C.SDL_SYSTEM_CURSOR_HAND // hand
NUM_SYSTEM_CURSORS = C.SDL_NUM_SYSTEM_CURSORS // (only for bounding internal arrays)
)
// Scroll direction types for the Scroll event
const (
MOUSEWHEEL_NORMAL = C.SDL_MOUSEWHEEL_NORMAL // the scroll direction is normal
MOUSEWHEEL_FLIPPED = C.SDL_MOUSEWHEEL_FLIPPED // the scroll direction is flipped / natural
)
// Used as a mask when testing buttons in buttonstate.
const (
BUTTON_LEFT = C.SDL_BUTTON_LEFT // left mouse button
BUTTON_MIDDLE = C.SDL_BUTTON_MIDDLE // middle mouse button
BUTTON_RIGHT = C.SDL_BUTTON_RIGHT // right mouse button
BUTTON_X1 = C.SDL_BUTTON_X1 // x1 mouse button
BUTTON_X2 = C.SDL_BUTTON_X2 // x2 mouse button
)
// Cursor is a custom cursor created by CreateCursor() or CreateColorCursor().
type Cursor C.SDL_Cursor
// SystemCursor is a system cursor created by CreateSystemCursor().
type SystemCursor C.SDL_SystemCursor
func (c *Cursor) cptr() *C.SDL_Cursor {
return (*C.SDL_Cursor)(unsafe.Pointer(c))
}
func (c SystemCursor) c() C.SDL_SystemCursor {
return C.SDL_SystemCursor(c)
}
// GetMouseFocus returns the window which currently has mouse focus.
// (https://wiki.libsdl.org/SDL_GetMouseFocus)
func GetMouseFocus() *Window {
return (*Window)(unsafe.Pointer(C.SDL_GetMouseFocus()))
}
// GetGlobalMouseState returns the current state of the mouse.
// (https://wiki.libsdl.org/SDL_GetGlobalMouseState)
func GetGlobalMouseState() (x, y int32, state uint32) {
var _x, _y C.int
_state := uint32(C.SDL_GetGlobalMouseState(&_x, &_y))
return int32(_x), int32(_y), _state
}
// GetMouseState returns the current state of the mouse.
// (https://wiki.libsdl.org/SDL_GetMouseState)
func GetMouseState() (x, y int32, state uint32) {
var _x, _y C.int
_state := uint32(C.SDL_GetMouseState(&_x, &_y))
return int32(_x), int32(_y), _state
}
// GetRelativeMouseState returns the relative state of the mouse.
// (https://wiki.libsdl.org/SDL_GetRelativeMouseState)
func GetRelativeMouseState() (x, y int32, state uint32) {
var _x, _y C.int
_state := uint32(C.SDL_GetRelativeMouseState(&_x, &_y))
return int32(_x), int32(_y), _state
}
// WarpMouseInWindow moves the mouse to the given position within the window.
// (https://wiki.libsdl.org/SDL_WarpMouseInWindow)
func (window *Window) WarpMouseInWindow(x, y int32) {
C.SDL_WarpMouseInWindow(window.cptr(), C.int(x), C.int(y))
}
// SetRelativeMouseMode sets relative mouse mode.
// (https://wiki.libsdl.org/SDL_SetRelativeMouseMode)
func SetRelativeMouseMode(enabled bool) int {
return int(C.SDL_SetRelativeMouseMode(C.SDL_bool(Btoi(enabled))))
}
// GetRelativeMouseMode reports where relative mouse mode is enabled.
// (https://wiki.libsdl.org/SDL_GetRelativeMouseMode)
func GetRelativeMouseMode() bool {
return C.SDL_GetRelativeMouseMode() > 0
}
// CreateCursor creates a cursor using the specified bitmap data and mask (in MSB format).
// (https://wiki.libsdl.org/SDL_CreateCursor)
func CreateCursor(data, mask *uint8, w, h, hotX, hotY int32) *Cursor {
_data := (*C.Uint8)(unsafe.Pointer(data))
_mask := (*C.Uint8)(unsafe.Pointer(mask))
return (*Cursor)(C.SDL_CreateCursor(_data, _mask, C.int(w), C.int(h), C.int(hotX), C.int(hotY)))
}
// CreateColorCursor creates a color cursor.
// (https://wiki.libsdl.org/SDL_CreateColorCursor)
func CreateColorCursor(surface *Surface, hotX, hotY int32) *Cursor {
return (*Cursor)(C.SDL_CreateColorCursor(surface.cptr(), C.int(hotX), C.int(hotY)))
}
// CreateSystemCursor creates a system cursor.
// (https://wiki.libsdl.org/SDL_CreateSystemCursor)
func CreateSystemCursor(id SystemCursor) *Cursor {
return (*Cursor)(C.SDL_CreateSystemCursor(id.c()))
}
// SetCursor sets the active cursor.
// (https://wiki.libsdl.org/SDL_SetCursor)
func SetCursor(cursor *Cursor) {
C.SDL_SetCursor(cursor.cptr())
}
// GetCursor returns the active cursor.
// (https://wiki.libsdl.org/SDL_GetCursor)
func GetCursor() *Cursor {
return (*Cursor)(C.SDL_GetCursor())
}
// GetDefaultCursor returns the default cursor.
// (https://wiki.libsdl.org/SDL_GetDefaultCursor)
func GetDefaultCursor() *Cursor {
return (*Cursor)(C.SDL_GetDefaultCursor())
}
// FreeCursor frees a cursor created with CreateCursor(), CreateColorCursor() or CreateSystemCursor().
// (https://wiki.libsdl.org/SDL_FreeCursor)
func FreeCursor(cursor *Cursor) {
C.SDL_FreeCursor(cursor.cptr())
}
// ShowCursor toggles whether or not the cursor is shown.
// (https://wiki.libsdl.org/SDL_ShowCursor)
func ShowCursor(toggle int) (int, error) {
i := int(C.SDL_ShowCursor(C.int(toggle)))
return i, errorFromInt(i)
}
// CaptureMouse captures the mouse and tracks input outside an SDL window.
// (https://wiki.libsdl.org/SDL_CaptureMouse)
func CaptureMouse(toggle bool) error {
var ierr C.int
if toggle {
ierr = C.SDL_CaptureMouse(C.SDL_TRUE)
} else {
ierr = C.SDL_CaptureMouse(C.SDL_FALSE)
}
if ierr != 0 {
return GetError()
}
return nil
}
// Button is used as a mask when testing buttons in buttonstate.
func Button(flag uint32) uint32 {
return 1 << (flag - 1)
}
// ButtonLMask is used as a mask when testing buttons in buttonstate.
func ButtonLMask() uint32 {
return Button(BUTTON_LEFT)
}
// ButtonMMask is used as a mask when testing buttons in buttonstate.
func ButtonMMask() uint32 {
return Button(BUTTON_MIDDLE)
}
// ButtonRMask is used as a mask when testing buttons in buttonstate.
func ButtonRMask() uint32 {
return Button(BUTTON_RIGHT)
}
// ButtonX1Mask is used as a mask when testing buttons in buttonstate.
func ButtonX1Mask() uint32 {
return Button(BUTTON_X1)
}
// ButtonX2Mask is used as a mask when testing buttons in buttonstate.
func ButtonX2Mask() uint32 {
return Button(BUTTON_X2)
}
// WarpMouseGlobal moves the mouse to the given position in global screen space.
// (https://wiki.libsdl.org/SDL_WarpMouseGlobal)
func WarpMouseGlobal(x, y int32) error {
i := int(C.SDL_WarpMouseGlobal(C.int(x), C.int(y)))
return errorFromInt(i)
}