From ab4831911ab8568cea2ee4d14acfb5ff2847cce8 Mon Sep 17 00:00:00 2001 From: Aanjishnu Bhattacharyya <71861112+NimComPoo-04@users.noreply.github.com> Date: Fri, 17 Oct 2025 20:42:14 +0530 Subject: [PATCH] [examples] Added: `core_text_file_loading` (#5278) Added and example demonstrating reading the contents of a file and rendering them, utilizing rtext module. The demonstration also handles wrapping of long sentences, and text scrolling. Co-authored-by: Ray --- examples/Makefile | 1 + examples/Makefile.Web | 5 + examples/core/core_text_file_loading.c | 164 +++++ examples/core/core_text_file_loading.png | Bin 0 -> 23575 bytes examples/core/resources/text_file.txt | 18 + .../examples/core_text_file_loading.vcxproj | 569 ++++++++++++++++++ projects/VS2022/raylib.sln | 2 + 7 files changed, 759 insertions(+) create mode 100644 examples/core/core_text_file_loading.c create mode 100644 examples/core/core_text_file_loading.png create mode 100644 examples/core/resources/text_file.txt create mode 100644 projects/VS2022/examples/core_text_file_loading.vcxproj diff --git a/examples/Makefile b/examples/Makefile index 30d619e94..a9732679d 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -537,6 +537,7 @@ CORE = \ core/core_screen_recording \ core/core_smooth_pixelperfect \ core/core_storage_values \ + core/core_text_file_loading \ core/core_undo_redo \ core/core_vr_simulator \ core/core_window_flags \ diff --git a/examples/Makefile.Web b/examples/Makefile.Web index 222c56e11..88843af09 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -537,6 +537,7 @@ CORE = \ core/core_screen_recording \ core/core_smooth_pixelperfect \ core/core_storage_values \ + core/core_text_file_loading \ core/core_undo_redo \ core/core_vr_simulator \ core/core_window_flags \ @@ -819,6 +820,10 @@ core/core_smooth_pixelperfect: core/core_smooth_pixelperfect.c core/core_storage_values: core/core_storage_values.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) +core/core_text_file_loading: core/core_text_file_loading.c + $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) \ + --preload-file core/resources/text_file.txt@resources/text_file.txt + core/core_undo_redo: core/core_undo_redo.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) diff --git a/examples/core/core_text_file_loading.c b/examples/core/core_text_file_loading.c new file mode 100644 index 000000000..0077551fd --- /dev/null +++ b/examples/core/core_text_file_loading.c @@ -0,0 +1,164 @@ +/******************************************************************************************* +* +* raylib [core] example - text file loading +* +* Example complexity rating: [★☆☆☆] 1/4 +* +* Example originally created with raylib 5.5, last time updated with raylib 5.6 +* +* Example contributed by Aanjishnu Bhattacharyya (@NimComPoo-04) and reviewed by Ramon Santamaria (@raysan5) +* +* 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) 0 Aanjishnu Bhattacharyya (@NimComPoo-04) +* +********************************************************************************************/ + +#include "raylib.h" +#include "raymath.h" // For Lerp + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [core] example - text file loading"); + + // Setting up the camera + Camera2D cam = { + .offset = {0, 0}, + .target = {0, 0}, + .rotation = 0, + .zoom = 1 + }; + + // Loading file from resources/text_file.txt + const char *fileName = "resources/text_file.txt"; + char *fileData = LoadFileText(fileName); + + // Loading all the lines + int lineCount = 0; + char **lines = LoadTextLines(fileData, &lineCount); + + // Just sylistic choise + int fontSize = 20; + int textTop = 25 + fontSize; // Top of the screen from where the text is rendered + int wrapWidth = screenWidth - 20; + + // Wrap the lines as needed + for(int i = 0; i < lineCount; i++) + { + int j = 0; + int lastSpace = 0; // Keeping track of last valid space to insert '\n' + int lastWrapStart = 0; // Keeping track of the start of this wrapped line. + + while(lines[i][j] != '\0') + { + if(lines[i][j] == ' ') + { + // Making a C Style string by adding a '\0' at the required location so that we can use the MeasureText function + lines[i][j] = '\0'; + + // Checking if the text has crossed the wrapWidth, then going back and inserting a newline + if(MeasureText(lines[i] + lastWrapStart, fontSize) > wrapWidth) + { + lines[i][lastSpace] = '\n'; + + // Since we added a newline the place of wrap changed so we update our lastWrapStart + lastWrapStart = lastSpace + 1; + } + + lines[i][j] = ' '; // Resetting the space back + lastSpace = j; // Since we encountered a new space we update our last encountered space location + } + + j++; + } + } + + // Calculating the total height so that we can show a scrollbar + int textHeight = 0; + + for(int i = 0; i < lineCount; i++) + { + Vector2 size = MeasureTextEx(GetFontDefault(), lines[i], fontSize, 2); + textHeight += size.y + 10; + } + + // A simple scrollbar on the side to show how far we have red into the file + Rectangle scrollBar = { + .x = screenWidth - 5, + .y = 0, + .width = 5, + .height = screenHeight * 100 / (textHeight - screenHeight) // Scrollbar height is just a percentage + }; + + + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + float scroll = GetMouseWheelMove(); + cam.target.y -= scroll * fontSize * 1.5; // Choosing an arbitrary speed for scroll + + if(cam.target.y < 0) // Snapping to 0 if we go too far back + cam.target.y = 0; + + if(cam.target.y > textHeight - screenHeight + textTop) // Ensuring that the camera does not scroll past all text + cam.target.y = textHeight - screenHeight + textTop; + + // Computing the position of the scrollBar depending on the percentage of text covered. + scrollBar.y = Lerp(textTop, screenHeight - scrollBar.height, (cam.target.y - textTop) / (textHeight - screenHeight)); + + // Draw + //---------------------------------------------------------------------------------- + BeginDrawing(); + + ClearBackground(RAYWHITE); + + BeginMode2D(cam); + + Font defaultFont = GetFontDefault(); + + // Going through all the read lines + for(int i = 0, t = textTop; i < lineCount; i++) + { + // Each time we go through and calculate the height of the text to move the cursor appropriately + Vector2 size = MeasureTextEx(defaultFont, lines[i], fontSize, 2); + DrawText(lines[i], 10, t, fontSize, RED); + + // Inserting extra space for real newlines, wrapped lines are rendered closer together + t += size.y + 10; + } + EndMode2D(); + + // Header displaying which file is being read currently + DrawRectangle(0, 0, screenWidth, textTop - 10, BEIGE); + DrawText(TextFormat("File: %s", fileName), 10, 10, fontSize, MAROON); + + DrawRectangleRec(scrollBar, MAROON); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadTextLines(lines, lineCount); + UnloadFileText(fileData); + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/core/core_text_file_loading.png b/examples/core/core_text_file_loading.png new file mode 100644 index 0000000000000000000000000000000000000000..ac4101210a2229e059f49e71aa3496e3f072a361 GIT binary patch literal 23575 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 ti4F$dhn^ literal 0 HcmV?d00001 diff --git a/examples/core/resources/text_file.txt b/examples/core/resources/text_file.txt new file mode 100644 index 000000000..72b1a8bce --- /dev/null +++ b/examples/core/resources/text_file.txt @@ -0,0 +1,18 @@ +Starting of the Lorem ipsum dolor sit amet file +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at interdum ex, et iaculis quam. Mauris consectetur, magna vel malesuada aliquam, mauris enim venenatis arcu, nec cursus orci ante a massa. Curabitur libero elit, cursus eu odio eget, suscipit rhoncus nibh. Nam justo elit, ullamcorper eget dolor et, ullamcorper tristique nulla. Nullam sagittis dolor in tristique tincidunt. Duis ac porttitor erat, a molestie sapien. Aliquam finibus in ipsum quis venenatis. +Mauris odio lorem, pharetra ut egestas quis, tristique eu mauris. Cras sed gravida velit. Suspendisse potenti. Suspendisse lobortis eleifend fermentum. Donec eu dolor est. Etiam ac felis eu ligula auctor feugiat eu quis diam. Sed eleifend id nibh porta viverra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi at tristique dui, nec pretium est. Mauris mollis massa quis massa aliquet efficitur. Phasellus posuere, elit id tempus consequat, massa ante scelerisque odio, finibus gravida elit tellus eget lectus. +Donec rutrum sagittis ligula a auctor. Aliquam aliquet tincidunt pulvinar. Aenean a porta ex. Aenean at sagittis nulla. Morbi congue luctus est nec gravida. In hac habitasse platea dictumst. Praesent commodo efficitur congue. Duis interdum enim in pharetra dapibus. Proin vestibulum finibus mauris vitae mollis. +Sed ultricies sed enim vel interdum. Nullam nec sagittis est, quis lobortis nunc. Donec auctor elementum velit vel pulvinar. Sed quis efficitur felis, at mollis elit. Integer id elit ante. Ut gravida ante vitae erat scelerisque scelerisque vel in massa. Praesent varius massa eu purus feugiat, non venenatis urna rhoncus. Pellentesque vehicula, tellus eu venenatis efficitur, libero eros lobortis justo, at ultricies lacus diam non libero. Sed metus nulla, consectetur in justo vitae, mollis maximus orci. Vestibulum dapibus ultrices leo, et facilisis odio molestie a. Phasellus facilisis vitae lorem quis viverra. Etiam imperdiet urna dolor, quis interdum ligula tristique id. Aliquam id dapibus enim. +Curabitur congue elit in magna tristique, sit amet porta quam viverra. Integer nec placerat libero. Praesent sem dolor, tristique eu augue non, ultricies mollis nibh. Fusce finibus, lorem sollicitudin eleifend gravida, eros quam tempus leo, ut iaculis libero ex vitae libero. Sed placerat fringilla accumsan. Nulla laoreet cursus justo nec elementum. Proin facilisis lobortis velit, a sollicitudin leo mollis eu. Aenean et leo est. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at interdum ex, et iaculis quam. Mauris consectetur, magna vel malesuada aliquam, mauris enim venenatis arcu, nec cursus orci ante a massa. Curabitur libero elit, cursus eu odio eget, suscipit rhoncus nibh. Nam justo elit, ullamcorper eget dolor et, ullamcorper tristique nulla. Nullam sagittis dolor in tristique tincidunt. Duis ac porttitor erat, a molestie sapien. Aliquam finibus in ipsum quis venenatis. +Mauris odio lorem, pharetra ut egestas quis, tristique eu mauris. Cras sed gravida velit. Suspendisse potenti. Suspendisse lobortis eleifend fermentum. Donec eu dolor est. Etiam ac felis eu ligula auctor feugiat eu quis diam. Sed eleifend id nibh porta viverra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi at tristique dui, nec pretium est. Mauris mollis massa quis massa aliquet efficitur. Phasellus posuere, elit id tempus consequat, massa ante scelerisque odio, finibus gravida elit tellus eget lectus. +Donec rutrum sagittis ligula a auctor. Aliquam aliquet tincidunt pulvinar. Aenean a porta ex. Aenean at sagittis nulla. Morbi congue luctus est nec gravida. In hac habitasse platea dictumst. Praesent commodo efficitur congue. Duis interdum enim in pharetra dapibus. Proin vestibulum finibus mauris vitae mollis. +Sed ultricies sed enim vel interdum. Nullam nec sagittis est, quis lobortis nunc. Donec auctor elementum velit vel pulvinar. Sed quis efficitur felis, at mollis elit. Integer id elit ante. Ut gravida ante vitae erat scelerisque scelerisque vel in massa. Praesent varius massa eu purus feugiat, non venenatis urna rhoncus. Pellentesque vehicula, tellus eu venenatis efficitur, libero eros lobortis justo, at ultricies lacus diam non libero. Sed metus nulla, consectetur in justo vitae, mollis maximus orci. Vestibulum dapibus ultrices leo, et facilisis odio molestie a. Phasellus facilisis vitae lorem quis viverra. Etiam imperdiet urna dolor, quis interdum ligula tristique id. Aliquam id dapibus enim. +wrapping text from the last available space wrapping text from the last available space wrapping text from the last available space +Curabitur congue elit in magna tristique, sit amet porta quam viverra. Integer nec placerat libero. Praesent sem dolor, tristique eu augue non, ultricies mollis nibh. Fusce finibus, lorem sollicitudin eleifend gravida, eros quam tempus leo, ut iaculis libero ex vitae libero. Sed placerat fringilla accumsan. Nulla laoreet cursus justo nec elementum. Proin facilisis lobortis velit, a sollicitudin leo mollis eu. Aenean et leo est. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque at interdum ex, et iaculis quam. Mauris consectetur, magna vel malesuada aliquam, mauris enim venenatis arcu, nec cursus orci ante a massa. Curabitur libero elit, cursus eu odio eget, suscipit rhoncus nibh. Nam justo elit, ullamcorper eget dolor et, ullamcorper tristique nulla. Nullam sagittis dolor in tristique tincidunt. Duis ac porttitor erat, a molestie sapien. Aliquam finibus in ipsum quis venenatis. +Mauris odio lorem, pharetra ut egestas quis, tristique eu mauris. Cras sed gravida velit. Suspendisse potenti. Suspendisse lobortis eleifend fermentum. Donec eu dolor est. Etiam ac felis eu ligula auctor feugiat eu quis diam. Sed eleifend id nibh porta viverra. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi at tristique dui, nec pretium est. Mauris mollis massa quis massa aliquet efficitur. Phasellus posuere, elit id tempus consequat, massa ante scelerisque odio, finibus gravida elit tellus eget lectus. +Donec rutrum sagittis ligula a auctor. Aliquam aliquet tincidunt pulvinar. Aenean a porta ex. Aenean at sagittis nulla. Morbi congue luctus est nec gravida. In hac habitasse platea dictumst. Praesent commodo efficitur congue. Duis interdum enim in pharetra dapibus. Proin vestibulum finibus mauris vitae mollis. +Sed ultricies sed enim vel interdum. Nullam nec sagittis est, quis lobortis nunc. Donec auctor elementum velit vel pulvinar. Sed quis efficitur felis, at mollis elit. Integer id elit ante. Ut gravida ante vitae erat scelerisque scelerisque vel in massa. Praesent varius massa eu purus feugiat, non venenatis urna rhoncus. Pellentesque vehicula, tellus eu venenatis efficitur, libero eros lobortis justo, at ultricies lacus diam non libero. Sed metus nulla, consectetur in justo vitae, mollis maximus orci. Vestibulum dapibus ultrices leo, et facilisis odio molestie a. Phasellus facilisis vitae lorem quis viverra. Etiam imperdiet urna dolor, quis interdum ligula tristique id. Aliquam id dapibus enim. +Curabitur congue elit in magna tristique, sit amet porta quam viverra. Integer nec placerat libero. Praesent sem dolor, tristique eu augue non, ultricies mollis nibh. Fusce finibus, lorem sollicitudin eleifend gravida, eros quam tempus leo, ut iaculis libero ex vitae libero. Sed placerat fringilla accumsan. Nulla laoreet cursus justo nec elementum. Proin facilisis lobortis velit, a sollicitudin leo mollis eu. Aenean et leo est. +Ending of the Lorem ipsum dolor sit amet file diff --git a/projects/VS2022/examples/core_text_file_loading.vcxproj b/projects/VS2022/examples/core_text_file_loading.vcxproj new file mode 100644 index 000000000..c2e25e042 --- /dev/null +++ b/projects/VS2022/examples/core_text_file_loading.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_text_file_loading + 10.0 + core_text_file_loading + + + + 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 c4de89730..7a7eca297 100644 --- a/projects/VS2022/raylib.sln +++ b/projects/VS2022/raylib.sln @@ -391,6 +391,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_highdpi_testbed", "exa EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_screen_recording", "examples\core_screen_recording.vcxproj", "{9DE2FC01-A839-4F89-8319-9071D4C54821}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core_text_file_loading", "examples\core_text_file_loading.vcxproj", "{6B1A933E-71B8-4C1F-9E79-02D98830E671}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug.DLL|ARM64 = Debug.DLL|ARM64