Go to the documentation of this file.
23 #include "../../SDL_internal.h"
25 #if SDL_VIDEO_DRIVER_EMSCRIPTEN
27 #include <emscripten/emscripten.h>
28 #include <emscripten/html5.h>
32 #include "../../events/SDL_mouse_c.h"
36 Emscripten_CreateCursorFromString(
const char* cursor_str,
SDL_bool is_custom)
62 Emscripten_CreateDefaultCursor()
64 return Emscripten_CreateCursorFromString(
"default",
SDL_FALSE);
70 const char *cursor_url =
NULL;
79 cursor_url = (
const char *)EM_ASM_INT({
86 var canvas = document.createElement(
"canvas");
90 var
ctx = canvas.getContext(
"2d");
97 if (typeof CanvasPixelArray !==
'undefined' &&
data instanceof CanvasPixelArray) {
113 var data32 =
new Int32Array(
data.buffer);
115 data32.set(HEAP32.subarray(
src,
src +
num));
119 var url =
hot_x === 0 && hot_y === 0
120 ?
"url(" + canvas.toDataURL() +
"), auto"
121 :
"url(" + canvas.toDataURL() +
") " +
hot_x +
" " + hot_y +
", auto";
123 var urlBuf = _malloc(url.length + 1);
124 stringToUTF8(url, urlBuf, url.length + 1);
131 return Emscripten_CreateCursorFromString(cursor_url,
SDL_TRUE);
137 const char *cursor_name =
NULL;
141 cursor_name =
"default";
144 cursor_name =
"text";
147 cursor_name =
"wait";
150 cursor_name =
"crosshair";
153 cursor_name =
"progress";
156 cursor_name =
"nwse-resize";
159 cursor_name =
"nesw-resize";
162 cursor_name =
"ew-resize";
165 cursor_name =
"ns-resize";
168 cursor_name =
"move";
171 cursor_name =
"not-allowed";
174 cursor_name =
"pointer";
181 return Emscripten_CreateCursorFromString(cursor_name,
SDL_FALSE);
191 if (curdata !=
NULL) {
212 if (Module[
'canvas']) {
213 Module[
'canvas'].style[
'cursor'] = Module[
'Pointer_stringify']($0);
221 if (Module[
'canvas']) {
222 Module[
'canvas'].style[
'cursor'] =
'none';
241 if(emscripten_request_pointerlock(
NULL, 1) >= EMSCRIPTEN_RESULT_SUCCESS) {
245 if(emscripten_exit_pointerlock() >= EMSCRIPTEN_RESULT_SUCCESS) {
SDL_Mouse * SDL_GetMouse(void)
A collection of pixels used in software blitting.
#define SDL_ConvertSurfaceFormat
void Emscripten_InitMouse()
void Emscripten_FiniMouse()
@ SDL_SYSTEM_CURSOR_WAITARROW
@ SDL_SYSTEM_CURSOR_CROSSHAIR
@ SDL_SYSTEM_CURSOR_SIZENESW
int(* SetRelativeMouseMode)(SDL_bool enabled)
GLfloat GLfloat GLfloat GLfloat h
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
The type used to identify a window.
GLint GLint GLint GLint GLint x
void(* WarpMouse)(SDL_Window *window, int x, int y)
EGLSurface EGLNativeWindowType * window
@ SDL_SYSTEM_CURSOR_SIZEALL
SDL_SystemCursor
Cursor types for SDL_CreateSystemCursor().
@ SDL_SYSTEM_CURSOR_IBEAM
SDL_Cursor *(* CreateSystemCursor)(SDL_SystemCursor id)
int uint32_t uint32_t uint32_t uint32_t uint32_t int drmModeModeInfoPtr mode int uint32_t uint32_t uint32_t uint32_t int32_t hot_x
#define SDL_assert(condition)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
#define SDL_OutOfMemory()
int(* ShowCursor)(SDL_Cursor *cursor)
GLint GLint GLint GLint GLint GLint y
void SDL_SetDefaultCursor(SDL_Cursor *cursor)
#define SDL_GetMouseFocus
void(* FreeCursor)(SDL_Cursor *cursor)
SDL_Cursor *(* CreateCursor)(SDL_Surface *surface, int hot_x, int hot_y)
@ SDL_SYSTEM_CURSOR_SIZEWE
GLenum GLenum GLsizei const GLuint GLboolean enabled
const char * system_cursor
#define SDL_Unsupported()
@ SDL_PIXELFORMAT_ABGR8888
@ SDL_SYSTEM_CURSOR_SIZENWSE
@ SDL_SYSTEM_CURSOR_ARROW
@ SDL_SYSTEM_CURSOR_SIZENS
GLubyte GLubyte GLubyte GLubyte w