Files
cell-sdl3/mouse.c
2025-12-11 10:39:24 -06:00

110 lines
3.0 KiB
C

#include "cell.h"
#include <SDL3/SDL.h>
// SDL_HasMouse() -> bool
JSC_CCALL(mouse_has,
return JS_NewBool(js, SDL_HasMouse());
)
// SDL_GetMice() -> array of mouse IDs
JSC_CCALL(mouse_get_mice,
int count = 0;
SDL_MouseID *mice = SDL_GetMice(&count);
if (!mice) return JS_NewArray(js);
JSValue arr = JS_NewArray(js);
for (int i = 0; i < count; i++) {
JS_SetPropertyUint32(js, arr, i, JS_NewUint32(js, mice[i]));
}
SDL_free(mice);
return arr;
)
// SDL_GetMouseNameForID(id) -> string
JSC_CCALL(mouse_get_name,
uint32_t id;
JS_ToUint32(js, &id, argv[0]);
const char *name = SDL_GetMouseNameForID(id);
return name ? JS_NewString(js, name) : JS_NewString(js, "");
)
// SDL_GetMouseState() -> {x, y, buttons}
JSC_CCALL(mouse_get_state,
float x, y;
SDL_MouseButtonFlags buttons = SDL_GetMouseState(&x, &y);
JSValue result = JS_NewObject(js);
JS_SetPropertyStr(js, result, "x", JS_NewFloat64(js, x));
JS_SetPropertyStr(js, result, "y", JS_NewFloat64(js, y));
JS_SetPropertyStr(js, result, "buttons", JS_NewUint32(js, buttons));
return result;
)
// SDL_GetGlobalMouseState() -> {x, y, buttons}
JSC_CCALL(mouse_get_global_state,
float x, y;
SDL_MouseButtonFlags buttons = SDL_GetGlobalMouseState(&x, &y);
JSValue result = JS_NewObject(js);
JS_SetPropertyStr(js, result, "x", JS_NewFloat64(js, x));
JS_SetPropertyStr(js, result, "y", JS_NewFloat64(js, y));
JS_SetPropertyStr(js, result, "buttons", JS_NewUint32(js, buttons));
return result;
)
// SDL_GetRelativeMouseState() -> {x, y, buttons}
JSC_CCALL(mouse_get_relative_state,
float x, y;
SDL_MouseButtonFlags buttons = SDL_GetRelativeMouseState(&x, &y);
JSValue result = JS_NewObject(js);
JS_SetPropertyStr(js, result, "x", JS_NewFloat64(js, x));
JS_SetPropertyStr(js, result, "y", JS_NewFloat64(js, y));
JS_SetPropertyStr(js, result, "buttons", JS_NewUint32(js, buttons));
return result;
)
// SDL_WarpMouseGlobal(x, y) -> bool
JSC_CCALL(mouse_warp_global,
float x = js2number(js, argv[0]);
float y = js2number(js, argv[1]);
return JS_NewBool(js, SDL_WarpMouseGlobal(x, y));
)
// SDL_CaptureMouse(enabled) -> bool
JSC_CCALL(mouse_capture,
bool enabled = JS_ToBool(js, argv[0]);
return JS_NewBool(js, SDL_CaptureMouse(enabled));
)
// SDL_ShowCursor() -> bool
JSC_CCALL(mouse_show_cursor,
return JS_NewBool(js, SDL_ShowCursor());
)
// SDL_HideCursor() -> bool
JSC_CCALL(mouse_hide_cursor,
return JS_NewBool(js, SDL_HideCursor());
)
// SDL_CursorVisible() -> bool
JSC_CCALL(mouse_cursor_visible,
return JS_NewBool(js, SDL_CursorVisible());
)
static const JSCFunctionListEntry js_mouse_funcs[] = {
MIST_FUNC_DEF(mouse, has, 0),
MIST_FUNC_DEF(mouse, get_mice, 0),
MIST_FUNC_DEF(mouse, get_name, 1),
MIST_FUNC_DEF(mouse, get_state, 0),
MIST_FUNC_DEF(mouse, get_global_state, 0),
MIST_FUNC_DEF(mouse, get_relative_state, 0),
MIST_FUNC_DEF(mouse, warp_global, 2),
MIST_FUNC_DEF(mouse, capture, 1),
MIST_FUNC_DEF(mouse, show_cursor, 0),
MIST_FUNC_DEF(mouse, hide_cursor, 0),
MIST_FUNC_DEF(mouse, cursor_visible, 0),
};
CELL_USE_FUNCS(js_mouse_funcs)