#include "cell.h" #include // 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)