Move 18 functions from rcore to submodules
GetWindowHandle GetMonitorCount GetCurrentMonitor GetMonitorPosition GetMonitorWidth GetMonitorHeight GetMonitorPhysicalHeight GetMonitorRefreshRate GetWindowPosition GetWindowScaleDPI GetMonitorName SetClipboardText GetClipboardText ShowCursor HideCursor EnableCursor DisableCursor GetTime
This commit is contained in:
parent
8adf28783f
commit
3ee196fa1f
381
src/rcore.c
381
src/rcore.c
|
|
@ -410,174 +410,6 @@ int GetRenderHeight(void)
|
||||||
return CORE.Window.render.height;
|
return CORE.Window.render.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get native window handle
|
|
||||||
void *GetWindowHandle(void)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP) && defined(_WIN32)
|
|
||||||
// NOTE: Returned handle is: void *HWND (windows.h)
|
|
||||||
return glfwGetWin32Window(CORE.Window.handle);
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_DESKTOP) && defined(__linux__)
|
|
||||||
// NOTE: Returned handle is: unsigned long Window (X.h)
|
|
||||||
// typedef unsigned long XID;
|
|
||||||
// typedef XID Window;
|
|
||||||
//unsigned long id = (unsigned long)glfwGetX11Window(CORE.Window.handle);
|
|
||||||
//return NULL; // TODO: Find a way to return value... cast to void *?
|
|
||||||
return (void *)CORE.Window.handle;
|
|
||||||
#endif
|
|
||||||
#if defined(__APPLE__)
|
|
||||||
// NOTE: Returned handle is: (objc_object *)
|
|
||||||
return (void *)glfwGetCocoaWindow(CORE.Window.handle);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get number of monitors
|
|
||||||
int GetMonitorCount(void)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
int monitorCount;
|
|
||||||
glfwGetMonitors(&monitorCount);
|
|
||||||
return monitorCount;
|
|
||||||
#else
|
|
||||||
return 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get number of monitors
|
|
||||||
int GetCurrentMonitor(void)
|
|
||||||
{
|
|
||||||
int index = 0;
|
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
int monitorCount;
|
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
|
||||||
GLFWmonitor *monitor = NULL;
|
|
||||||
|
|
||||||
if (monitorCount > 1)
|
|
||||||
{
|
|
||||||
if (IsWindowFullscreen())
|
|
||||||
{
|
|
||||||
// Get the handle of the monitor that the specified window is in full screen on
|
|
||||||
monitor = glfwGetWindowMonitor(CORE.Window.handle);
|
|
||||||
|
|
||||||
for (int i = 0; i < monitorCount; i++)
|
|
||||||
{
|
|
||||||
if (monitors[i] == monitor)
|
|
||||||
{
|
|
||||||
index = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int x = 0;
|
|
||||||
int y = 0;
|
|
||||||
|
|
||||||
glfwGetWindowPos(CORE.Window.handle, &x, &y);
|
|
||||||
|
|
||||||
for (int i = 0; i < monitorCount; i++)
|
|
||||||
{
|
|
||||||
int mx = 0;
|
|
||||||
int my = 0;
|
|
||||||
|
|
||||||
monitor = monitors[i];
|
|
||||||
glfwGetMonitorPos(monitor, &mx, &my);
|
|
||||||
const GLFWvidmode *mode = glfwGetVideoMode(monitor);
|
|
||||||
if (mode)
|
|
||||||
{
|
|
||||||
const int width = mode->width;
|
|
||||||
const int height = mode->height;
|
|
||||||
|
|
||||||
if ((x >= mx) &&
|
|
||||||
(x < (mx + width)) &&
|
|
||||||
(y >= my) &&
|
|
||||||
(y < (my + height)))
|
|
||||||
{
|
|
||||||
index = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else TRACELOG(LOG_WARNING, "GLFW: Failed to find video mode for selected monitor");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get selected monitor position
|
|
||||||
Vector2 GetMonitorPosition(int monitor)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
int monitorCount;
|
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
|
||||||
|
|
||||||
if ((monitor >= 0) && (monitor < monitorCount))
|
|
||||||
{
|
|
||||||
int x, y;
|
|
||||||
glfwGetMonitorPos(monitors[monitor], &x, &y);
|
|
||||||
|
|
||||||
return (Vector2){ (float)x, (float)y };
|
|
||||||
}
|
|
||||||
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
|
||||||
#endif
|
|
||||||
return (Vector2){ 0, 0 };
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get selected monitor width (currently used by monitor)
|
|
||||||
int GetMonitorWidth(int monitor)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
int monitorCount;
|
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
|
||||||
|
|
||||||
if ((monitor >= 0) && (monitor < monitorCount))
|
|
||||||
{
|
|
||||||
const GLFWvidmode *mode = glfwGetVideoMode(monitors[monitor]);
|
|
||||||
|
|
||||||
if (mode) return mode->width;
|
|
||||||
else TRACELOG(LOG_WARNING, "GLFW: Failed to find video mode for selected monitor");
|
|
||||||
}
|
|
||||||
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_ANDROID)
|
|
||||||
if (CORE.Android.app->window != NULL)
|
|
||||||
{
|
|
||||||
return ANativeWindow_getWidth(CORE.Android.app->window);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get selected monitor height (currently used by monitor)
|
|
||||||
int GetMonitorHeight(int monitor)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
int monitorCount;
|
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
|
||||||
|
|
||||||
if ((monitor >= 0) && (monitor < monitorCount))
|
|
||||||
{
|
|
||||||
const GLFWvidmode *mode = glfwGetVideoMode(monitors[monitor]);
|
|
||||||
|
|
||||||
if (mode) return mode->height;
|
|
||||||
else TRACELOG(LOG_WARNING, "GLFW: Failed to find video mode for selected monitor");
|
|
||||||
}
|
|
||||||
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_ANDROID)
|
|
||||||
if (CORE.Android.app->window != NULL)
|
|
||||||
{
|
|
||||||
return ANativeWindow_getHeight(CORE.Android.app->window);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get selected monitor physical width in millimetres
|
// Get selected monitor physical width in millimetres
|
||||||
int GetMonitorPhysicalWidth(int monitor)
|
int GetMonitorPhysicalWidth(int monitor)
|
||||||
{
|
{
|
||||||
|
|
@ -596,149 +428,6 @@ int GetMonitorPhysicalWidth(int monitor)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get selected monitor physical height in millimetres
|
|
||||||
int GetMonitorPhysicalHeight(int monitor)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
int monitorCount;
|
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
|
||||||
|
|
||||||
if ((monitor >= 0) && (monitor < monitorCount))
|
|
||||||
{
|
|
||||||
int physicalHeight;
|
|
||||||
glfwGetMonitorPhysicalSize(monitors[monitor], NULL, &physicalHeight);
|
|
||||||
return physicalHeight;
|
|
||||||
}
|
|
||||||
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get selected monitor refresh rate
|
|
||||||
int GetMonitorRefreshRate(int monitor)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
int monitorCount;
|
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
|
||||||
|
|
||||||
if ((monitor >= 0) && (monitor < monitorCount))
|
|
||||||
{
|
|
||||||
const GLFWvidmode *vidmode = glfwGetVideoMode(monitors[monitor]);
|
|
||||||
return vidmode->refreshRate;
|
|
||||||
}
|
|
||||||
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_DRM)
|
|
||||||
if ((CORE.Window.connector) && (CORE.Window.modeIndex >= 0))
|
|
||||||
{
|
|
||||||
return CORE.Window.connector->modes[CORE.Window.modeIndex].vrefresh;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get window position XY on monitor
|
|
||||||
Vector2 GetWindowPosition(void)
|
|
||||||
{
|
|
||||||
int x = 0;
|
|
||||||
int y = 0;
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
glfwGetWindowPos(CORE.Window.handle, &x, &y);
|
|
||||||
#endif
|
|
||||||
return (Vector2){ (float)x, (float)y };
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get window scale DPI factor for current monitor
|
|
||||||
Vector2 GetWindowScaleDPI(void)
|
|
||||||
{
|
|
||||||
Vector2 scale = { 1.0f, 1.0f };
|
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
float xdpi = 1.0;
|
|
||||||
float ydpi = 1.0;
|
|
||||||
Vector2 windowPos = GetWindowPosition();
|
|
||||||
|
|
||||||
int monitorCount = 0;
|
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
|
||||||
|
|
||||||
// Check window monitor
|
|
||||||
for (int i = 0; i < monitorCount; i++)
|
|
||||||
{
|
|
||||||
glfwGetMonitorContentScale(monitors[i], &xdpi, &ydpi);
|
|
||||||
|
|
||||||
int xpos, ypos, width, height;
|
|
||||||
glfwGetMonitorWorkarea(monitors[i], &xpos, &ypos, &width, &height);
|
|
||||||
|
|
||||||
if ((windowPos.x >= xpos) && (windowPos.x < xpos + width) &&
|
|
||||||
(windowPos.y >= ypos) && (windowPos.y < ypos + height))
|
|
||||||
{
|
|
||||||
scale.x = xdpi;
|
|
||||||
scale.y = ydpi;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the human-readable, UTF-8 encoded name of the selected monitor
|
|
||||||
const char *GetMonitorName(int monitor)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
int monitorCount;
|
|
||||||
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
|
||||||
|
|
||||||
if ((monitor >= 0) && (monitor < monitorCount))
|
|
||||||
{
|
|
||||||
return glfwGetMonitorName(monitors[monitor]);
|
|
||||||
}
|
|
||||||
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
|
||||||
#endif
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set clipboard text content
|
|
||||||
void SetClipboardText(const char *text)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
glfwSetClipboardString(CORE.Window.handle, text);
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_WEB)
|
|
||||||
// Security check to (partially) avoid malicious code
|
|
||||||
if (strchr(text, '\'') != NULL) TRACELOG(LOG_WARNING, "SYSTEM: Provided Clipboard could be potentially malicious, avoid [\'] character");
|
|
||||||
else EM_ASM( { navigator.clipboard.writeText(UTF8ToString($0)); }, text);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get clipboard text content
|
|
||||||
// NOTE: returned string is allocated and freed by GLFW
|
|
||||||
const char *GetClipboardText(void)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
return glfwGetClipboardString(CORE.Window.handle);
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_WEB)
|
|
||||||
/*
|
|
||||||
// Accessing clipboard data from browser is tricky due to security reasons
|
|
||||||
// The method to use is navigator.clipboard.readText() but this is an asynchronous method
|
|
||||||
// that will return at some moment after the function is called with the required data
|
|
||||||
emscripten_run_script_string("navigator.clipboard.readText() \
|
|
||||||
.then(text => { document.getElementById('clipboard').innerText = text; console.log('Pasted content: ', text); }) \
|
|
||||||
.catch(err => { console.error('Failed to read clipboard contents: ', err); });"
|
|
||||||
);
|
|
||||||
|
|
||||||
// The main issue is getting that data, one approach could be using ASYNCIFY and wait
|
|
||||||
// for the data but it requires adding Asyncify emscripten library on compilation
|
|
||||||
|
|
||||||
// Another approach could be just copy the data in a HTML text field and try to retrieve it
|
|
||||||
// later on if available... and clean it for future accesses
|
|
||||||
*/
|
|
||||||
return NULL;
|
|
||||||
#endif
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enable waiting for events on EndDrawing(), no automatic event polling
|
// Enable waiting for events on EndDrawing(), no automatic event polling
|
||||||
void EnableEventWaiting(void)
|
void EnableEventWaiting(void)
|
||||||
{
|
{
|
||||||
|
|
@ -751,62 +440,12 @@ void DisableEventWaiting(void)
|
||||||
CORE.Window.eventWaiting = false;
|
CORE.Window.eventWaiting = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show mouse cursor
|
|
||||||
void ShowCursor(void)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
glfwSetInputMode(CORE.Window.handle, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CORE.Input.Mouse.cursorHidden = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hides mouse cursor
|
|
||||||
void HideCursor(void)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
glfwSetInputMode(CORE.Window.handle, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
CORE.Input.Mouse.cursorHidden = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if cursor is not visible
|
// Check if cursor is not visible
|
||||||
bool IsCursorHidden(void)
|
bool IsCursorHidden(void)
|
||||||
{
|
{
|
||||||
return CORE.Input.Mouse.cursorHidden;
|
return CORE.Input.Mouse.cursorHidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enables cursor (unlock cursor)
|
|
||||||
void EnableCursor(void)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
glfwSetInputMode(CORE.Window.handle, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_WEB)
|
|
||||||
emscripten_exit_pointerlock();
|
|
||||||
#endif
|
|
||||||
// Set cursor position in the middle
|
|
||||||
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
|
||||||
|
|
||||||
CORE.Input.Mouse.cursorHidden = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disables cursor (lock cursor)
|
|
||||||
void DisableCursor(void)
|
|
||||||
{
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
|
||||||
glfwSetInputMode(CORE.Window.handle, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
|
||||||
#endif
|
|
||||||
#if defined(PLATFORM_WEB)
|
|
||||||
emscripten_request_pointerlock("#canvas", 1);
|
|
||||||
#endif
|
|
||||||
// Set cursor position in the middle
|
|
||||||
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
|
||||||
|
|
||||||
CORE.Input.Mouse.cursorHidden = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if cursor is on the current screen.
|
// Check if cursor is on the current screen.
|
||||||
bool IsCursorOnScreen(void)
|
bool IsCursorOnScreen(void)
|
||||||
{
|
{
|
||||||
|
|
@ -1587,26 +1226,6 @@ float GetFrameTime(void)
|
||||||
return (float)CORE.Time.frame;
|
return (float)CORE.Time.frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get elapsed time measure in seconds since InitTimer()
|
|
||||||
// NOTE: On PLATFORM_DESKTOP InitTimer() is called on InitWindow()
|
|
||||||
// NOTE: On PLATFORM_DESKTOP, timer is initialized on glfwInit()
|
|
||||||
double GetTime(void)
|
|
||||||
{
|
|
||||||
double time = 0.0;
|
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
|
|
||||||
time = glfwGetTime(); // Elapsed time since glfwInit()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_DRM)
|
|
||||||
struct timespec ts = { 0 };
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
|
||||||
unsigned long long int nanoSeconds = (unsigned long long int)ts.tv_sec*1000000000LLU + (unsigned long long int)ts.tv_nsec;
|
|
||||||
|
|
||||||
time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer()
|
|
||||||
#endif
|
|
||||||
return time;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup window configuration flags (view FLAGS)
|
// Setup window configuration flags (view FLAGS)
|
||||||
// NOTE: This function is expected to be called before window creation,
|
// NOTE: This function is expected to be called before window creation,
|
||||||
// because it sets up some flags for the window creation process.
|
// because it sets up some flags for the window creation process.
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "raylib.h"
|
// for debugging
|
||||||
|
#define PLATFORM_ANDROID
|
||||||
|
|
||||||
#include "rcore.h"
|
#include "rcore.h"
|
||||||
|
|
||||||
//#include <android/sensor.h> // Required for: Android sensors functions (accelerometer, gyroscope, light...)
|
//#include <android/sensor.h> // Required for: Android sensors functions (accelerometer, gyroscope, light...)
|
||||||
|
|
@ -1435,3 +1437,136 @@ void SetWindowFocused(void)
|
||||||
TRACELOG(LOG_INFO, "SetWindowFocused not implemented in rcore_android.c");
|
TRACELOG(LOG_INFO, "SetWindowFocused not implemented in rcore_android.c");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get native window handle
|
||||||
|
void *GetWindowHandle(void)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get number of monitors
|
||||||
|
int GetMonitorCount(void)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get number of monitors
|
||||||
|
int GetCurrentMonitor(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor position
|
||||||
|
Vector2 GetMonitorPosition(int monitor)
|
||||||
|
{
|
||||||
|
return (Vector2){ 0, 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor width (currently used by monitor)
|
||||||
|
int GetMonitorWidth(int monitor)
|
||||||
|
{
|
||||||
|
if (CORE.Android.app->window != NULL)
|
||||||
|
{
|
||||||
|
return ANativeWindow_getWidth(CORE.Android.app->window);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor height (currently used by monitor)
|
||||||
|
int GetMonitorHeight(int monitor)
|
||||||
|
{
|
||||||
|
if (CORE.Android.app->window != NULL)
|
||||||
|
{
|
||||||
|
return ANativeWindow_getHeight(CORE.Android.app->window);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor physical height in millimetres
|
||||||
|
int GetMonitorPhysicalHeight(int monitor)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor refresh rate
|
||||||
|
int GetMonitorRefreshRate(int monitor)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get window position XY on monitor
|
||||||
|
Vector2 GetWindowPosition(void)
|
||||||
|
{
|
||||||
|
return (Vector2){ 0, 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get window scale DPI factor for current monitor
|
||||||
|
Vector2 GetWindowScaleDPI(void)
|
||||||
|
{
|
||||||
|
return (Vector2){ 1.0f, 1.0f };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the human-readable, UTF-8 encoded name of the selected monitor
|
||||||
|
const char *GetMonitorName(int monitor)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set clipboard text content
|
||||||
|
void SetClipboardText(const char *text)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get clipboard text content
|
||||||
|
// NOTE: returned string is allocated and freed by GLFW
|
||||||
|
const char *GetClipboardText(void)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show mouse cursor
|
||||||
|
void ShowCursor(void)
|
||||||
|
{
|
||||||
|
CORE.Input.Mouse.cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hides mouse cursor
|
||||||
|
void HideCursor(void)
|
||||||
|
{
|
||||||
|
CORE.Input.Mouse.cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Enables cursor (unlock cursor)
|
||||||
|
void EnableCursor(void)
|
||||||
|
{
|
||||||
|
// Set cursor position in the middle
|
||||||
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
CORE.Input.Mouse.cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disables cursor (lock cursor)
|
||||||
|
void DisableCursor(void)
|
||||||
|
{
|
||||||
|
// Set cursor position in the middle
|
||||||
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
CORE.Input.Mouse.cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get elapsed time measure in seconds since InitTimer()
|
||||||
|
// NOTE: On PLATFORM_DESKTOP InitTimer() is called on InitWindow()
|
||||||
|
// NOTE: On PLATFORM_DESKTOP, timer is initialized on glfwInit()
|
||||||
|
double GetTime(void)
|
||||||
|
{
|
||||||
|
double time = 0.0;
|
||||||
|
struct timespec ts = { 0 };
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
unsigned long long int nanoSeconds = (unsigned long long int)ts.tv_sec*1000000000LLU + (unsigned long long int)ts.tv_nsec;
|
||||||
|
|
||||||
|
time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer()
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// for debugging
|
||||||
|
#define PLATFORM_DESKTOP
|
||||||
|
|
||||||
#include "rcore.h"
|
#include "rcore.h"
|
||||||
|
|
||||||
#define GLFW_INCLUDE_NONE // Disable the standard OpenGL header inclusion on GLFW3
|
#define GLFW_INCLUDE_NONE // Disable the standard OpenGL header inclusion on GLFW3
|
||||||
|
|
@ -1154,3 +1157,294 @@ static void ErrorCallback(int error, const char *description)
|
||||||
{
|
{
|
||||||
TRACELOG(LOG_WARNING, "GLFW: Error: %i Description: %s", error, description);
|
TRACELOG(LOG_WARNING, "GLFW: Error: %i Description: %s", error, description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get native window handle
|
||||||
|
void *GetWindowHandle(void)
|
||||||
|
{
|
||||||
|
#if defined(PLATFORM_DESKTOP) && defined(_WIN32)
|
||||||
|
// NOTE: Returned handle is: void *HWND (windows.h)
|
||||||
|
return glfwGetWin32Window(CORE.Window.handle);
|
||||||
|
#endif
|
||||||
|
#if defined(PLATFORM_DESKTOP) && defined(__linux__)
|
||||||
|
// NOTE: Returned handle is: unsigned long Window (X.h)
|
||||||
|
// typedef unsigned long XID;
|
||||||
|
// typedef XID Window;
|
||||||
|
//unsigned long id = (unsigned long)glfwGetX11Window(CORE.Window.handle);
|
||||||
|
//return NULL; // TODO: Find a way to return value... cast to void *?
|
||||||
|
return (void *)CORE.Window.handle;
|
||||||
|
#endif
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
// NOTE: Returned handle is: (objc_object *)
|
||||||
|
return (void *)glfwGetCocoaWindow(CORE.Window.handle);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get number of monitors
|
||||||
|
int GetMonitorCount(void)
|
||||||
|
{
|
||||||
|
int monitorCount;
|
||||||
|
glfwGetMonitors(&monitorCount);
|
||||||
|
return monitorCount;
|
||||||
|
}
|
||||||
|
// Get number of monitors
|
||||||
|
int GetCurrentMonitor(void)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
int monitorCount;
|
||||||
|
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
||||||
|
GLFWmonitor *monitor = NULL;
|
||||||
|
|
||||||
|
if (monitorCount > 1)
|
||||||
|
{
|
||||||
|
if (IsWindowFullscreen())
|
||||||
|
{
|
||||||
|
// Get the handle of the monitor that the specified window is in full screen on
|
||||||
|
monitor = glfwGetWindowMonitor(CORE.Window.handle);
|
||||||
|
|
||||||
|
for (int i = 0; i < monitorCount; i++)
|
||||||
|
{
|
||||||
|
if (monitors[i] == monitor)
|
||||||
|
{
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int x = 0;
|
||||||
|
int y = 0;
|
||||||
|
|
||||||
|
glfwGetWindowPos(CORE.Window.handle, &x, &y);
|
||||||
|
|
||||||
|
for (int i = 0; i < monitorCount; i++)
|
||||||
|
{
|
||||||
|
int mx = 0;
|
||||||
|
int my = 0;
|
||||||
|
|
||||||
|
monitor = monitors[i];
|
||||||
|
glfwGetMonitorPos(monitor, &mx, &my);
|
||||||
|
const GLFWvidmode *mode = glfwGetVideoMode(monitor);
|
||||||
|
if (mode)
|
||||||
|
{
|
||||||
|
const int width = mode->width;
|
||||||
|
const int height = mode->height;
|
||||||
|
|
||||||
|
if ((x >= mx) &&
|
||||||
|
(x < (mx + width)) &&
|
||||||
|
(y >= my) &&
|
||||||
|
(y < (my + height)))
|
||||||
|
{
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find video mode for selected monitor");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor position
|
||||||
|
Vector2 GetMonitorPosition(int monitor)
|
||||||
|
{
|
||||||
|
int monitorCount;
|
||||||
|
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
||||||
|
|
||||||
|
if ((monitor >= 0) && (monitor < monitorCount))
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
glfwGetMonitorPos(monitors[monitor], &x, &y);
|
||||||
|
|
||||||
|
return (Vector2){ (float)x, (float)y };
|
||||||
|
}
|
||||||
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
||||||
|
return (Vector2){ 0, 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor width (currently used by monitor)
|
||||||
|
int GetMonitorWidth(int monitor)
|
||||||
|
{
|
||||||
|
int monitorCount;
|
||||||
|
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
||||||
|
|
||||||
|
if ((monitor >= 0) && (monitor < monitorCount))
|
||||||
|
{
|
||||||
|
const GLFWvidmode *mode = glfwGetVideoMode(monitors[monitor]);
|
||||||
|
|
||||||
|
if (mode) return mode->width;
|
||||||
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find video mode for selected monitor");
|
||||||
|
}
|
||||||
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get selected monitor height (currently used by monitor)
|
||||||
|
int GetMonitorHeight(int monitor)
|
||||||
|
{
|
||||||
|
int monitorCount;
|
||||||
|
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
||||||
|
|
||||||
|
if ((monitor >= 0) && (monitor < monitorCount))
|
||||||
|
{
|
||||||
|
const GLFWvidmode *mode = glfwGetVideoMode(monitors[monitor]);
|
||||||
|
|
||||||
|
if (mode) return mode->height;
|
||||||
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find video mode for selected monitor");
|
||||||
|
}
|
||||||
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor physical height in millimetres
|
||||||
|
int GetMonitorPhysicalHeight(int monitor)
|
||||||
|
{
|
||||||
|
int monitorCount;
|
||||||
|
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
||||||
|
|
||||||
|
if ((monitor >= 0) && (monitor < monitorCount))
|
||||||
|
{
|
||||||
|
int physicalHeight;
|
||||||
|
glfwGetMonitorPhysicalSize(monitors[monitor], NULL, &physicalHeight);
|
||||||
|
return physicalHeight;
|
||||||
|
}
|
||||||
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor refresh rate
|
||||||
|
int GetMonitorRefreshRate(int monitor)
|
||||||
|
{
|
||||||
|
int monitorCount;
|
||||||
|
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
||||||
|
|
||||||
|
if ((monitor >= 0) && (monitor < monitorCount))
|
||||||
|
{
|
||||||
|
const GLFWvidmode *vidmode = glfwGetVideoMode(monitors[monitor]);
|
||||||
|
return vidmode->refreshRate;
|
||||||
|
}
|
||||||
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get window position XY on monitor
|
||||||
|
Vector2 GetWindowPosition(void)
|
||||||
|
{
|
||||||
|
int x = 0;
|
||||||
|
int y = 0;
|
||||||
|
glfwGetWindowPos(CORE.Window.handle, &x, &y);
|
||||||
|
return (Vector2){ (float)x, (float)y };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get window scale DPI factor for current monitor
|
||||||
|
Vector2 GetWindowScaleDPI(void)
|
||||||
|
{
|
||||||
|
Vector2 scale = { 1.0f, 1.0f };
|
||||||
|
|
||||||
|
float xdpi = 1.0;
|
||||||
|
float ydpi = 1.0;
|
||||||
|
Vector2 windowPos = GetWindowPosition();
|
||||||
|
|
||||||
|
int monitorCount = 0;
|
||||||
|
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
||||||
|
|
||||||
|
// Check window monitor
|
||||||
|
for (int i = 0; i < monitorCount; i++)
|
||||||
|
{
|
||||||
|
glfwGetMonitorContentScale(monitors[i], &xdpi, &ydpi);
|
||||||
|
|
||||||
|
int xpos, ypos, width, height;
|
||||||
|
glfwGetMonitorWorkarea(monitors[i], &xpos, &ypos, &width, &height);
|
||||||
|
|
||||||
|
if ((windowPos.x >= xpos) && (windowPos.x < xpos + width) &&
|
||||||
|
(windowPos.y >= ypos) && (windowPos.y < ypos + height))
|
||||||
|
{
|
||||||
|
scale.x = xdpi;
|
||||||
|
scale.y = ydpi;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get the human-readable, UTF-8 encoded name of the selected monitor
|
||||||
|
const char *GetMonitorName(int monitor)
|
||||||
|
{
|
||||||
|
int monitorCount;
|
||||||
|
GLFWmonitor **monitors = glfwGetMonitors(&monitorCount);
|
||||||
|
|
||||||
|
if ((monitor >= 0) && (monitor < monitorCount))
|
||||||
|
{
|
||||||
|
return glfwGetMonitorName(monitors[monitor]);
|
||||||
|
}
|
||||||
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set clipboard text content
|
||||||
|
void SetClipboardText(const char *text)
|
||||||
|
{
|
||||||
|
glfwSetClipboardString(CORE.Window.handle, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get clipboard text content
|
||||||
|
// NOTE: returned string is allocated and freed by GLFW
|
||||||
|
const char *GetClipboardText(void)
|
||||||
|
{
|
||||||
|
return glfwGetClipboardString(CORE.Window.handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show mouse cursor
|
||||||
|
void ShowCursor(void)
|
||||||
|
{
|
||||||
|
glfwSetInputMode(CORE.Window.handle, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||||
|
CORE.Input.Mouse.cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hides mouse cursor
|
||||||
|
void HideCursor(void)
|
||||||
|
{
|
||||||
|
glfwSetInputMode(CORE.Window.handle, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
|
||||||
|
CORE.Input.Mouse.cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Enables cursor (unlock cursor)
|
||||||
|
void EnableCursor(void)
|
||||||
|
{
|
||||||
|
glfwSetInputMode(CORE.Window.handle, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||||
|
|
||||||
|
// Set cursor position in the middle
|
||||||
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
CORE.Input.Mouse.cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disables cursor (lock cursor)
|
||||||
|
void DisableCursor(void)
|
||||||
|
{
|
||||||
|
glfwSetInputMode(CORE.Window.handle, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
|
||||||
|
|
||||||
|
// Set cursor position in the middle
|
||||||
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
CORE.Input.Mouse.cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get elapsed time measure in seconds since InitTimer()
|
||||||
|
// NOTE: On PLATFORM_DESKTOP InitTimer() is called on InitWindow()
|
||||||
|
// NOTE: On PLATFORM_DESKTOP, timer is initialized on glfwInit()
|
||||||
|
double GetTime(void)
|
||||||
|
{
|
||||||
|
double time = glfwGetTime(); // Elapsed time since glfwInit()
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
|
||||||
132
src/rcore_drm.c
132
src/rcore_drm.c
|
|
@ -1,5 +1,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// for debugging
|
||||||
|
#define PLATFORM_DRM
|
||||||
|
|
||||||
#include "rcore.h"
|
#include "rcore.h"
|
||||||
|
|
||||||
#include <fcntl.h> // POSIX file control definitions - open(), creat(), fcntl()
|
#include <fcntl.h> // POSIX file control definitions - open(), creat(), fcntl()
|
||||||
|
|
@ -775,3 +778,132 @@ void SetWindowFocused(void)
|
||||||
{
|
{
|
||||||
TRACELOG(LOG_INFO, "SetWindowFocused not implemented in rcore_drm.c");
|
TRACELOG(LOG_INFO, "SetWindowFocused not implemented in rcore_drm.c");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get native window handle
|
||||||
|
void *GetWindowHandle(void)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get number of monitors
|
||||||
|
int GetMonitorCount(void)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get number of monitors
|
||||||
|
int GetCurrentMonitor(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor position
|
||||||
|
Vector2 GetMonitorPosition(int monitor)
|
||||||
|
{
|
||||||
|
return (Vector2){ 0, 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor width (currently used by monitor)
|
||||||
|
int GetMonitorWidth(int monitor)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor height (currently used by monitor)
|
||||||
|
int GetMonitorHeight(int monitor)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor physical height in millimetres
|
||||||
|
int GetMonitorPhysicalHeight(int monitor)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor refresh rate
|
||||||
|
int GetMonitorRefreshRate(int monitor)
|
||||||
|
{
|
||||||
|
if ((CORE.Window.connector) && (CORE.Window.modeIndex >= 0))
|
||||||
|
{
|
||||||
|
return CORE.Window.connector->modes[CORE.Window.modeIndex].vrefresh;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get window position XY on monitor
|
||||||
|
Vector2 GetWindowPosition(void)
|
||||||
|
{
|
||||||
|
return (Vector2){ 0, 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get window scale DPI factor for current monitor
|
||||||
|
Vector2 GetWindowScaleDPI(void)
|
||||||
|
{
|
||||||
|
return (Vector2){ 1.0f, 1.0f };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the human-readable, UTF-8 encoded name of the selected monitor
|
||||||
|
const char *GetMonitorName(int monitor)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set clipboard text content
|
||||||
|
void SetClipboardText(const char *text)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get clipboard text content
|
||||||
|
// NOTE: returned string is allocated and freed by GLFW
|
||||||
|
const char *GetClipboardText(void)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show mouse cursor
|
||||||
|
void ShowCursor(void)
|
||||||
|
{
|
||||||
|
CORE.Input.Mouse.cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hides mouse cursor
|
||||||
|
void HideCursor(void)
|
||||||
|
{
|
||||||
|
CORE.Input.Mouse.cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Enables cursor (unlock cursor)
|
||||||
|
void EnableCursor(void)
|
||||||
|
{
|
||||||
|
// Set cursor position in the middle
|
||||||
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
CORE.Input.Mouse.cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disables cursor (lock cursor)
|
||||||
|
void DisableCursor(void)
|
||||||
|
{
|
||||||
|
// Set cursor position in the middle
|
||||||
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
CORE.Input.Mouse.cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get elapsed time measure in seconds since InitTimer()
|
||||||
|
// NOTE: On PLATFORM_DESKTOP InitTimer() is called on InitWindow()
|
||||||
|
// NOTE: On PLATFORM_DESKTOP, timer is initialized on glfwInit()
|
||||||
|
double GetTime(void)
|
||||||
|
{
|
||||||
|
double time = 0.0;
|
||||||
|
struct timespec ts = { 0 };
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
|
unsigned long long int nanoSeconds = (unsigned long long int)ts.tv_sec*1000000000LLU + (unsigned long long int)ts.tv_nsec;
|
||||||
|
|
||||||
|
time = (double)(nanoSeconds - CORE.Time.base)*1e-9; // Elapsed time since InitTimer()
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
|
||||||
145
src/rcore_web.c
145
src/rcore_web.c
|
|
@ -1,5 +1,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// for debugging
|
||||||
|
#define PLATFORM_WEB
|
||||||
|
|
||||||
#include "rcore.h"
|
#include "rcore.h"
|
||||||
|
|
||||||
#define GLFW_INCLUDE_ES2 // GLFW3: Enable OpenGL ES 2.0 (translated to WebGL)
|
#define GLFW_INCLUDE_ES2 // GLFW3: Enable OpenGL ES 2.0 (translated to WebGL)
|
||||||
|
|
@ -1359,3 +1362,145 @@ static void ErrorCallback(int error, const char *description)
|
||||||
{
|
{
|
||||||
TRACELOG(LOG_WARNING, "GLFW: Error: %i Description: %s", error, description);
|
TRACELOG(LOG_WARNING, "GLFW: Error: %i Description: %s", error, description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get native window handle
|
||||||
|
void *GetWindowHandle(void)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get number of monitors
|
||||||
|
int GetMonitorCount(void)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get number of monitors
|
||||||
|
int GetCurrentMonitor(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor position
|
||||||
|
Vector2 GetMonitorPosition(int monitor)
|
||||||
|
{
|
||||||
|
return (Vector2){ 0, 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor width (currently used by monitor)
|
||||||
|
int GetMonitorWidth(int monitor)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor height (currently used by monitor)
|
||||||
|
int GetMonitorHeight(int monitor)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor physical height in millimetres
|
||||||
|
int GetMonitorPhysicalHeight(int monitor)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get selected monitor refresh rate
|
||||||
|
int GetMonitorRefreshRate(int monitor)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get window position XY on monitor
|
||||||
|
Vector2 GetWindowPosition(void)
|
||||||
|
{
|
||||||
|
return (Vector2){ 0, 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get window scale DPI factor for current monitor
|
||||||
|
Vector2 GetWindowScaleDPI(void)
|
||||||
|
{
|
||||||
|
return (Vector2){ 1.0f, 1.0f };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the human-readable, UTF-8 encoded name of the selected monitor
|
||||||
|
const char *GetMonitorName(int monitor)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set clipboard text content
|
||||||
|
void SetClipboardText(const char *text)
|
||||||
|
{
|
||||||
|
// Security check to (partially) avoid malicious code
|
||||||
|
if (strchr(text, '\'') != NULL) TRACELOG(LOG_WARNING, "SYSTEM: Provided Clipboard could be potentially malicious, avoid [\'] character");
|
||||||
|
else EM_ASM( { navigator.clipboard.writeText(UTF8ToString($0)); }, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get clipboard text content
|
||||||
|
// NOTE: returned string is allocated and freed by GLFW
|
||||||
|
const char *GetClipboardText(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
// Accessing clipboard data from browser is tricky due to security reasons
|
||||||
|
// The method to use is navigator.clipboard.readText() but this is an asynchronous method
|
||||||
|
// that will return at some moment after the function is called with the required data
|
||||||
|
emscripten_run_script_string("navigator.clipboard.readText() \
|
||||||
|
.then(text => { document.getElementById('clipboard').innerText = text; console.log('Pasted content: ', text); }) \
|
||||||
|
.catch(err => { console.error('Failed to read clipboard contents: ', err); });"
|
||||||
|
);
|
||||||
|
|
||||||
|
// The main issue is getting that data, one approach could be using ASYNCIFY and wait
|
||||||
|
// for the data but it requires adding Asyncify emscripten library on compilation
|
||||||
|
|
||||||
|
// Another approach could be just copy the data in a HTML text field and try to retrieve it
|
||||||
|
// later on if available... and clean it for future accesses
|
||||||
|
*/
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show mouse cursor
|
||||||
|
void ShowCursor(void)
|
||||||
|
{
|
||||||
|
CORE.Input.Mouse.cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hides mouse cursor
|
||||||
|
void HideCursor(void)
|
||||||
|
{
|
||||||
|
CORE.Input.Mouse.cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Enables cursor (unlock cursor)
|
||||||
|
void EnableCursor(void)
|
||||||
|
{
|
||||||
|
emscripten_exit_pointerlock();
|
||||||
|
|
||||||
|
// Set cursor position in the middle
|
||||||
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
CORE.Input.Mouse.cursorHidden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disables cursor (lock cursor)
|
||||||
|
void DisableCursor(void)
|
||||||
|
{
|
||||||
|
// TODO: figure out how not to hard code the canvas ID here.
|
||||||
|
emscripten_request_pointerlock("#canvas", 1);
|
||||||
|
|
||||||
|
// Set cursor position in the middle
|
||||||
|
SetMousePosition(CORE.Window.screen.width/2, CORE.Window.screen.height/2);
|
||||||
|
|
||||||
|
CORE.Input.Mouse.cursorHidden = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get elapsed time measure in seconds since InitTimer()
|
||||||
|
// NOTE: On PLATFORM_DESKTOP InitTimer() is called on InitWindow()
|
||||||
|
// NOTE: On PLATFORM_DESKTOP, timer is initialized on glfwInit()
|
||||||
|
double GetTime(void)
|
||||||
|
{
|
||||||
|
double time = glfwGetTime(); // Elapsed time since glfwInit()
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user