#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); JS_FRAME(js); JS_LOCAL(arr, JS_NewArray(js)); for (int i = 0; i < count; i++) { JS_SetPropertyNumber(js, arr, i, JS_NewUint32(js, mice[i])); } SDL_free(mice); JS_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); JS_FRAME(js); JS_LOCAL(result, JS_NewObject(js)); JSValue _x = JS_NewFloat64(js, x); JS_SetPropertyStr(js, result, "x", _x); JSValue _y = JS_NewFloat64(js, y); JS_SetPropertyStr(js, result, "y", _y); JS_SetPropertyStr(js, result, "buttons", JS_NewUint32(js, buttons)); JS_RETURN(result); ) // SDL_GetGlobalMouseState() -> {x, y, buttons} JSC_CCALL(mouse_get_global_state, float x, y; SDL_MouseButtonFlags buttons = SDL_GetGlobalMouseState(&x, &y); JS_FRAME(js); JS_LOCAL(result, JS_NewObject(js)); JSValue _x = JS_NewFloat64(js, x); JS_SetPropertyStr(js, result, "x", _x); JSValue _y = JS_NewFloat64(js, y); JS_SetPropertyStr(js, result, "y", _y); JS_SetPropertyStr(js, result, "buttons", JS_NewUint32(js, buttons)); JS_RETURN(result); ) // SDL_GetRelativeMouseState() -> {x, y, buttons} JSC_CCALL(mouse_get_relative_state, float x, y; SDL_MouseButtonFlags buttons = SDL_GetRelativeMouseState(&x, &y); JS_FRAME(js); JS_LOCAL(result, JS_NewObject(js)); JSValue _x = JS_NewFloat64(js, x); JS_SetPropertyStr(js, result, "x", _x); JSValue _y = JS_NewFloat64(js, y); JS_SetPropertyStr(js, result, "y", _y); JS_SetPropertyStr(js, result, "buttons", JS_NewUint32(js, buttons)); JS_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)