110 lines
3.0 KiB
C
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)
|