|
|
@ -62,6 +62,7 @@ typedef struct { |
|
|
|
SDL_GLContext glContext; |
|
|
|
|
|
|
|
SDL_Joystick *gamepad; |
|
|
|
SDL_Cursor *cursor; |
|
|
|
} PlatformData; |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
@ -178,6 +179,22 @@ static const KeyboardKey ScancodeToKey[SCANCODE_MAPPED_NUM] = { |
|
|
|
KEY_KP_DECIMAL // SDL_SCANCODE_KP_PERIOD |
|
|
|
}; |
|
|
|
|
|
|
|
static const int CursorsLUT[] = { |
|
|
|
SDL_SYSTEM_CURSOR_ARROW, // 0 MOUSE_CURSOR_DEFAULT |
|
|
|
SDL_SYSTEM_CURSOR_ARROW, // 1 MOUSE_CURSOR_ARROW |
|
|
|
SDL_SYSTEM_CURSOR_IBEAM, // 2 MOUSE_CURSOR_IBEAM |
|
|
|
SDL_SYSTEM_CURSOR_CROSSHAIR, // 3 MOUSE_CURSOR_CROSSHAIR |
|
|
|
SDL_SYSTEM_CURSOR_HAND, // 4 MOUSE_CURSOR_POINTING_HAND |
|
|
|
SDL_SYSTEM_CURSOR_SIZEWE, // 5 MOUSE_CURSOR_RESIZE_EW |
|
|
|
SDL_SYSTEM_CURSOR_SIZENS, // 6 MOUSE_CURSOR_RESIZE_NS |
|
|
|
SDL_SYSTEM_CURSOR_SIZENWSE, // 7 MOUSE_CURSOR_RESIZE_NWSE |
|
|
|
SDL_SYSTEM_CURSOR_SIZENESW, // 8 MOUSE_CURSOR_RESIZE_NESW |
|
|
|
SDL_SYSTEM_CURSOR_SIZEALL, // 9 MOUSE_CURSOR_RESIZE_ALL |
|
|
|
SDL_SYSTEM_CURSOR_NO // 10 MOUSE_CURSOR_NOT_ALLOWED |
|
|
|
//SDL_SYSTEM_CURSOR_WAIT, // No equivalent implemented on MouseCursor enum on raylib.h |
|
|
|
//SDL_SYSTEM_CURSOR_WAITARROW, // No equivalent implemented on MouseCursor enum on raylib.h |
|
|
|
}; |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module Internal Functions Declaration |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
@ -315,14 +332,13 @@ void SetWindowOpacity(float opacity) |
|
|
|
// Set window focused |
|
|
|
void SetWindowFocused(void) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "SetWindowFocused() not available on target platform"); |
|
|
|
SDL_RaiseWindow(platform.window); |
|
|
|
} |
|
|
|
|
|
|
|
// Get native window handle |
|
|
|
void *GetWindowHandle(void) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "GetWindowHandle() not implemented on target platform"); |
|
|
|
return NULL; |
|
|
|
return (void *)platform.window; |
|
|
|
} |
|
|
|
|
|
|
|
// Get number of monitors |
|
|
@ -389,15 +405,45 @@ int GetMonitorHeight(int monitor) |
|
|
|
// Get selected monitor physical width in millimetres |
|
|
|
int GetMonitorPhysicalWidth(int monitor) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "GetMonitorPhysicalWidth() not implemented on target platform"); |
|
|
|
return 0; |
|
|
|
int width = 0; |
|
|
|
|
|
|
|
int monitorCount = 0; |
|
|
|
monitorCount = SDL_GetNumVideoDisplays(); |
|
|
|
|
|
|
|
if ((monitor >= 0) && (monitor < monitorCount)) |
|
|
|
{ |
|
|
|
float vdpi = 0.0f; |
|
|
|
SDL_GetDisplayDPI(monitor, NULL, NULL, &vdpi); |
|
|
|
SDL_DisplayMode mode; |
|
|
|
SDL_GetCurrentDisplayMode(monitor, &mode); |
|
|
|
// Calculate size on inches, then convert to millimeter |
|
|
|
if (vdpi > 0.0f) width = (mode.w/vdpi)*25.4f; |
|
|
|
} |
|
|
|
else TRACELOG(LOG_WARNING, "SDL: Failed to find selected monitor"); |
|
|
|
|
|
|
|
return width; |
|
|
|
} |
|
|
|
|
|
|
|
// Get selected monitor physical height in millimetres |
|
|
|
int GetMonitorPhysicalHeight(int monitor) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "GetMonitorPhysicalHeight() not implemented on target platform"); |
|
|
|
return 0; |
|
|
|
int height = 0; |
|
|
|
|
|
|
|
int monitorCount = 0; |
|
|
|
monitorCount = SDL_GetNumVideoDisplays(); |
|
|
|
|
|
|
|
if ((monitor >= 0) && (monitor < monitorCount)) |
|
|
|
{ |
|
|
|
float vdpi = 0.0f; |
|
|
|
SDL_GetDisplayDPI(monitor, NULL, NULL, &vdpi); |
|
|
|
SDL_DisplayMode mode; |
|
|
|
SDL_GetCurrentDisplayMode(monitor, &mode); |
|
|
|
// Calculate size on inches, then convert to millimeter |
|
|
|
if (vdpi > 0.0f) height = (mode.h/vdpi)*25.4f; |
|
|
|
} |
|
|
|
else TRACELOG(LOG_WARNING, "SDL: Failed to find selected monitor"); |
|
|
|
|
|
|
|
return height; |
|
|
|
} |
|
|
|
|
|
|
|
// Get selected monitor refresh rate |
|
|
@ -452,34 +498,37 @@ Vector2 GetWindowScaleDPI(void) |
|
|
|
// Set clipboard text content |
|
|
|
void SetClipboardText(const char *text) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "SetClipboardText() not implemented on target platform"); |
|
|
|
SDL_SetClipboardText(text); |
|
|
|
} |
|
|
|
|
|
|
|
// Get clipboard text content |
|
|
|
// NOTE: returned string is allocated and freed by GLFW |
|
|
|
// NOTE: returned string must be freed with SDL_free() |
|
|
|
const char *GetClipboardText(void) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "GetClipboardText() not implemented on target platform"); |
|
|
|
return NULL; |
|
|
|
return SDL_GetClipboardText(); |
|
|
|
} |
|
|
|
|
|
|
|
// Show mouse cursor |
|
|
|
void ShowCursor(void) |
|
|
|
{ |
|
|
|
SDL_ShowCursor(SDL_ENABLE); |
|
|
|
|
|
|
|
CORE.Input.Mouse.cursorHidden = false; |
|
|
|
} |
|
|
|
|
|
|
|
// Hides mouse cursor |
|
|
|
void HideCursor(void) |
|
|
|
{ |
|
|
|
SDL_ShowCursor(SDL_DISABLE); |
|
|
|
|
|
|
|
CORE.Input.Mouse.cursorHidden = true; |
|
|
|
} |
|
|
|
|
|
|
|
// Enables cursor (unlock cursor) |
|
|
|
void EnableCursor(void) |
|
|
|
{ |
|
|
|
o">// Set cursor position in the middle |
|
|
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2); |
|
|
|
n">SDL_SetRelativeMouseMode(SDL_FALSE); |
|
|
|
SDL_ShowCursor(SDL_ENABLE); |
|
|
|
|
|
|
|
CORE.Input.Mouse.cursorHidden = false; |
|
|
|
} |
|
|
@ -487,8 +536,7 @@ void EnableCursor(void) |
|
|
|
// Disables cursor (lock cursor) |
|
|
|
void DisableCursor(void) |
|
|
|
{ |
|
|
|
// Set cursor position in the middle |
|
|
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2); |
|
|
|
SDL_SetRelativeMouseMode(SDL_TRUE); |
|
|
|
|
|
|
|
CORE.Input.Mouse.cursorHidden = true; |
|
|
|
} |
|
|
@ -524,8 +572,7 @@ void OpenURL(const char *url) |
|
|
|
// Set internal gamepad mappings |
|
|
|
int SetGamepadMappings(const char *mappings) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "SetGamepadMappings() not implemented on target platform"); |
|
|
|
return 0; |
|
|
|
SDL_GameControllerAddMapping(mappings); |
|
|
|
} |
|
|
|
|
|
|
|
// Set mouse position XY |
|
|
@ -538,7 +585,10 @@ void SetMousePosition(int x, int y) |
|
|
|
// Set mouse cursor |
|
|
|
void SetMouseCursor(int cursor) |
|
|
|
{ |
|
|
|
TRACELOG(LOG_WARNING, "SetMouseCursor() not implemented on target platform"); |
|
|
|
platform.cursor = SDL_CreateSystemCursor(CursorsLUT[cursor]); |
|
|
|
SDL_SetCursor(platform.cursor); |
|
|
|
|
|
|
|
CORE.Input.Mouse.cursor = cursor; |
|
|
|
} |
|
|
|
|
|
|
|
// Register all input events |
|
|
@ -794,6 +844,7 @@ static int InitPlatform(void) |
|
|
|
|
|
|
|
static void ClosePlatform(void) |
|
|
|
{ |
|
|
|
SDL_FreeCursor(platform.cursor); // Free cursor |
|
|
|
SDL_GL_DeleteContext(platform.glContext); // Deinitialize OpenGL context |
|
|
|
SDL_DestroyWindow(platform.window); |
|
|
|
SDL_Quit(); // Deinitialize SDL internal global state |
|
|
|