From 0bcf79ce287d6180cedf7422c8a947e61247e81e Mon Sep 17 00:00:00 2001 From: Krzysztof Szenk Date: Thu, 8 Jan 2026 17:26:56 +0100 Subject: [PATCH 01/11] [#5455] Fix for: Fix window width calculation by adding wOffset (#5480) --- src/external/RGFW.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/external/RGFW.h b/src/external/RGFW.h index 0ab3858cf..c01ce1177 100644 --- a/src/external/RGFW.h +++ b/src/external/RGFW.h @@ -669,7 +669,8 @@ typedef struct RGFW_event { typedef struct RGFW_window_src { HWND window; /*!< source window */ HDC hdc; /*!< source HDC */ - u32 hOffset; /*!< height offset for window */ + i32 wOffset; /*!< width offset for window */ + i32 hOffset; /*!< height offset for window */ HICON hIconSmall, hIconBig; /*!< source window icons */ #if (defined(RGFW_OPENGL)) && !defined(RGFW_OSMESA) && !defined(RGFW_EGL) HGLRC ctx; /*!< source graphics context */ @@ -6537,11 +6538,11 @@ LRESULT CALLBACK WndProcW(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) else windowRect.bottom = windowRect.top + newHeight; } - RGFW_window_resize(win, RGFW_AREA((windowRect.right - windowRect.left), + RGFW_window_resize(win, RGFW_AREA((u32)(windowRect.right - windowRect.left) - (u32)win->src.wOffset, (u32)(windowRect.bottom - windowRect.top) - (u32)win->src.hOffset)); } - win->r.w = windowRect.right - windowRect.left; + win->r.w = (windowRect.right - windowRect.left) - (i32)win->src.wOffset; win->r.h = (windowRect.bottom - windowRect.top) - (i32)win->src.hOffset; RGFW_eventQueuePushEx(e.type = RGFW_windowResized; e._win = win); RGFW_windowResizedCallback(win, win->r); @@ -6561,12 +6562,12 @@ LRESULT CALLBACK WndProcW(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) #endif case WM_GETMINMAXINFO: { MINMAXINFO* mmi = (MINMAXINFO*) lParam; - mmi->ptMinTrackSize.x = (LONG)win->src.minSize.w; + mmi->ptMinTrackSize.x = (LONG)(win->src.minSize.w + win->src.wOffset); mmi->ptMinTrackSize.y = (LONG)(win->src.minSize.h + win->src.hOffset); if (win->src.maxSize.w == 0 && win->src.maxSize.h == 0) return DefWindowProcW(hWnd, message, wParam, lParam); - mmi->ptMaxTrackSize.x = (LONG)win->src.maxSize.w; + mmi->ptMaxTrackSize.x = (LONG)(win->src.maxSize.w + win->src.wOffset); mmi->ptMaxTrackSize.y = (LONG)(win->src.maxSize.h + win->src.hOffset); return DefWindowProcW(hWnd, message, wParam, lParam); } @@ -6969,7 +6970,7 @@ RGFW_window* RGFW_createWindowPtr(const char* name, RGFW_rect rect, RGFW_windowF win->src.hOffset = (u32)(windowRect.bottom - windowRect.top) - (u32)(clientRect.bottom - clientRect.top); win->src.wOffset = (u32)(windowRect.right - windowRect.left) - (u32)(clientRect.right - clientRect.left); - win->src.window = CreateWindowW(Class.lpszClassName, (wchar_t*)wide_name, window_style, win->r.x, win->r.y, win->r.w, win->r.h + (i32)win->src.hOffset, 0, 0, inh, 0); + win->src.window = CreateWindowW(Class.lpszClassName, (wchar_t*)wide_name, window_style, win->r.x, win->r.y, win->r.w + (i32)win->src.wOffset, win->r.h + (i32)win->src.hOffset, 0, 0, inh, 0); SetPropW(win->src.window, L"RGFW", win); RGFW_window_resize(win, RGFW_AREA(win->r.w, win->r.h)); /* so WM_GETMINMAXINFO gets called again */ @@ -7065,7 +7066,7 @@ void RGFW_window_setFullscreen(RGFW_window* win, RGFW_bool fullscreen) { if (fullscreen == RGFW_FALSE) { RGFW_window_setBorder(win, 1); - SetWindowPos(win->src.window, HWND_NOTOPMOST, win->_oldRect.x, win->_oldRect.y, win->_oldRect.w, win->_oldRect.h + (i32)win->src.hOffset, + SetWindowPos(win->src.window, HWND_NOTOPMOST, win->_oldRect.x, win->_oldRect.y, win->_oldRect.w + (i32)win->src.wOffset, win->_oldRect.h + (i32)win->src.hOffset, SWP_NOOWNERZORDER | SWP_FRAMECHANGED); win->_flags &= ~(u32)RGFW_windowFullscreen; @@ -7899,7 +7900,7 @@ void RGFW_window_resize(RGFW_window* win, RGFW_area a) { win->r.w = (i32)a.w; win->r.h = (i32)a.h; - SetWindowPos(win->src.window, HWND_TOP, 0, 0, win->r.w, win->r.h + (i32)win->src.hOffset, SWP_NOMOVE); + SetWindowPos(win->src.window, HWND_TOP, 0, 0, win->r.w + (i32)win->src.wOffset, win->r.h + (i32)win->src.hOffset, SWP_NOMOVE); } From 16e6d325b9f787bb99dc11c6504f8b73d37706ac Mon Sep 17 00:00:00 2001 From: Marcos Paccor Date: Thu, 8 Jan 2026 18:04:09 -0300 Subject: [PATCH 02/11] [raudio] Fix freeing the wrong memory (#5481) --- src/raudio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/raudio.c b/src/raudio.c index 98326727f..cfb86cdbd 100644 --- a/src/raudio.c +++ b/src/raudio.c @@ -1249,7 +1249,7 @@ void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels) frameCount = (ma_uint32)ma_convert_frames(data, frameCount, formatOut, channels, sampleRate, wave->data, frameCountIn, formatIn, wave->channels, wave->sampleRate); if (frameCount == 0) { - RL_FREE(wave->data); + RL_FREE(data); TRACELOG(LOG_WARNING, "WAVE: Failed format conversion"); return; } From 5cc42c1b805cd07227d48ee73c9c21c35fb528aa Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Jan 2026 19:55:26 +0100 Subject: [PATCH 03/11] Updated file name --- examples/textures/textures_framebuffer_rendering.c | 2 +- ...ering.png => textures_framebuffer_rendering.png} | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename examples/textures/{textures_frame_buffer_rendering.png => textures_framebuffer_rendering.png} (100%) diff --git a/examples/textures/textures_framebuffer_rendering.c b/examples/textures/textures_framebuffer_rendering.c index a8b466187..484192739 100644 --- a/examples/textures/textures_framebuffer_rendering.c +++ b/examples/textures/textures_framebuffer_rendering.c @@ -11,7 +11,7 @@ * Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, * BSD-like license that allows static linking with closed source software * -* Copyright (c) 2026-2026 Jack Boakes (@jackboakes) +* Copyright (c) 2026 Jack Boakes (@jackboakes) * ********************************************************************************************/ diff --git a/examples/textures/textures_frame_buffer_rendering.png b/examples/textures/textures_framebuffer_rendering.png similarity index 100% rename from examples/textures/textures_frame_buffer_rendering.png rename to examples/textures/textures_framebuffer_rendering.png From 4cf844b74ea9a3c5e5ab6cd57b4b7ff1eafe275b Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Jan 2026 19:55:31 +0100 Subject: [PATCH 04/11] Update raylib.h --- src/raylib.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/raylib.h b/src/raylib.h index 2d411f896..6eae8411e 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -570,8 +570,7 @@ typedef enum { } TraceLogLevel; // Keyboard keys (US keyboard layout) -// NOTE: Use GetKeyPressed() to allow redefining -// required keys for alternative layouts +// NOTE: Use GetKeyPressed() to allow redefining required keys for alternative layouts typedef enum { KEY_NULL = 0, // Key: NULL, used for no key pressed // Alphanumeric keys From b365d23f49d352019eb29f2f4e52d481c48c70dd Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Jan 2026 19:59:38 +0100 Subject: [PATCH 05/11] Update examples_list.txt --- examples/examples_list.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/examples_list.txt b/examples/examples_list.txt index 96d64ca84..ba3a16d08 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -124,6 +124,7 @@ textures;textures_screen_buffer;★★☆☆;5.5;5.5;2025;2025;"Agnis Aldiņš"; textures;textures_textured_curve;★★★☆;4.5;4.5;2022;2025;"Jeffery Myers";@JeffM2501 textures;textures_sprite_stacking;★★☆☆;5.6-dev;6.0;2025;2025;"Robin";@RobinsAviary textures;textures_cellular_automata;★★☆☆;5.6;5.6;2025;2025;"Jordi Santonja";@JordSant +texture;textures_framebuffer_rendering;★★☆☆;5.6;5.6;2026;2026;"Jack Boakes";@jackboakes text;text_sprite_fonts;★☆☆☆;1.7;3.7;2017;2025;"Ramon Santamaria";@raysan5 text;text_font_spritefont;★☆☆☆;1.0;1.0;2014;2025;"Ramon Santamaria";@raysan5 text;text_font_filters;★★☆☆;1.3;4.2;2015;2025;"Ramon Santamaria";@raysan5 From cfd5c3f2abe2a54cfa5cc60806601455feafc769 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Jan 2026 20:02:29 +0100 Subject: [PATCH 06/11] Update examples_list.txt --- examples/examples_list.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/examples_list.txt b/examples/examples_list.txt index ba3a16d08..c825e137d 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -124,7 +124,7 @@ textures;textures_screen_buffer;★★☆☆;5.5;5.5;2025;2025;"Agnis Aldiņš"; textures;textures_textured_curve;★★★☆;4.5;4.5;2022;2025;"Jeffery Myers";@JeffM2501 textures;textures_sprite_stacking;★★☆☆;5.6-dev;6.0;2025;2025;"Robin";@RobinsAviary textures;textures_cellular_automata;★★☆☆;5.6;5.6;2025;2025;"Jordi Santonja";@JordSant -texture;textures_framebuffer_rendering;★★☆☆;5.6;5.6;2026;2026;"Jack Boakes";@jackboakes +textures;textures_framebuffer_rendering;★★☆☆;5.6;5.6;2026;2026;"Jack Boakes";@jackboakes text;text_sprite_fonts;★☆☆☆;1.7;3.7;2017;2025;"Ramon Santamaria";@raysan5 text;text_font_spritefont;★☆☆☆;1.0;1.0;2014;2025;"Ramon Santamaria";@raysan5 text;text_font_filters;★★☆☆;1.3;4.2;2015;2025;"Ramon Santamaria";@raysan5 From 7218b674e5cab56a89ffad8e4f9ec5cea1e1c06e Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Jan 2026 20:05:46 +0100 Subject: [PATCH 07/11] REXM: Updated: `textures_framebuffer_rendering` --- examples/Makefile | 1 + examples/Makefile.Web | 4 + .../textures_framebuffer_rendering.vcxproj | 569 ++++++++++++++++++ tools/rexm/reports/examples_issues.md | 1 + tools/rexm/reports/examples_validation.md | 3 +- 5 files changed, 577 insertions(+), 1 deletion(-) create mode 100644 projects/VS2022/examples/textures_framebuffer_rendering.vcxproj diff --git a/examples/Makefile b/examples/Makefile index 3cbc2ffc1..a402ae692 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -608,6 +608,7 @@ TEXTURES = \ textures/textures_bunnymark \ textures/textures_cellular_automata \ textures/textures_fog_of_war \ + textures/textures_framebuffer_rendering \ textures/textures_gif_player \ textures/textures_image_channel \ textures/textures_image_drawing \ diff --git a/examples/Makefile.Web b/examples/Makefile.Web index fe4de1330..556900a76 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -594,6 +594,7 @@ TEXTURES = \ textures/textures_bunnymark \ textures/textures_cellular_automata \ textures/textures_fog_of_war \ + textures/textures_framebuffer_rendering \ textures/textures_gif_player \ textures/textures_image_channel \ textures/textures_image_drawing \ @@ -1009,6 +1010,9 @@ textures/textures_cellular_automata: textures/textures_cellular_automata.c textures/textures_fog_of_war: textures/textures_fog_of_war.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) +textures/textures_framebuffer_rendering: textures/textures_framebuffer_rendering.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + textures/textures_gif_player: textures/textures_gif_player.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ --preload-file textures/resources/scarfy_run.gif@resources/scarfy_run.gif diff --git a/projects/VS2022/examples/textures_framebuffer_rendering.vcxproj b/projects/VS2022/examples/textures_framebuffer_rendering.vcxproj new file mode 100644 index 000000000..3a7eeeb35 --- /dev/null +++ b/projects/VS2022/examples/textures_framebuffer_rendering.vcxproj @@ -0,0 +1,569 @@ + + + + + Debug.DLL + ARM64 + + + Debug.DLL + Win32 + + + Debug.DLL + x64 + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release.DLL + ARM64 + + + Release.DLL + Win32 + + + Release.DLL + x64 + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E} + Win32Proj + textures_framebuffer_rendering + 10.0 + textures_framebuffer_rendering + + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\textures + WindowsLocalDebugger + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + + + + + + + {e89d61ac-55de-4482-afd4-df7242ebc859} + + + + + + \ No newline at end of file diff --git a/tools/rexm/reports/examples_issues.md b/tools/rexm/reports/examples_issues.md index 081170806..7b39c7a0b 100644 --- a/tools/rexm/reports/examples_issues.md +++ b/tools/rexm/reports/examples_issues.md @@ -21,6 +21,7 @@ Example elements validated: | **EXAMPLE NAME** | [C] | [CAT]| [INFO]|[PNG]|[WPNG]| [RES]| [MK] |[MKWEB]| [VCX]| [SOL]|[RDME]|[JS] | [WOUT]|[WMETA]| |:---------------------------------|:---:|:----:|:-----:|:---:|:----:|:----:|:----:|:-----:|:----:|:----:|:----:|:---:|:-----:|:-----:| | core_highdpi_testbed | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| core_keyboard_testbed | ✔ | ✔ | ✔ | ❌ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | rlgl_standalone | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | rlgl_compute_shader | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | easings_testbed | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | diff --git a/tools/rexm/reports/examples_validation.md b/tools/rexm/reports/examples_validation.md index 6770f3c37..8d3f699ca 100644 --- a/tools/rexm/reports/examples_validation.md +++ b/tools/rexm/reports/examples_validation.md @@ -105,6 +105,7 @@ Example elements validated: | shapes_rlgl_triangle | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | shapes_ball_physics | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | shapes_penrose_tile | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| shapes_hilbert_curve | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | textures_logo_raylib | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | textures_srcrec_dstrec | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | textures_image_drawing | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | @@ -134,6 +135,7 @@ Example elements validated: | textures_textured_curve | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | textures_sprite_stacking | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | textures_cellular_automata | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| textures_framebuffer_rendering | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | text_sprite_fonts | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | text_font_spritefont | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | text_font_filters | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | @@ -225,4 +227,3 @@ Example elements validated: | raylib_opengl_interop | ✔ | ❌ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | | embedded_files_loading | ✔ | ❌ | ✔ | ✔ | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | web_basic_window | ✔ | ❌ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| shapes_hilbert_curve | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | From 11f7db2dd8c00b397980fab82372ef17c4b9a709 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Jan 2026 20:06:53 +0100 Subject: [PATCH 08/11] REXM: ADDED: `core_keyboard_testbed` --- examples/Makefile | 1 + examples/Makefile.Web | 4 + examples/README.md | 8 +- examples/core/core_keyboard_testbed.c | 333 ++++++++++ examples/core/core_keyboard_testbed.png | Bin 0 -> 17631 bytes examples/examples_list.txt | 1 + .../examples/core_keyboard_testbed.vcxproj | 569 ++++++++++++++++++ projects/VS2022/raylib.sln | 54 ++ tools/rexm/reports/examples_issues.md | 1 - tools/rexm/reports/examples_validation.md | 1 + 10 files changed, 968 insertions(+), 4 deletions(-) create mode 100644 examples/core/core_keyboard_testbed.c create mode 100644 examples/core/core_keyboard_testbed.png create mode 100644 projects/VS2022/examples/core_keyboard_testbed.vcxproj diff --git a/examples/Makefile b/examples/Makefile index a402ae692..acfcb0857 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -544,6 +544,7 @@ CORE = \ core/core_input_mouse_wheel \ core/core_input_multitouch \ core/core_input_virtual_controls \ + core/core_keyboard_testbed \ core/core_monitor_detector \ core/core_random_sequence \ core/core_random_values \ diff --git a/examples/Makefile.Web b/examples/Makefile.Web index 556900a76..3841dff29 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -530,6 +530,7 @@ CORE = \ core/core_input_mouse_wheel \ core/core_input_multitouch \ core/core_input_virtual_controls \ + core/core_keyboard_testbed \ core/core_monitor_detector \ core/core_random_sequence \ core/core_random_values \ @@ -820,6 +821,9 @@ core/core_input_multitouch: core/core_input_multitouch.c core/core_input_virtual_controls: core/core_input_virtual_controls.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) +core/core_keyboard_testbed: core/core_keyboard_testbed.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) + core/core_monitor_detector: core/core_monitor_detector.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) diff --git a/examples/README.md b/examples/README.md index d9b03669d..6b2c1950b 100644 --- a/examples/README.md +++ b/examples/README.md @@ -17,9 +17,9 @@ You may find it easier to use than other toolchains, especially when it comes to - `zig build [module]` to compile all examples for a module (e.g. `zig build core`) - `zig build [example]` to compile _and run_ a particular example (e.g. `zig build core_basic_window`) -## EXAMPLES COLLECTION [TOTAL: 206] +## EXAMPLES COLLECTION [TOTAL: 208] -### category: core [47] +### category: core [48] Examples using raylib [core](../src/rcore.c) module platform functionality: window creation, inputs, drawing modes and system functionality. @@ -72,6 +72,7 @@ Examples using raylib [core](../src/rcore.c) module platform functionality: wind | [core_clipboard_text](core/core_clipboard_text.c) | core_clipboard_text | ⭐⭐☆☆ | 5.6-dev | 5.6-dev | [Ananth S](https://github.com/Ananth1839) | | [core_text_file_loading](core/core_text_file_loading.c) | core_text_file_loading | ⭐☆☆☆ | 5.5 | 5.6 | [Aanjishnu Bhattacharyya](https://github.com/NimComPoo-04) | | [core_compute_hash](core/core_compute_hash.c) | core_compute_hash | ⭐⭐☆☆ | 5.6-dev | 5.6-dev | [Ramon Santamaria](https://github.com/raysan5) | +| [core_keyboard_testbed](core/core_keyboard_testbed.c) | core_keyboard_testbed | ⭐⭐☆☆ | 5.6 | 5.6 | [Ramon Santamaria](https://github.com/raysan5) | ### category: shapes [39] @@ -119,7 +120,7 @@ Examples using raylib shapes drawing functionality, provided by raylib [shapes]( | [shapes_penrose_tile](shapes/shapes_penrose_tile.c) | shapes_penrose_tile | ⭐⭐⭐⭐️ | 5.5 | 5.6-dev | [David Buzatto](https://github.com/davidbuzatto) | | [shapes_hilbert_curve](shapes/shapes_hilbert_curve.c) | shapes_hilbert_curve | ⭐⭐⭐☆ | 5.6 | 5.6 | [Hamza RAHAL](https://github.com/hmz-rhl) | -### category: textures [29] +### category: textures [30] Examples using raylib textures functionality, including image/textures loading/generation and drawing, provided by raylib [textures](../src/rtextures.c) module. @@ -154,6 +155,7 @@ Examples using raylib textures functionality, including image/textures loading/g | [textures_textured_curve](textures/textures_textured_curve.c) | textures_textured_curve | ⭐⭐⭐☆ | 4.5 | 4.5 | [Jeffery Myers](https://github.com/JeffM2501) | | [textures_sprite_stacking](textures/textures_sprite_stacking.c) | textures_sprite_stacking | ⭐⭐☆☆ | 5.6-dev | 6.0 | [Robin](https://github.com/RobinsAviary) | | [textures_cellular_automata](textures/textures_cellular_automata.c) | textures_cellular_automata | ⭐⭐☆☆ | 5.6 | 5.6 | [Jordi Santonja](https://github.com/JordSant) | +| [textures_framebuffer_rendering](textures/textures_framebuffer_rendering.c) | textures_framebuffer_rendering | ⭐⭐☆☆ | 5.6 | 5.6 | [Jack Boakes](https://github.com/jackboakes) | ### category: text [16] diff --git a/examples/core/core_keyboard_testbed.c b/examples/core/core_keyboard_testbed.c new file mode 100644 index 000000000..904e9c90a --- /dev/null +++ b/examples/core/core_keyboard_testbed.c @@ -0,0 +1,333 @@ +/******************************************************************************************* +* +* raylib [core] example - keyboard testbed +* +* Example complexity rating: [★★☆☆] 2/4 +* +* NOTE: raylib defined keys refer to ENG-US Keyboard layout, +* mapping to other layouts is up to the user +* +* Example originally created with raylib 5.6, last time updated with raylib 5.6 +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2026 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ + +#include "raylib.h" + +#define KEY_REC_SPACING 4 // Space in pixels between key rectangles + +//------------------------------------------------------------------------------------ +// Module Functions Declaration +//------------------------------------------------------------------------------------ +static const char *GetKeyText(int key); +static void GuiKeyboardKey(Rectangle bounds, int key); + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [core] example - keyboard testbed"); + SetExitKey(KEY_NULL); // Avoid exit on KEY_ESCAPE + + // Keyboard line 01 + int line01KeyWidths[15] = { 0 }; + for (int i = 0; i < 15; i++) line01KeyWidths[i] = 45; + line01KeyWidths[13] = 62; // PRINTSCREEN + int line01Keys[15] = { + KEY_ESCAPE, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, + KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, + KEY_F12, KEY_PRINT_SCREEN, KEY_PAUSE + }; + + // Keyboard line 02 + int line02KeyWidths[15] = { 0 }; + for (int i = 0; i < 15; i++) line02KeyWidths[i] = 45; + line02KeyWidths[0] = 25; // GRAVE + line02KeyWidths[13] = 82; // BACKSPACE + int line02Keys[15] = { + KEY_GRAVE, KEY_ONE, KEY_TWO, KEY_THREE, KEY_FOUR, + KEY_FIVE, KEY_SIX, KEY_SEVEN, KEY_EIGHT, KEY_NINE, + KEY_ZERO, KEY_MINUS, KEY_EQUAL, KEY_BACKSPACE, KEY_DELETE }; + + // Keyboard line 03 + int line03KeyWidths[15] = { 0 }; + for (int i = 0; i < 15; i++) line03KeyWidths[i] = 45; + line03KeyWidths[0] = 50; // TAB + line03KeyWidths[13] = 57; // BACKSLASH + int line03Keys[15] = { + KEY_TAB, KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, + KEY_U, KEY_I, KEY_O, KEY_P, KEY_LEFT_BRACKET, + KEY_RIGHT_BRACKET, KEY_BACKSLASH, KEY_INSERT + }; + + // Keyboard line 04 + int line04KeyWidths[14] = { 0 }; + for (int i = 0; i < 14; i++) line04KeyWidths[i] = 45; + line04KeyWidths[0] = 68; // CAPS + line04KeyWidths[12] = 88; // ENTER + int line04Keys[14] = { + KEY_CAPS_LOCK, KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, + KEY_H, KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, + KEY_APOSTROPHE, KEY_ENTER, KEY_PAGE_UP + }; + + // Keyboard line 05 + int line05KeyWidths[14] = { 0 }; + for (int i = 0; i < 14; i++) line05KeyWidths[i] = 45; + line05KeyWidths[0] = 80; // LSHIFT + line05KeyWidths[11] = 76; // RSHIFT + int line05Keys[14] = { + KEY_LEFT_SHIFT, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, + KEY_N, KEY_M, KEY_COMMA, KEY_PERIOD, /*KEY_MINUS*/ + KEY_SLASH, KEY_RIGHT_SHIFT, KEY_UP, KEY_PAGE_DOWN + }; + + // Keyboard line 06 + int line06KeyWidths[11] = { 0 }; + for (int i = 0; i < 11; i++) line06KeyWidths[i] = 45; + line06KeyWidths[0] = 80; // LCTRL + line06KeyWidths[3] = 208; // SPACE + line06KeyWidths[7] = 60; // RCTRL + int line06Keys[11] = { + KEY_LEFT_CONTROL, KEY_LEFT_SUPER, KEY_LEFT_ALT, + KEY_SPACE, KEY_RIGHT_ALT, 162, KEY_NULL, + KEY_RIGHT_CONTROL, KEY_LEFT, KEY_DOWN, KEY_RIGHT + }; + + Vector2 keyboardOffset = { 26, 80 }; + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + int key = GetKeyPressed(); // Get pressed keycode + if (key > 0) TraceLog(LOG_INFO, "KEYBOARD TESTBED: KEY PRESSED: %d", key); + + int ch = GetCharPressed(); // Get pressed char for text input, using OS mapping + if (ch > 0) TraceLog(LOG_INFO, "KEYBOARD TESTBED: CHAR PRESSED: %c (%d)", ch, ch); + //---------------------------------------------------------------------------------- + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + DrawText("KEYBOARD LAYOUT: ENG-US", 26, 38, 20, LIGHTGRAY); + + // Keyboard line 01 - 15 keys + // ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, IMP, CLOSE + for (int i = 0, recOffsetX = 0; i < 15; i++) + { + GuiKeyboardKey((Rectangle){ keyboardOffset.x + recOffsetX, keyboardOffset.y, line01KeyWidths[i], 30 }, line01Keys[i]); + recOffsetX += line01KeyWidths[i] + KEY_REC_SPACING; + } + + // Keyboard line 02 - 15 keys + // `, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -, =, BACKSPACE, DEL + for (int i = 0, recOffsetX = 0; i < 15; i++) + { + GuiKeyboardKey((Rectangle){ keyboardOffset.x + recOffsetX, keyboardOffset.y + 30 + KEY_REC_SPACING, line02KeyWidths[i], 38 }, line02Keys[i]); + recOffsetX += line02KeyWidths[i] + KEY_REC_SPACING; + } + + // Keyboard line 03 - 15 keys + // TAB, Q, W, E, R, T, Y, U, I, O, P, [, ], \, INS + for (int i = 0, recOffsetX = 0; i < 15; i++) + { + GuiKeyboardKey((Rectangle){ keyboardOffset.x + recOffsetX, keyboardOffset.y + 30 + 38 + KEY_REC_SPACING*2, line03KeyWidths[i], 38 }, line03Keys[i]); + recOffsetX += line03KeyWidths[i] + KEY_REC_SPACING; + } + + // Keyboard line 04 - 14 keys + // MAYUS, A, S, D, F, G, H, J, K, L, ;, ', ENTER, REPAG + for (int i = 0, recOffsetX = 0; i < 14; i++) + { + GuiKeyboardKey((Rectangle){ keyboardOffset.x + recOffsetX, keyboardOffset.y + 30 + 38*2 + KEY_REC_SPACING*3, line04KeyWidths[i], 38 }, line04Keys[i]); + recOffsetX += line04KeyWidths[i] + KEY_REC_SPACING; + } + + // Keyboard line 05 - 14 keys + // LSHIFT, Z, X, C, V, B, N, M, ,, ., /, RSHIFT, UP, AVPAG + for (int i = 0, recOffsetX = 0; i < 14; i++) + { + GuiKeyboardKey((Rectangle){ keyboardOffset.x + recOffsetX, keyboardOffset.y + 30 + 38*3 + KEY_REC_SPACING*4, line05KeyWidths[i], 38 }, line05Keys[i]); + recOffsetX += line05KeyWidths[i] + KEY_REC_SPACING; + } + + // Keyboard line 06 - 11 keys + // LCTRL, WIN, LALT, SPACE, ALTGR, \, FN, RCTRL, LEFT, DOWN, RIGHT + for (int i = 0, recOffsetX = 0; i < 11; i++) + { + GuiKeyboardKey((Rectangle){ keyboardOffset.x + recOffsetX, keyboardOffset.y + 30 + 38*4 + KEY_REC_SPACING*5, line06KeyWidths[i], 38 }, line06Keys[i]); + recOffsetX += line06KeyWidths[i] + KEY_REC_SPACING; + } + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} + +//------------------------------------------------------------------------------------ +// Module Functions Definition +//------------------------------------------------------------------------------------ +// Get keyboard keycode as text (US keyboard) +// NOTE: Mapping for other keyboard layouts can be done here +static const char *GetKeyText(int key) +{ + switch (key) + { + case KEY_APOSTROPHE : return "'"; // Key: ' + case KEY_COMMA : return ","; // Key: , + case KEY_MINUS : return "-"; // Key: - + case KEY_PERIOD : return "."; // Key: . + case KEY_SLASH : return "/"; // Key: / + case KEY_ZERO : return "0"; // Key: 0 + case KEY_ONE : return "1"; // Key: 1 + case KEY_TWO : return "2"; // Key: 2 + case KEY_THREE : return "3"; // Key: 3 + case KEY_FOUR : return "4"; // Key: 4 + case KEY_FIVE : return "5"; // Key: 5 + case KEY_SIX : return "6"; // Key: 6 + case KEY_SEVEN : return "7"; // Key: 7 + case KEY_EIGHT : return "8"; // Key: 8 + case KEY_NINE : return "9"; // Key: 9 + case KEY_SEMICOLON : return ";"; // Key: ; + case KEY_EQUAL : return "="; // Key: = + case KEY_A : return "A"; // Key: A | a + case KEY_B : return "B"; // Key: B | b + case KEY_C : return "C"; // Key: C | c + case KEY_D : return "D"; // Key: D | d + case KEY_E : return "E"; // Key: E | e + case KEY_F : return "F"; // Key: F | f + case KEY_G : return "G"; // Key: G | g + case KEY_H : return "H"; // Key: H | h + case KEY_I : return "I"; // Key: I | i + case KEY_J : return "J"; // Key: J | j + case KEY_K : return "K"; // Key: K | k + case KEY_L : return "L"; // Key: L | l + case KEY_M : return "M"; // Key: M | m + case KEY_N : return "N"; // Key: N | n + case KEY_O : return "O"; // Key: O | o + case KEY_P : return "P"; // Key: P | p + case KEY_Q : return "Q"; // Key: Q | q + case KEY_R : return "R"; // Key: R | r + case KEY_S : return "S"; // Key: S | s + case KEY_T : return "T"; // Key: T | t + case KEY_U : return "U"; // Key: U | u + case KEY_V : return "V"; // Key: V | v + case KEY_W : return "W"; // Key: W | w + case KEY_X : return "X"; // Key: X | x + case KEY_Y : return "Y"; // Key: Y | y + case KEY_Z : return "Z"; // Key: Z | z + case KEY_LEFT_BRACKET : return "["; // Key: [ + case KEY_BACKSLASH : return "\\"; // Key: '\' + case KEY_RIGHT_BRACKET : return "]"; // Key: ] + case KEY_GRAVE : return "`"; // Key: ` + case KEY_SPACE : return "SPACE"; // Key: Space + case KEY_ESCAPE : return "ESC"; // Key: Esc + case KEY_ENTER : return "ENTER"; // Key: Enter + case KEY_TAB : return "TAB"; // Key: Tab + case KEY_BACKSPACE : return "BACK"; // Key: Backspace + case KEY_INSERT : return "INS"; // Key: Ins + case KEY_DELETE : return "DEL"; // Key: Del + case KEY_RIGHT : return "RIGHT"; // Key: Cursor right + case KEY_LEFT : return "LEFT"; // Key: Cursor left + case KEY_DOWN : return "DOWN"; // Key: Cursor down + case KEY_UP : return "UP"; // Key: Cursor up + case KEY_PAGE_UP : return "PGUP"; // Key: Page up + case KEY_PAGE_DOWN : return "PGDOWN"; // Key: Page down + case KEY_HOME : return "HOME"; // Key: Home + case KEY_END : return "END"; // Key: End + case KEY_CAPS_LOCK : return "CAPS"; // Key: Caps lock + case KEY_SCROLL_LOCK : return "LOCK"; // Key: Scroll down + case KEY_NUM_LOCK : return "NUMLOCK"; // Key: Num lock + case KEY_PRINT_SCREEN : return "PRINTSCR"; // Key: Print screen + case KEY_PAUSE : return "PAUSE"; // Key: Pause + case KEY_F1 : return "F1"; // Key: F1 + case KEY_F2 : return "F2"; // Key: F2 + case KEY_F3 : return "F3"; // Key: F3 + case KEY_F4 : return "F4"; // Key: F4 + case KEY_F5 : return "F5"; // Key: F5 + case KEY_F6 : return "F6"; // Key: F6 + case KEY_F7 : return "F7"; // Key: F7 + case KEY_F8 : return "F8"; // Key: F8 + case KEY_F9 : return "F9"; // Key: F9 + case KEY_F10 : return "F10"; // Key: F10 + case KEY_F11 : return "F11"; // Key: F11 + case KEY_F12 : return "F12"; // Key: F12 + case KEY_LEFT_SHIFT : return "LSHIFT"; // Key: Shift left + case KEY_LEFT_CONTROL : return "LCTRL"; // Key: Control left + case KEY_LEFT_ALT : return "LALT"; // Key: Alt left + case KEY_LEFT_SUPER : return "WIN"; // Key: Super left + case KEY_RIGHT_SHIFT : return "RSHIFT"; // Key: Shift right + case KEY_RIGHT_CONTROL : return "RCTRL"; // Key: Control right + case KEY_RIGHT_ALT : return "ALTGR"; // Key: Alt right + case KEY_RIGHT_SUPER : return "RSUPER"; // Key: Super right + case KEY_KB_MENU : return "KBMENU"; // Key: KB menu + case KEY_KP_0 : return "KP0"; // Key: Keypad 0 + case KEY_KP_1 : return "KP1"; // Key: Keypad 1 + case KEY_KP_2 : return "KP2"; // Key: Keypad 2 + case KEY_KP_3 : return "KP3"; // Key: Keypad 3 + case KEY_KP_4 : return "KP4"; // Key: Keypad 4 + case KEY_KP_5 : return "KP5"; // Key: Keypad 5 + case KEY_KP_6 : return "KP6"; // Key: Keypad 6 + case KEY_KP_7 : return "KP7"; // Key: Keypad 7 + case KEY_KP_8 : return "KP8"; // Key: Keypad 8 + case KEY_KP_9 : return "KP9"; // Key: Keypad 9 + case KEY_KP_DECIMAL : return "KPDEC"; // Key: Keypad . + case KEY_KP_DIVIDE : return "KPDIV"; // Key: Keypad / + case KEY_KP_MULTIPLY : return "KPMUL"; // Key: Keypad * + case KEY_KP_SUBTRACT : return "KPSUB"; // Key: Keypad - + case KEY_KP_ADD : return "KPADD"; // Key: Keypad + + case KEY_KP_ENTER : return "KPENTER"; // Key: Keypad Enter + case KEY_KP_EQUAL : return "KPEQU"; // Key: Keypad = + default: return ""; + } +} + +// Draw keyboard key +static void GuiKeyboardKey(Rectangle bounds, int key) +{ + if (key == KEY_NULL) DrawRectangleLinesEx(bounds, 2.0f, LIGHTGRAY); + else + { + if (IsKeyDown(key)) + { + DrawRectangleLinesEx(bounds, 2.0f, MAROON); + DrawText(GetKeyText(key), bounds.x + 4, bounds.y + 4, 10, MAROON); + } + else + { + DrawRectangleLinesEx(bounds, 2.0f, DARKGRAY); + DrawText(GetKeyText(key), bounds.x + 4, bounds.y + 4, 10, DARKGRAY); + } + } + + if (CheckCollisionPointRec(GetMousePosition(), bounds)) + { + DrawRectangleRec(bounds, Fade(RED, 0.2f)); + DrawRectangleLinesEx(bounds, 3.0f, RED); + } +} \ No newline at end of file diff --git a/examples/core/core_keyboard_testbed.png b/examples/core/core_keyboard_testbed.png new file mode 100644 index 0000000000000000000000000000000000000000..bac0fc29ac41ee31592622b54bf65af602427995 GIT binary patch literal 17631 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYU_8XZ#=yWJp1k%11B1&lPZ!6Kin!!IzrMb% zZwoY#Vp^<-gDBx(Ty`-)j<@lmfCN^8v8wez278Lh+TOMU85})W2!oz72RGq^*d=?~ z4s76VyeK*0qKhpqXE4eoKrKKOEI@j?XQ@=LX;4}LvyP~_6H@*mVsh4~g zlD=n9>#Q4>IX5ryp;Oil{;eNW%;sLU{@)jthgPzF;cmRB8nJj~t_h2qa{?BkAy4su zQOKcLcP1tl{dIrSVZQ64_%WL)_5#D|PoQoM}|MVP*vR#q)E6VjuzUV9OG#j&^ zzrGrOPWr|_Sr$E`_R1_y$8z>vKX?4`Ut8mvvrB63Ldmtc?nq(M@K4deirHw^E9?Q4 zV8Zf3jHzTkqvH1xg&=pW&QSlCJv>|80!lmg$g|p}E_f}SRh{Ya)qLqkt2?K~ye=zm zO>-(ZTM?kW|3TOBi(d?*s{4>@s|WnxYAD1CH6#)BBB&ZNS)LG>{iJls^0^laWaKmx z7Nl<~IGfNj?JQa}FIIHOgv7u?d@(R#C+FNN!MPf?vRyHMr`+;hJ44+>*y&xSXUiRT z?c&65eN!q_%h$7P^{-bl5q5h0#c$QmX4U__*AmgJ+u@v0!j@uEimmzui(SxVk=S4N z_gB5i9^@cKOMne>kPttIFT@wiPPll)3|Al-++vjUWkz!zf_qq>#Vy^zE%+<0)&Rp@ zr-UucMzd~=I$<;vhDch_`LapV%Bt#w>+4HPy#w#qylQXkJan-_LMAfZM9%GTW0a!7 ztZ8nSFJ(kIwH(N(ldxO+@1ex>EnRa#HSE22c(Ou6>%GL@d)6{Ng}xcflCSW8>D&r3 zcV{vVbN@~hn0}>iEkSb$XE7aS(Q7-Ft#&v)`^416+v7V5pC`nxbIpq2cl+PNVz1C{ zePaLOj}Ei%*v*n>bAM|s#qX>xS8(-a^U@xrZS&ezO0P=qZ_B_w5sx{|Lb}c-4@DXeLU8c{*RZ>TmvCp@BvZH^_uLiMi6CSNU7}U<&tr~Ge z#Ro_4XNhw|ob0!Y+f;KWpKLhSus~hu%RTK~*V&Vk4m@vPIO%ZVPsJ*ZyLX+kqNI8X zjW7K%h~O>{dX%W~D{;kiZ-wvtQ#WPqc>eO?glTP)<=LwD9e8dRbcau?-0{^(&H9Zu zoqH^=@I+^|G8f%C`dq)}=>>;n{~dR-a7QOetdY#N_%h++&%_l!`XlUJ`t_6-XI3_A z%T423=xy6x9F-*Dlwjh|-*-alUFn^GlR`(19Zu-ePx@rCQI>l`b#9^vxI#c94mdMh+o+)C;SuQVC-8Vys6=jY zkorNsRjLsR`ht@exGB%CTY5EN?k;6B7Prf%9;~?8=55onZ2846F1-R0eJ?Xi@_Ekf zF%(JPFd^MM;U(AgGt8QE1)MUc+%V~RV^?*|O7Hu`$LkMH&|_P}>~u;*q=*&flvA#2(Px#7WkSKTCcI)xdNeJjp0}jev`SF%umtiqonT@M5TttD&cOt$af+mNg8W^8PZw;xk30gE;oQX)Vv5g z(O5kDAx^l8W-)?0LY$DWaQpN{ix;=oX!QL`EO2?4VbgPrd8<=`iEi(*r5Crfa5P^0 zV=znJ?K5-f^kTb&oSi>jX$-XI>GLs@;$QsHVXc6KulM52OcPy2rvwxGo@eb3@643w zdpSGoqv@Csw1~L}>wpDns*E#FQlnXxWx^I@0@$~*mEO_$kVueI6dsgd#j3_CP z;hcg@i+?7X*z-K!_SeJX{*}J{RH{}Myws}F?``s($lIzKx#JP*ZIk-}pU)S3WG>pl z?^3nQ`TRl^*Ku6c_yKT1`l4h^e#CkaoRzxZKBA9#WVBJI%hxH8LFO_ zF44CTV?=o?mZfu%~cblRTVz^Gra_4jtK8F7u3{a|ID* z#xk?kIory$InR^JdzrD~SNaYUrHxNHXGrY)$+~xr#M_ny%RWsMkps2E9am$dzy(1Z zJ!Y!{nT4(>9u`wmFpMc$+*$ae9aN-n9Qzm`A1le{ZQAC1(IDngqKPeU-xZ51j}uMo zd(3{iIWug2?BF+}XWGdh&b;x`e9<=!TIC-X~qt_PF^(+IyCRfhsM^^1v%!uaV{27kI;%R z1owh2i<`B=;!d0$VsKl94QF?tEgq5=Utxp{JND3UVK`in^1AFbdaf>k(2iWfwKE8c;u^gxlc3`_7s>*b7O$*A%lL3^L!KhIdz*u(Xwg_Dpz)&i(vlLB!yX$Z->Q@8D3JcjoW{{}?C=AP zx$ch>P2^UHGJy;3-esyT96arR4j6D8%-E6ScIpKW2mW@8LEYb9U;k$m^dpa2pf({G zY@NUZ0dvs?a7f5*M0s-8+$Pf)KZb~1C7NDOcwFm27048W#UBl%_^)s^Uff~=>hB0C zvABIcoKYvSLO`M~vp+1+(u&#W)@@m6aAV|G&>+%ZIe{UQP)Q7b7~PrniLc$p_R6D_70VQ#*fgxKkp*>w@+T=Dmt14JTjcaZx8}WTy?ZO9 zHt=y2H9TH*X8I$`!mO7HcD-3I4JucM#Iq^LgL_A;Jz1yZq1rcnZjs7A0Z*s^@+ z{n9_>g~Ti4$S22yPbc&x)J$yBGoMr4xj0p+Qqe%>(g_dU8EnzB>Bw4X#)RIB$F;dzQah`I;LzM@lj+mc4l}T8h7YPoH+l#lL1Dw|8Cfu+>>?TX?JO zK*2eW#hK~wLLk9}r7eo1r!39=@|z3}o*IsxcZ`z0t%&4?#=@2Q5V_!OLl3P>C2$3V zyF)^cf^pOdQcOc3Ei8!U*l@vm&Emz2+f%>rv4e|tm9rOd^bJBdc&=~LSAA${#eB$s z3uhzkg(y=`{QkPX_ELAyvIjEPp&!z(O-B|)jK3QY5r70+84P!w8uFGW^v+{wkXr6N zUC&ieqU)jYtM-F|LA}rp2Y94T%GbL?K;kU_;_h9pfRCpOz8(&UcC(l@jm^D}@hI~)-Y#cN+eB|~XG43Q_6muY zr)RQz+ji*2^Dq6zw(y(Sx;;(#Ck0jC?s$0b-|{83-dQm`-;A146_i24X$w}Unokk_ zd?~Ra=vqKe|H69_jIBQlGS=|4|1r3tef^?Ef&}YgMF#%Hh4+3oRJP3d#Td!IuHZoW zI}bhY6S?;vovv~=v|+z0wC3Rj4=LT*;Fj(SVW!1Tk7jr+cH`ig?)D@jYe79nPm2-9 zeV^kQvliEK@H{s;W)vYTu+PPR)t!Le0}m&B-1swb%R`U8(e8&7D$}r_uI&!P^EM)x=7%H6IRy zP2_p%vah5=|DaUfN5d)FD<57v(G=R{tm`+8uQ_$<;e{L9WcZ($t#h0Gc1r7kj2-;* zL|j(XDQp*RIv+FRj)xEXk!#17Tq$AJ!(rQ$@?z6 z!ri#=MuODIkN&G`jAs3J%UdONK~f+qJZ-V;jDu4rw0qY)nC&K)JK=&pi`(b#2bP8loivxl?$I#Z@4CY<5XBqB+XE6An+f zVq+@vNnvMZ#~rgb1v$U_K;1JTwD#f!QF3l3#Wk_1ijYG+Dep45IMaPZZm>< zFD8h*g3kH_X|{&qY}$_Y5(Okidx_xXMeHdilnsqCidBKSXkRkEJmPG8C}0QbWO&wK z?PTO0n<&M!I5+-`fb?8O$+PZwDkeIO8xqV24S9+V+k-c_`7~Ip6j#R-3e&(5r+)qzF7&-64snEs73gG?*a^^;K@*Cn59llpPT&Ui$II!2Ah2v}q zPwNMnuZJIaJjLw#wK>;GoDi{%n#a@ospZx>nYoOKpc(=_=R@a_zi@%uhf%OX6kF$T z15Zdq^Rhb|bmb43in0fF`||tnM9TZg9MzoyXDD?M+^t;M+tN5FfX3Fx9-W&nu4?(EXdv^+UdNy3YmGt7AH!Mx z?Cu;qPtURMGdq)UyM5Ca(-5|tj#70W*|n$Zb8_{oo_uk<&UjGl!ikAnr?foPRo?i~ z>I!#S&PVH8oD1`p_OIP&A#(X@fv5M4N68vyE$*K`W_)jzQZ$(I+G4{0#Gedz_VVJN*-P3FfM(as&uE;SV6fROE1C1={};R`FXs5&7m(0CvX*SEZHwO77q{x+XZdYr#y<8Nf3XGs z;EiBsxh^82R~Vp>Jh{1Z;pvCQ=@w=eI={Y8c-Qlw`~Jd9ol<-s4P-tY-v22@D zRJY;j*M}EA$gcaDxPo`x#7k|8A$X{guE0PR>>`pz0IbxF5lGDrmfx!g3Dm1l*mzQ73>RXEYRu3I$NN zsr6o>tgNi9)ZP%D#)ks)K-Fes5|(Oncl)L*22t~P&Zm6_tr{!OKps0mu311!-F|$1 zef|I9hd9U94WyX9aDd0(OK`3^0xis4(N!@`+| zFBbLMt!xjt*<-ibK;p8=!ke=m-g_pItIX3EVkz{f@s^@3Xh78qTloSOBbc^9E=gT* zNXjI(H8)G-x`~*F?mkVunokBhAKHj^>)TvB%obkpz^FMcv*nJ7qn8!a&(>)#8LnRv zx*()mb-H)j;>C&vSDYIHY90LUsW0!7jJ2})@>yu-N4uC?vR8771ux4jcI`SSCca^h zXI`Y^`)>jpUkb!a2p1VIG_j5-GCrN46E^LU#YfIaneenID;~e@MJ9e5T6x#8Scj|< z4SGCv#ug{-{f}?+H|e$C(Ofv~PR8bH6PC7Mjtfff9~&2M;gj6=vwcp5Jm*`!F9nW% zj60sNt?D}})^1>!^hs~sHf7u3zd<&+F(uz82FvlL{BEC8AS2|x;X`WQ#bs|EG2V&c$W(-D81J{lYjLM_tz61&aTf8 z-R^9AcEN7>S{7MLSDx#AlD4;z#lE@9Krqt=#ex?NBPmDXp^MZ$CU8a53*GCtsH~&~B+3p~%7h7^{f zM;Qi3wbxp)Ez!FxHCI$JcV2&sfP(pZ;ppQRvRz6{wqCMl;n>Q5qV!@yUipMe&kkMl zli+zN5}I%cYP(9TvNngHyVpzgL!m*5xkHV)I%SgUzGI4w>E@8i;5n@=!nj1kReN(a|Iu} z{hTX>Qoh&0UDFV*#*0O{1u9EVPuJ)FX<~cnw#?$n%mS5%7q{uB*??Arn@J+qz=*yb zWHmK(koF$fFzf^s25D&@PN2j*I@|;bXWW~nz=?TuQNlp4!~;bVZKwZ6GlL?*9>Qp5 z0B_%m5ntA~=vl`_byrW)kn{LS`u@D(oK}UC8V_ eB-U#%FnnLMu`$fn;V}aP1B0ilpUXO@geCw%$W=%H literal 0 HcmV?d00001 diff --git a/examples/examples_list.txt b/examples/examples_list.txt index c825e137d..eda62ee13 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -56,6 +56,7 @@ core;core_screen_recording;★★☆☆;5.6-dev;5.6-dev;2025;2025;"Ramon Santama core;core_clipboard_text;★★☆☆;5.6-dev;5.6-dev;2025;2025;"Ananth S";@Ananth1839 core;core_text_file_loading;★☆☆☆;5.5;5.6;0;0;"Aanjishnu Bhattacharyya";@NimComPoo-04 core;core_compute_hash;★★☆☆;5.6-dev;5.6-dev;2025;2025;"Ramon Santamaria";@raysan5 +core;core_keyboard_testbed;★★☆☆;5.6;5.6;2026;2026;"Ramon Santamaria";@raysan5 shapes;shapes_basic_shapes;★☆☆☆;1.0;4.2;2014;2025;"Ramon Santamaria";@raysan5 shapes;shapes_bouncing_ball;★☆☆☆;2.5;2.5;2013;2025;"Ramon Santamaria";@raysan5 shapes;shapes_bullet_hell;★☆☆☆;5.6;5.6;2025;2025;"Zero";@zerohorsepower diff --git a/projects/VS2022/examples/core_keyboard_testbed.vcxproj b/projects/VS2022/examples/core_keyboard_testbed.vcxproj new file mode 100644 index 000000000..3a146b762 --- /dev/null +++ b/projects/VS2022/examples/core_keyboard_testbed.vcxproj @@ -0,0 +1,569 @@ + + + + + Debug.DLL + ARM64 + + + Debug.DLL + Win32 + + + Debug.DLL + x64 + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release.DLL + ARM64 + + + Release.DLL + Win32 + + + Release.DLL + x64 + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {6B1A933E-71B8-4C1F-9E79-02D98830E671} + Win32Proj + core_keyboard_testbed + 10.0 + core_keyboard_testbed + + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + true + $(DefaultPlatformToolset) + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + Application + false + $(DefaultPlatformToolset) + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + true + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + false + $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ + $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + $(SolutionDir)..\..\examples\core + WindowsLocalDebugger + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + /FS %(AdditionalOptions) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) + CompileAsC + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + + + Console + true + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + Copy Debug DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);PLATFORM_DESKTOP + $(SolutionDir)..\..\src;%(AdditionalIncludeDirectories) + CompileAsC + true + + + Console + true + true + true + raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ + + + xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" + + + Copy Release DLL to output directory + + + + + + + + + + + {e89d61ac-55de-4482-afd4-df7242ebc859} + + + + + + \ No newline at end of file diff --git a/projects/VS2022/raylib.sln b/projects/VS2022/raylib.sln index df2633843..93c4efaf1 100644 --- a/projects/VS2022/raylib.sln +++ b/projects/VS2022/raylib.sln @@ -433,6 +433,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "textures_cellular_automata" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shapes_hilbert_curve", "examples\shapes_hilbert_curve.vcxproj", "{DC163251-16C3-4B72-B965-ACDBA0F02BD1}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_keyboard_testbed", "examples\core_keyboard_testbed.vcxproj", "{6B1A933E-71B8-4C1F-9E79-02D98830E671}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "textures_framebuffer_rendering", "examples\textures_framebuffer_rendering.vcxproj", "{2CCCD9E4-9058-4291-BD89-39C979F0CA1E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug.DLL|ARM64 = Debug.DLL|ARM64 @@ -5391,6 +5395,54 @@ Global {DC163251-16C3-4B72-B965-ACDBA0F02BD1}.Release|x64.Build.0 = Release|x64 {DC163251-16C3-4B72-B965-ACDBA0F02BD1}.Release|x86.ActiveCfg = Release|Win32 {DC163251-16C3-4B72-B965-ACDBA0F02BD1}.Release|x86.Build.0 = Release|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|ARM64.ActiveCfg = Debug.DLL|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|ARM64.Build.0 = Debug.DLL|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|x64.Build.0 = Debug.DLL|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|ARM64.Build.0 = Debug|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|x64.ActiveCfg = Debug|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|x64.Build.0 = Debug|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|x86.ActiveCfg = Debug|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Debug|x86.Build.0 = Debug|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|ARM64.ActiveCfg = Release.DLL|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|ARM64.Build.0 = Release.DLL|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|x64.ActiveCfg = Release.DLL|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|x64.Build.0 = Release.DLL|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release.DLL|x86.Build.0 = Release.DLL|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|ARM64.ActiveCfg = Release|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|ARM64.Build.0 = Release|ARM64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|x64.ActiveCfg = Release|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|x64.Build.0 = Release|x64 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|x86.ActiveCfg = Release|Win32 + {6B1A933E-71B8-4C1F-9E79-02D98830E671}.Release|x86.Build.0 = Release|Win32 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug.DLL|ARM64.ActiveCfg = Debug.DLL|ARM64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug.DLL|ARM64.Build.0 = Debug.DLL|ARM64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug.DLL|x64.Build.0 = Debug.DLL|x64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug|ARM64.Build.0 = Debug|ARM64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug|x64.ActiveCfg = Debug|x64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug|x64.Build.0 = Debug|x64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug|x86.ActiveCfg = Debug|Win32 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Debug|x86.Build.0 = Debug|Win32 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release.DLL|ARM64.ActiveCfg = Release.DLL|ARM64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release.DLL|ARM64.Build.0 = Release.DLL|ARM64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release.DLL|x64.ActiveCfg = Release.DLL|x64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release.DLL|x64.Build.0 = Release.DLL|x64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release.DLL|x86.Build.0 = Release.DLL|Win32 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release|ARM64.ActiveCfg = Release|ARM64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release|ARM64.Build.0 = Release|ARM64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release|x64.ActiveCfg = Release|x64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release|x64.Build.0 = Release|x64 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release|x86.ActiveCfg = Release|Win32 + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -5609,6 +5661,8 @@ Global {1F4722E7-F78E-413F-A106-D3490211EA57} = {8D3C83B7-F1E0-4C2E-9E34-EE5F6AB2502A} {0A0FC982-6E31-401F-BA77-3C5E8AB02C68} = {DA049009-21FF-4AC0-84E4-830DD1BCD0CE} {DC163251-16C3-4B72-B965-ACDBA0F02BD1} = {278D8859-20B1-428F-8448-064F46E1F021} + {6B1A933E-71B8-4C1F-9E79-02D98830E671} = {6C82BAAE-BDDF-457D-8FA8-7E2490B07035} + {2CCCD9E4-9058-4291-BD89-39C979F0CA1E} = {DA049009-21FF-4AC0-84E4-830DD1BCD0CE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E926C768-6307-4423-A1EC-57E95B1FAB29} diff --git a/tools/rexm/reports/examples_issues.md b/tools/rexm/reports/examples_issues.md index 7b39c7a0b..081170806 100644 --- a/tools/rexm/reports/examples_issues.md +++ b/tools/rexm/reports/examples_issues.md @@ -21,7 +21,6 @@ Example elements validated: | **EXAMPLE NAME** | [C] | [CAT]| [INFO]|[PNG]|[WPNG]| [RES]| [MK] |[MKWEB]| [VCX]| [SOL]|[RDME]|[JS] | [WOUT]|[WMETA]| |:---------------------------------|:---:|:----:|:-----:|:---:|:----:|:----:|:----:|:-----:|:----:|:----:|:----:|:---:|:-----:|:-----:| | core_highdpi_testbed | ✔ | ✔ | ✔ | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | -| core_keyboard_testbed | ✔ | ✔ | ✔ | ❌ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | rlgl_standalone | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | rlgl_compute_shader | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | easings_testbed | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | diff --git a/tools/rexm/reports/examples_validation.md b/tools/rexm/reports/examples_validation.md index 8d3f699ca..d8f4a9521 100644 --- a/tools/rexm/reports/examples_validation.md +++ b/tools/rexm/reports/examples_validation.md @@ -67,6 +67,7 @@ Example elements validated: | core_clipboard_text | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | core_text_file_loading | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | core_compute_hash | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | +| core_keyboard_testbed | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | shapes_basic_shapes | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | shapes_bouncing_ball | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | | shapes_bullet_hell | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | From a6dd2af9e993a3a1d22696324e01f5b4f446c890 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Jan 2026 20:06:57 +0100 Subject: [PATCH 09/11] Update rexm.c --- tools/rexm/rexm.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tools/rexm/rexm.c b/tools/rexm/rexm.c index 9914733f0..95ed13739 100644 --- a/tools/rexm/rexm.c +++ b/tools/rexm/rexm.c @@ -570,7 +570,7 @@ int main(int argc, char *argv[]) // ----------------------------------------------------------------------------------------- // Add example to the collection list, if not already there - // NOTE: Required format: shapes;shapes_basic_shapes;★☆☆☆;1.0;4.2;2014;2025;"Ray";@raysan5 + // NOTE: Required format: shapes;shapes_basic_shapes;★☆☆☆;1.0;4.2;2014;2026;"Ray";@raysan5 //------------------------------------------------------------------------------------------------ char *exCollectionList = LoadFileText(exCollectionFilePath); if (TextFindIndex(exCollectionList, exName) == -1) // Example not found @@ -2440,7 +2440,7 @@ static void UnloadExampleInfo(rlExampleInfo *exInfo) } // raylib example line info parser -// Parses following line format: core;core_basic_window;★☆☆☆;1.0;1.0;2013;2025;"Ray";@raysan5 +// Parses following line format: core;core_basic_window;★☆☆☆;1.0;1.0;2013;2026;"Ray";@raysan5 static int ParseExampleInfoLine(const char *line, rlExampleInfo *entry) { #define MAX_EXAMPLE_INFO_LINE_LEN 512 @@ -2452,7 +2452,10 @@ static int ParseExampleInfoLine(const char *line, rlExampleInfo *entry) int tokenCount = 0; char **tokens = TextSplit(line, ';', &tokenCount); - if (tokenCount != 9) LOG("REXM: WARNING: Example collection line contains invalid number of tokens: %i\n", tokenCount); + if (tokenCount != 9) + { + LOG("REXM: WARNING: Example collection line contains invalid number of tokens: %i\n", tokenCount); + } // Get category and name strcpy(entry->category, tokens[0]); From 1284d687213ae53313cf69f283e04a0e6c200c17 Mon Sep 17 00:00:00 2001 From: Ray Date: Fri, 9 Jan 2026 20:18:45 +0100 Subject: [PATCH 10/11] Update core_highdpi_testbed.png --- examples/core/core_highdpi_testbed.png | Bin 17323 -> 18560 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/core/core_highdpi_testbed.png b/examples/core/core_highdpi_testbed.png index da99bbb0d97118eef3ca41c16b62182acced63f9..a37c821304b22cc7cbcb463de52eb95d0b5c2a90 100644 GIT binary patch literal 18560 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 Xb1&}K1C4163=9mOu6{1-oD!Mtvdn+; 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 Date: Sat, 10 Jan 2026 00:09:06 +0200 Subject: [PATCH 11/11] fix (#5482) --- src/shell.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shell.html b/src/shell.html index e6c80a39b..e5e26a3b1 100644 --- a/src/shell.html +++ b/src/shell.html @@ -179,7 +179,7 @@ jwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaB - +