|
@@ -312,9 +312,9 @@
|
|
#endif
|
|
#endif
|
|
|
|
|
|
// Flags operation macros
|
|
// Flags operation macros
|
|
-#define FLAG_SET(n, f) ((n) |= (f))
|
|
|
|
-#define FLAG_CLEAR(n, f) ((n) &= ~(f))
|
|
|
|
-#define FLAG_TOGGLE(n, f) ((n) ^= (f))
|
|
|
|
|
|
+#define FLAG_SET(n, f) ((n) |= (f))
|
|
|
|
+#define FLAG_CLEAR(n, f) ((n) &= ~(f))
|
|
|
|
+#define FLAG_TOGGLE(n, f) ((n) ^= (f))
|
|
#define FLAG_CHECK(n, f) ((n) & (f))
|
|
#define FLAG_CHECK(n, f) ((n) & (f))
|
|
|
|
|
|
//----------------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------------
|
|
@@ -410,13 +410,13 @@ typedef struct CoreData {
|
|
int exitKey; // Default exit key
|
|
int exitKey; // Default exit key
|
|
char currentKeyState[512]; // Registers current frame key state
|
|
char currentKeyState[512]; // Registers current frame key state
|
|
char previousKeyState[512]; // Registers previous frame key state
|
|
char previousKeyState[512]; // Registers previous frame key state
|
|
-
|
|
|
|
|
|
+
|
|
int keyPressedQueue[MAX_KEY_PRESSED_QUEUE]; // Input keys queue
|
|
int keyPressedQueue[MAX_KEY_PRESSED_QUEUE]; // Input keys queue
|
|
int keyPressedQueueCount; // Input keys queue count
|
|
int keyPressedQueueCount; // Input keys queue count
|
|
|
|
|
|
int charPressedQueue[MAX_CHAR_PRESSED_QUEUE]; // Input characters queue
|
|
int charPressedQueue[MAX_CHAR_PRESSED_QUEUE]; // Input characters queue
|
|
int charPressedQueueCount; // Input characters queue count
|
|
int charPressedQueueCount; // Input characters queue count
|
|
-
|
|
|
|
|
|
+
|
|
#if defined(PLATFORM_RPI) || defined(PLATFORM_DRM)
|
|
#if defined(PLATFORM_RPI) || defined(PLATFORM_DRM)
|
|
int defaultMode; // Default keyboard mode
|
|
int defaultMode; // Default keyboard mode
|
|
struct termios defaultSettings; // Default keyboard settings
|
|
struct termios defaultSettings; // Default keyboard settings
|
|
@@ -1043,8 +1043,8 @@ void ToggleFullscreen(void)
|
|
else glfwSetWindowMonitor(CORE.Window.handle, NULL, CORE.Window.position.x, CORE.Window.position.y, CORE.Window.screen.width, CORE.Window.screen.height, GLFW_DONT_CARE);
|
|
else glfwSetWindowMonitor(CORE.Window.handle, NULL, CORE.Window.position.x, CORE.Window.position.y, CORE.Window.screen.width, CORE.Window.screen.height, GLFW_DONT_CARE);
|
|
|
|
|
|
CORE.Window.fullscreen = !CORE.Window.fullscreen; // Toggle fullscreen flag
|
|
CORE.Window.fullscreen = !CORE.Window.fullscreen; // Toggle fullscreen flag
|
|
- CORE.Window.flags ^= FLAG_FULLSCREEN_MODE;
|
|
|
|
-
|
|
|
|
|
|
+ CORE.Window.flags ^= FLAG_FULLSCREEN_MODE;
|
|
|
|
+
|
|
#endif
|
|
#endif
|
|
#if defined(PLATFORM_WEB)
|
|
#if defined(PLATFORM_WEB)
|
|
/*
|
|
/*
|
|
@@ -1134,24 +1134,24 @@ void SetWindowState(unsigned int flags)
|
|
glfwSwapInterval(1);
|
|
glfwSwapInterval(1);
|
|
CORE.Window.flags |= FLAG_VSYNC_HINT;
|
|
CORE.Window.flags |= FLAG_VSYNC_HINT;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_FULLSCREEN_MODE
|
|
// State change: FLAG_FULLSCREEN_MODE
|
|
if ((CORE.Window.flags & FLAG_FULLSCREEN_MODE) != (flags & FLAG_FULLSCREEN_MODE))
|
|
if ((CORE.Window.flags & FLAG_FULLSCREEN_MODE) != (flags & FLAG_FULLSCREEN_MODE))
|
|
{
|
|
{
|
|
ToggleFullscreen(); // NOTE: Window state flag updated inside function
|
|
ToggleFullscreen(); // NOTE: Window state flag updated inside function
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_RESIZABLE
|
|
// State change: FLAG_WINDOW_RESIZABLE
|
|
- if (((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) != (flags & FLAG_WINDOW_RESIZABLE)) && ((flags & FLAG_WINDOW_RESIZABLE) > 0))
|
|
|
|
|
|
+ if (((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) != (flags & FLAG_WINDOW_RESIZABLE)) && ((flags & FLAG_WINDOW_RESIZABLE) > 0))
|
|
{
|
|
{
|
|
#if defined(PLATFORM_DESKTOP)
|
|
#if defined(PLATFORM_DESKTOP)
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_RESIZABLE, GLFW_TRUE);
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_RESIZABLE, GLFW_TRUE);
|
|
CORE.Window.flags |= FLAG_WINDOW_RESIZABLE;
|
|
CORE.Window.flags |= FLAG_WINDOW_RESIZABLE;
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_UNDECORATED
|
|
// State change: FLAG_WINDOW_UNDECORATED
|
|
- if (((CORE.Window.flags & FLAG_WINDOW_UNDECORATED) != (flags & FLAG_WINDOW_UNDECORATED)) && (flags & FLAG_WINDOW_UNDECORATED))
|
|
|
|
|
|
+ if (((CORE.Window.flags & FLAG_WINDOW_UNDECORATED) != (flags & FLAG_WINDOW_UNDECORATED)) && (flags & FLAG_WINDOW_UNDECORATED))
|
|
{
|
|
{
|
|
#if defined(PLATFORM_DESKTOP)
|
|
#if defined(PLATFORM_DESKTOP)
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_DECORATED, GLFW_FALSE);
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_DECORATED, GLFW_FALSE);
|
|
@@ -1160,35 +1160,35 @@ void SetWindowState(unsigned int flags)
|
|
}
|
|
}
|
|
|
|
|
|
// State change: FLAG_WINDOW_HIDDEN
|
|
// State change: FLAG_WINDOW_HIDDEN
|
|
- if (((CORE.Window.flags & FLAG_WINDOW_HIDDEN) != (flags & FLAG_WINDOW_HIDDEN)) && ((flags & FLAG_WINDOW_HIDDEN) > 0))
|
|
|
|
|
|
+ if (((CORE.Window.flags & FLAG_WINDOW_HIDDEN) != (flags & FLAG_WINDOW_HIDDEN)) && ((flags & FLAG_WINDOW_HIDDEN) > 0))
|
|
{
|
|
{
|
|
glfwHideWindow(CORE.Window.handle);
|
|
glfwHideWindow(CORE.Window.handle);
|
|
CORE.Window.flags |= FLAG_WINDOW_HIDDEN;
|
|
CORE.Window.flags |= FLAG_WINDOW_HIDDEN;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_MINIMIZED
|
|
// State change: FLAG_WINDOW_MINIMIZED
|
|
if (((CORE.Window.flags & FLAG_WINDOW_MINIMIZED) != (flags & FLAG_WINDOW_MINIMIZED)) && ((flags & FLAG_WINDOW_MINIMIZED) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_MINIMIZED) != (flags & FLAG_WINDOW_MINIMIZED)) && ((flags & FLAG_WINDOW_MINIMIZED) > 0))
|
|
{
|
|
{
|
|
- //GLFW_ICONIFIED
|
|
|
|
|
|
+ //GLFW_ICONIFIED
|
|
MinimizeWindow(); // NOTE: Window state flag updated inside function
|
|
MinimizeWindow(); // NOTE: Window state flag updated inside function
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_MAXIMIZED
|
|
// State change: FLAG_WINDOW_MAXIMIZED
|
|
if (((CORE.Window.flags & FLAG_WINDOW_MAXIMIZED) != (flags & FLAG_WINDOW_MAXIMIZED)) && ((flags & FLAG_WINDOW_MAXIMIZED) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_MAXIMIZED) != (flags & FLAG_WINDOW_MAXIMIZED)) && ((flags & FLAG_WINDOW_MAXIMIZED) > 0))
|
|
{
|
|
{
|
|
//GLFW_MAXIMIZED
|
|
//GLFW_MAXIMIZED
|
|
MaximizeWindow(); // NOTE: Window state flag updated inside function
|
|
MaximizeWindow(); // NOTE: Window state flag updated inside function
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_UNFOCUSED
|
|
// State change: FLAG_WINDOW_UNFOCUSED
|
|
- if (((CORE.Window.flags & FLAG_WINDOW_UNFOCUSED) != (flags & FLAG_WINDOW_UNFOCUSED)) && ((flags & FLAG_WINDOW_UNFOCUSED) > 0))
|
|
|
|
|
|
+ if (((CORE.Window.flags & FLAG_WINDOW_UNFOCUSED) != (flags & FLAG_WINDOW_UNFOCUSED)) && ((flags & FLAG_WINDOW_UNFOCUSED) > 0))
|
|
{
|
|
{
|
|
#if defined(PLATFORM_DESKTOP)
|
|
#if defined(PLATFORM_DESKTOP)
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_FOCUS_ON_SHOW, GLFW_FALSE);
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_FOCUS_ON_SHOW, GLFW_FALSE);
|
|
CORE.Window.flags |= FLAG_WINDOW_UNFOCUSED;
|
|
CORE.Window.flags |= FLAG_WINDOW_UNFOCUSED;
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_TOPMOST
|
|
// State change: FLAG_WINDOW_TOPMOST
|
|
if (((CORE.Window.flags & FLAG_WINDOW_TOPMOST) != (flags & FLAG_WINDOW_TOPMOST)) && ((flags & FLAG_WINDOW_TOPMOST) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_TOPMOST) != (flags & FLAG_WINDOW_TOPMOST)) && ((flags & FLAG_WINDOW_TOPMOST) > 0))
|
|
{
|
|
{
|
|
@@ -1197,33 +1197,33 @@ void SetWindowState(unsigned int flags)
|
|
CORE.Window.flags |= FLAG_WINDOW_TOPMOST;
|
|
CORE.Window.flags |= FLAG_WINDOW_TOPMOST;
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_ALWAYS_RUN
|
|
// State change: FLAG_WINDOW_ALWAYS_RUN
|
|
- if (((CORE.Window.flags & FLAG_WINDOW_ALWAYS_RUN) != (flags & FLAG_WINDOW_ALWAYS_RUN)) && ((flags & FLAG_WINDOW_ALWAYS_RUN) > 0))
|
|
|
|
|
|
+ if (((CORE.Window.flags & FLAG_WINDOW_ALWAYS_RUN) != (flags & FLAG_WINDOW_ALWAYS_RUN)) && ((flags & FLAG_WINDOW_ALWAYS_RUN) > 0))
|
|
{
|
|
{
|
|
CORE.Window.flags |= FLAG_WINDOW_ALWAYS_RUN;
|
|
CORE.Window.flags |= FLAG_WINDOW_ALWAYS_RUN;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// The following states can not be changed after window creation
|
|
// The following states can not be changed after window creation
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_TRANSPARENT
|
|
// State change: FLAG_WINDOW_TRANSPARENT
|
|
if (((CORE.Window.flags & FLAG_WINDOW_TRANSPARENT) != (flags & FLAG_WINDOW_TRANSPARENT)) && ((flags & FLAG_WINDOW_TRANSPARENT) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_TRANSPARENT) != (flags & FLAG_WINDOW_TRANSPARENT)) && ((flags & FLAG_WINDOW_TRANSPARENT) > 0))
|
|
{
|
|
{
|
|
TRACELOG(LOG_WARNING, "WINDOW: Framebuffer transparency can only by configured before window initialization");
|
|
TRACELOG(LOG_WARNING, "WINDOW: Framebuffer transparency can only by configured before window initialization");
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_HIGHDPI
|
|
// State change: FLAG_WINDOW_HIGHDPI
|
|
if (((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) != (flags & FLAG_WINDOW_HIGHDPI)) && ((flags & FLAG_WINDOW_HIGHDPI) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) != (flags & FLAG_WINDOW_HIGHDPI)) && ((flags & FLAG_WINDOW_HIGHDPI) > 0))
|
|
{
|
|
{
|
|
TRACELOG(LOG_WARNING, "WINDOW: High DPI can only by configured before window initialization");
|
|
TRACELOG(LOG_WARNING, "WINDOW: High DPI can only by configured before window initialization");
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_MSAA_4X_HINT
|
|
// State change: FLAG_MSAA_4X_HINT
|
|
if (((CORE.Window.flags & FLAG_MSAA_4X_HINT) != (flags & FLAG_MSAA_4X_HINT)) && ((flags & FLAG_MSAA_4X_HINT) > 0))
|
|
if (((CORE.Window.flags & FLAG_MSAA_4X_HINT) != (flags & FLAG_MSAA_4X_HINT)) && ((flags & FLAG_MSAA_4X_HINT) > 0))
|
|
{
|
|
{
|
|
TRACELOG(LOG_WARNING, "WINDOW: MSAA can only by configured before window initialization");
|
|
TRACELOG(LOG_WARNING, "WINDOW: MSAA can only by configured before window initialization");
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_INTERLACED_HINT
|
|
// State change: FLAG_INTERLACED_HINT
|
|
if (((CORE.Window.flags & FLAG_INTERLACED_HINT) != (flags & FLAG_INTERLACED_HINT)) && ((flags & FLAG_INTERLACED_HINT) > 0))
|
|
if (((CORE.Window.flags & FLAG_INTERLACED_HINT) != (flags & FLAG_INTERLACED_HINT)) && ((flags & FLAG_INTERLACED_HINT) > 0))
|
|
{
|
|
{
|
|
@@ -1243,13 +1243,13 @@ void ClearWindowState(unsigned int flags)
|
|
glfwSwapInterval(0);
|
|
glfwSwapInterval(0);
|
|
CORE.Window.flags &= ~FLAG_VSYNC_HINT;
|
|
CORE.Window.flags &= ~FLAG_VSYNC_HINT;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_FULLSCREEN_MODE
|
|
// State change: FLAG_FULLSCREEN_MODE
|
|
if (((CORE.Window.flags & FLAG_FULLSCREEN_MODE) > 0) && ((flags & FLAG_FULLSCREEN_MODE) > 0))
|
|
if (((CORE.Window.flags & FLAG_FULLSCREEN_MODE) > 0) && ((flags & FLAG_FULLSCREEN_MODE) > 0))
|
|
{
|
|
{
|
|
ToggleFullscreen(); // NOTE: Window state flag updated inside function
|
|
ToggleFullscreen(); // NOTE: Window state flag updated inside function
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_RESIZABLE
|
|
// State change: FLAG_WINDOW_RESIZABLE
|
|
if (((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) > 0) && ((flags & FLAG_WINDOW_RESIZABLE) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) > 0) && ((flags & FLAG_WINDOW_RESIZABLE) > 0))
|
|
{
|
|
{
|
|
@@ -1258,9 +1258,9 @@ void ClearWindowState(unsigned int flags)
|
|
CORE.Window.flags &= ~FLAG_WINDOW_RESIZABLE;
|
|
CORE.Window.flags &= ~FLAG_WINDOW_RESIZABLE;
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_UNDECORATED
|
|
// State change: FLAG_WINDOW_UNDECORATED
|
|
- if (((CORE.Window.flags & FLAG_WINDOW_UNDECORATED) > 0) && ((flags & FLAG_WINDOW_UNDECORATED) > 0))
|
|
|
|
|
|
+ if (((CORE.Window.flags & FLAG_WINDOW_UNDECORATED) > 0) && ((flags & FLAG_WINDOW_UNDECORATED) > 0))
|
|
{
|
|
{
|
|
#if defined(PLATFORM_DESKTOP)
|
|
#if defined(PLATFORM_DESKTOP)
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_DECORATED, GLFW_TRUE);
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_DECORATED, GLFW_TRUE);
|
|
@@ -1269,33 +1269,33 @@ void ClearWindowState(unsigned int flags)
|
|
}
|
|
}
|
|
|
|
|
|
// State change: FLAG_WINDOW_HIDDEN
|
|
// State change: FLAG_WINDOW_HIDDEN
|
|
- if (((CORE.Window.flags & FLAG_WINDOW_HIDDEN) > 0) && ((flags & FLAG_WINDOW_HIDDEN) > 0))
|
|
|
|
|
|
+ if (((CORE.Window.flags & FLAG_WINDOW_HIDDEN) > 0) && ((flags & FLAG_WINDOW_HIDDEN) > 0))
|
|
{
|
|
{
|
|
glfwShowWindow(CORE.Window.handle);
|
|
glfwShowWindow(CORE.Window.handle);
|
|
CORE.Window.flags &= ~FLAG_WINDOW_HIDDEN;
|
|
CORE.Window.flags &= ~FLAG_WINDOW_HIDDEN;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_MINIMIZED
|
|
// State change: FLAG_WINDOW_MINIMIZED
|
|
if (((CORE.Window.flags & FLAG_WINDOW_MINIMIZED) > 0) && ((flags & FLAG_WINDOW_MINIMIZED) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_MINIMIZED) > 0) && ((flags & FLAG_WINDOW_MINIMIZED) > 0))
|
|
{
|
|
{
|
|
RestoreWindow(); // NOTE: Window state flag updated inside function
|
|
RestoreWindow(); // NOTE: Window state flag updated inside function
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_MAXIMIZED
|
|
// State change: FLAG_WINDOW_MAXIMIZED
|
|
if (((CORE.Window.flags & FLAG_WINDOW_MAXIMIZED) > 0) && ((flags & FLAG_WINDOW_MAXIMIZED) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_MAXIMIZED) > 0) && ((flags & FLAG_WINDOW_MAXIMIZED) > 0))
|
|
{
|
|
{
|
|
RestoreWindow(); // NOTE: Window state flag updated inside function
|
|
RestoreWindow(); // NOTE: Window state flag updated inside function
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_UNFOCUSED
|
|
// State change: FLAG_WINDOW_UNFOCUSED
|
|
- if (((CORE.Window.flags & FLAG_WINDOW_UNFOCUSED) > 0) && ((flags & FLAG_WINDOW_UNFOCUSED) > 0))
|
|
|
|
|
|
+ if (((CORE.Window.flags & FLAG_WINDOW_UNFOCUSED) > 0) && ((flags & FLAG_WINDOW_UNFOCUSED) > 0))
|
|
{
|
|
{
|
|
#if defined(PLATFORM_DESKTOP)
|
|
#if defined(PLATFORM_DESKTOP)
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_FOCUS_ON_SHOW, GLFW_TRUE);
|
|
glfwSetWindowAttrib(CORE.Window.handle, GLFW_FOCUS_ON_SHOW, GLFW_TRUE);
|
|
CORE.Window.flags &= ~FLAG_WINDOW_UNFOCUSED;
|
|
CORE.Window.flags &= ~FLAG_WINDOW_UNFOCUSED;
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_TOPMOST
|
|
// State change: FLAG_WINDOW_TOPMOST
|
|
if (((CORE.Window.flags & FLAG_WINDOW_TOPMOST) > 0) && ((flags & FLAG_WINDOW_TOPMOST) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_TOPMOST) > 0) && ((flags & FLAG_WINDOW_TOPMOST) > 0))
|
|
{
|
|
{
|
|
@@ -1304,33 +1304,33 @@ void ClearWindowState(unsigned int flags)
|
|
CORE.Window.flags &= ~FLAG_WINDOW_TOPMOST;
|
|
CORE.Window.flags &= ~FLAG_WINDOW_TOPMOST;
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_ALWAYS_RUN
|
|
// State change: FLAG_WINDOW_ALWAYS_RUN
|
|
- if (((CORE.Window.flags & FLAG_WINDOW_ALWAYS_RUN) > 0) && ((flags & FLAG_WINDOW_ALWAYS_RUN) > 0))
|
|
|
|
|
|
+ if (((CORE.Window.flags & FLAG_WINDOW_ALWAYS_RUN) > 0) && ((flags & FLAG_WINDOW_ALWAYS_RUN) > 0))
|
|
{
|
|
{
|
|
CORE.Window.flags &= ~FLAG_WINDOW_ALWAYS_RUN;
|
|
CORE.Window.flags &= ~FLAG_WINDOW_ALWAYS_RUN;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// The following states can not be changed after window creation
|
|
// The following states can not be changed after window creation
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_TRANSPARENT
|
|
// State change: FLAG_WINDOW_TRANSPARENT
|
|
if (((CORE.Window.flags & FLAG_WINDOW_TRANSPARENT) > 0) && ((flags & FLAG_WINDOW_TRANSPARENT) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_TRANSPARENT) > 0) && ((flags & FLAG_WINDOW_TRANSPARENT) > 0))
|
|
{
|
|
{
|
|
TRACELOG(LOG_WARNING, "WINDOW: Framebuffer transparency can only by configured before window initialization");
|
|
TRACELOG(LOG_WARNING, "WINDOW: Framebuffer transparency can only by configured before window initialization");
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_WINDOW_HIGHDPI
|
|
// State change: FLAG_WINDOW_HIGHDPI
|
|
if (((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0) && ((flags & FLAG_WINDOW_HIGHDPI) > 0))
|
|
if (((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0) && ((flags & FLAG_WINDOW_HIGHDPI) > 0))
|
|
{
|
|
{
|
|
TRACELOG(LOG_WARNING, "WINDOW: High DPI can only by configured before window initialization");
|
|
TRACELOG(LOG_WARNING, "WINDOW: High DPI can only by configured before window initialization");
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_MSAA_4X_HINT
|
|
// State change: FLAG_MSAA_4X_HINT
|
|
if (((CORE.Window.flags & FLAG_MSAA_4X_HINT) > 0) && ((flags & FLAG_MSAA_4X_HINT) > 0))
|
|
if (((CORE.Window.flags & FLAG_MSAA_4X_HINT) > 0) && ((flags & FLAG_MSAA_4X_HINT) > 0))
|
|
{
|
|
{
|
|
TRACELOG(LOG_WARNING, "WINDOW: MSAA can only by configured before window initialization");
|
|
TRACELOG(LOG_WARNING, "WINDOW: MSAA can only by configured before window initialization");
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// State change: FLAG_INTERLACED_HINT
|
|
// State change: FLAG_INTERLACED_HINT
|
|
if (((CORE.Window.flags & FLAG_INTERLACED_HINT) > 0) && ((flags & FLAG_INTERLACED_HINT) > 0))
|
|
if (((CORE.Window.flags & FLAG_INTERLACED_HINT) > 0) && ((flags & FLAG_INTERLACED_HINT) > 0))
|
|
{
|
|
{
|
|
@@ -1475,7 +1475,7 @@ Vector2 GetMonitorPosition(int monitor)
|
|
{
|
|
{
|
|
int x, y;
|
|
int x, y;
|
|
glfwGetMonitorPos(monitors[monitor], &x, &y);
|
|
glfwGetMonitorPos(monitors[monitor], &x, &y);
|
|
-
|
|
|
|
|
|
+
|
|
return (Vector2){ (float)x, (float)y };
|
|
return (Vector2){ (float)x, (float)y };
|
|
}
|
|
}
|
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
|
else TRACELOG(LOG_WARNING, "GLFW: Failed to find selected monitor");
|
|
@@ -2542,7 +2542,7 @@ unsigned char *DecompressData(unsigned char *compData, int compDataLength, int *
|
|
bool SaveStorageValue(unsigned int position, int value)
|
|
bool SaveStorageValue(unsigned int position, int value)
|
|
{
|
|
{
|
|
bool success = false;
|
|
bool success = false;
|
|
-
|
|
|
|
|
|
+
|
|
#if defined(SUPPORT_DATA_STORAGE)
|
|
#if defined(SUPPORT_DATA_STORAGE)
|
|
char path[512] = { 0 };
|
|
char path[512] = { 0 };
|
|
#if defined(PLATFORM_ANDROID)
|
|
#if defined(PLATFORM_ANDROID)
|
|
@@ -2737,7 +2737,7 @@ int GetKeyPressed(void)
|
|
value = CORE.Input.Keyboard.keyPressedQueue[0];
|
|
value = CORE.Input.Keyboard.keyPressedQueue[0];
|
|
|
|
|
|
// Shift elements 1 step toward the head.
|
|
// Shift elements 1 step toward the head.
|
|
- for (int i = 0; i < (CORE.Input.Keyboard.keyPressedQueueCount - 1); i++)
|
|
|
|
|
|
+ for (int i = 0; i < (CORE.Input.Keyboard.keyPressedQueueCount - 1); i++)
|
|
CORE.Input.Keyboard.keyPressedQueue[i] = CORE.Input.Keyboard.keyPressedQueue[i + 1];
|
|
CORE.Input.Keyboard.keyPressedQueue[i] = CORE.Input.Keyboard.keyPressedQueue[i + 1];
|
|
|
|
|
|
// Reset last character in the queue
|
|
// Reset last character in the queue
|
|
@@ -2759,7 +2759,7 @@ int GetCharPressed(void)
|
|
value = CORE.Input.Keyboard.charPressedQueue[0];
|
|
value = CORE.Input.Keyboard.charPressedQueue[0];
|
|
|
|
|
|
// Shift elements 1 step toward the head.
|
|
// Shift elements 1 step toward the head.
|
|
- for (int i = 0; i < (CORE.Input.Keyboard.charPressedQueueCount - 1); i++)
|
|
|
|
|
|
+ for (int i = 0; i < (CORE.Input.Keyboard.charPressedQueueCount - 1); i++)
|
|
CORE.Input.Keyboard.charPressedQueue[i] = CORE.Input.Keyboard.charPressedQueue[i + 1];
|
|
CORE.Input.Keyboard.charPressedQueue[i] = CORE.Input.Keyboard.charPressedQueue[i + 1];
|
|
|
|
|
|
// Reset last character in the queue
|
|
// Reset last character in the queue
|
|
@@ -3170,13 +3170,13 @@ static bool InitGraphicsDevice(int width, int height)
|
|
|
|
|
|
if ((CORE.Window.flags & FLAG_WINDOW_HIDDEN) > 0) glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // Visible window
|
|
if ((CORE.Window.flags & FLAG_WINDOW_HIDDEN) > 0) glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // Visible window
|
|
else glfwWindowHint(GLFW_VISIBLE, GLFW_TRUE); // Window initially hidden
|
|
else glfwWindowHint(GLFW_VISIBLE, GLFW_TRUE); // Window initially hidden
|
|
-
|
|
|
|
|
|
+
|
|
if ((CORE.Window.flags & FLAG_WINDOW_UNDECORATED) > 0) glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); // Border and buttons on Window
|
|
if ((CORE.Window.flags & FLAG_WINDOW_UNDECORATED) > 0) glfwWindowHint(GLFW_DECORATED, GLFW_FALSE); // Border and buttons on Window
|
|
else glfwWindowHint(GLFW_DECORATED, GLFW_TRUE); // Decorated window
|
|
else glfwWindowHint(GLFW_DECORATED, GLFW_TRUE); // Decorated window
|
|
|
|
|
|
if ((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) > 0) glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // Resizable window
|
|
if ((CORE.Window.flags & FLAG_WINDOW_RESIZABLE) > 0) glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // Resizable window
|
|
else glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); // Avoid window being resizable
|
|
else glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); // Avoid window being resizable
|
|
-
|
|
|
|
|
|
+
|
|
// Disable FLAG_WINDOW_MINIMIZED, not supported on initialization
|
|
// Disable FLAG_WINDOW_MINIMIZED, not supported on initialization
|
|
if ((CORE.Window.flags & FLAG_WINDOW_MINIMIZED) > 0) CORE.Window.flags &= ~FLAG_WINDOW_MINIMIZED;
|
|
if ((CORE.Window.flags & FLAG_WINDOW_MINIMIZED) > 0) CORE.Window.flags &= ~FLAG_WINDOW_MINIMIZED;
|
|
|
|
|
|
@@ -3185,7 +3185,7 @@ static bool InitGraphicsDevice(int width, int height)
|
|
|
|
|
|
if ((CORE.Window.flags & FLAG_WINDOW_UNFOCUSED) > 0) glfwWindowHint(GLFW_FOCUSED, GLFW_FALSE);
|
|
if ((CORE.Window.flags & FLAG_WINDOW_UNFOCUSED) > 0) glfwWindowHint(GLFW_FOCUSED, GLFW_FALSE);
|
|
else glfwWindowHint(GLFW_FOCUSED, GLFW_TRUE);
|
|
else glfwWindowHint(GLFW_FOCUSED, GLFW_TRUE);
|
|
-
|
|
|
|
|
|
+
|
|
if ((CORE.Window.flags & FLAG_WINDOW_TOPMOST) > 0) glfwWindowHint(GLFW_FLOATING, GLFW_TRUE);
|
|
if ((CORE.Window.flags & FLAG_WINDOW_TOPMOST) > 0) glfwWindowHint(GLFW_FLOATING, GLFW_TRUE);
|
|
else glfwWindowHint(GLFW_FLOATING, GLFW_FALSE);
|
|
else glfwWindowHint(GLFW_FLOATING, GLFW_FALSE);
|
|
|
|
|
|
@@ -3335,7 +3335,7 @@ static bool InitGraphicsDevice(int width, int height)
|
|
TRACELOG(LOG_INFO, " > Screen size: %i x %i", CORE.Window.screen.width, CORE.Window.screen.height);
|
|
TRACELOG(LOG_INFO, " > Screen size: %i x %i", CORE.Window.screen.width, CORE.Window.screen.height);
|
|
TRACELOG(LOG_INFO, " > Viewport offsets: %i, %i", CORE.Window.renderOffset.x, CORE.Window.renderOffset.y);
|
|
TRACELOG(LOG_INFO, " > Viewport offsets: %i, %i", CORE.Window.renderOffset.x, CORE.Window.renderOffset.y);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// Set window callback events
|
|
// Set window callback events
|
|
glfwSetWindowSizeCallback(CORE.Window.handle, WindowSizeCallback); // NOTE: Resizing not allowed by default!
|
|
glfwSetWindowSizeCallback(CORE.Window.handle, WindowSizeCallback); // NOTE: Resizing not allowed by default!
|
|
#if !defined(PLATFORM_WEB)
|
|
#if !defined(PLATFORM_WEB)
|
|
@@ -3810,7 +3810,7 @@ static bool InitGraphicsDevice(int width, int height)
|
|
TRACELOG(LOG_WARNING, "DISPLAY: Failed to get EGL config attribute: 0x%x", eglGetError());
|
|
TRACELOG(LOG_WARNING, "DISPLAY: Failed to get EGL config attribute: 0x%x", eglGetError());
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
if (GBM_FORMAT_ARGB8888 == id)
|
|
if (GBM_FORMAT_ARGB8888 == id)
|
|
{
|
|
{
|
|
TRACELOG(LOG_TRACE, "DISPLAY: using EGL config %d", i);
|
|
TRACELOG(LOG_TRACE, "DISPLAY: using EGL config %d", i);
|
|
@@ -3960,7 +3960,7 @@ static bool InitGraphicsDevice(int width, int height)
|
|
int fbHeight = CORE.Window.render.height;
|
|
int fbHeight = CORE.Window.render.height;
|
|
|
|
|
|
#if defined(PLATFORM_DESKTOP)
|
|
#if defined(PLATFORM_DESKTOP)
|
|
- if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0)
|
|
|
|
|
|
+ if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0)
|
|
{
|
|
{
|
|
glfwGetFramebufferSize(CORE.Window.handle, &fbWidth, &fbHeight);
|
|
glfwGetFramebufferSize(CORE.Window.handle, &fbWidth, &fbHeight);
|
|
|
|
|
|
@@ -4054,13 +4054,13 @@ static void SetupFramebuffer(int width, int height)
|
|
{
|
|
{
|
|
// Required screen size is smaller than display size
|
|
// Required screen size is smaller than display size
|
|
TRACELOG(LOG_INFO, "DISPLAY: Upscaling required: Screen size (%ix%i) smaller than display size (%ix%i)", CORE.Window.screen.width, CORE.Window.screen.height, CORE.Window.display.width, CORE.Window.display.height);
|
|
TRACELOG(LOG_INFO, "DISPLAY: Upscaling required: Screen size (%ix%i) smaller than display size (%ix%i)", CORE.Window.screen.width, CORE.Window.screen.height, CORE.Window.display.width, CORE.Window.display.height);
|
|
-
|
|
|
|
|
|
+
|
|
if ((CORE.Window.screen.width == 0) || (CORE.Window.screen.height == 0))
|
|
if ((CORE.Window.screen.width == 0) || (CORE.Window.screen.height == 0))
|
|
{
|
|
{
|
|
CORE.Window.screen.width = CORE.Window.display.width;
|
|
CORE.Window.screen.width = CORE.Window.display.width;
|
|
CORE.Window.screen.height = CORE.Window.display.height;
|
|
CORE.Window.screen.height = CORE.Window.display.height;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// Upscaling to fit display with border-bars
|
|
// Upscaling to fit display with border-bars
|
|
float displayRatio = (float)CORE.Window.display.width/(float)CORE.Window.display.height;
|
|
float displayRatio = (float)CORE.Window.display.width/(float)CORE.Window.display.height;
|
|
float screenRatio = (float)CORE.Window.screen.width/(float)CORE.Window.screen.height;
|
|
float screenRatio = (float)CORE.Window.screen.width/(float)CORE.Window.screen.height;
|
|
@@ -4562,9 +4562,9 @@ static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, i
|
|
if (gifRecording)
|
|
if (gifRecording)
|
|
{
|
|
{
|
|
gifRecording = false;
|
|
gifRecording = false;
|
|
-
|
|
|
|
|
|
+
|
|
MsfGifResult result = msf_gif_end(&gifState);
|
|
MsfGifResult result = msf_gif_end(&gifState);
|
|
-
|
|
|
|
|
|
+
|
|
char path[512] = { 0 };
|
|
char path[512] = { 0 };
|
|
#if defined(PLATFORM_ANDROID)
|
|
#if defined(PLATFORM_ANDROID)
|
|
strcpy(path, CORE.Android.internalDataPath);
|
|
strcpy(path, CORE.Android.internalDataPath);
|
|
@@ -4572,7 +4572,7 @@ static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, i
|
|
#else
|
|
#else
|
|
strcpy(path, TextFormat("./screenrec%03i.gif", screenshotCounter));
|
|
strcpy(path, TextFormat("./screenrec%03i.gif", screenshotCounter));
|
|
#endif
|
|
#endif
|
|
-
|
|
|
|
|
|
+
|
|
SaveFileData(path, result.data, (unsigned int)result.dataSize);
|
|
SaveFileData(path, result.data, (unsigned int)result.dataSize);
|
|
msf_gif_free(result);
|
|
msf_gif_free(result);
|
|
|
|
|
|
@@ -4610,7 +4610,7 @@ static void KeyCallback(GLFWwindow *window, int key, int scancode, int action, i
|
|
// to work properly with our implementation (IsKeyDown/IsKeyUp checks)
|
|
// to work properly with our implementation (IsKeyDown/IsKeyUp checks)
|
|
if (action == GLFW_RELEASE) CORE.Input.Keyboard.currentKeyState[key] = 0;
|
|
if (action == GLFW_RELEASE) CORE.Input.Keyboard.currentKeyState[key] = 0;
|
|
else CORE.Input.Keyboard.currentKeyState[key] = 1;
|
|
else CORE.Input.Keyboard.currentKeyState[key] = 1;
|
|
-
|
|
|
|
|
|
+
|
|
// Check if there is space available in the key queue
|
|
// Check if there is space available in the key queue
|
|
if ((CORE.Input.Keyboard.keyPressedQueueCount < MAX_KEY_PRESSED_QUEUE) && (action == GLFW_RELEASE))
|
|
if ((CORE.Input.Keyboard.keyPressedQueueCount < MAX_KEY_PRESSED_QUEUE) && (action == GLFW_RELEASE))
|
|
{
|
|
{
|
|
@@ -5912,7 +5912,7 @@ void UWPKeyDownEvent(int key, bool down, bool controlKey)
|
|
if (gifRecording)
|
|
if (gifRecording)
|
|
{
|
|
{
|
|
gifRecording = false;
|
|
gifRecording = false;
|
|
-
|
|
|
|
|
|
+
|
|
MsfGifResult result = msf_gif_end(&gifState);
|
|
MsfGifResult result = msf_gif_end(&gifState);
|
|
|
|
|
|
SaveFileData(TextFormat("%s/screenrec%03i.gif", CORE.UWP.internalDataPath, screenshotCounter), result.data, result.dataSize);
|
|
SaveFileData(TextFormat("%s/screenrec%03i.gif", CORE.UWP.internalDataPath, screenshotCounter), result.data, result.dataSize);
|