├── .github ├── FUNDING.yml └── workflows │ ├── linux.yml │ ├── macos.yml │ ├── webassembly.yml │ └── windows.yml ├── .gitignore ├── LICENSE ├── README.md ├── design ├── rguiicons_mockup01.png ├── rguiicons_mockup02.png ├── rguiicons_mockup03.png ├── rguiicons_mockup04.png ├── ricons.old.png ├── ricons.png ├── ricons_design.png ├── ricons_light.png └── ricons_test.png ├── logo ├── rguiicons.icns ├── rguiicons.ico ├── rguiicons_1024x1024.png ├── rguiicons_128x128.png ├── rguiicons_16x16.png ├── rguiicons_184x184.png ├── rguiicons_240x240.png ├── rguiicons_24x24.png ├── rguiicons_256x256.png ├── rguiicons_32x32.png ├── rguiicons_48x48.png ├── rguiicons_512x512.png ├── rguiicons_64x64.png └── rguiicons_96x96.png ├── projects └── VS2022 │ ├── raylib │ ├── Directory.Build.props │ └── raylib.vcxproj │ ├── rguiicons.sln │ └── rguiicons │ └── rguiicons.vcxproj ├── screenshots ├── rguiicons_v100_shot01.png ├── rguiicons_v100_shot02.png ├── rguiicons_v100_shot03.png ├── rguiicons_v100_shot04.png ├── rguiicons_v100_shot05.png ├── rguiicons_v100_shot06.png ├── rguiicons_v150_shot01.png ├── rguiicons_v200_shot01.png ├── rguiicons_v200_shot02.png ├── rguiicons_v200_shot03.png ├── rguiicons_v200_shot04.png ├── rguiicons_v200_shot05.png ├── rguiicons_v200_shot06.png ├── rguiicons_v200_shot07.png ├── rguiicons_v200_shot08.png ├── rguiicons_v300_shot01.png ├── rguiicons_v300_shot02.png ├── rguiicons_v300_shot03.png ├── rguiicons_v300_shot04.png ├── rguiicons_v300_shot05.png └── rguiicons_v300_shot06.png └── src ├── Info.plist ├── Makefile ├── external ├── raygui.h ├── rpng.h ├── tinyfiledialogs.c └── tinyfiledialogs.h ├── gui_file_dialogs.h ├── gui_main_toolbar.h ├── gui_window_about.h ├── gui_window_help.h ├── layouts ├── rguiicons_v050.rgl └── rguiicons_v100.rgl ├── minshell.html ├── rguiicons.c ├── rguiicons.ico ├── rguiicons.rc ├── rguiicons.rc.data └── styles ├── style_amber.h ├── style_ashes.h ├── style_bluish.h ├── style_candy.h ├── style_cherry.h ├── style_cyber.h ├── style_dark.h ├── style_enefete.h ├── style_genesis.h ├── style_jungle.h ├── style_lavanda.h ├── style_sunny.h └── style_terminal.h /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: raysan5 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.github/workflows/linux.yml: -------------------------------------------------------------------------------- 1 | name: Linux 2 | 3 | on: 4 | workflow_dispatch: 5 | release: 6 | types: [published] 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | env: 13 | PROJECT_NAME: ${{ github.event.repository.name }} 14 | PROJECT_BUILD_PATH: ${{ github.event.repository.name }}/src 15 | PROJECT_RELEASE_PATH: ${{ github.event.repository.name }}_dev_linux_x64 16 | PROJECT_SOURCES: "'${{ github.event.repository.name }}.c external/tinyfiledialogs.c'" 17 | PROJECT_CUSTOM_FLAGS: "-DPLATFORM_DESKTOP" 18 | RAYLIB_CONFIG_FLAGS: "'-DSUPPORT_MODULE_RSHAPES -DSUPPORT_MODULE_RTEXTURES -DSUPPORT_MODULE_RTEXT -DSUPPORT_EVENTS_WAITING -DSUPPORT_COMPRESSION_API -DSUPPORT_QUADS_DRAW_MODE -DSUPPORT_IMAGE_MANIPULATION -DSUPPORT_FILEFORMAT_PNG -DSUPPORT_IMAGE_EXPORT -DSUPPORT_DEFAULT_FONT -DSUPPORT_TEXT_MANIPULATION -DSUPPORT_STANDARD_FILEIO -DSUPPORT_TRACELOG'" 19 | 20 | steps: 21 | - name: Checkout this repo 22 | uses: actions/checkout@master 23 | with: 24 | path: ${{ env.PROJECT_NAME }} 25 | 26 | - name: Checkout raylib repo 27 | uses: actions/checkout@v4 28 | with: 29 | repository: raysan5/raylib 30 | path: raylib 31 | 32 | - name: Setup Release Paths 33 | run: | 34 | echo "PROJECT_RELEASE_PATH=${{ env.PROJECT_NAME }}_v${{ github.event.release.tag_name }}_linux_x64" >> $GITHUB_ENV 35 | shell: bash 36 | if: github.event_name == 'release' && github.event.action == 'published' 37 | 38 | - name: Setup Environment 39 | run: | 40 | sudo apt-get update -qq 41 | sudo apt-get install -y --no-install-recommends libglfw3 libglfw3-dev libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev libwayland-dev libxkbcommon-dev 42 | mkdir ${{ env.PROJECT_RELEASE_PATH }} 43 | ls 44 | shell: bash 45 | 46 | - name: Build raylib Library 47 | run: | 48 | cd raylib/src 49 | gcc --version 50 | make PLATFORM=PLATFORM_DESKTOP BUILD_MODE=RELEASE RAYLIB_LIBTYPE=STATIC RAYLIB_CONFIG_FLAGS=${{ env.RAYLIB_CONFIG_FLAGS }} RAYLIB_PROJECT_RELEASE_PATH=. -B 51 | 52 | - name: Build Product 53 | run: | 54 | cd ${{ env.PROJECT_NAME }}/src 55 | make PLATFORM=PLATFORM_DESKTOP BUILD_MODE=RELEASE PROJECT_SOURCE_FILES=${{ env.PROJECT_SOURCES }} PROJECT_CUSTOM_FLAGS=${{ env.PROJECT_CUSTOM_FLAGS }} PROJECT_BUILD_PATH=. RAYLIB_PATH=../../raylib 56 | 57 | - name: Generate Artifacts 58 | run: | 59 | ls ${{ env.PROJECT_BUILD_PATH }} 60 | cp ${{ env.PROJECT_BUILD_PATH }}/${{ env.PROJECT_NAME }} ${{ env.PROJECT_RELEASE_PATH }} 61 | cp ${{ env.PROJECT_NAME }}/README.md ${{ env.PROJECT_RELEASE_PATH }} 62 | cp ${{ env.PROJECT_NAME }}/LICENSE ${{ env.PROJECT_RELEASE_PATH }} 63 | ls ${{ env.PROJECT_RELEASE_PATH }} 64 | 7z a ./${{ env.PROJECT_RELEASE_PATH }}.zip ./${{ env.PROJECT_RELEASE_PATH }} 65 | 66 | - name: Upload Artifacts 67 | uses: actions/upload-artifact@v4 68 | with: 69 | name: ${{ env.PROJECT_RELEASE_PATH }}.zip 70 | path: ./${{ env.PROJECT_RELEASE_PATH }}.zip 71 | 72 | - name: Upload Artifact to Release 73 | uses: softprops/action-gh-release@v1 74 | with: 75 | files: ${{ env.PROJECT_RELEASE_PATH }}.zip 76 | env: 77 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 78 | if: github.event_name == 'release' && github.event.action == 'published' 79 | -------------------------------------------------------------------------------- /.github/workflows/macos.yml: -------------------------------------------------------------------------------- 1 | name: macOS 2 | 3 | on: 4 | workflow_dispatch: 5 | release: 6 | types: [published] 7 | 8 | permissions: 9 | contents: read 10 | 11 | jobs: 12 | build: 13 | permissions: 14 | contents: write # for actions/upload-release-asset to upload release asset 15 | runs-on: macos-latest 16 | 17 | env: 18 | PROJECT_NAME: ${{ github.event.repository.name }} 19 | PROJECT_BUILD_PATH: ${{ github.event.repository.name }}/src 20 | PROJECT_RELEASE_PATH: ${{ github.event.repository.name }}_dev_macos 21 | PROJECT_SOURCES: "'${{ github.event.repository.name }}.c external/tinyfiledialogs.c'" 22 | PROJECT_CUSTOM_FLAGS: "" 23 | RAYLIB_CONFIG_FLAGS: "-DSUPPORT_MODULE_RSHAPES -DSUPPORT_MODULE_RTEXTURES -DSUPPORT_MODULE_RTEXT -DSUPPORT_COMPRESSION_API -DSUPPORT_QUADS_DRAW_MODE -DSUPPORT_IMAGE_MANIPULATION -DSUPPORT_FILEFORMAT_PNG -DSUPPORT_IMAGE_EXPORT -DSUPPORT_DEFAULT_FONT -DSUPPORT_TEXT_MANIPULATION -DSUPPORT_STANDARD_FILEIO -DSUPPORT_TRACELOG" 24 | 25 | steps: 26 | - name: Checkout this repo 27 | uses: actions/checkout@master 28 | with: 29 | path: ${{ env.PROJECT_NAME }} 30 | 31 | - name: Checkout raylib repo 32 | uses: actions/checkout@v4 33 | with: 34 | repository: raysan5/raylib 35 | path: raylib 36 | 37 | - name: Setup Release Paths 38 | run: | 39 | echo "PROJECT_RELEASE_PATH=${{ env.PROJECT_NAME }}_v${{ github.event.release.tag_name }}_macos" >> $GITHUB_ENV 40 | shell: bash 41 | if: github.event_name == 'release' && github.event.action == 'published' 42 | 43 | - name: Setup Environment 44 | run: | 45 | mkdir ${{ env.PROJECT_RELEASE_PATH }} 46 | cd ${{ env.PROJECT_RELEASE_PATH }} 47 | mkdir ${{ env.PROJECT_NAME }}.app 48 | cd ${{ env.PROJECT_NAME }}.app 49 | mkdir Contents 50 | cd Contents 51 | mkdir MacOS 52 | mkdir Resources 53 | cd ../../.. 54 | ls 55 | shell: bash 56 | 57 | # Generating static library, note that i386 architecture is deprecated 58 | # Defining GL_SILENCE_DEPRECATION because OpenGL is deprecated on macOS 59 | - name: Build raylib Library 60 | run: | 61 | cd raylib/src 62 | clang --version 63 | 64 | # Extract version numbers from Makefile 65 | brew install grep 66 | RAYLIB_API_VERSION=`ggrep -Po 'RAYLIB_API_VERSION\s*=\s\K(.*)' Makefile` 67 | RAYLIB_VERSION=`ggrep -Po 'RAYLIB_VERSION\s*=\s\K(.*)' Makefile` 68 | 69 | # Build raylib x86_64 static 70 | make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=STATIC CUSTOM_CFLAGS="-target x86_64-apple-macos10.12 -DGL_SILENCE_DEPRECATION" 71 | mv -v -f libraylib.a libraylib_x86_64.a 72 | make clean 73 | 74 | # Build raylib arm64 static 75 | make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=STATIC CUSTOM_CFLAGS="-target arm64-apple-macos11 -DGL_SILENCE_DEPRECATION" -B 76 | mv -v -f libraylib.a libraylib_arm64.a 77 | make clean 78 | 79 | # Join x86_64 and arm64 static 80 | lipo -create -output libraylib.a libraylib_x86_64.a libraylib_arm64.a 81 | lipo libraylib.a -detailed_info 82 | cd ../.. 83 | 84 | - name: Build Product 85 | run: | 86 | cd ${{ env.PROJECT_NAME }}/src 87 | 88 | # Build project x86_64 binary 89 | # TODO: Link with x86_64 raylib library: libraylib_x86_64.a 90 | make PLATFORM=PLATFORM_DESKTOP BUILD_MODE=RELEASE PROJECT_SOURCE_FILES=${{ env.PROJECT_SOURCES }} PROJECT_CUSTOM_FLAGS=${{ env.PROJECT_CUSTOM_FLAGS }} PROJECT_BUILD_PATH=. RAYLIB_PATH=../../raylib PROJECT_CUSTOM_FLAGS="-target x86_64-apple-macos10.12" 91 | mv -v -f ${{ env.PROJECT_NAME }} ${{ env.PROJECT_NAME }}_x86_64 92 | make clean 93 | 94 | # Build project arm64 binary 95 | # TODO: Link with arm64 raylib library: libraylib_arm.a 96 | make PLATFORM=PLATFORM_DESKTOP BUILD_MODE=RELEASE PROJECT_SOURCE_FILES=${{ env.PROJECT_SOURCES }} PROJECT_CUSTOM_FLAGS=${{ env.PROJECT_CUSTOM_FLAGS }} PROJECT_BUILD_PATH=. RAYLIB_PATH=../../raylib PROJECT_CUSTOM_FLAGS="-target arm64-apple-macos11" 97 | mv -v -f ${{ env.PROJECT_NAME }} ${{ env.PROJECT_NAME }}_arm64 98 | make clean 99 | 100 | # Join x86_64 and arm64 binaries 101 | lipo -create -output ${{ env.PROJECT_NAME }} ${{ env.PROJECT_NAME }}_x86_64 ${{ env.PROJECT_NAME }}_arm64 102 | lipo ${{ env.PROJECT_NAME }} -detailed_info 103 | cd .. 104 | 105 | - name: Generate Artifacts 106 | run: | 107 | ls ${{ env.PROJECT_BUILD_PATH }} 108 | cp ${{ env.PROJECT_BUILD_PATH }}/${{ env.PROJECT_NAME }} ${{ env.PROJECT_RELEASE_PATH }}/${{ env.PROJECT_NAME }}.app/Contents/MacOS 109 | cp ${{ env.PROJECT_NAME }}/logo/${{ env.PROJECT_NAME }}.icns ${{ env.PROJECT_RELEASE_PATH }}/${{ env.PROJECT_NAME }}.app/Contents/Resources 110 | cp ${{ env.PROJECT_NAME }}/src/Info.plist ${{ env.PROJECT_RELEASE_PATH }}/${{ env.PROJECT_NAME }}.app/Contents 111 | cp ${{ env.PROJECT_NAME }}/README.md ${{ env.PROJECT_RELEASE_PATH }} 112 | cp ${{ env.PROJECT_NAME }}/LICENSE ${{ env.PROJECT_RELEASE_PATH }} 113 | ls ${{ env.PROJECT_RELEASE_PATH }} 114 | 7z a ./${{ env.PROJECT_RELEASE_PATH }}.zip ./${{ env.PROJECT_RELEASE_PATH }} 115 | 116 | - name: Upload Artifacts 117 | uses: actions/upload-artifact@v4 118 | with: 119 | name: ${{ env.PROJECT_RELEASE_PATH }}.zip 120 | path: ./${{ env.PROJECT_RELEASE_PATH }}.zip 121 | 122 | - name: Upload Artifact to Release 123 | uses: softprops/action-gh-release@v1 124 | with: 125 | files: ${{ env.PROJECT_RELEASE_PATH }}.zip 126 | env: 127 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 128 | if: github.event_name == 'release' && github.event.action == 'published' 129 | -------------------------------------------------------------------------------- /.github/workflows/webassembly.yml: -------------------------------------------------------------------------------- 1 | name: WebAssembly 2 | 3 | on: 4 | workflow_dispatch: 5 | release: 6 | types: [published] 7 | 8 | jobs: 9 | build: 10 | runs-on: windows-latest 11 | 12 | env: 13 | PROJECT_NAME: ${{ github.event.repository.name }} 14 | PROJECT_BUILD_PATH: ${{ github.event.repository.name }}\\src 15 | PROJECT_RELEASE_PATH: ${{ github.event.repository.name }}_dev_wasm 16 | PROJECT_SOURCES: ${{ github.event.repository.name }}.c 17 | RAYLIB_CONFIG_FLAGS: "'-DSUPPORT_MODULE_RSHAPES -DSUPPORT_MODULE_RTEXTURES -DSUPPORT_MODULE_RTEXT -DSUPPORT_EVENTS_WAITING -DSUPPORT_COMPRESSION_API -DSUPPORT_QUADS_DRAW_MODE -DSUPPORT_IMAGE_MANIPULATION -DSUPPORT_FILEFORMAT_PNG -DSUPPORT_IMAGE_EXPORT -DSUPPORT_DEFAULT_FONT -DSUPPORT_TEXT_MANIPULATION -DSUPPORT_STANDARD_FILEIO -DSUPPORT_TRACELOG'" 18 | BUILD_WEB_SHELL: minshell.html 19 | 20 | steps: 21 | - name: Checkout this repo 22 | uses: actions/checkout@master 23 | with: 24 | path: ${{ env.PROJECT_NAME }} 25 | 26 | - name: Checkout raylib repo 27 | uses: actions/checkout@v4 28 | with: 29 | repository: raysan5/raylib 30 | path: raylib 31 | 32 | - name: Setup emsdk 33 | uses: mymindstorm/setup-emsdk@v14 34 | with: 35 | version: 3.1.64 36 | actions-cache-folder: 'emsdk-cache' 37 | 38 | - name: Setup Release Paths 39 | run: | 40 | echo "PROJECT_RELEASE_PATH=${{ env.PROJECT_NAME }}_v${{ github.event.release.tag_name }}_wasm" >> $GITHUB_ENV 41 | shell: bash 42 | if: github.event_name == 'release' && github.event.action == 'published' 43 | 44 | - name: Setup Environment 45 | run: | 46 | mkdir ${{ env.PROJECT_RELEASE_PATH }} 47 | dir 48 | 49 | - name: Build raylib Library 50 | run: | 51 | cd raylib/src 52 | emcc -v 53 | make PLATFORM=PLATFORM_WEB RAYLIB_BUILD_MODE=RELEASE RAYLIB_LIBTYPE=STATIC EMSDK_PATH="D:/a/${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}/emsdk-cache/emsdk-main" RAYLIB_CONFIG_FLAGS=${{ env.RAYLIB_CONFIG_FLAGS }} RAYLIB_PROJECT_RELEASE_PATH=. -B 54 | 55 | - name: Build Product 56 | run: | 57 | cd ${{ env.PROJECT_NAME }}/src 58 | make PLATFORM=PLATFORM_WEB BUILD_MODE=RELEASE EMSDK_PATH="D:/a/${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}/emsdk-cache/emsdk-main" PROJECT_SOURCE_FILES=${{ env.PROJECT_SOURCES }} PROJECT_BUILD_PATH=. RAYLIB_PATH=../../raylib -B 59 | 60 | - name: Generate Artifacts 61 | run: | 62 | dir ${{ env.PROJECT_BUILD_PATH }} 63 | copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.wasm ${{ env.PROJECT_RELEASE_PATH }}\${{ env.PROJECT_NAME }}.wasm 64 | copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.data ${{ env.PROJECT_RELEASE_PATH }}\${{ env.PROJECT_NAME }}.data 65 | copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.js ${{ env.PROJECT_RELEASE_PATH }}\${{ env.PROJECT_NAME }}.js 66 | copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.html ${{ env.PROJECT_RELEASE_PATH }}\index.html 67 | copy /Y ${{ env.PROJECT_NAME }}\README.md ${{ env.PROJECT_RELEASE_PATH }}\README.md 68 | copy /Y ${{ env.PROJECT_NAME }}\LICENSE ${{ env.PROJECT_RELEASE_PATH }}\LICENSE 69 | dir ${{ env.PROJECT_RELEASE_PATH }} 70 | 7z a -tzip -r .\${{ env.PROJECT_RELEASE_PATH }}.zip .\${{ env.PROJECT_RELEASE_PATH }}\* 71 | shell: cmd 72 | 73 | - name: Upload Artifacts 74 | uses: actions/upload-artifact@v4 75 | with: 76 | name: ${{ env.PROJECT_RELEASE_PATH }}.zip 77 | path: ./${{ env.PROJECT_RELEASE_PATH }}.zip 78 | 79 | - name: Upload Artifact to Release 80 | uses: softprops/action-gh-release@v1 81 | with: 82 | files: ${{ env.PROJECT_RELEASE_PATH }}.zip 83 | env: 84 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 85 | if: github.event_name == 'release' && github.event.action == 'published' 86 | -------------------------------------------------------------------------------- /.github/workflows/windows.yml: -------------------------------------------------------------------------------- 1 | name: Windows 2 | 3 | on: 4 | workflow_dispatch: 5 | release: 6 | types: [published] 7 | 8 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 9 | jobs: 10 | build: 11 | runs-on: windows-latest 12 | 13 | env: 14 | PROJECT_NAME: ${{ github.event.repository.name }} 15 | PROJECT_BUILD_PATH: "${{ github.event.repository.name }}\\projects\\VS2022\\build\\${{ github.event.repository.name }}\\bin\\x64\\Release" 16 | PROJECT_RELEASE_PATH: ${{ github.event.repository.name }}_dev_win_x64 17 | 18 | steps: 19 | - name: Checkout this repo 20 | uses: actions/checkout@master 21 | with: 22 | path: ${{ env.PROJECT_NAME }} 23 | 24 | - name: Checkout raylib repo 25 | uses: actions/checkout@v4 26 | with: 27 | repository: raysan5/raylib 28 | path: raylib 29 | 30 | # NOTE: Visual Studio project build configuration already defines all required directories where project is generated: 31 | # $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 32 | - name: Setup Release Paths 33 | run: | 34 | echo "PROJECT_RELEASE_PATH=${{ env.PROJECT_NAME }}_v${{ github.event.release.tag_name }}_win_x64" >> $GITHUB_ENV 35 | shell: bash 36 | if: github.event_name == 'release' && github.event.action == 'published' 37 | 38 | - name: Setup Environment 39 | run: | 40 | mkdir ${{ env.PROJECT_RELEASE_PATH }} 41 | dir 42 | shell: cmd 43 | 44 | # Setup MSBuild.exe path if required 45 | - name: Setup MSBuild path 46 | uses: microsoft/setup-msbuild@v2 47 | 48 | - name: Build raylib Library + Product (VS2022 solution) 49 | run: | 50 | dir 51 | cd ${{ env.PROJECT_NAME }}/projects/VS2022 52 | msbuild.exe ${{ env.PROJECT_NAME }}.sln /target:${{ env.PROJECT_NAME }} /property:Configuration=Release /property:Platform=x64 53 | cd ../.. 54 | shell: cmd 55 | 56 | - name: Generate Artifacts 57 | run: | 58 | dir ${{ env.PROJECT_BUILD_PATH }} 59 | copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.exe ${{ env.PROJECT_RELEASE_PATH }}\${{ env.PROJECT_NAME }}.exe 60 | copy /Y ${{ env.PROJECT_NAME }}\README.md ${{ env.PROJECT_RELEASE_PATH }}\README.md 61 | copy /Y ${{ env.PROJECT_NAME }}\LICENSE ${{ env.PROJECT_RELEASE_PATH }}\LICENSE 62 | dir ${{ env.PROJECT_RELEASE_PATH }} 63 | 7z a .\${{ env.PROJECT_RELEASE_PATH }}.zip .\${{ env.PROJECT_RELEASE_PATH }} 64 | shell: cmd 65 | 66 | - name: Upload Artifacts 67 | uses: actions/upload-artifact@v4 68 | with: 69 | name: ${{ env.PROJECT_RELEASE_PATH }}.zip 70 | path: ./${{ env.PROJECT_RELEASE_PATH }}.zip 71 | 72 | - name: Upload Artifact to Release 73 | uses: softprops/action-gh-release@v1 74 | with: 75 | files: ${{ env.PROJECT_RELEASE_PATH }}.zip 76 | env: 77 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 78 | if: github.event_name == 'release' && github.event.action == 'published' 79 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Object files 5 | *.o 6 | *.ko 7 | *.obj 8 | *.elf 9 | 10 | # Linker output 11 | *.ilk 12 | *.map 13 | *.exp 14 | 15 | # Precompiled Headers 16 | *.gch 17 | *.pch 18 | 19 | # Libraries 20 | *.lib 21 | *.a 22 | *.la 23 | *.lo 24 | 25 | # Shared objects (inc. Windows DLLs) 26 | *.dll 27 | *.so 28 | *.so.* 29 | *.dylib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.i*86 36 | *.x86_64 37 | *.hex 38 | 39 | # Debug files 40 | *.dSYM/ 41 | *.su 42 | *.idb 43 | *.pdb 44 | 45 | # Kernel Module Compile Results 46 | *.mod* 47 | *.cmd 48 | .tmp_versions/ 49 | modules.order 50 | Module.symvers 51 | Mkfile.old 52 | dkms.conf 53 | 54 | # Visual Studio files 55 | [Dd]ebug/ 56 | [Dd]ebug.DLL/ 57 | [R]elease/ 58 | [Rr]elease.DLL/ 59 | *.user 60 | .vs 61 | 62 | # Build folder 63 | [Bb]uild 64 | 65 | # WebAssembly release files 66 | *.data 67 | *.wasm 68 | *.html 69 | *.js 70 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | zlib License 2 | 3 | Copyright (c) 2017-2024 raylib technologies (@raylibtech) / Ramon Santamaria (@raysan5) 4 | 5 | This software is provided "as-is", without any express or implied warranty. In no event 6 | will the authors be held liable for any damages arising from the use of this software. 7 | 8 | Permission is granted to anyone to use this software for any purpose, including commercial 9 | applications, and to alter it and redistribute it freely, subject to the following restrictions: 10 | 11 | 1. The origin of this software must not be misrepresented; you must not claim that you 12 | wrote the original software. If you use this software in a product, an acknowledgment 13 | in the product documentation would be appreciated but is not required. 14 | 15 | 2. Altered source versions must be plainly marked as such, and must not be misrepresented 16 | as being the original software. 17 | 18 | 3. This notice may not be removed or altered from any source distribution. 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # `rGuiIcons` 2 | 3 | A simple and easy-to-use [raygui](https://github.com/raysan5/raygui) icons editor. 4 | 5 | Useful for tools icons customization. The best tool companion for [rGuiLayout](https://raylibtech.itch.io/rguilayout) and [rGuiStyler](https://github.com/raysan5/rguistyler). 6 | 7 | `rGuiIcons` can be used for free as a [WebAssembly online tool](https://raylibtech.itch.io/rguiicons) and it can also be downloaded as a **standalone tool** for _Windows_ and _Linux_ with some extra features. 8 | 9 | **NOTE: Latest `rGuiIcons 3.0` release is intended to be used with [`raygui 4.0`](https://github.com/raysan5/raygui/releases/tag/4.0) release.** 10 | 11 | ## Features 12 | 13 | - **Icon editing** and preview at multiple sizes 14 | - **Cut, copy, paste** icons for easy editing 15 | - **Undo/Redo** system for icon changes 16 | - Save and load as binary iconset file `.rgi` 17 | - Export iconset as an embeddable **code file** (`.h`) 18 | - Export iconset as a `.png` black&white image 19 | - Icon name ids exported as standard PNG chunk (`zTXt`) 20 | - Multiple UI styles for tools reference 21 | - **+200 custom icons for reference** and basic edition 22 | - Command-line support for `.rgi`/`.h`/`.png` batch conversion 23 | - **Completely portable (single-file, no-dependencies)** 24 | - **Free and open source** 25 | 26 | ## Screenshot 27 | 28 | ![rGuiIcons](screenshots/rguiicons_v200_shot02.png) 29 | 30 | ## Usage 31 | 32 | The tool is quite intuitive, the expected steps to follow are: 33 | 1. Choose the icon to edit from icons panel 34 | 2. Edit the icon pixels in the right panel 35 | 3. Select next icon for edit or export set/individual icon 36 | 37 | NOTE: Icon changes are previewed in real time in the same tool! 38 | 39 | Once icons have been created/edited, they can be saved as a raygui-ready icon set (.rgi), exported as an embeddable `.h` **code file** or exported as a `.png` image. Note that the `.png` contains the icons ids information in a standard chunk (`tEXt`/`zTXt`). 40 | 41 | - raygui icon set file (`.rgi`) can be loaded by raygui using the function `GuiLoadIcons()`. 42 | 43 | - raygui icon set code file (`.h`) can be embedded into a raygui-based application just defining: 44 | 45 | ```c 46 | #define RAYGUI_IMPLEMENTATION 47 | #define RAYGUI_CUSTOM_ICONS // Custom icons set required 48 | #include "gui_iconset.h" // Custom icons set provided, generated with rGuiIcons tool 49 | #include "raygui.h" 50 | ``` 51 | 52 | `rGuiIcons Standalone` comes with command-line support for batch conversion. For usage help: 53 | 54 | > rguiicons.exe --help 55 | 56 | ## License 57 | 58 | `rGuiIcons` source code is distributed as **open source**, licensed under an unmodified [zlib/libpng license](LICENSE). 59 | 60 | `rGuiIcons` binaries are completely free for anyone willing to compile it directly from source. 61 | 62 | `rGuiIcons Standalone` desktop tool is distributed as freeware. 63 | 64 | In any case, consider some donation to help the author keep working on software for games development. 65 | 66 | *Copyright (c) 2019-2025 raylib technologies ([@raylibtech](https://twitter.com/raylibtech)) / Ramon Santamaria ([@raysan5](https://twitter.com/raysan5))* 67 | -------------------------------------------------------------------------------- /design/rguiicons_mockup01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/design/rguiicons_mockup01.png -------------------------------------------------------------------------------- /design/rguiicons_mockup02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/design/rguiicons_mockup02.png -------------------------------------------------------------------------------- /design/rguiicons_mockup03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/design/rguiicons_mockup03.png -------------------------------------------------------------------------------- /design/rguiicons_mockup04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/design/rguiicons_mockup04.png -------------------------------------------------------------------------------- /design/ricons.old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/design/ricons.old.png -------------------------------------------------------------------------------- /design/ricons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/design/ricons.png -------------------------------------------------------------------------------- /design/ricons_design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/design/ricons_design.png -------------------------------------------------------------------------------- /design/ricons_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/design/ricons_light.png -------------------------------------------------------------------------------- /design/ricons_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/design/ricons_test.png -------------------------------------------------------------------------------- /logo/rguiicons.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons.icns -------------------------------------------------------------------------------- /logo/rguiicons.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons.ico -------------------------------------------------------------------------------- /logo/rguiicons_1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_1024x1024.png -------------------------------------------------------------------------------- /logo/rguiicons_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_128x128.png -------------------------------------------------------------------------------- /logo/rguiicons_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_16x16.png -------------------------------------------------------------------------------- /logo/rguiicons_184x184.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_184x184.png -------------------------------------------------------------------------------- /logo/rguiicons_240x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_240x240.png -------------------------------------------------------------------------------- /logo/rguiicons_24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_24x24.png -------------------------------------------------------------------------------- /logo/rguiicons_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_256x256.png -------------------------------------------------------------------------------- /logo/rguiicons_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_32x32.png -------------------------------------------------------------------------------- /logo/rguiicons_48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_48x48.png -------------------------------------------------------------------------------- /logo/rguiicons_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_512x512.png -------------------------------------------------------------------------------- /logo/rguiicons_64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_64x64.png -------------------------------------------------------------------------------- /logo/rguiicons_96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/logo/rguiicons_96x96.png -------------------------------------------------------------------------------- /projects/VS2022/raylib/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %(PreProcessorDefinitions);EXTERNAL_CONFIG_FLAGS;SUPPORT_MODULE_RSHAPES;SUPPORT_MODULE_RTEXTURES;SUPPORT_MODULE_RTEXT;SUPPORT_EVENTS_WAITING;SUPPORT_COMPRESSION_API;SUPPORT_QUADS_DRAW_MODE;SUPPORT_DEFAULT_FONT;SUPPORT_FILEFORMAT_TTF;SUPPORT_IMAGE_MANIPULATION;SUPPORT_TEXT_MANIPULATION;SUPPORT_FILEFORMAT_PNG;SUPPORT_IMAGE_EXPORT;SUPPORT_STANDARD_FILEIO;SUPPORT_TRACELOG 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /projects/VS2022/raylib/raylib.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug.DLL 6 | Win32 7 | 8 | 9 | Debug.DLL 10 | x64 11 | 12 | 13 | Debug 14 | Win32 15 | 16 | 17 | Debug 18 | x64 19 | 20 | 21 | Release.DLL 22 | Win32 23 | 24 | 25 | Release.DLL 26 | x64 27 | 28 | 29 | Release 30 | Win32 31 | 32 | 33 | Release 34 | x64 35 | 36 | 37 | 38 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859} 39 | Win32Proj 40 | raylib 41 | 10.0 42 | 43 | 44 | 45 | StaticLibrary 46 | true 47 | $(DefaultPlatformToolset) 48 | Unicode 49 | 50 | 51 | StaticLibrary 52 | true 53 | $(DefaultPlatformToolset) 54 | Unicode 55 | 56 | 57 | DynamicLibrary 58 | true 59 | $(DefaultPlatformToolset) 60 | Unicode 61 | 62 | 63 | DynamicLibrary 64 | true 65 | $(DefaultPlatformToolset) 66 | Unicode 67 | 68 | 69 | StaticLibrary 70 | false 71 | $(DefaultPlatformToolset) 72 | Unicode 73 | 74 | 75 | StaticLibrary 76 | false 77 | $(DefaultPlatformToolset) 78 | Unicode 79 | 80 | 81 | DynamicLibrary 82 | false 83 | $(DefaultPlatformToolset) 84 | Unicode 85 | 86 | 87 | DynamicLibrary 88 | false 89 | $(DefaultPlatformToolset) 90 | Unicode 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 124 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 125 | 126 | 127 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 128 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 129 | 130 | 131 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 132 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 133 | 134 | 135 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 136 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 137 | 138 | 139 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 140 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 141 | 142 | 143 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 144 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 145 | 146 | 147 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 148 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 149 | 150 | 151 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 152 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 153 | 154 | 155 | 156 | 157 | 158 | Level3 159 | Disabled 160 | _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP 161 | CompileAsC 162 | $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include 163 | 164 | 165 | Windows 166 | 167 | 168 | %(AdditionalLibraryDirectories) 169 | 170 | 171 | 172 | 173 | 174 | 175 | Level3 176 | Disabled 177 | _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP 178 | CompileAsC 179 | $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include 180 | 181 | 182 | Windows 183 | 184 | 185 | %(AdditionalLibraryDirectories) 186 | 187 | 188 | 189 | 190 | 191 | 192 | Level3 193 | Disabled 194 | _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP;BUILD_LIBTYPE_SHARED 195 | CompileAsC 196 | $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include 197 | MultiThreadedDebug 198 | 199 | 200 | Windows 201 | 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) 202 | 203 | 204 | %(AdditionalLibraryDirectories) 205 | 206 | 207 | 208 | 209 | 210 | 211 | Level3 212 | Disabled 213 | _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP;BUILD_LIBTYPE_SHARED 214 | CompileAsC 215 | $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include 216 | MultiThreadedDebug 217 | 218 | 219 | Windows 220 | 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) 221 | 222 | 223 | %(AdditionalLibraryDirectories) 224 | 225 | 226 | 227 | 228 | Level3 229 | 230 | 231 | MaxSpeed 232 | true 233 | true 234 | _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP 235 | $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include 236 | CompileAsC 237 | MultiThreaded 238 | 239 | 240 | Windows 241 | true 242 | true 243 | 244 | 245 | 246 | 247 | Level3 248 | 249 | 250 | MaxSpeed 251 | true 252 | true 253 | _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP 254 | $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include 255 | CompileAsC 256 | 257 | MultiThreaded 258 | 259 | 260 | Windows 261 | true 262 | true 263 | 264 | 265 | 266 | 267 | Level3 268 | 269 | 270 | MaxSpeed 271 | true 272 | true 273 | _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP;BUILD_LIBTYPE_SHARED 274 | $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include 275 | CompileAsC 276 | MultiThreaded 277 | 278 | 279 | Windows 280 | true 281 | true 282 | 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) 283 | 284 | 285 | 286 | 287 | Level3 288 | 289 | 290 | MaxSpeed 291 | true 292 | true 293 | _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP;BUILD_LIBTYPE_SHARED 294 | $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include 295 | CompileAsC 296 | MultiThreaded 297 | 298 | 299 | 300 | Windows 301 | true 302 | true 303 | 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) 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | -------------------------------------------------------------------------------- /projects/VS2022/rguiicons.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.0.31912.275 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "raylib", "raylib\raylib.vcxproj", "{E89D61AC-55DE-4482-AFD4-DF7242EBC859}" 7 | EndProject 8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rguiicons", "rguiicons\rguiicons.vcxproj", "{0981CA98-E4A5-4DF1-987F-A41D09131EFC}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug.DLL|x64 = Debug.DLL|x64 13 | Debug.DLL|x86 = Debug.DLL|x86 14 | Debug|x64 = Debug|x64 15 | Debug|x86 = Debug|x86 16 | Release.DLL|x64 = Release.DLL|x64 17 | Release.DLL|x86 = Release.DLL|x86 18 | Release|x64 = Release|x64 19 | Release|x86 = Release|x86 20 | EndGlobalSection 21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 22 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 23 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x64.Build.0 = Debug.DLL|x64 24 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 25 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 26 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x64.ActiveCfg = Debug|x64 27 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x64.Build.0 = Debug|x64 28 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x86.ActiveCfg = Debug|Win32 29 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x86.Build.0 = Debug|Win32 30 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x64.ActiveCfg = Release.DLL|x64 31 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x64.Build.0 = Release.DLL|x64 32 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 33 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x86.Build.0 = Release.DLL|Win32 34 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release|x64.ActiveCfg = Release|x64 35 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release|x64.Build.0 = Release|x64 36 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release|x86.ActiveCfg = Release|Win32 37 | {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release|x86.Build.0 = Release|Win32 38 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64 39 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug.DLL|x64.Build.0 = Debug.DLL|x64 40 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32 41 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32 42 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug|x64.ActiveCfg = Debug|x64 43 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug|x64.Build.0 = Debug|x64 44 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug|x86.ActiveCfg = Debug|Win32 45 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug|x86.Build.0 = Debug|Win32 46 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release.DLL|x64.ActiveCfg = Release.DLL|x64 47 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release.DLL|x64.Build.0 = Release.DLL|x64 48 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32 49 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release.DLL|x86.Build.0 = Release.DLL|Win32 50 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x64.ActiveCfg = Release|x64 51 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x64.Build.0 = Release|x64 52 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x86.ActiveCfg = Release|Win32 53 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x86.Build.0 = Release|Win32 54 | EndGlobalSection 55 | GlobalSection(SolutionProperties) = preSolution 56 | HideSolutionNode = FALSE 57 | EndGlobalSection 58 | GlobalSection(ExtensibilityGlobals) = postSolution 59 | SolutionGuid = {E926C768-6307-4423-A1EC-57E95B1FAB29} 60 | EndGlobalSection 61 | EndGlobal 62 | -------------------------------------------------------------------------------- /projects/VS2022/rguiicons/rguiicons.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug.DLL 6 | Win32 7 | 8 | 9 | Debug.DLL 10 | x64 11 | 12 | 13 | Debug 14 | Win32 15 | 16 | 17 | Debug 18 | x64 19 | 20 | 21 | Release.DLL 22 | Win32 23 | 24 | 25 | Release.DLL 26 | x64 27 | 28 | 29 | Release 30 | Win32 31 | 32 | 33 | Release 34 | x64 35 | 36 | 37 | 38 | {0981CA98-E4A5-4DF1-987F-A41D09131EFC} 39 | Win32Proj 40 | rguiicons 41 | rguiicons 42 | 10.0 43 | 44 | 45 | 46 | Application 47 | true 48 | $(DefaultPlatformToolset) 49 | Unicode 50 | 51 | 52 | Application 53 | true 54 | $(DefaultPlatformToolset) 55 | Unicode 56 | 57 | 58 | Application 59 | true 60 | $(DefaultPlatformToolset) 61 | Unicode 62 | 63 | 64 | Application 65 | true 66 | $(DefaultPlatformToolset) 67 | Unicode 68 | 69 | 70 | Application 71 | false 72 | $(DefaultPlatformToolset) 73 | true 74 | Unicode 75 | 76 | 77 | Application 78 | false 79 | $(DefaultPlatformToolset) 80 | true 81 | Unicode 82 | 83 | 84 | Application 85 | false 86 | $(DefaultPlatformToolset) 87 | true 88 | Unicode 89 | 90 | 91 | Application 92 | false 93 | $(DefaultPlatformToolset) 94 | true 95 | Unicode 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | true 129 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 130 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 131 | 132 | 133 | true 134 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 135 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 136 | 137 | 138 | true 139 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 140 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 141 | 142 | 143 | true 144 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 145 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 146 | 147 | 148 | false 149 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 150 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 151 | 152 | 153 | false 154 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 155 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 156 | 157 | 158 | false 159 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 160 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 161 | 162 | 163 | false 164 | $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\ 165 | $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\ 166 | 167 | 168 | 169 | 170 | 171 | Level3 172 | Disabled 173 | _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) 174 | CompileAsC 175 | $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories) 176 | 177 | 178 | Console 179 | true 180 | $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ 181 | 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) 182 | 183 | 184 | 185 | 186 | 187 | 188 | Level3 189 | Disabled 190 | _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) 191 | CompileAsC 192 | $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories) 193 | /FS %(AdditionalOptions) 194 | 195 | 196 | Console 197 | true 198 | $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ 199 | 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) 200 | 201 | 202 | 203 | 204 | 205 | 206 | Level3 207 | Disabled 208 | _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) 209 | CompileAsC 210 | $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories) 211 | 212 | 213 | Console 214 | true 215 | $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ 216 | 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) 217 | 218 | 219 | xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" 220 | Copy Debug DLL to output directory 221 | 222 | 223 | 224 | 225 | 226 | 227 | Level3 228 | Disabled 229 | _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) 230 | CompileAsC 231 | $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories) 232 | 233 | 234 | Console 235 | true 236 | $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ 237 | 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) 238 | 239 | 240 | xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" 241 | Copy Debug DLL to output directory 242 | 243 | 244 | 245 | 246 | Level3 247 | 248 | 249 | MaxSpeed 250 | true 251 | true 252 | _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) 253 | $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories) 254 | CompileAsC 255 | true 256 | MultiThreaded 257 | 258 | 259 | Console 260 | true 261 | true 262 | true 263 | 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) 264 | $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ 265 | 266 | 267 | 268 | 269 | Level3 270 | 271 | 272 | MaxSpeed 273 | true 274 | true 275 | _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) 276 | $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories) 277 | CompileAsC 278 | true 279 | MultiThreaded 280 | 281 | 282 | Console 283 | true 284 | true 285 | true 286 | 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) 287 | $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ 288 | 289 | 290 | 291 | 292 | Level3 293 | 294 | 295 | MaxSpeed 296 | true 297 | true 298 | _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) 299 | $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories) 300 | CompileAsC 301 | true 302 | 303 | 304 | Console 305 | true 306 | true 307 | true 308 | 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) 309 | $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ 310 | 311 | 312 | xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" 313 | 314 | 315 | Copy Release DLL to output directory 316 | 317 | 318 | 319 | 320 | Level3 321 | 322 | 323 | MaxSpeed 324 | true 325 | true 326 | _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions) 327 | $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories) 328 | CompileAsC 329 | true 330 | 331 | 332 | Console 333 | true 334 | true 335 | true 336 | 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) 337 | $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\ 338 | 339 | 340 | xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)" 341 | 342 | 343 | Copy Release DLL to output directory 344 | 345 | 346 | 347 | 348 | {e89d61ac-55de-4482-afd4-df7242ebc859} 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | -------------------------------------------------------------------------------- /screenshots/rguiicons_v100_shot01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v100_shot01.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v100_shot02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v100_shot02.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v100_shot03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v100_shot03.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v100_shot04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v100_shot04.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v100_shot05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v100_shot05.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v100_shot06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v100_shot06.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v150_shot01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v150_shot01.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v200_shot01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v200_shot01.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v200_shot02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v200_shot02.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v200_shot03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v200_shot03.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v200_shot04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v200_shot04.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v200_shot05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v200_shot05.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v200_shot06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v200_shot06.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v200_shot07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v200_shot07.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v200_shot08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v200_shot08.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v300_shot01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v300_shot01.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v300_shot02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v300_shot02.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v300_shot03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v300_shot03.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v300_shot04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v300_shot04.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v300_shot05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v300_shot05.png -------------------------------------------------------------------------------- /screenshots/rguiicons_v300_shot06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/screenshots/rguiicons_v300_shot06.png -------------------------------------------------------------------------------- /src/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | rguiicons 9 | CFBundleIconFile 10 | rguiicons.icns 11 | CFBundleIdentifier 12 | com.raylibtech.rguiicons 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | rguiicons 17 | CFBundlePackageType 18 | APPL 19 | CFBundleVersion 20 | 3.0 21 | CFBundleShortVersionString 22 | 3.0.0 23 | LSMinimumSystemVersion 24 | 10.12 25 | NSHumanReadableCopyright 26 | Copyright (c) 2023 raylib technologies (@raylibtech) 27 | CFBundleSignature 28 | ???? 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/Makefile: -------------------------------------------------------------------------------- 1 | #************************************************************************************************** 2 | # 3 | # raylib makefile for Desktop platforms, Raspberry Pi and Web Assembly 4 | # 5 | # Copyright (c) 2021-2025 Ramon Santamaria (@raysan5) 6 | # 7 | # This software is provided "as-is", without any express or implied warranty. In no event 8 | # will the authors be held liable for any damages arising from the use of this software. 9 | # 10 | # Permission is granted to anyone to use this software for any purpose, including commercial 11 | # applications, and to alter it and redistribute it freely, subject to the following restrictions: 12 | # 13 | # 1. The origin of this software must not be misrepresented; you must not claim that you 14 | # wrote the original software. If you use this software in a product, an acknowledgment 15 | # in the product documentation would be appreciated but is not required. 16 | # 17 | # 2. Altered source versions must be plainly marked as such, and must not be misrepresented 18 | # as being the original software. 19 | # 20 | # 3. This notice may not be removed or altered from any source distribution. 21 | # 22 | #************************************************************************************************** 23 | 24 | .PHONY: all clean 25 | 26 | # Define required environment variables 27 | #------------------------------------------------------------------------------------------------ 28 | # Define target platform: PLATFORM_DESKTOP, PLATFORM_WEB, PLATFORM_DRM 29 | PLATFORM ?= PLATFORM_DESKTOP 30 | 31 | # Define project variables 32 | PROJECT_NAME ?= rguiicons 33 | PROJECT_VERSION ?= 1.0 34 | PROJECT_BUILD_PATH ?= . 35 | PROJECT_SOURCE_FILES ?= rguiicons.c 36 | ifneq ($(PLATFORM),PLATFORM_WEB) 37 | PROJECT_SOURCE_FILES += external/tinyfiledialogs.c 38 | endif 39 | 40 | RAYLIB_PATH ?= C:/GitHub/raylib 41 | RAYLIB_INCLUDE_PATH ?= $(RAYLIB_PATH)/src 42 | RAYLIB_LIB_PATH ?= $(RAYLIB_PATH)/src 43 | 44 | # Build mode for project: DEBUG or RELEASE 45 | BUILD_MODE ?= RELEASE 46 | 47 | # PLATFORM_WEB: Default properties 48 | BUILD_WEB_ASYNCIFY ?= TRUE 49 | BUILD_WEB_SHELL ?= minshell.html 50 | BUILD_WEB_HEAP_SIZE ?= 128MB 51 | BUILD_WEB_STACK_SIZE ?= 1MB 52 | BUILD_WEB_ASYNCIFY_STACK_SIZE ?= 1048576 53 | BUILD_WEB_RESOURCES ?= FALSE 54 | BUILD_WEB_RESOURCES_PATH ?= resources 55 | 56 | # Determine PLATFORM_OS in case PLATFORM_DESKTOP selected 57 | ifeq ($(PLATFORM),PLATFORM_DESKTOP) 58 | # No uname.exe on MinGW!, but OS=Windows_NT on Windows! 59 | # ifeq ($(UNAME),Msys) -> Windows 60 | ifeq ($(OS),Windows_NT) 61 | PLATFORM_OS = WINDOWS 62 | else 63 | UNAMEOS = $(shell uname) 64 | ifeq ($(UNAMEOS),Linux) 65 | PLATFORM_OS = LINUX 66 | endif 67 | ifeq ($(UNAMEOS),FreeBSD) 68 | PLATFORM_OS = BSD 69 | endif 70 | ifeq ($(UNAMEOS),OpenBSD) 71 | PLATFORM_OS = BSD 72 | endif 73 | ifeq ($(UNAMEOS),NetBSD) 74 | PLATFORM_OS = BSD 75 | endif 76 | ifeq ($(UNAMEOS),DragonFly) 77 | PLATFORM_OS = BSD 78 | endif 79 | ifeq ($(UNAMEOS),Darwin) 80 | PLATFORM_OS = OSX 81 | endif 82 | endif 83 | endif 84 | ifeq ($(PLATFORM),PLATFORM_DRM) 85 | UNAMEOS = $(shell uname) 86 | ifeq ($(UNAMEOS),Linux) 87 | PLATFORM_OS = LINUX 88 | endif 89 | endif 90 | 91 | ifeq ($(PLATFORM),PLATFORM_WEB) 92 | # Emscripten required variables 93 | EMSDK_PATH ?= C:/raylib/emsdk 94 | EMSCRIPTEN_PATH ?= $(EMSDK_PATH)/upstream/emscripten 95 | CLANG_PATH = $(EMSDK_PATH)/upstream/bin 96 | PYTHON_PATH = $(EMSDK_PATH)/python/3.9.2-nuget_64bit 97 | NODE_PATH = $(EMSDK_PATH)/node/20.18.0_64bit/bin 98 | export PATH = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH):$$(PATH) 99 | endif 100 | 101 | # Define default C compiler: CC 102 | #------------------------------------------------------------------------------------------------ 103 | CC = gcc 104 | 105 | ifeq ($(PLATFORM),PLATFORM_DESKTOP) 106 | ifeq ($(PLATFORM_OS),OSX) 107 | # OSX default compiler 108 | CC = clang 109 | endif 110 | ifeq ($(PLATFORM_OS),BSD) 111 | # FreeBSD, OpenBSD, NetBSD, DragonFly default compiler 112 | CC = clang 113 | endif 114 | endif 115 | ifeq ($(PLATFORM),PLATFORM_WEB) 116 | # HTML5 emscripten compiler 117 | # WARNING: To compile to HTML5, code must be redesigned 118 | # to use emscripten.h and emscripten_set_main_loop() 119 | CC = emcc 120 | endif 121 | ifeq ($(PLATFORM),PLATFORM_DRM) 122 | ifeq ($(USE_RPI_CROSS_COMPILER),TRUE) 123 | # Define RPI cross-compiler 124 | #CC = armv6j-hardfloat-linux-gnueabi-gcc 125 | CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc 126 | endif 127 | endif 128 | 129 | 130 | # Define default make program: MAKE 131 | #------------------------------------------------------------------------------------------------ 132 | MAKE ?= make 133 | 134 | ifeq ($(PLATFORM),PLATFORM_DESKTOP) 135 | ifeq ($(PLATFORM_OS),WINDOWS) 136 | MAKE = mingw32-make 137 | endif 138 | endif 139 | 140 | # Define compiler flags: CFLAGS 141 | #------------------------------------------------------------------------------------------------ 142 | # -O1 defines optimization level 143 | # -g include debug information on compilation 144 | # -s strip unnecessary data from build 145 | # -Wall turns on most, but not all, compiler warnings 146 | # -std=c99 defines C language mode (standard C from 1999 revision) 147 | # -std=gnu99 defines C language mode (GNU C from 1999 revision) 148 | # -Wno-missing-braces ignore invalid warning (GCC bug 53119) 149 | # -Wno-unused-value ignore unused return values of some functions (i.e. fread()) 150 | # -D_DEFAULT_SOURCE use with -std=c99 on Linux and PLATFORM_WEB, required for timespec 151 | CFLAGS = -Wall -D_DEFAULT_SOURCE -Wno-missing-braces -Wno-unused-value -Wno-pointer-sign $(PROJECT_CUSTOM_FLAGS) 152 | #CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes 153 | 154 | ifeq ($(PLATFORM),PLATFORM_WEB) 155 | CFLAGS += -std=gnu99 156 | else 157 | CFLAGS += -std=c99 158 | endif 159 | 160 | ifeq ($(BUILD_MODE),DEBUG) 161 | CFLAGS += -g -D_DEBUG 162 | else 163 | ifeq ($(PLATFORM),PLATFORM_WEB) 164 | ifeq ($(BUILD_WEB_ASYNCIFY),TRUE) 165 | CFLAGS += -O3 166 | else 167 | CFLAGS += -Os 168 | endif 169 | else 170 | ifeq ($(PLATFORM_OS),OSX) 171 | CFLAGS += -O2 172 | else 173 | CFLAGS += -s -O2 174 | endif 175 | endif 176 | endif 177 | ifeq ($(PLATFORM),PLATFORM_DRM) 178 | CFLAGS += -std=gnu99 -DEGL_NO_X11 179 | endif 180 | 181 | # Define include paths for required headers: INCLUDE_PATHS 182 | #------------------------------------------------------------------------------------------------ 183 | # NOTE: Several external required libraries (stb and others) 184 | INCLUDE_PATHS += -I. -Iexternal -I$(RAYLIB_INCLUDE_PATH) 185 | 186 | # Define additional directories containing required header files 187 | ifeq ($(PLATFORM),PLATFORM_DRM) 188 | # DRM required libraries 189 | INCLUDE_PATHS += -I/usr/include/libdrm 190 | endif 191 | ifeq ($(PLATFORM),PLATFORM_DESKTOP) 192 | ifeq ($(PLATFORM_OS),BSD) 193 | # Consider -L$(RAYLIB_H_INSTALL_PATH) 194 | INCLUDE_PATHS += -I/usr/local/include 195 | endif 196 | endif 197 | 198 | # Define library paths containing required libs: LDFLAGS 199 | #------------------------------------------------------------------------------------------------ 200 | LDFLAGS = -L. -L$(RAYLIB_LIB_PATH) 201 | 202 | ifeq ($(PLATFORM),PLATFORM_DESKTOP) 203 | ifeq ($(PLATFORM_OS),WINDOWS) 204 | # NOTE: The resource .rc file contains windows executable icon and properties 205 | LDFLAGS += $(PROJECT_NAME).rc.data 206 | # -Wl,--subsystem,windows hides the console window 207 | ifeq ($(BUILD_MODE), RELEASE) 208 | LDFLAGS += -Wl,--subsystem,windows 209 | endif 210 | endif 211 | ifeq ($(PLATFORM_OS),BSD) 212 | # Consider -L$(RAYLIB_INSTALL_PATH) 213 | LDFLAGS += -Lsrc -L/usr/local/lib 214 | endif 215 | ifeq ($(PLATFORM_OS),LINUX) 216 | # Reset everything. 217 | # Precedence: immediately local, installed version, raysan5 provided libs 218 | #LDFLAGS += -L$(RAYLIB_RELEASE_PATH) 219 | endif 220 | endif 221 | ifeq ($(PLATFORM),PLATFORM_WEB) 222 | # -Os # size optimization 223 | # -O2 # optimization level 2, if used, also set --memory-init-file 0 224 | # -sUSE_GLFW=3 # Use glfw3 library (context/input management) 225 | # -sALLOW_MEMORY_GROWTH=1 # to allow memory resizing -> WARNING: Audio buffers could FAIL! 226 | # -sTOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) (67108864 = 64MB) 227 | # -sUSE_PTHREADS=1 # multithreading support 228 | # -sWASM=0 # disable Web Assembly, emitted by default 229 | # -sASYNCIFY # lets synchronous C/C++ code interact with asynchronous JS 230 | # -sFORCE_FILESYSTEM=1 # force filesystem to load/save files data 231 | # -sASSERTIONS=1 # enable runtime checks for common memory allocation errors (-O1 and above turn it off) 232 | # -sMINIFY_HTML=0 # minify generated html from shell.html 233 | # --profiling # include information for code profiling 234 | # --memory-init-file 0 # to avoid an external memory initialization code file (.mem) 235 | # --preload-file resources # specify a resources folder for data compilation 236 | # --source-map-base # allow debugging in browser with source map 237 | # --shell-file shell.html # define a custom shell .html and output extension 238 | LDFLAGS += -sUSE_GLFW=3 -sTOTAL_MEMORY=$(BUILD_WEB_HEAP_SIZE) -sSTACK_SIZE=$(BUILD_WEB_STACK_SIZE) -sFORCE_FILESYSTEM=1 -sMINIFY_HTML=0 239 | 240 | # Build using asyncify 241 | ifeq ($(BUILD_WEB_ASYNCIFY),TRUE) 242 | LDFLAGS += -sASYNCIFY -sASYNCIFY_STACK_SIZE=$(BUILD_WEB_ASYNCIFY_STACK_SIZE) 243 | endif 244 | 245 | # Add resources building if required 246 | ifeq ($(BUILD_WEB_RESOURCES),TRUE) 247 | LDFLAGS += --preload-file $(BUILD_WEB_RESOURCES_PATH) 248 | endif 249 | 250 | # Add debug mode flags if required 251 | ifeq ($(BUILD_MODE),DEBUG) 252 | LDFLAGS += -sASSERTIONS=1 --profiling 253 | endif 254 | 255 | # Define a custom shell .html and output extension 256 | LDFLAGS += --shell-file $(BUILD_WEB_SHELL) 257 | EXT = .html 258 | endif 259 | 260 | # Define libraries required on linking: LDLIBS 261 | # NOTE: To link libraries (lib.so or lib.a), use -l 262 | #------------------------------------------------------------------------------------------------ 263 | ifeq ($(PLATFORM),PLATFORM_DESKTOP) 264 | ifeq ($(PLATFORM_OS),WINDOWS) 265 | # Libraries for Windows desktop compilation 266 | # NOTE: WinMM library required to set high-res timer resolution 267 | LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm -lcomdlg32 -lole32 268 | # Required for physac examples 269 | LDLIBS += -static -lpthread 270 | endif 271 | ifeq ($(PLATFORM_OS),LINUX) 272 | # Libraries for Debian GNU/Linux desktop compiling 273 | # NOTE: Required packages: libegl1-mesa-dev 274 | LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt 275 | 276 | # On Wayland windowing system, additional libraries requires 277 | ifeq ($(USE_WAYLAND_DISPLAY),TRUE) 278 | LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon 279 | else 280 | # On X11 requires also below libraries 281 | LDLIBS += -lX11 282 | # NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them 283 | #LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor 284 | endif 285 | # Explicit link to libc 286 | ifeq ($(RAYLIB_LIBTYPE),SHARED) 287 | LDLIBS += -lc 288 | endif 289 | endif 290 | ifeq ($(PLATFORM_OS),OSX) 291 | # Libraries for OSX 10.9 desktop compiling 292 | # NOTE: Required packages: libopenal-dev libegl1-mesa-dev 293 | LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo 294 | endif 295 | ifeq ($(PLATFORM_OS),BSD) 296 | # Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling 297 | # NOTE: Required packages: mesa-libs 298 | LDLIBS = -lraylib -lGL -lpthread -lm 299 | 300 | # On XWindow requires also below libraries 301 | LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor 302 | endif 303 | endif 304 | ifeq ($(PLATFORM),PLATFORM_WEB) 305 | # Libraries for web (HTML5) compiling 306 | LDLIBS = $(RAYLIB_LIB_PATH)/libraylib.web.a 307 | endif 308 | ifeq ($(PLATFORM),PLATFORM_DRM) 309 | # Libraries for DRM compiling 310 | # NOTE: Required packages: libasound2-dev (ALSA) 311 | LDLIBS = -lraylib -lGLESv2 -lEGL -lpthread -lrt -lm -lgbm -ldrm -ldl 312 | endif 313 | 314 | 315 | # Define all object files from source files 316 | #------------------------------------------------------------------------------------------------ 317 | OBJS = $(patsubst %.c, %.o, $(PROJECT_SOURCE_FILES)) 318 | 319 | # Define processes to execute 320 | #------------------------------------------------------------------------------------------------ 321 | # Default target entry 322 | all: 323 | $(MAKE) $(PROJECT_NAME) 324 | 325 | # Project target defined by PROJECT_NAME 326 | $(PROJECT_NAME): $(OBJS) 327 | $(CC) -o $(PROJECT_BUILD_PATH)/$(PROJECT_NAME)$(EXT) $(OBJS) $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) 328 | 329 | # Compile source files 330 | # NOTE: This pattern will compile every module defined on $(OBJS) 331 | %.o: %.c 332 | $(CC) -c $< -o $@ $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) 333 | 334 | # Clean everything 335 | clean: 336 | ifeq ($(PLATFORM),PLATFORM_DESKTOP) 337 | ifeq ($(PLATFORM_OS),WINDOWS) 338 | del *.o *.exe /s 339 | endif 340 | ifeq ($(PLATFORM_OS),LINUX) 341 | find . -type f -executable -delete 342 | rm -fv *.o 343 | endif 344 | ifeq ($(PLATFORM_OS),OSX) 345 | rm -f *.o external/*.o $(PROJECT_NAME) 346 | endif 347 | endif 348 | ifeq ($(PLATFORM),PLATFORM_DRM) 349 | find . -type f -executable -delete 350 | rm -fv *.o 351 | endif 352 | ifeq ($(PLATFORM),PLATFORM_WEB) 353 | del *.o *.html *.js 354 | endif 355 | @echo Cleaning done 356 | 357 | -------------------------------------------------------------------------------- /src/external/rpng.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/src/external/rpng.h -------------------------------------------------------------------------------- /src/external/tinyfiledialogs.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: Zlib 2 | Copyright (c) 2014 - 2024 Guillaume Vareille http://ysengrin.com 3 | ____________________________________________________________________ 4 | | | 5 | | 100% compatible C C++ -> You can rename tinfiledialogs.c as .cpp | 6 | |____________________________________________________________________| 7 | 8 | ********* TINY FILE DIALOGS OFFICIAL WEBSITE IS ON SOURCEFORGE ********* 9 | _________ 10 | / \ tinyfiledialogs.h v3.19.1 [Jan 27, 2025] 11 | |tiny file| Unique header file created [November 9, 2014] 12 | | dialogs | 13 | \____ ___/ http://tinyfiledialogs.sourceforge.net 14 | \| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd 15 | ____________________________________________ 16 | | | 17 | | email: tinyfiledialogs at ysengrin.com | 18 | |____________________________________________| 19 | ________________________________________________________________________________ 20 | | ____________________________________________________________________________ | 21 | | | | | 22 | | | - in tinyfiledialogs, char is UTF-8 by default (since v3.6) | | 23 | | | | | 24 | | | on windows: | | 25 | | | - for UTF-16, use the wchar_t functions at the bottom of the header file | | 26 | | | | | 27 | | | - _wfopen() requires wchar_t | | 28 | | | - fopen() uses char but expects ASCII or MBCS (not UTF-8) | | 29 | | | - if you want char to be MBCS: set tinyfd_winUtf8 to 0 | | 30 | | | | | 31 | | | - alternatively, tinyfiledialogs provides | | 32 | | | functions to convert between UTF-8, UTF-16 and MBCS | | 33 | | |____________________________________________________________________________| | 34 | |________________________________________________________________________________| 35 | 36 | If you like tinyfiledialogs, please upvote my stackoverflow answer 37 | https://stackoverflow.com/a/47651444 38 | 39 | - License - 40 | This software is provided 'as-is', without any express or implied 41 | warranty. In no event will the authors be held liable for any damages 42 | arising from the use of this software. 43 | Permission is granted to anyone to use this software for any purpose, 44 | including commercial applications, and to alter it and redistribute it 45 | freely, subject to the following restrictions: 46 | 1. The origin of this software must not be misrepresented; you must not 47 | claim that you wrote the original software. If you use this software 48 | in a product, an acknowledgment in the product documentation would be 49 | appreciated but is not required. 50 | 2. Altered source versions must be plainly marked as such, and must not be 51 | misrepresented as being the original software. 52 | 3. This notice may not be removed or altered from any source distribution. 53 | 54 | __________________________________________ 55 | | ______________________________________ | 56 | | | | | 57 | | | DO NOT USE USER INPUT IN THE DIALOGS | | 58 | | |______________________________________| | 59 | |__________________________________________| 60 | */ 61 | 62 | #ifndef TINYFILEDIALOGS_H 63 | #define TINYFILEDIALOGS_H 64 | 65 | #ifdef __cplusplus 66 | extern "C" { 67 | #endif 68 | 69 | /******************************************************************************************************/ 70 | /**************************************** UTF-8 on Windows ********************************************/ 71 | /******************************************************************************************************/ 72 | #ifdef _WIN32 73 | /* On windows, if you want to use UTF-8 ( instead of the UTF-16/wchar_t functions at the end of this file ) 74 | Make sure your code is really prepared for UTF-8 (on windows, functions like fopen() expect MBCS and not UTF-8) */ 75 | extern int tinyfd_winUtf8; /* on windows char strings can be 1:UTF-8(default) or 0:MBCS */ 76 | /* for MBCS change this to 0, in tinyfiledialogs.c or in your code */ 77 | 78 | /* Here are some functions to help you convert between UTF-16 UTF-8 MBSC */ 79 | char * tinyfd_utf8toMbcs(char const * aUtf8string); 80 | char * tinyfd_utf16toMbcs(wchar_t const * aUtf16string); 81 | wchar_t * tinyfd_mbcsTo16(char const * aMbcsString); 82 | char * tinyfd_mbcsTo8(char const * aMbcsString); 83 | wchar_t * tinyfd_utf8to16(char const * aUtf8string); 84 | char * tinyfd_utf16to8(wchar_t const * aUtf16string); 85 | #endif 86 | /******************************************************************************************************/ 87 | /******************************************************************************************************/ 88 | /******************************************************************************************************/ 89 | 90 | /************* 3 funtions for C# (you don't need this in C or C++) : */ 91 | char const * tinyfd_getGlobalChar(char const * aCharVariableName); /* returns NULL on error */ 92 | int tinyfd_getGlobalInt(char const * aIntVariableName); /* returns -1 on error */ 93 | int tinyfd_setGlobalInt(char const * aIntVariableName, int aValue); /* returns -1 on error */ 94 | /* aCharVariableName: "tinyfd_version" "tinyfd_needs" "tinyfd_response" 95 | aIntVariableName : "tinyfd_verbose" "tinyfd_silent" "tinyfd_allowCursesDialogs" 96 | "tinyfd_forceConsole" "tinyfd_assumeGraphicDisplay" "tinyfd_winUtf8" 97 | **************/ 98 | 99 | extern char tinyfd_version[8]; /* contains tinyfd current version number */ 100 | extern char tinyfd_needs[]; /* info about requirements */ 101 | extern int tinyfd_verbose; /* 0 (default) or 1 : on unix, prints the command line calls */ 102 | extern int tinyfd_silent; /* 1 (default) or 0 : on unix, hide errors and warnings from called dialogs */ 103 | 104 | /** Curses dialogs are difficult to use and counter-intuitive. 105 | On windows they are only ascii and still uses the unix backslash ! **/ 106 | extern int tinyfd_allowCursesDialogs; /* 0 (default) or 1 */ 107 | 108 | extern int tinyfd_forceConsole; /* 0 (default) or 1 */ 109 | /* for unix & windows: 0 (graphic mode) or 1 (console mode). 110 | 0: try to use a graphic solution, if it fails then it uses console mode. 111 | 1: forces all dialogs into console mode even when an X server is present. 112 | if enabled, it can use the package Dialog or dialog.exe. 113 | on windows it only make sense for console applications */ 114 | 115 | /* extern int tinyfd_assumeGraphicDisplay; */ /* 0 (default) or 1 */ 116 | /* some systems don't set the environment variable DISPLAY even when a graphic display is present. 117 | set this to 1 to tell tinyfiledialogs to assume the existence of a graphic display */ 118 | 119 | extern char tinyfd_response[1024]; 120 | /* if you pass "tinyfd_query" as aTitle, 121 | the functions will not display the dialogs 122 | but will return 0 for console mode, 1 for graphic mode. 123 | tinyfd_response is then filled with the retain solution. 124 | possible values for tinyfd_response are (all lowercase) 125 | for graphic mode: 126 | windows_wchar windows applescript kdialog zenity zenity3 yad matedialog 127 | shellementary qarma python2-tkinter python3-tkinter python-dbus 128 | perl-dbus gxmessage gmessage xmessage xdialog gdialog dunst 129 | for console mode: 130 | dialog whiptail basicinput no_solution */ 131 | 132 | void tinyfd_beep(void); 133 | 134 | int tinyfd_notifyPopup( 135 | char const * aTitle, /* NULL or "" */ 136 | char const * aMessage, /* NULL or "" may contain \n \t */ 137 | char const * aIconType); /* "info" "warning" "error" */ 138 | /* return has only meaning for tinyfd_query */ 139 | 140 | int tinyfd_messageBox( 141 | char const * aTitle , /* NULL or "" */ 142 | char const * aMessage , /* NULL or "" may contain \n \t */ 143 | char const * aDialogType , /* "ok" "okcancel" "yesno" "yesnocancel" */ 144 | char const * aIconType , /* "info" "warning" "error" "question" */ 145 | int aDefaultButton ) ; 146 | /* 0 for cancel/no , 1 for ok/yes , 2 for no in yesnocancel */ 147 | 148 | char * tinyfd_inputBox( 149 | char const * aTitle , /* NULL or "" */ 150 | char const * aMessage , /* NULL or "" (\n and \t have no effect) */ 151 | char const * aDefaultInput ) ; /* NULL = passwordBox, "" = inputbox */ 152 | /* returns NULL on cancel */ 153 | 154 | char * tinyfd_saveFileDialog( 155 | char const * aTitle , /* NULL or "" */ 156 | char const * aDefaultPathAndOrFile , /* NULL or "" , ends with / to set only a directory */ 157 | int aNumOfFilterPatterns , /* 0 (1 in the following example) */ 158 | char const * const * aFilterPatterns , /* NULL or char const * lFilterPatterns[1]={"*.txt"} */ 159 | char const * aSingleFilterDescription ) ; /* NULL or "text files" */ 160 | /* returns NULL on cancel */ 161 | 162 | char * tinyfd_openFileDialog( 163 | char const * aTitle, /* NULL or "" */ 164 | char const * aDefaultPathAndOrFile, /* NULL or "" , ends with / to set only a directory */ 165 | int aNumOfFilterPatterns , /* 0 (2 in the following example) */ 166 | char const * const * aFilterPatterns, /* NULL or char const * lFilterPatterns[2]={"*.png","*.jpg"}; */ 167 | char const * aSingleFilterDescription, /* NULL or "image files" */ 168 | int aAllowMultipleSelects ) ; /* 0 or 1 */ 169 | /* in case of multiple files, the separator is | */ 170 | /* returns NULL on cancel */ 171 | 172 | char * tinyfd_selectFolderDialog( 173 | char const * aTitle, /* NULL or "" */ 174 | char const * aDefaultPath); /* NULL or "" */ 175 | /* returns NULL on cancel */ 176 | 177 | char * tinyfd_colorChooser( 178 | char const * aTitle, /* NULL or "" */ 179 | char const * aDefaultHexRGB, /* NULL or "" or "#FF0000" */ 180 | unsigned char const aDefaultRGB[3] , /* unsigned char lDefaultRGB[3] = { 0 , 128 , 255 }; */ 181 | unsigned char aoResultRGB[3] ) ; /* unsigned char lResultRGB[3]; */ 182 | /* aDefaultRGB is used only if aDefaultHexRGB is absent */ 183 | /* aDefaultRGB and aoResultRGB can be the same array */ 184 | /* returns NULL on cancel */ 185 | /* returns the hexcolor as a string "#FF0000" */ 186 | /* aoResultRGB also contains the result */ 187 | 188 | 189 | /************ WINDOWS ONLY SECTION ************************/ 190 | #ifdef _WIN32 191 | 192 | /* windows only - utf-16 version */ 193 | int tinyfd_notifyPopupW( 194 | wchar_t const * aTitle, /* NULL or L"" */ 195 | wchar_t const * aMessage, /* NULL or L"" may contain \n \t */ 196 | wchar_t const * aIconType); /* L"info" L"warning" L"error" */ 197 | 198 | /* windows only - utf-16 version */ 199 | int tinyfd_messageBoxW( 200 | wchar_t const * aTitle, /* NULL or L"" */ 201 | wchar_t const * aMessage, /* NULL or L"" may contain \n \t */ 202 | wchar_t const * aDialogType, /* L"ok" L"okcancel" L"yesno" */ 203 | wchar_t const * aIconType, /* L"info" L"warning" L"error" L"question" */ 204 | int aDefaultButton ); /* 0 for cancel/no , 1 for ok/yes */ 205 | /* returns 0 for cancel/no , 1 for ok/yes */ 206 | 207 | /* windows only - utf-16 version */ 208 | wchar_t * tinyfd_inputBoxW( 209 | wchar_t const * aTitle, /* NULL or L"" */ 210 | wchar_t const * aMessage, /* NULL or L"" (\n nor \t not respected) */ 211 | wchar_t const * aDefaultInput); /* NULL passwordBox, L"" inputbox */ 212 | 213 | /* windows only - utf-16 version */ 214 | wchar_t * tinyfd_saveFileDialogW( 215 | wchar_t const * aTitle, /* NULL or L"" */ 216 | wchar_t const * aDefaultPathAndOrFile, /* NULL or L"" , ends with / to set only a directory */ 217 | int aNumOfFilterPatterns, /* 0 (1 in the following example) */ 218 | wchar_t const * const * aFilterPatterns, /* NULL or wchar_t const * lFilterPatterns[1]={L"*.txt"} */ 219 | wchar_t const * aSingleFilterDescription); /* NULL or L"text files" */ 220 | /* returns NULL on cancel */ 221 | 222 | /* windows only - utf-16 version */ 223 | wchar_t * tinyfd_openFileDialogW( 224 | wchar_t const * aTitle, /* NULL or L"" */ 225 | wchar_t const * aDefaultPathAndOrFile, /* NULL or L"" , ends with / to set only a directory */ 226 | int aNumOfFilterPatterns , /* 0 (2 in the following example) */ 227 | wchar_t const * const * aFilterPatterns, /* NULL or wchar_t const * lFilterPatterns[2]={L"*.png","*.jpg"} */ 228 | wchar_t const * aSingleFilterDescription, /* NULL or L"image files" */ 229 | int aAllowMultipleSelects ) ; /* 0 or 1 */ 230 | /* in case of multiple files, the separator is | */ 231 | /* returns NULL on cancel */ 232 | 233 | /* windows only - utf-16 version */ 234 | wchar_t * tinyfd_selectFolderDialogW( 235 | wchar_t const * aTitle, /* NULL or L"" */ 236 | wchar_t const * aDefaultPath); /* NULL or L"" */ 237 | /* returns NULL on cancel */ 238 | 239 | /* windows only - utf-16 version */ 240 | wchar_t * tinyfd_colorChooserW( 241 | wchar_t const * aTitle, /* NULL or L"" */ 242 | wchar_t const * aDefaultHexRGB, /* NULL or L"#FF0000" */ 243 | unsigned char const aDefaultRGB[3], /* unsigned char lDefaultRGB[3] = { 0 , 128 , 255 }; */ 244 | unsigned char aoResultRGB[3]); /* unsigned char lResultRGB[3]; */ 245 | /* returns the hexcolor as a string L"#FF0000" */ 246 | /* aoResultRGB also contains the result */ 247 | /* aDefaultRGB is used only if aDefaultHexRGB is NULL */ 248 | /* aDefaultRGB and aoResultRGB can be the same array */ 249 | /* returns NULL on cancel */ 250 | 251 | #endif /*_WIN32 */ 252 | 253 | #ifdef __cplusplus 254 | } /*extern "C"*/ 255 | #endif 256 | 257 | #endif /* TINYFILEDIALOGS_H */ 258 | 259 | /* 260 | ________________________________________________________________________________ 261 | | ____________________________________________________________________________ | 262 | | | | | 263 | | | on windows: | | 264 | | | - for UTF-16, use the wchar_t functions at the bottom of the header file | | 265 | | | - _wfopen() requires wchar_t | | 266 | | | | | 267 | | | - in tinyfiledialogs, char is UTF-8 by default (since v3.6) | | 268 | | | - but fopen() expects MBCS (not UTF-8) | | 269 | | | - if you want char to be MBCS: set tinyfd_winUtf8 to 0 | | 270 | | | | | 271 | | | - alternatively, tinyfiledialogs provides | | 272 | | | functions to convert between UTF-8, UTF-16 and MBCS | | 273 | | |____________________________________________________________________________| | 274 | |________________________________________________________________________________| 275 | 276 | - This is not for ios nor android (it works in termux though). 277 | - The files can be renamed with extension ".cpp" as the code is 100% compatible C C++ 278 | (just comment out << extern "C" >> in the header file) 279 | - Windows is fully supported from XP to 10 (maybe even older versions) 280 | - C# & LUA via dll, see files in the folder EXTRAS 281 | - OSX supported from 10.4 to latest (maybe even older versions) 282 | - Do not use " and ' as the dialogs will be displayed with a warning 283 | instead of the title, message, etc... 284 | - There's one file filter only, it may contain several patterns. 285 | - If no filter description is provided, 286 | the list of patterns will become the description. 287 | - On windows link against Comdlg32.lib and Ole32.lib 288 | (on windows the no linking claim is a lie) 289 | - On unix: it tries command line calls, so no such need (NO LINKING). 290 | - On unix you need one of the following: 291 | applescript, kdialog, zenity, matedialog, shellementary, qarma, yad, 292 | python (2 or 3)/tkinter/python-dbus (optional), Xdialog 293 | or curses dialogs (opens terminal if running without console). 294 | - One of those is already included on most (if not all) desktops. 295 | - In the absence of those it will use gdialog, gxmessage or whiptail 296 | with a textinputbox. If nothing is found, it switches to basic console input, 297 | it opens a console if needed (requires xterm + bash). 298 | - for curses dialogs you must set tinyfd_allowCursesDialogs=1 299 | - You can query the type of dialog that will be used (pass "tinyfd_query" as aTitle) 300 | - String memory is preallocated statically for all the returned values. 301 | - File and path names are tested before return, they should be valid. 302 | - tinyfd_forceConsole=1; at run time, forces dialogs into console mode. 303 | - On windows, console mode only make sense for console applications. 304 | - On windows, console mode is not implemented for wchar_T UTF-16. 305 | - Mutiple selects are not possible in console mode. 306 | - The package dialog must be installed to run in curses dialogs in console mode. 307 | It is already installed on most unix systems. 308 | - On osx, the package dialog can be installed via 309 | http://macappstore.org/dialog or http://macports.org 310 | - On windows, for curses dialogs console mode, 311 | dialog.exe should be copied somewhere on your executable path. 312 | It can be found at the bottom of the following page: 313 | http://andrear.altervista.org/home/cdialog.php 314 | */ 315 | -------------------------------------------------------------------------------- /src/gui_file_dialogs.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * File Dialogs 4 | * 5 | * MODULE USAGE: 6 | * #define GUI_FILE_DIALOGS_IMPLEMENTATION 7 | * #include "gui_file_dialogs.h" 8 | * 9 | * On game draw call: GuiFileDialog(...); 10 | * 11 | * LICENSE: zlib/libpng 12 | * 13 | * Copyright (c) 2019-2025 raylib technologies (@raylibtech). 14 | * 15 | * This software is provided "as-is", without any express or implied warranty. In no event 16 | * will the authors be held liable for any damages arising from the use of this software. 17 | * 18 | * Permission is granted to anyone to use this software for any purpose, including commercial 19 | * applications, and to alter it and redistribute it freely, subject to the following restrictions: 20 | * 21 | * 1. The origin of this software must not be misrepresented; you must not claim that you 22 | * wrote the original software. If you use this software in a product, an acknowledgment 23 | * in the product documentation would be appreciated but is not required. 24 | * 25 | * 2. Altered source versions must be plainly marked as such, and must not be misrepresented 26 | * as being the original software. 27 | * 28 | * 3. This notice may not be removed or altered from any source distribution. 29 | * 30 | **********************************************************************************************/ 31 | 32 | #ifndef GUI_FILE_DIALOGS_H 33 | #define GUI_FILE_DIALOGS_H 34 | 35 | //---------------------------------------------------------------------------------- 36 | // Defines and Macros 37 | //---------------------------------------------------------------------------------- 38 | //... 39 | 40 | //---------------------------------------------------------------------------------- 41 | // Types and Structures Definition 42 | //---------------------------------------------------------------------------------- 43 | // Dialog type 44 | typedef enum DialogType { 45 | DIALOG_OPEN_FILE = 0, 46 | DIALOG_OPEN_FILE_MULTI, 47 | DIALOG_OPEN_DIRECTORY, 48 | DIALOG_SAVE_FILE, 49 | DIALOG_MESSAGE, 50 | DIALOG_TEXTINPUT, 51 | DIALOG_OTHER 52 | } DialogType; 53 | 54 | 55 | #ifdef __cplusplus 56 | extern "C" { // Prevents name mangling of functions 57 | #endif 58 | 59 | //---------------------------------------------------------------------------------- 60 | // Global Variables Definition 61 | //---------------------------------------------------------------------------------- 62 | //... 63 | 64 | //---------------------------------------------------------------------------------- 65 | // Module Functions Declaration 66 | //---------------------------------------------------------------------------------- 67 | // Multiplatform file dialogs 68 | // NOTE 1: fileName parameters is used to display and store selected file name 69 | // NOTE 2: Value returned is the operation result, on custom dialogs represents button option pressed 70 | // NOTE 3: filters and message are used for buttons and dialog messages on DIALOG_MESSAGE and DIALOG_TEXTINPUT 71 | int GuiFileDialog(int dialogType, const char *title, char *fileName, const char *filters, const char *message); 72 | 73 | #ifdef __cplusplus 74 | } 75 | #endif 76 | 77 | #endif // GUI_FILE_DIALOGS_H 78 | 79 | 80 | /*********************************************************************************** 81 | * 82 | * GUI_FILE_DIALOGS IMPLEMENTATION 83 | * 84 | ************************************************************************************/ 85 | 86 | #if defined(GUI_FILE_DIALOGS_IMPLEMENTATION) 87 | 88 | #include "raylib.h" // Required for: TextSplit() 89 | 90 | #if defined(PLATFORM_DESKTOP) && !defined(CUSTOM_MODAL_DIALOGS) 91 | #include "external/tinyfiledialogs.h" // Required for: Native open/save file dialogs 92 | #else 93 | #include "raygui.h" 94 | #endif 95 | 96 | //---------------------------------------------------------------------------------- 97 | // Defines and Macros 98 | //---------------------------------------------------------------------------------- 99 | //... 100 | 101 | //---------------------------------------------------------------------------------- 102 | // Types and Structures Definition 103 | //---------------------------------------------------------------------------------- 104 | // ... 105 | 106 | //---------------------------------------------------------------------------------- 107 | // Global Variables Definition 108 | //---------------------------------------------------------------------------------- 109 | //... 110 | 111 | //---------------------------------------------------------------------------------- 112 | // Module Functions Definition 113 | //---------------------------------------------------------------------------------- 114 | 115 | // Multiplatform file dialogs 116 | int GuiFileDialog(int dialogType, const char *title, char *fileName, const char *filters, const char *message) 117 | { 118 | int result = -1; 119 | 120 | #if defined(CUSTOM_MODAL_DIALOGS) 121 | switch (dialogType) 122 | { 123 | case DIALOG_OPEN_FILE: /* TODO: Load file modal dialog */ break; 124 | case DIALOG_OPEN_FILE_MULTI: /* TODO: Load multiple files modal dialog */ break; 125 | case DIALOG_OPEN_DIRECTORY: /* TODO: Load directory modal dialog */ break; 126 | case DIALOG_SAVE_FILE: /* TODO: Save file modal dialog */ break; 127 | case DIALOG_MESSAGE: result = GuiMessageBox((Rectangle){ GetScreenWidth()/2 - 160, GetScreenHeight()/2 - 120, 320, 120 }, title, message, filters); break; 128 | case DIALOG_TEXTINPUT: result = GuiTextInputBox((Rectangle){ GetScreenWidth()/2 - 160, GetScreenHeight()/2 - 120, 320, 120 }, title, message, filters, fileName, 512, NULL); break; 129 | default: break; 130 | } 131 | #else // Use native OS dialogs (tinyfiledialogs) 132 | 133 | char *tempFileName = NULL; 134 | int filterCount = 0; 135 | const char **filterSplit = (const char **)TextSplit(filters, ';', &filterCount); 136 | 137 | switch (dialogType) 138 | { 139 | case DIALOG_OPEN_FILE: tempFileName = tinyfd_openFileDialog(title, fileName, filterCount, filterSplit, message, 0); break; 140 | case DIALOG_OPEN_FILE_MULTI: tempFileName = tinyfd_openFileDialog(title, fileName, filterCount, filterSplit, message, 1); break; 141 | case DIALOG_OPEN_DIRECTORY: tempFileName = tinyfd_selectFolderDialog(title, fileName); break; 142 | case DIALOG_SAVE_FILE: tempFileName = tinyfd_saveFileDialog(title, fileName, filterCount, filterSplit, message); break; 143 | case DIALOG_MESSAGE: result = tinyfd_messageBox(title, message, "ok", "info", 0); break; 144 | case DIALOG_TEXTINPUT: tempFileName = tinyfd_inputBox(title, message, ""); break; 145 | default: break; 146 | } 147 | 148 | if (tempFileName != NULL) 149 | { 150 | strcpy(fileName, tempFileName); 151 | result = 1; 152 | } 153 | else result = 0; 154 | #endif 155 | 156 | return result; 157 | } 158 | 159 | #endif // GUI_WINDOW_ABOUT_IMPLEMENTATION -------------------------------------------------------------------------------- /src/gui_main_toolbar.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * Main Toolbar 4 | * 5 | * MODULE USAGE: 6 | * #define GUI_MAIN_TOOLBAR_IMPLEMENTATION 7 | * #include "gui_main_toolbar.h" 8 | * 9 | * INIT: GuiMainToolbarState state = InitGuiMainToolbar(); 10 | * DRAW: GuiMainToolbar(&state); 11 | * 12 | * LICENSE: zlib/libpng 13 | * 14 | * Copyright (c) 2019-2022 raylib technologies (@raylibtech) / Ramon Santamaria (@raysan5) 15 | * 16 | * This software is provided "as-is", without any express or implied warranty. In no event 17 | * will the authors be held liable for any damages arising from the use of this software. 18 | * 19 | * Permission is granted to anyone to use this software for any purpose, including commercial 20 | * applications, and to alter it and redistribute it freely, subject to the following restrictions: 21 | * 22 | * 1. The origin of this software must not be misrepresented; you must not claim that you 23 | * wrote the original software. If you use this software in a product, an acknowledgment 24 | * in the product documentation would be appreciated but is not required. 25 | * 26 | * 2. Altered source versions must be plainly marked as such, and must not be misrepresented 27 | * as being the original software. 28 | * 29 | * 3. This notice may not be removed or altered from any source distribution. 30 | * 31 | **********************************************************************************************/ 32 | 33 | #include "raylib.h" 34 | 35 | // WARNING: raygui implementation is expected to be defined before including this header 36 | 37 | #ifndef GUI_MAIN_TOOLBAR_H 38 | #define GUI_MAIN_TOOLBAR_H 39 | 40 | typedef struct { 41 | 42 | // Anchors for panels 43 | Vector2 anchorFile; 44 | Vector2 anchorEdit; 45 | Vector2 anchorTools; 46 | Vector2 anchorVisuals; 47 | Vector2 anchorRight; 48 | 49 | // File options 50 | bool btnNewFilePressed; 51 | bool btnLoadFilePressed; 52 | bool btnSaveFilePressed; 53 | bool btnExportFilePressed; 54 | 55 | // Editor options 56 | bool btnCutPressed; 57 | bool btnCopyPressed; 58 | bool btnPastePressed; 59 | bool btnCleanPressed; 60 | 61 | // Tool options 62 | //... 63 | 64 | // Visual options 65 | int visualStyleActive; 66 | int prevVisualStyleActive; 67 | int btnReloadStylePressed; 68 | int languageActive; 69 | 70 | // Info options 71 | bool btnHelpPressed; 72 | bool btnAboutPressed; 73 | bool btnIssuePressed; 74 | bool btnUserPressed; 75 | 76 | // Custom variables 77 | // TODO. 78 | 79 | } GuiMainToolbarState; 80 | 81 | #ifdef __cplusplus 82 | extern "C" { // Prevents name mangling of functions 83 | #endif 84 | 85 | //---------------------------------------------------------------------------------- 86 | // Defines and Macros 87 | //---------------------------------------------------------------------------------- 88 | //... 89 | 90 | //---------------------------------------------------------------------------------- 91 | // Types and Structures Definition 92 | //---------------------------------------------------------------------------------- 93 | // ... 94 | 95 | //---------------------------------------------------------------------------------- 96 | // Global Variables Definition 97 | //---------------------------------------------------------------------------------- 98 | //... 99 | 100 | //---------------------------------------------------------------------------------- 101 | // Internal Module Functions Definition 102 | //---------------------------------------------------------------------------------- 103 | //... 104 | 105 | //---------------------------------------------------------------------------------- 106 | // Module Functions Declaration 107 | //---------------------------------------------------------------------------------- 108 | GuiMainToolbarState InitGuiMainToolbar(void); 109 | void GuiMainToolbar(GuiMainToolbarState *state); 110 | 111 | #ifdef __cplusplus 112 | } 113 | #endif 114 | 115 | #endif // GUI_MAIN_TOOLBAR_H 116 | 117 | /*********************************************************************************** 118 | * 119 | * GUI_MAIN_TOOLBAR IMPLEMENTATION 120 | * 121 | ************************************************************************************/ 122 | #if defined(GUI_MAIN_TOOLBAR_IMPLEMENTATION) 123 | 124 | #include "raygui.h" 125 | 126 | GuiMainToolbarState InitGuiMainToolbar(void) 127 | { 128 | GuiMainToolbarState state = { 0 }; 129 | 130 | // Anchors for panels 131 | state.anchorFile = (Vector2){ 0, 0 }; 132 | state.anchorEdit = (Vector2){ state.anchorFile.x + 132 - 1, 0 }; 133 | state.anchorTools = (Vector2){ state.anchorEdit.x + 168 - 1, 0 }; 134 | state.anchorVisuals = (Vector2){ 0, 0 }; // Anchor right, depends on screen width 135 | state.anchorRight = (Vector2){ 0, 0 }; // Anchor right, depends on screen width 136 | 137 | // Project/File options 138 | state.btnNewFilePressed = false; 139 | state.btnLoadFilePressed = false; 140 | state.btnSaveFilePressed = false; 141 | state.btnExportFilePressed = false; 142 | 143 | // Edit options 144 | state.btnCutPressed = false; 145 | state.btnCopyPressed = false; 146 | state.btnPastePressed = false; 147 | state.btnCleanPressed = false; 148 | 149 | // Tool options 150 | //... 151 | 152 | // Visuals options 153 | state.visualStyleActive = 0; 154 | state.prevVisualStyleActive = 0; 155 | state.languageActive = 0; 156 | 157 | // Info options 158 | state.btnHelpPressed = false; 159 | state.btnAboutPressed = false; 160 | state.btnIssuePressed = false; 161 | state.btnUserPressed = false; 162 | 163 | // Custom variables 164 | // TODO. 165 | 166 | // Enable tooltips by default 167 | GuiEnableTooltip(); 168 | 169 | return state; 170 | } 171 | 172 | void GuiMainToolbar(GuiMainToolbarState *state) 173 | { 174 | int screenWidth = 640; // WARNING: Screen width is hardcoded to avoid issues on screen scaling! 175 | 176 | // Toolbar panels 177 | state->anchorRight.x = screenWidth - 104; // Update right-anchor panel 178 | state->anchorVisuals.x = state->anchorRight.x - 190 + 1; // Update right-anchor panel 179 | 180 | GuiPanel((Rectangle){ state->anchorFile.x, state->anchorFile.y, 132, 40 }, NULL); 181 | GuiPanel((Rectangle){ state->anchorEdit.x, state->anchorEdit.y, 168, 40 }, NULL); 182 | GuiPanel((Rectangle){ state->anchorTools.x, state->anchorTools.y, state->anchorVisuals.x - state->anchorTools.x + 1, 40 }, NULL); 183 | GuiPanel((Rectangle){ state->anchorVisuals.x, state->anchorVisuals.y, 220, 40 }, NULL); 184 | GuiPanel((Rectangle){ state->anchorRight.x, state->anchorRight.y, 104, 40 }, NULL); 185 | 186 | // Project/File options 187 | GuiSetTooltip("Create new icons project (LCTRL+N)"); 188 | state->btnNewFilePressed = GuiButton((Rectangle){ state->anchorFile.x + 12, state->anchorFile.y + 8, 24, 24 }, "#8#"); 189 | GuiSetTooltip("Load icons .rgi file (LCTRL+O)"); 190 | state->btnLoadFilePressed = GuiButton((Rectangle){ state->anchorFile.x + 12 + 24 + 4, state->anchorFile.y + 8, 24, 24 }, "#5#"); 191 | GuiSetTooltip("Save icons .rgi file (LCTRL+S)"); 192 | state->btnSaveFilePressed = GuiButton((Rectangle){ state->anchorFile.x + 12 + 48 + 8, state->anchorFile.y + 8, 24, 24 }, "#6#"); 193 | GuiSetTooltip("Export icons file (LCTRL+E)"); 194 | state->btnExportFilePressed = GuiButton((Rectangle){ state->anchorFile.x + 12 + 72 + 12, state->anchorFile.y + 8, 24, 24 }, "#7#"); 195 | 196 | // Edit options 197 | GuiSetTooltip("Cut selected icon (LCTRL+X)"); 198 | state->btnCutPressed = GuiButton((Rectangle){ state->anchorEdit.x + 12, state->anchorEdit.y + 8, 24, 24 }, "#17#"); // Cut 199 | GuiSetTooltip("Copy selected icon (LCTRL+C)"); 200 | state->btnCopyPressed = GuiButton((Rectangle){ state->anchorEdit.x + 12 + 24 + 4, state->anchorEdit.y + 8, 24, 24 }, "#16#"); // Copy 201 | GuiSetTooltip("Paste icon previously cut/copied (LCTRL+V)"); 202 | state->btnPastePressed = GuiButton((Rectangle){ state->anchorEdit.x + 12 + 48 + 8, state->anchorEdit.y + 8, 24, 24 }, "#18#"); // Paste 203 | GuiGroupBox((Rectangle){ state->anchorEdit.x + 12 + 72 + 16, state->anchorEdit.y + 8, 24, 24 }, NULL); 204 | GuiSetTooltip("Clear previously cut/copied icon"); 205 | state->btnCleanPressed = GuiButton((Rectangle){ state->anchorEdit.x + 12 + 96 + 24, state->anchorEdit.y + 8, 24, 24 }, "#079#"); // Clean 206 | 207 | // Visuals options 208 | GuiLabel((Rectangle){ state->anchorVisuals.x + 10, state->anchorVisuals.y + 8, 60, 24 }, "Style:"); 209 | GuiSetTooltip("Select visual UI style"); 210 | GuiSetStyle(COMBOBOX, COMBO_BUTTON_WIDTH, 42); 211 | GuiComboBox((Rectangle){ state->anchorVisuals.x + 8 + 48, state->anchorVisuals.y + 8, 120, 24 }, "Light;Jungle;Candy;Lavanda;Cyber;Terminal;Ashes;Bluish;Dark;Cherry;Sunny;Enefete;Amber;Genesis", &state->visualStyleActive); 212 | GuiSetStyle(COMBOBOX, COMBO_BUTTON_WIDTH, 36); 213 | 214 | // Info options 215 | GuiSetTooltip("Show help window (F1)"); 216 | state->btnHelpPressed = GuiButton((Rectangle){ state->anchorRight.x + (screenWidth - state->anchorRight.x) - 12 - 72 - 8, state->anchorRight.y + 8, 24, 24 }, "#221#"); 217 | GuiSetTooltip("Show info window (F2)"); 218 | state->btnAboutPressed = GuiButton((Rectangle){ state->anchorRight.x + (screenWidth - state->anchorRight.x) - 12 - 48 - 4, state->anchorRight.y + 8, 24, 24 }, "#222#"); 219 | GuiSetTooltip("Report an issue (F3)"); 220 | state->btnIssuePressed = GuiButton((Rectangle){ state->anchorRight.x + (screenWidth - state->anchorRight.x) - 12 - 24, state->anchorRight.y + 8, 24, 24 }, "#220#"); 221 | 222 | GuiSetTooltip(NULL); 223 | } 224 | 225 | #endif // GUI_MAIN_TOOLBAR_IMPLEMENTATION 226 | -------------------------------------------------------------------------------- /src/gui_window_about.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * Window About 4 | * 5 | * NOTES: 6 | * This module is generic for all tools, so, tools info should be customized 7 | * just defining some tool info before including this file: 8 | * 9 | * #define TOOL_NAME "rToolName" 10 | * #define TOOL_SHORT_NAME "rTN" 11 | * #define TOOL_VERSION "1.0" 12 | * #define TOOL_DESCRIPTION "Tool description" 13 | * #define TOOL_RELEASE_DATE "Jan.2022" 14 | * #define TOOL_LOGO_COLOR 0x000000ff 15 | * 16 | * MODULE USAGE: 17 | * #define GUI_WINDOW_ABOUT_IMPLEMENTATION 18 | * #include "gui_window_about.h" 19 | * 20 | * On game init call: GuiWindowAboutState state = InitGuiWindowAbout(); 21 | * On game draw call: GuiWindowAbout(&state); 22 | * 23 | * 24 | * LICENSE: zlib/libpng 25 | * 26 | * Copyright (c) 2018-2024 raylib technologies (@raylibtech) / Ramon Santamaria (@raysan5) 27 | * 28 | * This software is provided "as-is", without any express or implied warranty. In no event 29 | * will the authors be held liable for any damages arising from the use of this software. 30 | * 31 | * Permission is granted to anyone to use this software for any purpose, including commercial 32 | * applications, and to alter it and redistribute it freely, subject to the following restrictions: 33 | * 34 | * 1. The origin of this software must not be misrepresented; you must not claim that you 35 | * wrote the original software. If you use this software in a product, an acknowledgment 36 | * in the product documentation would be appreciated but is not required. 37 | * 38 | * 2. Altered source versions must be plainly marked as such, and must not be misrepresented 39 | * as being the original software. 40 | * 41 | * 3. This notice may not be removed or altered from any source distribution. 42 | * 43 | **********************************************************************************************/ 44 | 45 | #include "raylib.h" 46 | 47 | // WARNING: raygui implementation is expected to be defined before including this header 48 | 49 | #ifndef GUI_WINDOW_ABOUT_H 50 | #define GUI_WINDOW_ABOUT_H 51 | 52 | //---------------------------------------------------------------------------------- 53 | // Defines and Macros 54 | //---------------------------------------------------------------------------------- 55 | //... 56 | 57 | //---------------------------------------------------------------------------------- 58 | // Types and Structures Definition 59 | //---------------------------------------------------------------------------------- 60 | // Gui window structure declaration 61 | typedef struct { 62 | bool windowActive; 63 | 64 | Rectangle windowBounds; 65 | Vector2 panOffset; 66 | bool dragMode; 67 | bool supportDrag; 68 | 69 | } GuiWindowAboutState; 70 | 71 | #ifdef __cplusplus 72 | extern "C" { // Prevents name mangling of functions 73 | #endif 74 | 75 | //---------------------------------------------------------------------------------- 76 | // Global Variables Definition 77 | //---------------------------------------------------------------------------------- 78 | //... 79 | 80 | //---------------------------------------------------------------------------------- 81 | // Module Functions Declaration 82 | //---------------------------------------------------------------------------------- 83 | GuiWindowAboutState InitGuiWindowAbout(void); 84 | void GuiWindowAbout(GuiWindowAboutState *state); 85 | 86 | #ifdef __cplusplus 87 | } 88 | #endif 89 | 90 | #endif // GUI_WINDOW_ABOUT_H 91 | 92 | /*********************************************************************************** 93 | * 94 | * GUI_WINDOW_ABOUT IMPLEMENTATION 95 | * 96 | ************************************************************************************/ 97 | 98 | #if defined(GUI_WINDOW_ABOUT_IMPLEMENTATION) 99 | 100 | #include "raygui.h" 101 | 102 | #include // Required for: ceil() 103 | 104 | //---------------------------------------------------------------------------------- 105 | // Defines and Macros 106 | //---------------------------------------------------------------------------------- 107 | // The following defines are required to customize the about info, 108 | // they are usually defined externally in the tool code 109 | #if !defined(TOOL_NAME) 110 | #define TOOL_NAME "rTool" 111 | #endif 112 | #if !defined(TOOL_SHORT_NAME) 113 | #define TOOL_SHORT_NAME "rTN" 114 | #endif 115 | #if !defined(TOOL_VERSION) 116 | #define TOOL_VERSION "1.0" 117 | #endif 118 | #if !defined(TOOL_DESCRIPTION) 119 | #define TOOL_DESCRIPTION "A simple and easy-to-use tool to do something" 120 | #endif 121 | #if !defined(TOOL_RELEASE_DATE) 122 | #define TOOL_RELEASE_DATE "Dec.2021" 123 | #endif 124 | #if !defined(TOOL_LOGO_COLOR) 125 | #define TOOL_LOGO_COLOR 0x000000ff 126 | #endif 127 | 128 | #if defined(NO_ALPHA_BLENDING) 129 | #define FADE(c,a) c 130 | #else 131 | #define FADE(c,a) Fade(c,a) 132 | #endif 133 | 134 | //---------------------------------------------------------------------------------- 135 | // Types and Structures Definition 136 | //---------------------------------------------------------------------------------- 137 | // ... 138 | 139 | //---------------------------------------------------------------------------------- 140 | // Global Variables Definition 141 | //---------------------------------------------------------------------------------- 142 | static const char *lblUsedLibsText = "Powered by:"; 143 | static const char *linkraylibText = "www.raylib.com"; 144 | static const char *linkGitraylibText = "github.com/raysan5/raylib"; 145 | static const char *linkGitrayguiText = "github.com/raysan5/raygui"; 146 | static const char *lblCopyrightText = "Copyright (c) 2023 raylib technologies."; 147 | static const char *linkraylibtechText = "[@raylibtech]"; 148 | static const char *lblMoreInfoText = "More info:"; 149 | static const char *linkMailText = "ray@raylibtech.com"; 150 | static const char *lblSupportText = "Support:"; 151 | static const char *btnSponsorText = "#146#Sponsor"; 152 | static const char *btnCloseText = "#159#Close"; 153 | 154 | //---------------------------------------------------------------------------------- 155 | // Internal Module Functions Definition 156 | //---------------------------------------------------------------------------------- 157 | // Draw rTool generated icon 158 | static void DrawTechIcon(int posX, int posY, int size, const char *text, int textSize, bool corner, Color color) 159 | { 160 | float borderSize = ceilf((float)size/16.0f); 161 | bool offsetY = true; 162 | 163 | // Make sure there is no character with pixels down the text baseline for a perfect y-aligned icon 164 | for (int i = 0; text[i] != '\0'; i++) if ((text[i] == 'q') || (text[i] == 'y') || (text[i] == 'p') || (text[i] == 'j') || (text[i] == 'g')) { offsetY = false; break; } 165 | 166 | int textPosX = posX + size - (int)(2.0f*borderSize) - MeasureText(text, textSize); 167 | int textPosY = posY + size - (int)(2.0f*borderSize) - textSize + (offsetY? (2*textSize/10) : 0); 168 | 169 | DrawRectangle(posX - 1, posY - 1, size + 2, size + 2, GetColor(GuiGetStyle(DEFAULT, LINE_COLOR))); 170 | DrawRectangle(posX, posY, size, size, RAYWHITE); 171 | DrawRectangleLinesEx((Rectangle){ (float)posX, (float)posY, (float)size, (float)size }, borderSize, color); 172 | DrawText(text, textPosX, textPosY, textSize, color); 173 | 174 | if (corner) 175 | { 176 | DrawTriangle((Vector2){ (float)posX + (float)size - 2*borderSize - (float)size/4, (float)posY + 2*borderSize }, 177 | (Vector2){ (float)posX + (float)size - 2*borderSize, (float)posY + 2*borderSize + (float)size/4 }, 178 | (Vector2){ (float)posX + (float)size - 2*borderSize, (float)posY + 2*borderSize }, color); 179 | } 180 | } 181 | 182 | //---------------------------------------------------------------------------------- 183 | // Module Functions Definition 184 | //---------------------------------------------------------------------------------- 185 | 186 | // Init Window About 187 | GuiWindowAboutState InitGuiWindowAbout(void) 188 | { 189 | GuiWindowAboutState state = { 0 }; 190 | 191 | state.windowActive = false; 192 | 193 | state.windowBounds = (Rectangle){ GetScreenWidth()/2 - 360/2, GetScreenHeight()/2 - 340/2, 360, 340 }; 194 | state.panOffset = (Vector2){ 0, 0 }; 195 | state.dragMode = false; 196 | state.supportDrag = false; 197 | 198 | return state; 199 | } 200 | 201 | // Gui about window 202 | void GuiWindowAbout(GuiWindowAboutState *state) 203 | { 204 | if (state->windowActive) 205 | { 206 | // Update window dragging 207 | //---------------------------------------------------------------------------------------- 208 | if (state->supportDrag) 209 | { 210 | Vector2 mousePosition = GetMousePosition(); 211 | 212 | if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) 213 | { 214 | // Window can be dragged from the top window bar 215 | if (CheckCollisionPointRec(mousePosition, (Rectangle){ state->windowBounds.x, state->windowBounds.y, (float)state->windowBounds.width, RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT })) 216 | { 217 | state->dragMode = true; 218 | state->panOffset.x = mousePosition.x - state->windowBounds.x; 219 | state->panOffset.y = mousePosition.y - state->windowBounds.y; 220 | } 221 | } 222 | 223 | if (state->dragMode) 224 | { 225 | state->windowBounds.x = (mousePosition.x - state->panOffset.x); 226 | state->windowBounds.y = (mousePosition.y - state->panOffset.y); 227 | 228 | // Check screen limits to avoid moving out of screen 229 | if (state->windowBounds.x < 0) state->windowBounds.x = 0; 230 | else if (state->windowBounds.x > (GetScreenWidth() - state->windowBounds.width)) state->windowBounds.x = GetScreenWidth() - state->windowBounds.width; 231 | 232 | if (state->windowBounds.y < 40) state->windowBounds.y = 40; 233 | else if (state->windowBounds.y > (GetScreenHeight() - state->windowBounds.height - 24)) state->windowBounds.y = GetScreenHeight() - state->windowBounds.height - 24; 234 | 235 | if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) state->dragMode = false; 236 | } 237 | } 238 | //---------------------------------------------------------------------------------------- 239 | 240 | // Draw window and controls 241 | //---------------------------------------------------------------------------------------- 242 | state->windowActive = !GuiWindowBox(state->windowBounds, TextFormat("#191#About %s", TOOL_NAME)); 243 | 244 | int labelTextAlign = GuiGetStyle(LABEL, TEXT_ALIGNMENT); 245 | GuiSetStyle(LABEL, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT); 246 | DrawTechIcon((int)state->windowBounds.x + 10, (int)state->windowBounds.y + 35, 64, TOOL_SHORT_NAME, 20, true, GetColor(TOOL_LOGO_COLOR)); 247 | 248 | bool singleLine = false; 249 | GuiLabel((Rectangle){ state->windowBounds.x + 85, state->windowBounds.y + (singleLine? 55 : 35), 200, 30 }, TextFormat("%s %s (%s)", TOOL_NAME, TOOL_VERSION, TOOL_RELEASE_DATE)); 250 | GuiLabel((Rectangle){ state->windowBounds.x + 85, state->windowBounds.y + (singleLine? 78 : 64), (float)state->windowBounds.width, 40 }, singleLine? TOOL_DESCRIPTION : TOOL_DESCRIPTION_BREAK); 251 | 252 | // Draw a background rectangle for convenience 253 | DrawRectangle((int)state->windowBounds.x + 1, (int)state->windowBounds.y + 110, state->windowBounds.width - 2, 100, FADE(GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_NORMAL)), 0.5f)); 254 | 255 | GuiLine((Rectangle){ state->windowBounds.x, state->windowBounds.y + 100, (float)state->windowBounds.width, 20 }, NULL); 256 | GuiLabel((Rectangle){ state->windowBounds.x + 8, state->windowBounds.y + 112, 126, 24 }, lblUsedLibsText); 257 | 258 | DrawTechIcon((int)state->windowBounds.x + 10, (int)state->windowBounds.y + 135, 64, "raylib", 10, false, BLACK); 259 | DrawTechIcon((int)state->windowBounds.x + 80, (int)state->windowBounds.y + 135, 64, "raygui", 10, false, GRAY); 260 | 261 | if (GuiLabelButton((Rectangle){ state->windowBounds.x + 155, state->windowBounds.y + 135, 80, 16 }, linkraylibText)) { OpenURL("https://www.raylib.com/"); } 262 | if (GuiLabelButton((Rectangle){ state->windowBounds.x + 155, state->windowBounds.y + 160, 180, 16 }, linkGitraylibText)) { OpenURL("https://github.com/raysan5/raylib"); } 263 | if (GuiLabelButton((Rectangle){ state->windowBounds.x + 155, state->windowBounds.y + 180, 180, 16 }, linkGitrayguiText)) { OpenURL("https://github.com/raysan5/raygui"); } 264 | 265 | GuiLine((Rectangle){ state->windowBounds.x, state->windowBounds.y + 200, (float)state->windowBounds.width, 20 }, NULL); 266 | 267 | GuiLabel((Rectangle){ state->windowBounds.x + 10, state->windowBounds.y + 220, 289, 20 }, lblCopyrightText); 268 | GuiLabel((Rectangle){ state->windowBounds.x + 10, state->windowBounds.y + 250, 65, 16 }, lblMoreInfoText); 269 | 270 | float linkMailTextWidth = MeasureTextEx(GuiGetFont(), linkMailText, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), (float)GuiGetStyle(DEFAULT, TEXT_SPACING)).x; 271 | if (GuiLabelButton((Rectangle){ state->windowBounds.x + 90, state->windowBounds.y + 250, 165, 16 }, TextFormat("www.raylibtech.com/%s", TextToLower(TOOL_NAME)))) { OpenURL("https://www.raylibtech.com/"); } 272 | if (GuiLabelButton((Rectangle){ state->windowBounds.x + 90, state->windowBounds.y + 270, linkMailTextWidth, 16 }, linkMailText)) { OpenURL("mailto:ray@raylibtech.com"); } 273 | if (GuiLabelButton((Rectangle){ state->windowBounds.x + 90 + linkMailTextWidth + 4, state->windowBounds.y + 270, MeasureTextEx(GuiGetFont(), linkraylibtechText, (float)GuiGetStyle(DEFAULT, TEXT_SIZE), (float)GuiGetStyle(DEFAULT, TEXT_SPACING)).x, 16 }, linkraylibtechText)) { OpenURL("https://twitter.com/raylibtech"); } 274 | 275 | GuiLabel((Rectangle){ state->windowBounds.x + 10, state->windowBounds.y + 270, 65, 16 }, lblSupportText); 276 | GuiLine((Rectangle){ state->windowBounds.x, state->windowBounds.y + 285, (float)state->windowBounds.width, 20 }, NULL); 277 | GuiSetStyle(LABEL, TEXT_ALIGNMENT, labelTextAlign); 278 | 279 | DrawRectangle((int)state->windowBounds.x + 1, (int)state->windowBounds.y + 285 + 11, (int)state->windowBounds.width - 2, 43, FADE(GetColor(GuiGetStyle(DEFAULT, BASE_COLOR_NORMAL)), 0.5f)); 280 | 281 | int buttonTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); 282 | GuiSetStyle(BUTTON, TEXT_ALIGNMENT, TEXT_ALIGN_CENTER); 283 | 284 | if (GuiButton((Rectangle){ state->windowBounds.x + state->windowBounds.width - 80 - 90, state->windowBounds.y + 305, 80, 24 }, btnSponsorText)) { OpenURL("https://github.com/sponsors/raysan5"); } 285 | if (GuiButton((Rectangle){ state->windowBounds.x + state->windowBounds.width - 80, state->windowBounds.y + 305, 70, 24 }, btnCloseText)) state->windowActive = false; 286 | GuiSetStyle(BUTTON, TEXT_ALIGNMENT, buttonTextAlign); 287 | //---------------------------------------------------------------------------------------- 288 | } 289 | else state->windowBounds = (Rectangle){ GetScreenWidth()/2 - state->windowBounds.width/2, GetScreenHeight()/2 - state->windowBounds.height/2, state->windowBounds.width, state->windowBounds.height }; 290 | } 291 | 292 | #endif // GUI_WINDOW_ABOUT_IMPLEMENTATION -------------------------------------------------------------------------------- /src/gui_window_help.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * Window Help 4 | * 5 | * MODULE USAGE: 6 | * #define GUI_WINDOW_HELP_IMPLEMENTATION 7 | * #include "gui_window_help.h" 8 | * 9 | * On game init call: GuiWindowHelpState state = InitGuiWindowHelp(); 10 | * On game draw call: GuiWindowHelp(&state); 11 | * 12 | * 13 | * LICENSE: zlib/libpng 14 | * 15 | * Copyright (c) 2022-2024 raylib technologies (@raylibtech) / Ramon Santamaria (@raysan5) 16 | * 17 | * This software is provided "as-is", without any express or implied warranty. In no event 18 | * will the authors be held liable for any damages arising from the use of this software. 19 | * 20 | * Permission is granted to anyone to use this software for any purpose, including commercial 21 | * applications, and to alter it and redistribute it freely, subject to the following restrictions: 22 | * 23 | * 1. The origin of this software must not be misrepresented; you must not claim that you 24 | * wrote the original software. If you use this software in a product, an acknowledgment 25 | * in the product documentation would be appreciated but is not required. 26 | * 27 | * 2. Altered source versions must be plainly marked as such, and must not be misrepresented 28 | * as being the original software. 29 | * 30 | * 3. This notice may not be removed or altered from any source distribution. 31 | * 32 | **********************************************************************************************/ 33 | 34 | #include "raylib.h" 35 | 36 | // WARNING: raygui implementation is expected to be defined before including this header 37 | 38 | #ifndef GUI_WINDOW_HELP_H 39 | #define GUI_WINDOW_HELP_H 40 | 41 | //---------------------------------------------------------------------------------- 42 | // Defines and Macros 43 | //---------------------------------------------------------------------------------- 44 | //... 45 | 46 | //---------------------------------------------------------------------------------- 47 | // Types and Structures Definition 48 | //---------------------------------------------------------------------------------- 49 | // Gui window structure declaration 50 | typedef struct { 51 | bool windowActive; 52 | 53 | Rectangle windowBounds; 54 | Vector2 panOffset; 55 | bool dragMode; 56 | bool supportDrag; 57 | 58 | int contentHeight; 59 | Vector2 scrollPanelOffset; 60 | 61 | } GuiWindowHelpState; 62 | 63 | #ifdef __cplusplus 64 | extern "C" { // Prevents name mangling of functions 65 | #endif 66 | 67 | //---------------------------------------------------------------------------------- 68 | // Global Variables Definition 69 | //---------------------------------------------------------------------------------- 70 | //... 71 | 72 | //---------------------------------------------------------------------------------- 73 | // Module Functions Declaration 74 | //---------------------------------------------------------------------------------- 75 | GuiWindowHelpState InitGuiWindowHelp(void); 76 | void GuiWindowHelp(GuiWindowHelpState *state); 77 | 78 | #ifdef __cplusplus 79 | } 80 | #endif 81 | 82 | #endif // GUI_WINDOW_HELP_H 83 | 84 | /*********************************************************************************** 85 | * 86 | * GUI_WINDOW_HELP IMPLEMENTATION 87 | * 88 | ************************************************************************************/ 89 | 90 | #if defined(GUI_WINDOW_HELP_IMPLEMENTATION) 91 | 92 | #include "raygui.h" 93 | 94 | //---------------------------------------------------------------------------------- 95 | // Defines and Macros 96 | //---------------------------------------------------------------------------------- 97 | #define GUIHELPWINDOW_MAX_LINES 128 98 | 99 | #define GUIHELPWINDOW_LINE_HEIGHT 24 100 | #define GUIHELPWINDOW_LINE_EMPTY_HEIGHT 12 101 | 102 | //---------------------------------------------------------------------------------- 103 | // Types and Structures Definition 104 | //---------------------------------------------------------------------------------- 105 | // ... 106 | 107 | //---------------------------------------------------------------------------------- 108 | // Global Variables Definition 109 | //---------------------------------------------------------------------------------- 110 | // Tool help info 111 | static const char *helpLines[] = { 112 | "F1 - Show Help window", 113 | "F2 - Show About window", 114 | "F3 - Show Issue Report window", 115 | //"F4 - Show User window", 116 | "-File Controls", 117 | "LCTRL + N - New iconset file (.rgi)", 118 | "LCTRL + O - Open iconset file (.rgi)", 119 | "LCTRL + S - Save iconset file (.rgi)", 120 | "LCTRL + E - Export iconset file", 121 | "-Tool Controls", 122 | "LCTRL + X,C,V - Cut, copy, paste icon", 123 | "LCTRL + Z,Y - Undo/Redo icon edition", 124 | "DEL - Clean current selected icon", 125 | "-Tool Visuals", 126 | "LEFT | RIGHT - Select style template", 127 | "LCTRL + F - Toggle double screen size", 128 | "-", 129 | "ESCAPE - Close Window/Exit", 130 | NULL 131 | }; 132 | 133 | //---------------------------------------------------------------------------------- 134 | // Module Functions Definition 135 | //---------------------------------------------------------------------------------- 136 | // Init window Help 137 | GuiWindowHelpState InitGuiWindowHelp(void) 138 | { 139 | GuiWindowHelpState state = { 0 }; 140 | 141 | state.windowActive = false; 142 | state.supportDrag = false; 143 | 144 | state.windowBounds = (Rectangle){ (float)GetScreenWidth()/2 - 360/2, 0, 360, 0 }; 145 | state.panOffset = (Vector2){ 0, 0 }; 146 | state.dragMode = false; 147 | 148 | // Calculate content height 149 | state.contentHeight = 0; 150 | for (int i = 0; i < GUIHELPWINDOW_MAX_LINES; i++) 151 | { 152 | if (helpLines[i] == NULL) break; 153 | else if ((helpLines[i][0] == '-') && (helpLines[i][1] == '\0')) state.contentHeight += GUIHELPWINDOW_LINE_EMPTY_HEIGHT; 154 | else state.contentHeight += GUIHELPWINDOW_LINE_HEIGHT; 155 | } 156 | state.contentHeight += 8; // Marging at the end 157 | 158 | // Calculate window height if not specifically defined 159 | if (state.windowBounds.height == 0) state.windowBounds.height = (float)(state.contentHeight + 24 + 4); 160 | state.windowBounds.y = GetScreenHeight()/2 - state.windowBounds.height/2; 161 | 162 | // Review size if it does not fit on the screen 163 | if (state.windowBounds.height > (GetScreenHeight() - 80)) 164 | { 165 | state.windowBounds.height = (float)GetScreenHeight() - 80; 166 | state.windowBounds.y = GetScreenHeight()/2 - state.windowBounds.height/2; 167 | } 168 | 169 | // Init scroll offset 170 | state.scrollPanelOffset = (Vector2){ 0, 0 }; 171 | 172 | return state; 173 | } 174 | 175 | // Gui window help 176 | void GuiWindowHelp(GuiWindowHelpState *state) 177 | { 178 | if (state->windowActive) 179 | { 180 | // Update window dragging 181 | //---------------------------------------------------------------------------------------- 182 | if (state->supportDrag) 183 | { 184 | Vector2 mousePosition = GetMousePosition(); 185 | 186 | if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) 187 | { 188 | // Window can be dragged from the top window bar 189 | if (CheckCollisionPointRec(mousePosition, (Rectangle){ state->windowBounds.x, state->windowBounds.y, state->windowBounds.width, RAYGUI_WINDOWBOX_STATUSBAR_HEIGHT })) 190 | { 191 | state->dragMode = true; 192 | state->panOffset.x = mousePosition.x - state->windowBounds.x; 193 | state->panOffset.y = mousePosition.y - state->windowBounds.y; 194 | } 195 | } 196 | 197 | if (state->dragMode) 198 | { 199 | state->windowBounds.x = (mousePosition.x - state->panOffset.x); 200 | state->windowBounds.y = (mousePosition.y - state->panOffset.y); 201 | 202 | // Check screen limits to avoid moving out of screen 203 | if (state->windowBounds.x < 0) state->windowBounds.x = 0; 204 | else if (state->windowBounds.x > (GetScreenWidth() - state->windowBounds.width)) state->windowBounds.x = GetScreenWidth() - state->windowBounds.width; 205 | 206 | if (state->windowBounds.y < 40) state->windowBounds.y = 40; 207 | else if (state->windowBounds.y > (GetScreenHeight() - state->windowBounds.height - 24)) state->windowBounds.y = GetScreenHeight() - state->windowBounds.height - 24; 208 | 209 | if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) state->dragMode = false; 210 | } 211 | } 212 | //---------------------------------------------------------------------------------------- 213 | 214 | // Update window bounds and size: center to screen and allow scrolling 215 | //---------------------------------------------------------------------------------------- 216 | state->windowBounds.x = GetScreenWidth()/2 - state->windowBounds.width/2; 217 | state->windowBounds.height = (float)(state->contentHeight + 24 + 4); 218 | state->windowBounds.y = GetScreenHeight()/2 - state->windowBounds.height/2; 219 | 220 | // Review size if it does not fit on the screen 221 | if (state->windowBounds.height > (GetScreenHeight() - 80)) 222 | { 223 | state->windowBounds.height = (float)GetScreenHeight() - 80; 224 | state->windowBounds.y = GetScreenHeight()/2 - state->windowBounds.height/2; 225 | } 226 | //---------------------------------------------------------------------------------------- 227 | 228 | // Draw window and controls 229 | //---------------------------------------------------------------------------------------- 230 | state->windowActive = !GuiWindowBox(state->windowBounds, TextFormat("#193#%s Help", TOOL_NAME)); 231 | 232 | int nextLineY = (GUIHELPWINDOW_LINE_HEIGHT + 4); 233 | 234 | // Draw scroll panel considering window bounds and content size (only if required) 235 | Rectangle scissor = { 0 }; 236 | if (state->contentHeight > (state->windowBounds.height - 24)) 237 | { 238 | GuiScrollPanel((Rectangle){ state->windowBounds.x, state->windowBounds.y + GUIHELPWINDOW_LINE_HEIGHT - 1, state->windowBounds.width, state->windowBounds.height - 24 + 1 }, NULL, 239 | (Rectangle){ state->windowBounds.x, state->windowBounds.y + GUIHELPWINDOW_LINE_HEIGHT, state->windowBounds.width - 16, (float)state->contentHeight }, &state->scrollPanelOffset, &scissor); 240 | } 241 | 242 | // Draw help info and separation lines 243 | // WARNING: We only scissor if scrolling is required, scissor mode forces a new draw call 244 | if (state->contentHeight > (state->windowBounds.height - 24)) BeginScissorMode((int)scissor.x, (int)scissor.y, (int)scissor.width + 2, (int)scissor.height); 245 | 246 | for (int i = 0; i < GUIHELPWINDOW_MAX_LINES; i++) 247 | { 248 | if (helpLines[i] == NULL) break; 249 | else if ((helpLines[i][0] == '-') && (helpLines[i][1] == '\0')) GuiLine((Rectangle){ state->windowBounds.x, state->windowBounds.y + nextLineY + state->scrollPanelOffset.y, state->windowBounds.width, GUIHELPWINDOW_LINE_EMPTY_HEIGHT }, NULL); 250 | else if (helpLines[i][0] == '-') GuiLine((Rectangle){ state->windowBounds.x, state->windowBounds.y + nextLineY + state->scrollPanelOffset.y, state->windowBounds.width, GUIHELPWINDOW_LINE_HEIGHT }, helpLines[i] + 1); 251 | else GuiLabel((Rectangle){ state->windowBounds.x + 12, state->windowBounds.y + nextLineY + state->scrollPanelOffset.y, state->windowBounds.width, GUIHELPWINDOW_LINE_HEIGHT }, helpLines[i]); 252 | 253 | if ((helpLines[i][0] == '-') && (helpLines[i][1] == '\0')) nextLineY += GUIHELPWINDOW_LINE_EMPTY_HEIGHT; 254 | else nextLineY += GUIHELPWINDOW_LINE_HEIGHT; 255 | } 256 | 257 | if (state->contentHeight > (state->windowBounds.height - 24)) EndScissorMode(); 258 | } 259 | } 260 | 261 | #endif // GUI_WINDOW_HELP_IMPLEMENTATION -------------------------------------------------------------------------------- /src/layouts/rguiicons_v050.rgl: -------------------------------------------------------------------------------- 1 | # 2 | # rgl text file (v2.0) - raygui layout text file generated using rGuiLayout 3 | # 4 | # Total number of controls: 22 5 | # Ref. window: r 6 | # Anchor info: a 7 | # Control info: c 8 | # 9 | r 0 0 -1 -1 10 | a 000 anchorMain 0 0 0 11 | a 001 anchor01 0 0 0 12 | a 002 anchor02 0 0 0 13 | a 003 anchor03 0 0 0 14 | a 004 anchor04 0 0 0 15 | a 005 anchor05 0 0 0 16 | a 006 anchor06 0 0 0 17 | a 007 anchor07 0 0 0 18 | c 000 3 Panel021 50 50 320 45 0 19 | c 001 5 Button000 60 60 25 25 0 o 20 | c 002 5 Button001 90 60 25 25 0 o 21 | c 003 5 Button002 150 60 25 25 0 o 22 | c 004 5 Button003 180 60 25 25 0 o 23 | c 005 5 Button004 210 60 25 25 0 o 24 | c 006 4 Label006 60 105 140 25 0 Choose rIcon for Edit: 25 | c 007 11 ComboBox007 235 105 125 25 0 ONE;TWO;THREE 26 | c 008 24 MessageBox008 50 135 320 180 0 SAMPLE TEXT 27 | c 009 14 TextmultiBox009 65 325 225 30 0 SAMPLE TEXT 28 | c 010 5 Button010 295 325 30 30 0 o 29 | c 011 24 MessageBox011 65 365 260 260 0 SAMPLE TEXT 30 | c 012 5 Button012 335 365 25 25 0 o 31 | c 013 5 Button013 335 395 25 25 0 o 32 | c 014 5 Button014 335 450 25 25 0 o 33 | c 015 5 Button015 335 480 25 25 0 o 34 | c 016 5 Button016 335 540 25 25 0 o 35 | c 017 5 Button017 335 570 25 25 0 o 36 | c 018 5 Button018 335 60 25 25 0 o 37 | c 019 5 Button019 305 60 25 25 0 o 38 | c 020 20 StatusBar020 50 640 320 25 0 SAMPLE TEXT 39 | c 021 5 Button021 335 600 25 25 0 o 40 | -------------------------------------------------------------------------------- /src/layouts/rguiicons_v100.rgl: -------------------------------------------------------------------------------- 1 | # 2 | # rgl layout text file (v2.1) - raygui layout file generated using rGuiLayout 3 | # 4 | # Number of controls: 20 5 | # 6 | # Ref. window: r 7 | # Anchor info: a 8 | # Control info: c 9 | # 10 | r 0 0 -1 -1 11 | a 000 anchorMain 0 0 0 12 | a 001 anchor01 50 50 1 13 | a 002 anchor02 0 0 0 14 | a 003 anchor03 0 0 0 15 | a 004 anchor04 0 0 0 16 | a 005 anchor05 0 0 0 17 | a 006 anchor06 0 0 0 18 | a 007 anchor07 0 0 0 19 | c 000 3 mainPanel 0 0 640 45 1 20 | c 001 5 btnLoad 10 10 25 25 1 #01# 21 | c 002 5 btnSave 40 10 25 25 1 #02# 22 | c 003 5 btnExport 70 10 25 25 1 #07# 23 | c 004 5 btnCopy 115 10 25 25 1 #16# 24 | c 005 5 btnCut 145 10 25 25 1 #17# 25 | c 006 5 btnPaste 175 10 25 25 1 #18# 26 | c 007 5 btnAbout 260 10 75 25 1 #191#ABOUT 27 | c 008 4 lblChooseIcon 15 45 140 25 1 Choose rIcon for Edit: 28 | c 009 24 dummy01 15 65 320 320 1 rIcons File 29 | c 010 11 fileType 15 400 160 25 1 rIcons FIle (.rgi);rIcons Image (.png);rIcons Code (.h) 30 | c 011 5 btnExport 185 400 150 25 1 #07#Export rIcons 31 | c 012 4 lblIconNameId 365 45 126 25 1 rIcon Name ID: 32 | c 013 13 iconNameId 365 65 260 25 1 SAMPLE TEXT 33 | c 014 18 zoom 410 110 180 10 1 ZOOM: 34 | c 015 24 dummy02 367 126 260 260 1 rIcon Edit 35 | c 016 5 btnSaveIcon 440 400 100 25 1 #012#Save Image 36 | c 017 5 btnClearIcon 545 400 80 25 1 #079#Clear 37 | c 018 20 statusFile 0 435 350 25 1 TOTAL FILE ICONS: 0/0 38 | c 019 20 statusSelected 350 435 290 25 1 SELECTED: 0/0 - NAME_ID 39 | -------------------------------------------------------------------------------- /src/minshell.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | rGuiIcons | A simple and easy-to-use raygui icons editor 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 43 | 44 | 61 | 62 | 63 | 64 |

65 | 85 | {{{ SCRIPT }}} 86 | 87 | 88 | -------------------------------------------------------------------------------- /src/rguiicons.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/src/rguiicons.ico -------------------------------------------------------------------------------- /src/rguiicons.rc: -------------------------------------------------------------------------------- 1 | GLFW_ICON ICON "rguiicons.ico" 2 | 1 VERSIONINFO 3 | FILEVERSION 3,1,0,0 4 | PRODUCTVERSION 3,1,0,0 5 | BEGIN 6 | BLOCK "StringFileInfo" 7 | BEGIN 8 | BLOCK "040904E4" // English US 9 | BEGIN 10 | VALUE "CompanyName", "raylib technologies" 11 | VALUE "FileDescription", "rGuiIcons | A simple and easy-to-use raygui icons editor" 12 | VALUE "FileVersion", "3.1" 13 | VALUE "InternalName", "rguiicons" 14 | VALUE "LegalCopyright", "(c) 2025 raylib technologies (@raylibtech)" 15 | VALUE "OriginalFilename", "rguiicons" 16 | VALUE "ProductName", "rGuiIcons" 17 | VALUE "ProductVersion", "3.1" 18 | END 19 | END 20 | BLOCK "VarFileInfo" 21 | BEGIN 22 | VALUE "Translation", 0x409, 1252 // English US 23 | END 24 | END 25 | -------------------------------------------------------------------------------- /src/rguiicons.rc.data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raysan5/rguiicons/966cd43d28c47245bb1717e0348684c09ffdf34e/src/rguiicons.rc.data -------------------------------------------------------------------------------- /src/styles/style_jungle.h: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////////////////////////// 2 | // // 3 | // StyleAsCode exporter v2.0 - Style data exported as a values array // 4 | // // 5 | // USAGE: On init call: GuiLoadStyleJungle(); // 6 | // // 7 | // more info and bugs-report: github.com/raysan5/raygui // 8 | // feedback and support: ray[at]raylibtech.com // 9 | // // 10 | // Copyright (c) 2020-2024 raylib technologies (@raylibtech) // 11 | // // 12 | ////////////////////////////////////////////////////////////////////////////////// 13 | 14 | #define JUNGLE_STYLE_PROPS_COUNT 17 15 | 16 | // Custom style name: Jungle 17 | static const GuiStyleProp jungleStyleProps[JUNGLE_STYLE_PROPS_COUNT] = { 18 | { 0, 0, 0x60827dff }, // DEFAULT_BORDER_COLOR_NORMAL 19 | { 0, 1, 0x2c3334ff }, // DEFAULT_BASE_COLOR_NORMAL 20 | { 0, 2, 0x82a29fff }, // DEFAULT_TEXT_COLOR_NORMAL 21 | { 0, 3, 0x5f9aa8ff }, // DEFAULT_BORDER_COLOR_FOCUSED 22 | { 0, 4, 0x334e57ff }, // DEFAULT_BASE_COLOR_FOCUSED 23 | { 0, 5, 0x6aa9b8ff }, // DEFAULT_TEXT_COLOR_FOCUSED 24 | { 0, 6, 0xa9cb8dff }, // DEFAULT_BORDER_COLOR_PRESSED 25 | { 0, 7, 0x3b6357ff }, // DEFAULT_BASE_COLOR_PRESSED 26 | { 0, 8, 0x97af81ff }, // DEFAULT_TEXT_COLOR_PRESSED 27 | { 0, 9, 0x5b6462ff }, // DEFAULT_BORDER_COLOR_DISABLED 28 | { 0, 10, 0x2c3334ff }, // DEFAULT_BASE_COLOR_DISABLED 29 | { 0, 11, 0x666b69ff }, // DEFAULT_TEXT_COLOR_DISABLED 30 | { 0, 16, 0x0000000c }, // DEFAULT_TEXT_SIZE 31 | { 0, 17, 0x00000000 }, // DEFAULT_TEXT_SPACING 32 | { 0, 18, 0x638465ff }, // DEFAULT_LINE_COLOR 33 | { 0, 19, 0x2b3a3aff }, // DEFAULT_BACKGROUND_COLOR 34 | { 0, 20, 0x00000012 }, // DEFAULT_TEXT_LINE_SPACING 35 | }; 36 | 37 | // WARNING: This style uses a custom font: "Pixel Intv.otf" (size: 12, spacing: 0) 38 | 39 | #define JUNGLE_STYLE_FONT_ATLAS_COMP_SIZE 2030 40 | 41 | // Font atlas image pixels data: DEFLATE compressed 42 | static unsigned char jungleFontData[JUNGLE_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed, 43 | 0x9d, 0x3d, 0x8e, 0x25, 0x35, 0x14, 0x85, 0x8d, 0xe9, 0x8c, 0x10, 0x11, 0x80, 0x84, 0x20, 0x41, 0x22, 0x21, 0x61, 0x34, 44 | 0x12, 0x64, 0xb3, 0x00, 0x62, 0x84, 0x08, 0x10, 0x11, 0x09, 0xb0, 0x07, 0x66, 0x65, 0x93, 0x90, 0xb3, 0x01, 0x76, 0xc1, 45 | 0x02, 0x2e, 0x9a, 0xbf, 0x9e, 0x9f, 0xae, 0xb2, 0x7d, 0x8f, 0xaf, 0xcb, 0xae, 0x7a, 0x5f, 0x7f, 0x9a, 0xd1, 0xcc, 0xf3, 46 | 0x73, 0x95, 0xcb, 0xc7, 0xd7, 0x55, 0xaf, 0x7d, 0xde, 0xb5, 0x25, 0x00, 0x00, 0x00, 0x80, 0x07, 0x3c, 0xff, 0xd9, 0x7e, 47 | 0x6d, 0xab, 0x24, 0xbd, 0x2a, 0x69, 0x3f, 0xd6, 0xeb, 0xd7, 0x5f, 0x96, 0xe4, 0xdd, 0x77, 0x6c, 0x1f, 0x31, 0xef, 0xb4, 48 | 0x61, 0xaf, 0xd5, 0xfb, 0x2d, 0x4b, 0xae, 0x92, 0xfd, 0xe3, 0xef, 0xf7, 0x57, 0x72, 0x5c, 0xc3, 0xbb, 0x3f, 0xc9, 0x71, 49 | 0x2d, 0xe5, 0x7a, 0xa3, 0xf5, 0x2f, 0xf7, 0xc1, 0x7e, 0xd9, 0xcb, 0x3f, 0xcf, 0x7b, 0x22, 0x3b, 0x8e, 0xb9, 0xff, 0xfe, 50 | 0xe4, 0x1a, 0x81, 0xfe, 0x91, 0xe1, 0xeb, 0xdd, 0xd2, 0xbb, 0x6b, 0xd7, 0x60, 0xce, 0x16, 0xbc, 0x7e, 0x7d, 0xa4, 0xfe, 51 | 0xe9, 0xfe, 0x1c, 0xed, 0xf1, 0x5f, 0x53, 0xc5, 0xec, 0x6e, 0xb3, 0x27, 0x52, 0x51, 0x9b, 0x2c, 0x9c, 0x29, 0x62, 0x34, 52 | 0xa7, 0xa0, 0xde, 0xcd, 0xc5, 0x6b, 0x30, 0x41, 0x7f, 0x6d, 0x84, 0x46, 0x1d, 0x47, 0x8b, 0xff, 0xe7, 0xdc, 0xbd, 0x18, 53 | 0x01, 0xe5, 0xa3, 0xf6, 0xb7, 0x38, 0x2a, 0xfe, 0xd3, 0x50, 0xf5, 0x7b, 0xf4, 0x3f, 0x62, 0xfe, 0x2f, 0xbf, 0xbf, 0xdc, 54 | 0x67, 0xdb, 0xc7, 0xcb, 0xaf, 0xe2, 0xdf, 0x7f, 0xf7, 0x8c, 0xd0, 0xdf, 0x7f, 0xff, 0x1f, 0xab, 0x7e, 0xc4, 0xfc, 0xbf, 55 | 0xe2, 0x73, 0x64, 0xed, 0x3e, 0xbe, 0x3d, 0x76, 0x6c, 0x78, 0xfc, 0xcf, 0xa0, 0xa4, 0x7e, 0xed, 0xf9, 0xcf, 0x3a, 0xe6, 56 | 0xd9, 0xd1, 0xf1, 0xaf, 0x1c, 0xeb, 0x75, 0x4f, 0x98, 0x10, 0x9f, 0x67, 0xd5, 0xbf, 0xa4, 0x3e, 0x44, 0xcc, 0x35, 0x9e, 57 | 0xbb, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x35, 0x57, 0x4c, 0xca, 0xeb, 0xef, 58 | 0x91, 0x2b, 0x91, 0xa3, 0xca, 0xda, 0xdd, 0x06, 0x1e, 0xe7, 0x4a, 0x16, 0x7a, 0x6c, 0x56, 0xbf, 0x8c, 0x72, 0xfb, 0x25, 59 | 0xb7, 0x37, 0xa3, 0xa5, 0x35, 0xea, 0xf9, 0x7a, 0xf4, 0xcf, 0xce, 0xb5, 0xd7, 0xb2, 0x43, 0x6f, 0xcf, 0xcf, 0xb8, 0xbf, 60 | 0x72, 0xdd, 0x7b, 0x7d, 0xde, 0x32, 0xdf, 0x0c, 0x90, 0x0e, 0x89, 0xff, 0x36, 0x0f, 0xd3, 0x18, 0x77, 0xe3, 0xb6, 0xcf, 61 | 0xac, 0xd4, 0xd6, 0x3b, 0xb7, 0xa3, 0xf0, 0xcd, 0x6a, 0xf3, 0xd8, 0xf1, 0x1d, 0xed, 0xfa, 0x54, 0x1d, 0x25, 0xca, 0x98, 62 | 0x54, 0x1c, 0xac, 0x11, 0xf3, 0x7f, 0x4c, 0xfc, 0x97, 0xc6, 0xa9, 0xbd, 0xf7, 0x27, 0x66, 0x1e, 0x9f, 0xa5, 0xff, 0x88, 63 | 0xb9, 0x3a, 0x35, 0xcc, 0x0a, 0x6a, 0x5b, 0xb4, 0xfb, 0xbf, 0xe2, 0xd4, 0x29, 0xb9, 0x95, 0xf4, 0xe7, 0xa9, 0x19, 0xf1, 64 | 0xdf, 0x13, 0xe3, 0xda, 0xfc, 0x5f, 0xd6, 0x3f, 0xce, 0xdd, 0x66, 0x53, 0x9e, 0xa6, 0x5b, 0x62, 0x6c, 0xad, 0xfb, 0x3f, 65 | 0x44, 0xfa, 0x19, 0xe7, 0x7d, 0x9e, 0x42, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 66 | 0x18, 0xeb, 0xc7, 0x3b, 0xca, 0x53, 0x62, 0x8d, 0x59, 0x7c, 0xf6, 0xfd, 0x5a, 0x47, 0xb9, 0xf5, 0x8e, 0xef, 0xef, 0x68, 67 | 0xdf, 0x47, 0xc4, 0x9a, 0xb4, 0x92, 0xc1, 0xac, 0xdf, 0x8b, 0x68, 0x4b, 0x38, 0xf2, 0x46, 0xf4, 0xdb, 0x4c, 0xfd, 0x95, 68 | 0xf6, 0xe8, 0xfa, 0x9b, 0x98, 0x61, 0xb0, 0x96, 0x19, 0x66, 0x2d, 0xfd, 0x15, 0xd7, 0x41, 0x8f, 0xfe, 0xf5, 0xb9, 0x2a, 69 | 0x15, 0xf4, 0xf0, 0xcf, 0xf1, 0xaa, 0xfe, 0x26, 0xe6, 0x7d, 0x1c, 0x73, 0x17, 0x1b, 0xa3, 0xbf, 0xd2, 0x6f, 0x57, 0x99, 70 | 0xff, 0xeb, 0xc7, 0xcc, 0xe2, 0xfc, 0x6f, 0xd5, 0x59, 0xc5, 0xc2, 0xdd, 0xa8, 0xfe, 0x98, 0x6a, 0xed, 0x9f, 0xdb, 0xd5, 71 | 0x3f, 0x0d, 0xd1, 0x7f, 0xcc, 0x19, 0xcf, 0x73, 0xff, 0x57, 0xb2, 0x57, 0xcf, 0xf0, 0xb9, 0xf5, 0x79, 0xc3, 0x6b, 0xa5, 72 | 0x47, 0xf4, 0xcc, 0xb8, 0xf9, 0x1f, 0x17, 0xe0, 0x79, 0x5c, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 73 | 0x00, 0x00, 0x00, 0x47, 0xac, 0x51, 0xe8, 0x6b, 0x67, 0x23, 0x56, 0x00, 0x1f, 0xbe, 0x9e, 0x1b, 0xd6, 0x30, 0xdf, 0x7f, 74 | 0x3d, 0xef, 0x38, 0x46, 0xcc, 0x99, 0xf3, 0x4f, 0xdb, 0x8f, 0xb7, 0x35, 0x0f, 0x9a, 0xee, 0x20, 0x8c, 0x58, 0x07, 0x3c, 75 | 0x5e, 0xff, 0xd4, 0xb4, 0x1e, 0xfb, 0x50, 0xc9, 0x2c, 0x78, 0x86, 0xb2, 0x33, 0xe3, 0x53, 0x29, 0x43, 0x94, 0xdf, 0xcd, 76 | 0x54, 0xef, 0x05, 0x25, 0xd7, 0x5d, 0xed, 0x68, 0xda, 0x0e, 0xc5, 0x25, 0x77, 0x4c, 0xcd, 0xcb, 0xe2, 0xbf, 0xf2, 0xec, 77 | 0xbe, 0xb6, 0xdc, 0x30, 0x07, 0x8c, 0xf7, 0x48, 0x27, 0x77, 0x3c, 0xf6, 0xf9, 0xee, 0xc6, 0xeb, 0x9f, 0x1a, 0x3c, 0x7e, 78 | 0xd1, 0x8e, 0x14, 0xab, 0xec, 0x7e, 0xab, 0x8c, 0x80, 0xd1, 0xfa, 0xd7, 0xae, 0x55, 0x77, 0x09, 0xa5, 0xd0, 0x71, 0x13, 79 | 0xad, 0x7f, 0xcb, 0x38, 0x8d, 0x1e, 0xc1, 0xca, 0x08, 0x38, 0x26, 0xfe, 0xcd, 0xad, 0x7f, 0x79, 0x6e, 0x88, 0xef, 0x3d, 80 | 0xc5, 0x05, 0xa4, 0xcd, 0x28, 0xbd, 0x6e, 0x35, 0x45, 0xc5, 0x2c, 0xcd, 0x1c, 0x47, 0x3c, 0x41, 0x6b, 0x7b, 0x55, 0x47, 81 | 0x3b, 0x36, 0xb5, 0x9e, 0x38, 0x5e, 0x7f, 0x93, 0x77, 0xfc, 0xce, 0xcb, 0xed, 0x7e, 0xad, 0x45, 0x9d, 0xee, 0xd8, 0x8b, 82 | 0x8f, 0xff, 0xf5, 0xbe, 0x8d, 0x76, 0x44, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 83 | 0xdb, 0xcc, 0x51, 0xe0, 0xcf, 0x54, 0x53, 0xaf, 0xa1, 0xee, 0x9d, 0x75, 0xe4, 0xde, 0xb9, 0xa3, 0xf6, 0xb7, 0xd3, 0xf3, 84 | 0x82, 0xd9, 0x90, 0x1d, 0xe0, 0xe2, 0xd7, 0xcd, 0xfa, 0xb2, 0x98, 0xd5, 0x7a, 0x48, 0xcd, 0xb8, 0xe5, 0xf5, 0x60, 0xf4, 85 | 0xf8, 0x7a, 0x54, 0xcf, 0x47, 0xbc, 0x0f, 0x2f, 0xc6, 0xdb, 0xa6, 0xc5, 0xbf, 0xe6, 0x0b, 0x59, 0x4d, 0xff, 0x74, 0x90, 86 | 0x3f, 0xaf, 0x47, 0xff, 0xde, 0xdd, 0x9f, 0x75, 0x47, 0x96, 0xbf, 0x57, 0xaf, 0xa0, 0x7f, 0x9b, 0x7b, 0x57, 0xf1, 0x11, 87 | 0x46, 0xfb, 0xf0, 0x66, 0xe9, 0x6f, 0xd2, 0xde, 0xb9, 0x3d, 0xfa, 0xf7, 0xf9, 0xe5, 0x8f, 0x8b, 0x7f, 0xfd, 0x8c, 0x69, 88 | 0xc8, 0xce, 0xe8, 0xbd, 0xd1, 0xea, 0xcb, 0xd4, 0x38, 0xc3, 0xa9, 0x15, 0xef, 0x97, 0x1b, 0xe5, 0xec, 0x9a, 0xeb, 0x5e, 89 | 0x8c, 0xf2, 0xaf, 0xf6, 0x66, 0xff, 0x9e, 0xa1, 0x3f, 0xde, 0xb1, 0x6b, 0x8f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 90 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5b, 0x5b, 0xc7, 0x89, 0xdb, 0x8f, 0xca, 0x9b, 0xd5, 0xcd, 0x36, 0x33, 0x7a, 0xa8, 91 | 0xb9, 0x63, 0xbc, 0xde, 0x8a, 0xd2, 0x5a, 0xe5, 0x77, 0xf6, 0xe5, 0x3d, 0x8f, 0xec, 0x13, 0x57, 0xef, 0xd4, 0xea, 0xe6, 92 | 0xb7, 0xea, 0x66, 0x77, 0xed, 0xd7, 0x59, 0x50, 0xb2, 0x70, 0x66, 0xbf, 0x03, 0xc0, 0x97, 0xab, 0xcd, 0xf7, 0x6a, 0x2e, 93 | 0x3a, 0x45, 0x62, 0x5c, 0x17, 0x6a, 0x86, 0xbe, 0xc7, 0xef, 0xf4, 0xc1, 0xa3, 0xe0, 0xba, 0xf9, 0x1d, 0x25, 0x7d, 0xb5, 94 | 0xf3, 0x7d, 0x66, 0xc3, 0xec, 0xae, 0xeb, 0xd3, 0x3f, 0xbb, 0x73, 0xb5, 0xf9, 0xd5, 0x89, 0xf1, 0x15, 0x6a, 0x59, 0x71, 95 | 0x4a, 0xc7, 0xfc, 0xb2, 0xf0, 0xbf, 0xda, 0x35, 0xd5, 0xeb, 0xbe, 0x3d, 0xf3, 0xfa, 0x6b, 0xdf, 0xdd, 0xff, 0xed, 0xad, 96 | 0xeb, 0x75, 0xf2, 0x68, 0x2e, 0xae, 0xde, 0x11, 0x10, 0x99, 0x4d, 0x51, 0x75, 0x64, 0xb5, 0xe8, 0xbf, 0x77, 0xce, 0x36, 97 | 0xfd, 0xdf, 0xfc, 0xdb, 0x57, 0xbb, 0x14, 0xff, 0x9a, 0xfe, 0x71, 0x3e, 0xf7, 0xb1, 0xf1, 0x3f, 0x22, 0x2b, 0xde, 0x5e, 98 | 0x49, 0x6b, 0xfc, 0x6b, 0x63, 0xa7, 0x27, 0xfe, 0x4b, 0xf7, 0x7f, 0xbf, 0xfe, 0xaa, 0x0b, 0xee, 0x68, 0xfd, 0x93, 0xec, 99 | 0x53, 0xd5, 0x9e, 0x1a, 0xeb, 0x3d, 0xd9, 0x33, 0x77, 0x94, 0xee, 0xff, 0xaa, 0x86, 0xd1, 0xf1, 0xbf, 0x9e, 0xfe, 0xa9, 100 | 0xc3, 0x59, 0xeb, 0x1d, 0x53, 0xad, 0x3d, 0x69, 0xe2, 0x0c, 0xbe, 0xff, 0xfc, 0x7f, 0xac, 0xfe, 0xb1, 0xce, 0x4a, 0x2d, 101 | 0xab, 0xe3, 0x8a, 0xfc, 0xf2, 0xd6, 0x27, 0xa9, 0xc7, 0xf6, 0xbd, 0x6b, 0xfe, 0xaf, 0xd5, 0xed, 0x3b, 0xf3, 0xa8, 0xba, 102 | 0x10, 0x39, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xa3, 0xd7, 0x89, 0xf6, 0xe9, 103 | 0xa6, 0x43, 0xa4, 0x56, 0x6f, 0x74, 0x79, 0xcd, 0xd3, 0xf6, 0x95, 0x7d, 0x63, 0x9f, 0x3f, 0x78, 0xf5, 0x99, 0x3d, 0xb3, 104 | 0x5f, 0x27, 0xb4, 0x35, 0xef, 0xee, 0x70, 0xbc, 0xf5, 0xa3, 0xbc, 0xa7, 0xb4, 0x8a, 0xd1, 0xe3, 0x44, 0xfb, 0xc1, 0x9e, 105 | 0xd8, 0x1f, 0x1b, 0x47, 0xad, 0xd5, 0x1b, 0x5d, 0x5e, 0xd2, 0xff, 0x33, 0xfb, 0xd7, 0xfe, 0xb1, 0xa7, 0xf6, 0xc5, 0x66, 106 | 0xad, 0xbf, 0x0e, 0x6f, 0x6b, 0xc9, 0xcd, 0xe3, 0xd9, 0x47, 0x59, 0xcb, 0x03, 0xd5, 0xe7, 0x44, 0xf9, 0xd9, 0x3e, 0xb0, 107 | 0x1f, 0x37, 0x7c, 0x68, 0xb5, 0x7a, 0xa3, 0xcb, 0x4b, 0xfa, 0xff, 0x69, 0x66, 0x7f, 0xdb, 0x6f, 0xf6, 0xe1, 0x83, 0x92, 108 | 0x27, 0xf6, 0x64, 0x42, 0x5b, 0x93, 0xdd, 0xbd, 0x68, 0xe7, 0x5d, 0xe7, 0x3e, 0xda, 0x6a, 0xfc, 0xf7, 0x38, 0xd1, 0x3e, 109 | 0xb6, 0x9f, 0xec, 0x5b, 0xc1, 0x85, 0x30, 0x53, 0xff, 0xaf, 0xed, 0xbf, 0x1d, 0xfd, 0x35, 0x47, 0x45, 0x6f, 0x79, 0x6b, 110 | 0xfc, 0xdb, 0xa0, 0xfc, 0x6f, 0x3d, 0xfa, 0xcf, 0xea, 0xb3, 0x76, 0x6f, 0xe6, 0x56, 0x9f, 0x7c, 0x64, 0x4f, 0x17, 0xd2, 111 | 0xbf, 0x76, 0xff, 0x4f, 0x8e, 0x8c, 0xb3, 0xd1, 0xf7, 0xff, 0x33, 0xeb, 0x5f, 0x6a, 0xdf, 0xef, 0x0b, 0xe9, 0xdf, 0xe2, 112 | 0xb0, 0x1a, 0xe7, 0x31, 0x19, 0xe3, 0x44, 0x43, 0xff, 0x38, 0xfd, 0xf5, 0xd8, 0x1e, 0xef, 0x81, 0x53, 0xeb, 0x8d, 0x2e, 113 | 0xaf, 0xe1, 0xd1, 0x7f, 0x76, 0x5b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xb4, 114 | 0xe4, 0x8b, 0x2b, 0xaf, 0x3e, 0xe7, 0xe2, 0xda, 0x62, 0x69, 0xd5, 0x31, 0x17, 0x4a, 0x14, 0xa7, 0x43, 0xdb, 0xce, 0xc2, 115 | 0x26, 0xe6, 0x3a, 0x8c, 0xbd, 0xce, 0xfa, 0xb5, 0xc4, 0x9e, 0x6f, 0x0f, 0x7f, 0xbe, 0xb8, 0xd6, 0xb6, 0xa4, 0x62, 0xf6, 116 | 0xb0, 0xbc, 0xab, 0x71, 0x4f, 0x9f, 0x99, 0xbc, 0x8a, 0x5e, 0x7b, 0x4f, 0xfc, 0x75, 0x1e, 0x7b, 0xbe, 0x9e, 0x7c, 0x31, 117 | 0x67, 0xcf, 0x70, 0xe1, 0xd1, 0xff, 0xd6, 0x68, 0x75, 0x52, 0x79, 0x33, 0xa0, 0xac, 0x5a, 0xa6, 0xe6, 0x0f, 0x3d, 0xdb, 118 | 0x75, 0x46, 0xea, 0xaf, 0xc4, 0xd5, 0x59, 0xca, 0x3c, 0xd7, 0x79, 0x54, 0xd9, 0xc8, 0xe3, 0xaa, 0xfa, 0x9f, 0x59, 0xe3, 119 | 0xde, 0xfb, 0xff, 0xad, 0xeb, 0x7f, 0xf6, 0xb9, 0xaf, 0xc5, 0x21, 0x6f, 0xe2, 0x3e, 0xe1, 0x23, 0xca, 0x8e, 0xd4, 0xbf, 120 | 0xc7, 0x9d, 0x76, 0xb6, 0x18, 0x6f, 0xbd, 0x9e, 0x5b, 0x8a, 0xff, 0x51, 0xcf, 0xd5, 0xe7, 0xd3, 0xdf, 0xd0, 0xff, 0xa6, 121 | 0xf5, 0x4f, 0x37, 0xf9, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0xa5, 0xf6, 0x3b, 0x55, 122 | 0xab, 0xec, 0x0c, 0x6a, 0x8b, 0xfb, 0x02, 0xdb, 0xae, 0x6f, 0x0d, 0xcf, 0x5f, 0x96, 0xf6, 0xce, 0xec, 0xfb, 0x9d, 0xaf, 123 | 0xde, 0x77, 0x65, 0xaf, 0xe1, 0x3a, 0xbe, 0x40, 0x3d, 0x73, 0xd6, 0xd1, 0x9e, 0xbf, 0xd2, 0x4e, 0xbb, 0xca, 0x0e, 0xd6, 124 | 0x31, 0xeb, 0x1e, 0xd7, 0xf1, 0xff, 0x6d, 0xbd, 0x9e, 0x4f, 0xb0, 0x5e, 0x32, 0x72, 0xdd, 0x4b, 0x1d, 0x5b, 0x56, 0xe8, 125 | 0xdb, 0xb5, 0xd6, 0xbd, 0x6a, 0x25, 0xf9, 0x02, 0xde, 0xa6, 0xbe, 0x11, 0xac, 0xf8, 0xa6, 0x29, 0xbb, 0x1d, 0xdf, 0xcb, 126 | 0x7e, 0xcc, 0x9d, 0xbb, 0x0f, 0xce, 0xa4, 0xf1, 0xc8, 0xfb, 0x7f, 0xdd, 0xdf, 0x1d, 0x79, 0xdf, 0x58, 0x4b, 0xff, 0x33, 127 | 0x5c, 0x43, 0xdd, 0xef, 0x63, 0x43, 0xf4, 0xaf, 0xd7, 0x39, 0xb7, 0xfe, 0xab, 0xcd, 0x0d, 0xb3, 0xbc, 0x3b, 0xba, 0xfe, 128 | 0xd7, 0xf5, 0x7e, 0xcd, 0x68, 0xe7, 0x2c, 0xed, 0x95, 0x71, 0x67, 0x85, 0xac, 0xd1, 0x57, 0xf0, 0xbd, 0xcd, 0x68, 0x27, 129 | 0xbe, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x46, 0xf3, 0x39, 0xcd, 0xce, 0xe1, 0xb7, 0xba, 130 | 0x9b, 0xef, 0xd8, 0xf3, 0xf5, 0x79, 0x00, 0x95, 0x96, 0x1e, 0x9b, 0xc3, 0xaf, 0x7f, 0x75, 0xe5, 0xec, 0x19, 0xfc, 0xea, 131 | 0xab, 0x5c, 0x57, 0x5e, 0x3f, 0x68, 0x8b, 0xff, 0x5b, 0x76, 0x71, 0x6b, 0x33, 0xc0, 0xd1, 0xb9, 0x8d, 0x7a, 0xca, 0xfa, 132 | 0xb2, 0xa2, 0xcc, 0x70, 0x1d, 0x7a, 0x33, 0xcd, 0xa8, 0x65, 0xbd, 0x2e, 0xc0, 0xf5, 0x33, 0xe3, 0xf5, 0xdd, 0xff, 0x57, 133 | 0x5b, 0xcd, 0x8f, 0x2e, 0xd3, 0xf5, 0x3f, 0x4b, 0xfc, 0x47, 0x39, 0xd9, 0xd6, 0x58, 0xcd, 0x5f, 0x4b, 0xff, 0x24, 0xcc, 134 | 0xb9, 0x47, 0x97, 0x79, 0xbe, 0xaf, 0x30, 0x7f, 0x0e, 0x9b, 0xa1, 0xbf, 0x75, 0xc6, 0xff, 0x95, 0xf3, 0x57, 0x5d, 0x25, 135 | 0x8b, 0x25, 0xd9, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xcd, 0xfb, 0x67, 0x15, 136 | 0x3f, 0xda, 0x3a, 0xde, 0x40, 0xc5, 0xfb, 0x12, 0x7d, 0x05, 0x3d, 0x59, 0xfc, 0x4c, 0xf0, 0xb5, 0x8d, 0x76, 0x0e, 0x95, 137 | 0xf3, 0xf8, 0xad, 0xe4, 0x0d, 0xdc, 0xef, 0xbb, 0x1c, 0xee, 0xfb, 0x8c, 0xcf, 0xe2, 0x97, 0x96, 0xd4, 0xff, 0x7c, 0x0e, 138 | 0xb7, 0xed, 0x92, 0x7c, 0x82, 0xbe, 0x5b, 0x71, 0xfd, 0xf6, 0xfc, 0x2b, 0xdc, 0x6a, 0x76, 0xbc, 0x51, 0x65, 0x4a, 0xcd, 139 | 0x99, 0x99, 0x36, 0xcf, 0x93, 0xc7, 0x4d, 0xf3, 0x76, 0x1d, 0xeb, 0x52, 0x9a, 0xe5, 0x7d, 0xba, 0x05, 0xfd, 0xd3, 0xf2, 140 | 0xee, 0x36, 0xf4, 0x47, 0x7f, 0x6b, 0xf0, 0x30, 0x9f, 0x47, 0xff, 0x73, 0x3b, 0xdc, 0xe6, 0x65, 0x1b, 0x36, 0xf9, 0x1b, 141 | 0x0a, 0x3c, 0xeb, 0x5f, 0xe3, 0xd3, 0x8a, 0xf2, 0xfd, 0x2c, 0xf4, 0xbf, 0xee, 0xe7, 0xd4, 0xf3, 0x7d, 0x36, 0x04, 0x00, 142 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 143 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xb2, 144 | 0x0c, 0xa2, 0x3f, 0xfa, 0xdf, 0xb8, 0xfe, 0xff, 0x03 }; 145 | 146 | // Font glyphs rectangles data (on atlas) 147 | static const Rectangle jungleFontRecs[189] = { 148 | { 4, 4, 5 , 12 }, 149 | { 17, 4, 2 , 7 }, 150 | { 27, 4, 5 , 3 }, 151 | { 40, 4, 5 , 5 }, 152 | { 53, 4, 6 , 7 }, 153 | { 67, 4, 7 , 7 }, 154 | { 82, 4, 5 , 7 }, 155 | { 95, 4, 3 , 3 }, 156 | { 106, 4, 4 , 8 }, 157 | { 118, 4, 4 , 8 }, 158 | { 130, 4, 5 , 5 }, 159 | { 143, 4, 5 , 5 }, 160 | { 156, 4, 2 , 3 }, 161 | { 166, 4, 5 , 1 }, 162 | { 179, 4, 2 , 2 }, 163 | { 189, 4, 7 , 7 }, 164 | { 204, 4, 7 , 6 }, 165 | { 219, 4, 6 , 6 }, 166 | { 233, 4, 6 , 6 }, 167 | { 4, 24, 6 , 6 }, 168 | { 18, 24, 6 , 6 }, 169 | { 32, 24, 6 , 6 }, 170 | { 46, 24, 6 , 6 }, 171 | { 60, 24, 6 , 6 }, 172 | { 74, 24, 6 , 6 }, 173 | { 88, 24, 6 , 6 }, 174 | { 102, 24, 2 , 5 }, 175 | { 112, 24, 2 , 6 }, 176 | { 122, 24, 3 , 5 }, 177 | { 133, 24, 5 , 3 }, 178 | { 146, 24, 3 , 5 }, 179 | { 157, 24, 6 , 7 }, 180 | { 171, 24, 7 , 7 }, 181 | { 186, 24, 6 , 7 }, 182 | { 200, 24, 6 , 7 }, 183 | { 214, 24, 6 , 7 }, 184 | { 228, 24, 6 , 7 }, 185 | { 4, 44, 6 , 7 }, 186 | { 18, 44, 6 , 7 }, 187 | { 32, 44, 6 , 7 }, 188 | { 46, 44, 6 , 7 }, 189 | { 60, 44, 6 , 7 }, 190 | { 74, 44, 6 , 7 }, 191 | { 88, 44, 6 , 7 }, 192 | { 102, 44, 6 , 7 }, 193 | { 116, 44, 7 , 7 }, 194 | { 131, 44, 6 , 7 }, 195 | { 145, 44, 6 , 7 }, 196 | { 159, 44, 6 , 7 }, 197 | { 173, 44, 7 , 8 }, 198 | { 188, 44, 6 , 7 }, 199 | { 202, 44, 6 , 7 }, 200 | { 216, 44, 6 , 7 }, 201 | { 230, 44, 6 , 7 }, 202 | { 4, 64, 6 , 7 }, 203 | { 18, 64, 7 , 7 }, 204 | { 33, 64, 6 , 7 }, 205 | { 47, 64, 6 , 7 }, 206 | { 61, 64, 6 , 7 }, 207 | { 75, 64, 4 , 8 }, 208 | { 87, 64, 7 , 7 }, 209 | { 102, 64, 4 , 8 }, 210 | { 114, 64, 4 , 2 }, 211 | { 126, 64, 6 , 1 }, 212 | { 140, 64, 2 , 2 }, 213 | { 150, 64, 6 , 5 }, 214 | { 164, 64, 6 , 7 }, 215 | { 178, 64, 6 , 5 }, 216 | { 192, 64, 6 , 7 }, 217 | { 206, 64, 6 , 5 }, 218 | { 220, 64, 6 , 7 }, 219 | { 234, 64, 6 , 7 }, 220 | { 4, 84, 6 , 7 }, 221 | { 18, 84, 6 , 7 }, 222 | { 32, 84, 5 , 8 }, 223 | { 45, 84, 6 , 7 }, 224 | { 59, 84, 6 , 7 }, 225 | { 73, 84, 7 , 5 }, 226 | { 88, 84, 6 , 5 }, 227 | { 102, 84, 6 , 5 }, 228 | { 116, 84, 6 , 7 }, 229 | { 130, 84, 6 , 7 }, 230 | { 144, 84, 6 , 5 }, 231 | { 158, 84, 6 , 5 }, 232 | { 172, 84, 6 , 6 }, 233 | { 186, 84, 6 , 5 }, 234 | { 200, 84, 6 , 5 }, 235 | { 214, 84, 7 , 5 }, 236 | { 229, 84, 6 , 5 }, 237 | { 4, 104, 6 , 7 }, 238 | { 18, 104, 6 , 5 }, 239 | { 32, 104, 4 , 8 }, 240 | { 44, 104, 2 , 8 }, 241 | { 54, 104, 4 , 8 }, 242 | { 66, 104, 5 , 2 }, 243 | { 79, 104, 2 , 7 }, 244 | { 89, 104, 6 , 6 }, 245 | { 103, 104, 6 , 7 }, 246 | { 117, 104, 6 , 7 }, 247 | { 131, 104, 6 , 7 }, 248 | { 145, 104, 8 , 8 }, 249 | { 161, 104, 6 , 9 }, 250 | { 175, 104, 8 , 8 }, 251 | { 191, 104, 7 , 7 }, 252 | { 206, 104, 8 , 8 }, 253 | { 222, 104, 6 , 5 }, 254 | { 236, 104, 8 , 8 }, 255 | { 4, 124, 7 , 7 }, 256 | { 19, 124, 8 , 8 }, 257 | { 35, 124, 4 , 4 }, 258 | { 47, 124, 8 , 8 }, 259 | { 63, 124, 8 , 8 }, 260 | { 79, 124, 8 , 8 }, 261 | { 95, 124, 8 , 8 }, 262 | { 111, 124, 6 , 7 }, 263 | { 125, 124, 5 , 8 }, 264 | { 138, 124, 3 , 3 }, 265 | { 149, 124, 8 , 8 }, 266 | { 165, 124, 8 , 8 }, 267 | { 181, 124, 8 , 8 }, 268 | { 197, 124, 6 , 5 }, 269 | { 211, 124, 10 , 7 }, 270 | { 229, 124, 10 , 5 }, 271 | { 4, 144, 8 , 8 }, 272 | { 20, 144, 6 , 7 }, 273 | { 34, 144, 6 , 10 }, 274 | { 48, 144, 6 , 10 }, 275 | { 62, 144, 6 , 10 }, 276 | { 76, 144, 6 , 10 }, 277 | { 90, 144, 6 , 10 }, 278 | { 104, 144, 6 , 10 }, 279 | { 118, 144, 10 , 7 }, 280 | { 136, 144, 6 , 9 }, 281 | { 150, 144, 6 , 10 }, 282 | { 164, 144, 6 , 10 }, 283 | { 178, 144, 6 , 10 }, 284 | { 192, 144, 6 , 10 }, 285 | { 206, 144, 6 , 10 }, 286 | { 220, 144, 6 , 10 }, 287 | { 234, 144, 6 , 10 }, 288 | { 4, 164, 6 , 10 }, 289 | { 18, 164, 6 , 7 }, 290 | { 32, 164, 6 , 10 }, 291 | { 46, 164, 6 , 10 }, 292 | { 60, 164, 6 , 10 }, 293 | { 74, 164, 6 , 10 }, 294 | { 88, 164, 6 , 10 }, 295 | { 102, 164, 6 , 10 }, 296 | { 116, 164, 6 , 5 }, 297 | { 130, 164, 6 , 7 }, 298 | { 144, 164, 6 , 10 }, 299 | { 158, 164, 6 , 10 }, 300 | { 172, 164, 6 , 10 }, 301 | { 186, 164, 6 , 10 }, 302 | { 200, 164, 6 , 10 }, 303 | { 214, 164, 6 , 7 }, 304 | { 228, 164, 6 , 7 }, 305 | { 4, 184, 6 , 8 }, 306 | { 18, 184, 6 , 8 }, 307 | { 32, 184, 6 , 8 }, 308 | { 46, 184, 6 , 8 }, 309 | { 60, 184, 6 , 8 }, 310 | { 74, 184, 6 , 8 }, 311 | { 88, 184, 9 , 5 }, 312 | { 105, 184, 6 , 7 }, 313 | { 119, 184, 6 , 8 }, 314 | { 133, 184, 6 , 8 }, 315 | { 147, 184, 6 , 8 }, 316 | { 161, 184, 6 , 8 }, 317 | { 175, 184, 6 , 8 }, 318 | { 189, 184, 6 , 8 }, 319 | { 203, 184, 6 , 8 }, 320 | { 217, 184, 6 , 8 }, 321 | { 231, 184, 6 , 7 }, 322 | { 4, 204, 6 , 8 }, 323 | { 18, 204, 6 , 8 }, 324 | { 32, 204, 6 , 8 }, 325 | { 46, 204, 6 , 8 }, 326 | { 60, 204, 6 , 8 }, 327 | { 74, 204, 6 , 8 }, 328 | { 88, 204, 5 , 5 }, 329 | { 101, 204, 6 , 5 }, 330 | { 115, 204, 6 , 8 }, 331 | { 129, 204, 6 , 8 }, 332 | { 143, 204, 6 , 8 }, 333 | { 157, 204, 6 , 8 }, 334 | { 171, 204, 6 , 10 }, 335 | { 185, 204, 6 , 9 }, 336 | { 199, 204, 6 , 10 }, 337 | }; 338 | 339 | // Font glyphs info data 340 | // NOTE: No glyphs.image data provided 341 | static const GlyphInfo jungleFontGlyphs[189] = { 342 | { 32, 0, 9, 5, { 0 }}, 343 | { 33, 0, 2, 3, { 0 }}, 344 | { 34, 0, 2, 6, { 0 }}, 345 | { 35, 0, 3, 6, { 0 }}, 346 | { 36, 0, 2, 7, { 0 }}, 347 | { 37, 0, 2, 8, { 0 }}, 348 | { 38, 0, 2, 6, { 0 }}, 349 | { 39, 0, 2, 4, { 0 }}, 350 | { 40, 0, 2, 5, { 0 }}, 351 | { 41, 0, 2, 5, { 0 }}, 352 | { 42, 0, 2, 6, { 0 }}, 353 | { 43, 0, 3, 6, { 0 }}, 354 | { 44, 0, 7, 3, { 0 }}, 355 | { 45, 0, 5, 6, { 0 }}, 356 | { 46, 0, 7, 3, { 0 }}, 357 | { 47, 0, 2, 8, { 0 }}, 358 | { 48, 0, 3, 8, { 0 }}, 359 | { 49, 0, 3, 7, { 0 }}, 360 | { 50, 0, 3, 7, { 0 }}, 361 | { 51, 0, 3, 7, { 0 }}, 362 | { 52, 0, 3, 7, { 0 }}, 363 | { 53, 0, 3, 7, { 0 }}, 364 | { 54, 0, 3, 7, { 0 }}, 365 | { 55, 0, 3, 7, { 0 }}, 366 | { 56, 0, 3, 7, { 0 }}, 367 | { 57, 0, 3, 7, { 0 }}, 368 | { 58, 0, 4, 3, { 0 }}, 369 | { 59, 0, 4, 3, { 0 }}, 370 | { 60, 0, 3, 4, { 0 }}, 371 | { 61, 0, 4, 6, { 0 }}, 372 | { 62, 0, 3, 4, { 0 }}, 373 | { 63, 0, 2, 7, { 0 }}, 374 | { 64, 0, 2, 8, { 0 }}, 375 | { 65, 0, 2, 7, { 0 }}, 376 | { 66, 0, 2, 7, { 0 }}, 377 | { 67, 0, 2, 7, { 0 }}, 378 | { 68, 0, 2, 7, { 0 }}, 379 | { 69, 0, 2, 7, { 0 }}, 380 | { 70, 0, 2, 7, { 0 }}, 381 | { 71, 0, 2, 7, { 0 }}, 382 | { 72, 0, 2, 7, { 0 }}, 383 | { 73, 0, 2, 7, { 0 }}, 384 | { 74, 0, 2, 7, { 0 }}, 385 | { 75, 0, 2, 7, { 0 }}, 386 | { 76, 0, 2, 7, { 0 }}, 387 | { 77, 0, 2, 8, { 0 }}, 388 | { 78, 0, 2, 7, { 0 }}, 389 | { 79, 0, 2, 7, { 0 }}, 390 | { 80, 0, 2, 7, { 0 }}, 391 | { 81, 0, 2, 7, { 0 }}, 392 | { 82, 0, 2, 7, { 0 }}, 393 | { 83, 0, 2, 7, { 0 }}, 394 | { 84, 0, 2, 7, { 0 }}, 395 | { 85, 0, 2, 7, { 0 }}, 396 | { 86, 0, 2, 7, { 0 }}, 397 | { 87, 0, 2, 8, { 0 }}, 398 | { 88, 0, 2, 7, { 0 }}, 399 | { 89, 0, 2, 7, { 0 }}, 400 | { 90, 0, 2, 7, { 0 }}, 401 | { 91, 0, 2, 5, { 0 }}, 402 | { 92, 0, 2, 8, { 0 }}, 403 | { 93, 0, 2, 5, { 0 }}, 404 | { 94, 0, -1, 5, { 0 }}, 405 | { 95, 0, 10, 7, { 0 }}, 406 | { 96, 0, -1, 3, { 0 }}, 407 | { 97, 0, 4, 7, { 0 }}, 408 | { 98, 0, 2, 7, { 0 }}, 409 | { 99, 0, 4, 7, { 0 }}, 410 | { 100, 0, 2, 7, { 0 }}, 411 | { 101, 0, 4, 7, { 0 }}, 412 | { 102, 0, 2, 7, { 0 }}, 413 | { 103, 0, 4, 7, { 0 }}, 414 | { 104, 0, 2, 7, { 0 }}, 415 | { 105, 0, 2, 7, { 0 }}, 416 | { 106, 0, 2, 6, { 0 }}, 417 | { 107, 0, 2, 7, { 0 }}, 418 | { 108, 0, 2, 7, { 0 }}, 419 | { 109, 0, 4, 8, { 0 }}, 420 | { 110, 0, 4, 7, { 0 }}, 421 | { 111, 0, 4, 7, { 0 }}, 422 | { 112, 0, 4, 7, { 0 }}, 423 | { 113, 0, 4, 7, { 0 }}, 424 | { 114, 0, 4, 7, { 0 }}, 425 | { 115, 0, 4, 7, { 0 }}, 426 | { 116, 0, 3, 7, { 0 }}, 427 | { 117, 0, 4, 7, { 0 }}, 428 | { 118, 0, 4, 7, { 0 }}, 429 | { 119, 0, 4, 8, { 0 }}, 430 | { 120, 0, 4, 7, { 0 }}, 431 | { 121, 0, 4, 7, { 0 }}, 432 | { 122, 0, 4, 7, { 0 }}, 433 | { 123, 0, 2, 5, { 0 }}, 434 | { 124, 0, 2, 3, { 0 }}, 435 | { 125, 0, 2, 5, { 0 }}, 436 | { 126, 0, -1, 6, { 0 }}, 437 | { 161, 0, 2, 3, { 0 }}, 438 | { 162, 0, 3, 7, { 0 }}, 439 | { 163, 0, 2, 7, { 0 }}, 440 | { 8364, 0, 2, 7, { 0 }}, 441 | { 165, 0, 2, 7, { 0 }}, 442 | { 352, 0, 1, 8, { 0 }}, 443 | { 167, 0, 1, 7, { 0 }}, 444 | { 353, 0, 1, 8, { 0 }}, 445 | { 169, 0, 2, 8, { 0 }}, 446 | { 170, 0, 1, 8, { 0 }}, 447 | { 171, 0, 3, 7, { 0 }}, 448 | { 172, 0, 1, 8, { 0 }}, 449 | { 174, 0, 2, 8, { 0 }}, 450 | { 175, 0, 1, 8, { 0 }}, 451 | { 176, 0, 1, 2, { 0 }}, 452 | { 177, 0, 1, 8, { 0 }}, 453 | { 178, 0, 1, 8, { 0 }}, 454 | { 179, 0, 1, 8, { 0 }}, 455 | { 381, 0, 1, 8, { 0 }}, 456 | { 181, 0, 4, 7, { 0 }}, 457 | { 182, 0, 1, 4, { 0 }}, 458 | { 183, 0, 4, 4, { 0 }}, 459 | { 382, 0, 1, 8, { 0 }}, 460 | { 185, 0, 1, 8, { 0 }}, 461 | { 186, 0, 1, 8, { 0 }}, 462 | { 187, 0, 3, 7, { 0 }}, 463 | { 338, 0, 2, 11, { 0 }}, 464 | { 339, 0, 4, 11, { 0 }}, 465 | { 376, 0, 1, 8, { 0 }}, 466 | { 191, 0, 2, 7, { 0 }}, 467 | { 192, 0, -1, 7, { 0 }}, 468 | { 193, 0, -1, 7, { 0 }}, 469 | { 194, 0, -1, 7, { 0 }}, 470 | { 195, 0, -1, 7, { 0 }}, 471 | { 196, 0, -1, 7, { 0 }}, 472 | { 197, 0, -1, 7, { 0 }}, 473 | { 198, 0, 2, 11, { 0 }}, 474 | { 199, 0, 2, 7, { 0 }}, 475 | { 200, 0, -1, 7, { 0 }}, 476 | { 201, 0, -1, 7, { 0 }}, 477 | { 202, 0, -1, 7, { 0 }}, 478 | { 203, 0, -1, 7, { 0 }}, 479 | { 204, 0, -1, 7, { 0 }}, 480 | { 205, 0, -1, 7, { 0 }}, 481 | { 206, 0, -1, 7, { 0 }}, 482 | { 207, 0, -1, 7, { 0 }}, 483 | { 208, 0, 2, 7, { 0 }}, 484 | { 209, 0, -1, 7, { 0 }}, 485 | { 210, 0, -1, 7, { 0 }}, 486 | { 211, 0, -1, 7, { 0 }}, 487 | { 212, 0, -1, 7, { 0 }}, 488 | { 213, 0, -1, 7, { 0 }}, 489 | { 214, 0, -1, 7, { 0 }}, 490 | { 215, 0, 3, 7, { 0 }}, 491 | { 216, 0, 2, 7, { 0 }}, 492 | { 217, 0, -1, 7, { 0 }}, 493 | { 218, 0, -1, 7, { 0 }}, 494 | { 219, 0, -1, 7, { 0 }}, 495 | { 220, 0, -1, 7, { 0 }}, 496 | { 221, 0, -1, 7, { 0 }}, 497 | { 222, 0, 2, 7, { 0 }}, 498 | { 223, 0, 2, 7, { 0 }}, 499 | { 224, 0, 1, 7, { 0 }}, 500 | { 225, 0, 1, 7, { 0 }}, 501 | { 226, 0, 1, 7, { 0 }}, 502 | { 227, 0, 1, 7, { 0 }}, 503 | { 228, 0, 1, 7, { 0 }}, 504 | { 229, 0, 1, 7, { 0 }}, 505 | { 230, 0, 4, 10, { 0 }}, 506 | { 231, 0, 4, 7, { 0 }}, 507 | { 232, 0, 1, 7, { 0 }}, 508 | { 233, 0, 1, 7, { 0 }}, 509 | { 234, 0, 1, 7, { 0 }}, 510 | { 235, 0, 1, 7, { 0 }}, 511 | { 236, 0, 1, 7, { 0 }}, 512 | { 237, 0, 1, 7, { 0 }}, 513 | { 238, 0, 1, 7, { 0 }}, 514 | { 239, 0, 1, 7, { 0 }}, 515 | { 240, 0, 2, 7, { 0 }}, 516 | { 241, 0, 1, 7, { 0 }}, 517 | { 242, 0, 1, 7, { 0 }}, 518 | { 243, 0, 1, 7, { 0 }}, 519 | { 244, 0, 1, 7, { 0 }}, 520 | { 245, 0, 1, 7, { 0 }}, 521 | { 246, 0, 1, 7, { 0 }}, 522 | { 247, 0, 3, 6, { 0 }}, 523 | { 248, 0, 4, 7, { 0 }}, 524 | { 249, 0, 1, 7, { 0 }}, 525 | { 250, 0, 1, 7, { 0 }}, 526 | { 251, 0, 1, 7, { 0 }}, 527 | { 252, 0, 1, 7, { 0 }}, 528 | { 253, 0, 1, 7, { 0 }}, 529 | { 254, 0, 2, 7, { 0 }}, 530 | { 255, 0, 1, 7, { 0 }}, 531 | }; 532 | 533 | // Style loading function: Jungle 534 | static void GuiLoadStyleJungle(void) 535 | { 536 | // Load style properties provided 537 | // NOTE: Default properties are propagated 538 | for (int i = 0; i < JUNGLE_STYLE_PROPS_COUNT; i++) 539 | { 540 | GuiSetStyle(jungleStyleProps[i].controlId, jungleStyleProps[i].propertyId, jungleStyleProps[i].propertyValue); 541 | } 542 | 543 | // Custom font loading 544 | // NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function 545 | int jungleFontDataSize = 0; 546 | unsigned char *data = DecompressData(jungleFontData, JUNGLE_STYLE_FONT_ATLAS_COMP_SIZE, &jungleFontDataSize); 547 | Image imFont = { data, 256, 256, 1, 2 }; 548 | 549 | Font font = { 0 }; 550 | font.baseSize = 12; 551 | font.glyphCount = 189; 552 | 553 | // Load texture from image 554 | font.texture = LoadTextureFromImage(imFont); 555 | UnloadImage(imFont); // Uncompressed image data can be unloaded from memory 556 | 557 | // Copy char recs data from global fontRecs 558 | // NOTE: Required to avoid issues if trying to free font 559 | font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle)); 560 | memcpy(font.recs, jungleFontRecs, font.glyphCount*sizeof(Rectangle)); 561 | 562 | // Copy font char info data from global fontChars 563 | // NOTE: Required to avoid issues if trying to free font 564 | font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo)); 565 | memcpy(font.glyphs, jungleFontGlyphs, font.glyphCount*sizeof(GlyphInfo)); 566 | 567 | GuiSetFont(font); 568 | 569 | // Setup a white rectangle on the font to be used on shapes drawing, 570 | // it makes possible to draw shapes and text (full UI) in a single draw call 571 | Rectangle fontWhiteRec = { 254, 254, 1, 1 }; 572 | SetShapesTexture(font.texture, fontWhiteRec); 573 | 574 | //----------------------------------------------------------------- 575 | 576 | // TODO: Custom user style setup: Set specific properties here (if required) 577 | // i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT 578 | } 579 | -------------------------------------------------------------------------------- /src/styles/style_terminal.h: -------------------------------------------------------------------------------- 1 | ////////////////////////////////////////////////////////////////////////////////// 2 | // // 3 | // StyleAsCode exporter v2.0 - Style data exported as a values array // 4 | // // 5 | // USAGE: On init call: GuiLoadStyleTerminal(); // 6 | // // 7 | // more info and bugs-report: github.com/raysan5/raygui // 8 | // feedback and support: ray[at]raylibtech.com // 9 | // // 10 | // Copyright (c) 2020-2024 raylib technologies (@raylibtech) // 11 | // // 12 | ////////////////////////////////////////////////////////////////////////////////// 13 | 14 | #define TERMINAL_STYLE_PROPS_COUNT 17 15 | 16 | // Custom style name: Terminal 17 | static const GuiStyleProp terminalStyleProps[TERMINAL_STYLE_PROPS_COUNT] = { 18 | { 0, 0, 0x1c8d00ff }, // DEFAULT_BORDER_COLOR_NORMAL 19 | { 0, 1, 0x161313ff }, // DEFAULT_BASE_COLOR_NORMAL 20 | { 0, 2, 0x38f620ff }, // DEFAULT_TEXT_COLOR_NORMAL 21 | { 0, 3, 0xc3fbc6ff }, // DEFAULT_BORDER_COLOR_FOCUSED 22 | { 0, 4, 0x43bf2eff }, // DEFAULT_BASE_COLOR_FOCUSED 23 | { 0, 5, 0xdcfadcff }, // DEFAULT_TEXT_COLOR_FOCUSED 24 | { 0, 6, 0x1f5b19ff }, // DEFAULT_BORDER_COLOR_PRESSED 25 | { 0, 7, 0x43ff28ff }, // DEFAULT_BASE_COLOR_PRESSED 26 | { 0, 8, 0x1e6f15ff }, // DEFAULT_TEXT_COLOR_PRESSED 27 | { 0, 9, 0x223b22ff }, // DEFAULT_BORDER_COLOR_DISABLED 28 | { 0, 10, 0x182c18ff }, // DEFAULT_BASE_COLOR_DISABLED 29 | { 0, 11, 0x244125ff }, // DEFAULT_TEXT_COLOR_DISABLED 30 | { 0, 16, 0x00000010 }, // DEFAULT_TEXT_SIZE 31 | { 0, 17, 0x00000000 }, // DEFAULT_TEXT_SPACING 32 | { 0, 18, 0xe6fce3ff }, // DEFAULT_LINE_COLOR 33 | { 0, 19, 0x0c1505ff }, // DEFAULT_BACKGROUND_COLOR 34 | { 0, 20, 0x00000018 }, // DEFAULT_TEXT_LINE_SPACING 35 | }; 36 | 37 | // WARNING: This style uses a custom font: "Mecha.ttf" (size: 16, spacing: 0) 38 | 39 | #define TERMINAL_STYLE_FONT_ATLAS_COMP_SIZE 1860 40 | 41 | // Font atlas image pixels data: DEFLATE compressed 42 | static unsigned char terminalFontData[TERMINAL_STYLE_FONT_ATLAS_COMP_SIZE] = { 0xed, 43 | 0xdd, 0x41, 0x92, 0xa4, 0x36, 0x10, 0x05, 0x50, 0xee, 0x7f, 0xe9, 0xf4, 0x62, 0x62, 0x16, 0x76, 0xb8, 0x1b, 0x94, 0x4a, 44 | 0x89, 0x04, 0x9e, 0x5f, 0x78, 0xd3, 0xd5, 0x53, 0x4d, 0x01, 0xbf, 0x24, 0x84, 0x94, 0xc4, 0x01, 0x00, 0x00, 0x00, 0x7c, 45 | 0x5e, 0xfc, 0xef, 0x4f, 0xe2, 0xc7, 0xdf, 0x8c, 0xcb, 0xef, 0xf3, 0xe7, 0xa7, 0xf1, 0xe3, 0x5f, 0xf9, 0xfb, 0xdf, 0x95, 46 | 0x77, 0xba, 0xfe, 0x5b, 0x31, 0xb4, 0x75, 0x73, 0x5b, 0x95, 0x7b, 0x9f, 0xd1, 0xdf, 0xfe, 0x7d, 0x7b, 0xaa, 0xde, 0xad, 47 | 0xf6, 0x95, 0xb1, 0xb3, 0x23, 0xbf, 0xe7, 0xae, 0x6e, 0x61, 0x6c, 0xdf, 0x2b, 0xc7, 0xa6, 0x7d, 0x1c, 0x0d, 0xf2, 0x7f, 48 | 0x7e, 0xcc, 0x46, 0xf2, 0x14, 0xe9, 0xf4, 0x8e, 0x7f, 0x3b, 0xad, 0xfc, 0x0e, 0x1d, 0xdd, 0xc6, 0xdc, 0x3e, 0x89, 0x92, 49 | 0xf7, 0x9f, 0xf9, 0x3b, 0x51, 0xb6, 0xd7, 0x72, 0xff, 0x26, 0x86, 0xdb, 0x88, 0xf9, 0x4f, 0x78, 0xbe, 0x8f, 0x63, 0xd1, 50 | 0x71, 0xef, 0x99, 0xff, 0xfc, 0x51, 0xcb, 0x9f, 0x29, 0x57, 0xb7, 0x3c, 0xd7, 0xa6, 0xaf, 0x3a, 0x27, 0xe5, 0xff, 0xec, 51 | 0x9b, 0xfa, 0xe7, 0x16, 0xb4, 0xa2, 0xdd, 0x90, 0xff, 0x5c, 0x06, 0x62, 0x22, 0x47, 0xbb, 0xf2, 0x5f, 0xdb, 0xd6, 0xc8, 52 | 0xff, 0x33, 0xda, 0xff, 0xb3, 0x6d, 0xff, 0xf7, 0x79, 0x2b, 0xff, 0xd9, 0xa3, 0x90, 0x6d, 0xff, 0x63, 0x7a, 0xfb, 0x3b, 53 | 0xe7, 0x7f, 0x74, 0xdc, 0x43, 0xfe, 0xcf, 0xaf, 0xe8, 0x73, 0xbf, 0x7d, 0xb6, 0x27, 0xe4, 0x7f, 0x5d, 0xfe, 0x7f, 0xeb, 54 | 0xb3, 0x9d, 0xf5, 0xf4, 0x76, 0xe4, 0xff, 0xd8, 0x9e, 0xff, 0xb3, 0xeb, 0xa8, 0xeb, 0xfb, 0x62, 0xc7, 0x08, 0xd4, 0x91, 55 | 0x1c, 0xdb, 0x89, 0xc1, 0x0c, 0xdf, 0xd3, 0x0b, 0x3b, 0xcb, 0x7f, 0x66, 0x4f, 0x66, 0xf2, 0x7f, 0x76, 0x5c, 0x8e, 0x5f, 56 | 0x7a, 0x30, 0xab, 0xf6, 0x7e, 0x45, 0xfe, 0x67, 0x46, 0xe4, 0x9e, 0x9d, 0xff, 0x38, 0xd9, 0x57, 0x31, 0x31, 0xbe, 0xb9, 57 | 0xb3, 0xcf, 0x30, 0xd3, 0x4f, 0xeb, 0x7b, 0x1c, 0xde, 0xd3, 0xff, 0x8f, 0xd6, 0xed, 0xbf, 0xfc, 0xcf, 0x5d, 0xff, 0xbf, 58 | 0x2d, 0xff, 0xb1, 0xfd, 0x58, 0xc5, 0x85, 0x33, 0x56, 0xfe, 0xe7, 0xf6, 0xf0, 0x79, 0x8f, 0x23, 0x16, 0x5d, 0xbf, 0x74, 59 | 0xcd, 0x7f, 0xee, 0xd3, 0x7d, 0xb1, 0xfd, 0x8f, 0x1b, 0x8f, 0x8f, 0xfc, 0xaf, 0xd8, 0x9b, 0x23, 0x77, 0xd8, 0x66, 0xe7, 60 | 0x2f, 0xc8, 0xbf, 0xfc, 0xcb, 0x7f, 0xef, 0xfe, 0x7f, 0x0c, 0x8e, 0xdc, 0xc6, 0xe3, 0xc7, 0xff, 0xe2, 0x52, 0x6f, 0x69, 61 | 0x7e, 0xb6, 0xe0, 0x78, 0x9f, 0x2b, 0xf7, 0x6e, 0xf9, 0xd9, 0x75, 0x4f, 0xb9, 0xfe, 0xdf, 0x39, 0x93, 0xf2, 0x28, 0x99, 62 | 0x87, 0xb2, 0x7e, 0xfe, 0xdf, 0x33, 0xe7, 0x28, 0x77, 0xcf, 0x3f, 0xb0, 0x7a, 0x95, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 63 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x65, 0x0d, 0x4d, 0x94, 0xad, 0x7b, 0x8c, 0x16, 0x95, 0xe7, 0xf7, 0xd4, 0x58, 64 | 0xbf, 0xb6, 0x87, 0xaa, 0xde, 0x71, 0xec, 0x59, 0x02, 0x63, 0xeb, 0x30, 0x73, 0x2b, 0xff, 0x56, 0xaf, 0x6e, 0x9b, 0x59, 65 | 0xdd, 0x58, 0xb3, 0x65, 0x15, 0xb5, 0x2d, 0xee, 0x49, 0xc7, 0xca, 0x75, 0xe2, 0x71, 0x69, 0x75, 0x70, 0x6d, 0x92, 0x56, 66 | 0xaf, 0xd8, 0xce, 0xac, 0x7d, 0xdf, 0x99, 0xff, 0xb1, 0x33, 0x70, 0xfc, 0x73, 0x46, 0x62, 0x35, 0x55, 0x6d, 0x0d, 0x98, 67 | 0x63, 0xe9, 0xb9, 0x19, 0x8b, 0xd6, 0x90, 0x8d, 0xef, 0x83, 0x3d, 0xe9, 0x90, 0xff, 0x2f, 0xe7, 0x3f, 0x57, 0x23, 0x7b, 68 | 0xc7, 0xb3, 0x50, 0xe4, 0x5f, 0xfe, 0xe5, 0xff, 0xad, 0xf9, 0x8f, 0xe2, 0xfe, 0x77, 0xbe, 0x5a, 0x47, 0xcd, 0x95, 0x55, 69 | 0x6d, 0x4a, 0xe4, 0x5f, 0xfe, 0x7f, 0xef, 0x6d, 0xc7, 0xc5, 0x56, 0x6c, 0xa4, 0xc5, 0xdb, 0x59, 0xb3, 0x64, 0x5f, 0x15, 70 | 0xad, 0xd1, 0x6f, 0x93, 0x28, 0x4c, 0xf0, 0x57, 0xf2, 0x9f, 0xaf, 0x7b, 0xbe, 0x67, 0xdc, 0x2b, 0xb3, 0xe5, 0x99, 0xda, 71 | 0x57, 0xf5, 0xf9, 0x3f, 0x7b, 0x1e, 0x42, 0xe6, 0xfb, 0xe9, 0x5b, 0xf9, 0x1f, 0xfd, 0x6c, 0xf2, 0x7f, 0x6c, 0x7e, 0xb6, 72 | 0xcc, 0xfd, 0x35, 0x16, 0x23, 0xd9, 0xd2, 0x57, 0x6d, 0x75, 0xa4, 0x46, 0xdb, 0xaa, 0x7e, 0x9e, 0xab, 0xd2, 0xf8, 0xde, 73 | 0xfc, 0x47, 0xc1, 0x7d, 0xae, 0xb9, 0x56, 0x52, 0xfe, 0xe5, 0xff, 0x98, 0xac, 0xc0, 0xdb, 0x3d, 0xff, 0x2b, 0xae, 0xbf, 74 | 0x2b, 0x9f, 0xe6, 0xfa, 0xcc, 0xf6, 0xff, 0x59, 0xf7, 0xff, 0xbe, 0x92, 0xff, 0xb3, 0x63, 0x79, 0x77, 0xfe, 0x3b, 0xd5, 75 | 0x4c, 0xcd, 0x8c, 0x30, 0xce, 0xfc, 0x9b, 0x8e, 0xf9, 0xdf, 0x35, 0x9f, 0x47, 0xfe, 0x77, 0xe5, 0xff, 0xe7, 0xa7, 0x8d, 76 | 0xcb, 0x7f, 0xaf, 0xfc, 0xaf, 0xeb, 0xff, 0x3f, 0x3b, 0xff, 0xeb, 0x7a, 0x5f, 0xab, 0xfb, 0x73, 0xb5, 0x5b, 0x9e, 0x99, 77 | 0x01, 0xf7, 0xdb, 0xfc, 0xbb, 0x48, 0x57, 0x6d, 0xaf, 0x98, 0x87, 0x37, 0x33, 0x3b, 0x68, 0xf7, 0x95, 0x41, 0xf5, 0xbf, 78 | 0xa9, 0x1f, 0xb3, 0xe8, 0x9b, 0x7f, 0x78, 0x46, 0xfe, 0xbf, 0xb0, 0xaf, 0x71, 0x3c, 0xee, 0x69, 0x59, 0x57, 0xfe, 0x3e, 79 | 0xce, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xd3, 0x2a, 0xac, 0xaa, 0xba, 0x8d, 0x3b, 80 | 0xab, 0x65, 0xe4, 0xd6, 0xf9, 0xc5, 0xe5, 0xba, 0x2e, 0x99, 0x55, 0xe4, 0x23, 0x6b, 0xf9, 0x6a, 0xd6, 0x34, 0xe6, 0xcf, 81 | 0x81, 0x48, 0xad, 0x96, 0x3b, 0x3f, 0x53, 0x32, 0x35, 0xec, 0xd7, 0xcd, 0xb6, 0xff, 0xbd, 0x7e, 0x43, 0xbe, 0x92, 0xc8, 82 | 0xaa, 0xf5, 0x05, 0x75, 0xf5, 0x9f, 0x8e, 0x82, 0xd5, 0x8a, 0xd9, 0x35, 0xf4, 0xf7, 0xe6, 0x7f, 0x74, 0xf5, 0xdb, 0xf5, 83 | 0x9f, 0x55, 0xd4, 0x5b, 0x89, 0xc4, 0xca, 0xbc, 0xca, 0xfc, 0x57, 0x9c, 0xe3, 0x51, 0xf6, 0xbe, 0xb1, 0xb8, 0x4e, 0xc1, 84 | 0x95, 0x56, 0xe2, 0xd9, 0x6b, 0xa2, 0xe2, 0xd5, 0xf9, 0xaf, 0xad, 0x96, 0x5b, 0xff, 0x9d, 0x90, 0xaf, 0x4f, 0x70, 0x5f, 85 | 0xfe, 0xff, 0x6e, 0x57, 0x75, 0xfe, 0x33, 0xef, 0x5b, 0x53, 0xd9, 0x6a, 0x2e, 0xff, 0x3d, 0x56, 0xf6, 0xc5, 0xf2, 0x9e, 86 | 0x47, 0x26, 0xff, 0x63, 0xfd, 0xb6, 0x15, 0xf9, 0xcf, 0x57, 0xe6, 0x39, 0x36, 0x65, 0xfd, 0x28, 0x4e, 0xf9, 0xfa, 0xfc, 87 | 0xd7, 0x9f, 0x69, 0xf1, 0x9f, 0xff, 0xbb, 0xac, 0xb6, 0x7d, 0x4b, 0xfe, 0x73, 0xd5, 0x69, 0x66, 0xf3, 0x9f, 0xbd, 0xe2, 88 | 0xbd, 0xbb, 0xfd, 0x5f, 0x73, 0x4d, 0xb0, 0x3e, 0xff, 0x91, 0xaa, 0x0c, 0xde, 0x27, 0xff, 0xb1, 0x20, 0xb9, 0xf2, 0x9f, 89 | 0x6d, 0x03, 0xdf, 0x90, 0xff, 0xea, 0xe7, 0x7c, 0x74, 0xc8, 0x7f, 0x6e, 0xc4, 0x2b, 0x4a, 0x73, 0x1a, 0xed, 0xdb, 0xff, 90 | 0x63, 0xdb, 0xf8, 0x5f, 0xff, 0xfc, 0x47, 0x49, 0xbf, 0xf0, 0xce, 0xfc, 0xd7, 0x57, 0xcb, 0xcd, 0x56, 0x0d, 0xbc, 0x3e, 91 | 0xd6, 0xd7, 0xa7, 0xfd, 0xaf, 0xbf, 0x1e, 0x5e, 0xd1, 0xfe, 0x1f, 0x0b, 0xee, 0x52, 0xac, 0xbf, 0xaa, 0xee, 0x9f, 0xff, 92 | 0xaa, 0xeb, 0xc2, 0xcc, 0x73, 0x93, 0x46, 0xef, 0xff, 0xc5, 0xe9, 0x59, 0x3c, 0x7a, 0xe7, 0x68, 0x3c, 0x4f, 0x31, 0xf8, 93 | 0xf4, 0xa2, 0xfe, 0xd7, 0xff, 0x95, 0xed, 0xff, 0x9a, 0x51, 0xef, 0xae, 0xa3, 0xe9, 0xd7, 0x9e, 0x2f, 0xde, 0x63, 0x8b, 94 | 0xf3, 0x4f, 0xdc, 0x8a, 0xed, 0x57, 0x56, 0x7d, 0x8e, 0xf1, 0xfc, 0x67, 0x5f, 0x93, 0xff, 0x8a, 0x8a, 0xd3, 0xf5, 0xed, 95 | 0xe1, 0xf7, 0xe6, 0xbc, 0xcc, 0xdc, 0x75, 0xef, 0xb1, 0xb5, 0xd5, 0xe7, 0xc5, 0x3b, 0xf2, 0x5f, 0xf7, 0xd9, 0x63, 0xc9, 96 | 0xb7, 0x4a, 0xa6, 0x96, 0x77, 0x2c, 0x9f, 0x0f, 0x23, 0xff, 0xcf, 0xcd, 0x7f, 0xdc, 0x70, 0xcf, 0xf0, 0x58, 0x3c, 0x1e, 97 | 0xdd, 0x61, 0x0f, 0xef, 0xcd, 0x3f, 0xfd, 0xce, 0x88, 0xee, 0xf9, 0x5f, 0x3f, 0x2f, 0xf4, 0xcb, 0xed, 0x81, 0x2a, 0xf9, 98 | 0x3c, 0xf1, 0x5a, 0x56, 0xfe, 0x73, 0xfd, 0x96, 0xd9, 0xf9, 0xff, 0x20, 0xff, 0xdf, 0xdd, 0xeb, 0xd0, 0x7f, 0x76, 0x03, 99 | 0xf2, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfb, 0x67, 0xbb, 0x45, 0x6a, 0x7d, 0x5b, 0x0c, 0x56, 100 | 0x32, 0x88, 0x74, 0xa5, 0xf8, 0x6c, 0x7d, 0x8c, 0x18, 0x5c, 0xf7, 0x35, 0x5f, 0x37, 0xf8, 0xfa, 0xf3, 0x15, 0x66, 0xd6, 101 | 0x0f, 0xae, 0x3f, 0x8e, 0x75, 0x15, 0xd6, 0xeb, 0x8f, 0x52, 0xe6, 0xef, 0x47, 0x79, 0xed, 0xb5, 0xfe, 0x99, 0x99, 0xdf, 102 | 0xcf, 0x99, 0x95, 0xbe, 0xb5, 0x67, 0xd4, 0xb5, 0x63, 0x5b, 0xb7, 0xba, 0x33, 0x26, 0x92, 0x3e, 0x3e, 0x4f, 0xfb, 0xf7, 103 | 0xaa, 0x9f, 0x5d, 0x8f, 0x63, 0x2e, 0x4b, 0x51, 0xba, 0x06, 0x37, 0xf7, 0xd7, 0x9f, 0xb6, 0xaf, 0xaf, 0x57, 0x01, 0xd8, 104 | 0xdd, 0x5f, 0xc8, 0x3f, 0x35, 0x28, 0x6e, 0x9f, 0x8b, 0xbf, 0xae, 0xa2, 0x4e, 0x5d, 0xad, 0xe2, 0xbb, 0x8f, 0xe3, 0x71, 105 | 0xfa, 0x0c, 0x93, 0x68, 0xb8, 0xbe, 0xe5, 0xac, 0xff, 0x18, 0x2d, 0xf7, 0x75, 0x5c, 0xee, 0x23, 0xe6, 0xf3, 0x9f, 0x7f, 106 | 0x3e, 0x53, 0x14, 0x57, 0xe6, 0xcd, 0x57, 0xc7, 0xac, 0xde, 0xfa, 0x7c, 0xfb, 0x9f, 0xb9, 0x52, 0x88, 0xe5, 0x9f, 0xaa, 107 | 0xf6, 0x3b, 0x39, 0x4e, 0x6a, 0xb9, 0xae, 0x3e, 0x2b, 0x56, 0xbc, 0x12, 0x1b, 0xce, 0xad, 0xdc, 0xf5, 0xde, 0xb5, 0x33, 108 | 0x64, 0x26, 0xff, 0x7d, 0x8f, 0xcd, 0xd1, 0xe6, 0x95, 0xdd, 0xf9, 0x7f, 0xee, 0x2b, 0xef, 0xc9, 0x7f, 0x9f, 0xb3, 0xef, 109 | 0xb7, 0xcf, 0x33, 0xfb, 0xac, 0xc2, 0x0e, 0x47, 0xe0, 0xac, 0x4e, 0xec, 0x5b, 0xf3, 0x1f, 0x3f, 0x8e, 0x0c, 0xf6, 0xff, 110 | 0x4e, 0xfe, 0xb9, 0x5f, 0xf0, 0xb4, 0xfc, 0x57, 0xb6, 0xcb, 0x15, 0x6d, 0xf9, 0xde, 0x6b, 0x66, 0xed, 0xbf, 0xf6, 0xff, 111 | 0xdb, 0xf9, 0xbf, 0xff, 0x2a, 0x6c, 0x6f, 0x66, 0xfa, 0xed, 0xb3, 0x3e, 0xf9, 0x1f, 0x19, 0xf3, 0x92, 0xff, 0xb7, 0xe7, 112 | 0xff, 0x09, 0xdf, 0x4d, 0xb3, 0xf7, 0xff, 0xde, 0x31, 0xfe, 0x57, 0xf5, 0x8a, 0xf6, 0x7f, 0x6e, 0x8c, 0xfd, 0xee, 0x6d, 113 | 0xcb, 0x1f, 0xf3, 0xb7, 0x1c, 0x85, 0xd1, 0x3e, 0x80, 0xfe, 0xbf, 0xfc, 0xbf, 0x27, 0xff, 0x47, 0x7a, 0xf6, 0xc1, 0xb3, 114 | 0xae, 0x33, 0x46, 0x8e, 0xc7, 0x73, 0xf2, 0x5f, 0x79, 0xc7, 0xee, 0x29, 0xe3, 0x7f, 0x4f, 0xfb, 0x66, 0x78, 0x63, 0xfe, 115 | 0xef, 0xbd, 0xd7, 0xda, 0x63, 0xe6, 0xef, 0x33, 0xfb, 0x32, 0x4f, 0xce, 0xff, 0xb3, 0xfb, 0x64, 0xc7, 0x6d, 0x57, 0x85, 116 | 0x51, 0xb8, 0xa7, 0x79, 0x46, 0xfe, 0x63, 0x53, 0xfe, 0x47, 0xc6, 0x06, 0xde, 0x9d, 0xff, 0xf1, 0xd6, 0x2a, 0x6e, 0x1f, 117 | 0x63, 0x96, 0xff, 0xbb, 0xf3, 0xbf, 0x7f, 0xeb, 0x77, 0xf5, 0xc4, 0x62, 0x49, 0xd2, 0xc7, 0x8f, 0xc9, 0x13, 0xfb, 0xa4, 118 | 0x3b, 0xb7, 0x4d, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xef, 0xcc, 0x00, 0x1e, 0x7b, 0xb5, 119 | 0x43, 0x05, 0xfd, 0x23, 0x5d, 0x6d, 0xbd, 0xee, 0xf3, 0x1e, 0x89, 0xaa, 0xee, 0x99, 0x6d, 0xe8, 0x5c, 0x41, 0xdf, 0xac, 120 | 0xdb, 0xb7, 0x7e, 0x03, 0xf4, 0xae, 0xa0, 0x7f, 0x5e, 0xe5, 0x63, 0xfd, 0xe7, 0xad, 0x9c, 0x3f, 0xdf, 0xbb, 0x82, 0x7e, 121 | 0xbf, 0xb5, 0xab, 0xf4, 0xfb, 0x26, 0xd9, 0x59, 0x41, 0x7f, 0xbc, 0xbf, 0x71, 0x6c, 0xdc, 0xae, 0x6c, 0x35, 0x83, 0xae, 122 | 0x15, 0xf4, 0xbb, 0xaf, 0x05, 0xe3, 0xfe, 0xb5, 0x59, 0x63, 0xcf, 0xb4, 0xa8, 0xaa, 0xa0, 0xf1, 0xb4, 0x0a, 0xfa, 0x67, 123 | 0x19, 0x7b, 0x52, 0x9d, 0x6c, 0xf9, 0xb7, 0xfe, 0xf7, 0xbe, 0xfc, 0xf7, 0xad, 0x93, 0x91, 0xad, 0x52, 0xd3, 0xbb, 0x82, 124 | 0xa6, 0xfc, 0xcb, 0xbf, 0xfc, 0xaf, 0xaa, 0x91, 0x20, 0xff, 0x3c, 0x3d, 0xff, 0x3b, 0x2b, 0xe8, 0xa8, 0xa0, 0xb9, 0xbb, 125 | 0x22, 0xd0, 0x21, 0xff, 0xae, 0xff, 0x1f, 0xf1, 0x04, 0x3d, 0xf9, 0x5f, 0xf3, 0x8a, 0xfc, 0x7f, 0xfd, 0xde, 0x9f, 0x0a, 126 | 0xda, 0x2b, 0xf3, 0x1f, 0x4d, 0xc7, 0xff, 0xf6, 0xdf, 0xf1, 0xe1, 0x89, 0xf9, 0xd7, 0xff, 0xcf, 0xe7, 0xe2, 0xfe, 0x0a, 127 | 0x9a, 0xf9, 0x34, 0xcb, 0xbf, 0xfe, 0x7f, 0xc5, 0xfc, 0x9f, 0x9a, 0xb6, 0x47, 0x05, 0xcd, 0xb9, 0x6d, 0x93, 0x7f, 0xd0, 128 | 0x2b, 0xd4, 0xff, 0x07, 0xbd, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 129 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 130 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 131 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 132 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 133 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 134 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 135 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xf9, 0xf3, 0x9f, 0xfd, 0x00, 0xf2, 0x0f, 0x7c, 0x2e, 0xff, 0xff, 0x00 }; 136 | 137 | // Font glyphs rectangles data (on atlas) 138 | static const Rectangle terminalFontRecs[189] = { 139 | { 4, 4, 4 , 16 }, 140 | { 16, 4, 1 , 11 }, 141 | { 25, 4, 3 , 3 }, 142 | { 36, 4, 6 , 11 }, 143 | { 50, 4, 5 , 11 }, 144 | { 63, 4, 5 , 11 }, 145 | { 76, 4, 5 , 11 }, 146 | { 89, 4, 1 , 2 }, 147 | { 98, 4, 2 , 13 }, 148 | { 108, 4, 2 , 13 }, 149 | { 118, 4, 3 , 3 }, 150 | { 129, 4, 5 , 5 }, 151 | { 142, 4, 1 , 3 }, 152 | { 151, 4, 5 , 1 }, 153 | { 164, 4, 1 , 1 }, 154 | { 173, 4, 6 , 12 }, 155 | { 187, 4, 5 , 11 }, 156 | { 200, 4, 2 , 11 }, 157 | { 210, 4, 5 , 11 }, 158 | { 223, 4, 5 , 11 }, 159 | { 236, 4, 5 , 11 }, 160 | { 249, 4, 5 , 11 }, 161 | { 262, 4, 5 , 11 }, 162 | { 275, 4, 5 , 11 }, 163 | { 288, 4, 5 , 11 }, 164 | { 301, 4, 5 , 11 }, 165 | { 314, 4, 1 , 8 }, 166 | { 323, 4, 1 , 10 }, 167 | { 332, 4, 4 , 5 }, 168 | { 344, 4, 5 , 3 }, 169 | { 357, 4, 4 , 5 }, 170 | { 369, 4, 5 , 11 }, 171 | { 382, 4, 11 , 11 }, 172 | { 401, 4, 5 , 11 }, 173 | { 414, 4, 5 , 11 }, 174 | { 427, 4, 5 , 11 }, 175 | { 440, 4, 5 , 11 }, 176 | { 453, 4, 5 , 11 }, 177 | { 466, 4, 5 , 11 }, 178 | { 479, 4, 5 , 11 }, 179 | { 492, 4, 5 , 11 }, 180 | { 4, 28, 1 , 11 }, 181 | { 13, 28, 5 , 11 }, 182 | { 26, 28, 5 , 11 }, 183 | { 39, 28, 5 , 11 }, 184 | { 52, 28, 7 , 11 }, 185 | { 67, 28, 5 , 11 }, 186 | { 80, 28, 5 , 11 }, 187 | { 93, 28, 5 , 11 }, 188 | { 106, 28, 5 , 13 }, 189 | { 119, 28, 5 , 11 }, 190 | { 132, 28, 5 , 11 }, 191 | { 145, 28, 5 , 11 }, 192 | { 158, 28, 5 , 11 }, 193 | { 171, 28, 5 , 11 }, 194 | { 184, 28, 7 , 11 }, 195 | { 199, 28, 5 , 11 }, 196 | { 212, 28, 5 , 11 }, 197 | { 225, 28, 5 , 11 }, 198 | { 238, 28, 2 , 13 }, 199 | { 248, 28, 6 , 12 }, 200 | { 262, 28, 2 , 13 }, 201 | { 272, 28, 5 , 4 }, 202 | { 285, 28, 5 , 1 }, 203 | { 298, 28, 2 , 2 }, 204 | { 308, 28, 5 , 8 }, 205 | { 321, 28, 5 , 11 }, 206 | { 334, 28, 5 , 8 }, 207 | { 347, 28, 5 , 11 }, 208 | { 360, 28, 5 , 8 }, 209 | { 373, 28, 4 , 11 }, 210 | { 385, 28, 5 , 10 }, 211 | { 398, 28, 5 , 11 }, 212 | { 411, 28, 1 , 11 }, 213 | { 420, 28, 1 , 13 }, 214 | { 429, 28, 5 , 11 }, 215 | { 442, 28, 1 , 11 }, 216 | { 451, 28, 7 , 8 }, 217 | { 466, 28, 5 , 8 }, 218 | { 479, 28, 5 , 8 }, 219 | { 492, 28, 5 , 10 }, 220 | { 4, 52, 5 , 10 }, 221 | { 17, 52, 4 , 8 }, 222 | { 29, 52, 5 , 8 }, 223 | { 42, 52, 3 , 11 }, 224 | { 53, 52, 5 , 8 }, 225 | { 66, 52, 5 , 8 }, 226 | { 79, 52, 7 , 8 }, 227 | { 94, 52, 5 , 8 }, 228 | { 107, 52, 5 , 10 }, 229 | { 120, 52, 5 , 8 }, 230 | { 133, 52, 3 , 13 }, 231 | { 144, 52, 1 , 15 }, 232 | { 153, 52, 3 , 13 }, 233 | { 164, 52, 5 , 3 }, 234 | { 177, 52, 1 , 11 }, 235 | { 186, 52, 5 , 11 }, 236 | { 199, 52, 5 , 10 }, 237 | { 212, 52, 5 , 10 }, 238 | { 225, 52, 5 , 10 }, 239 | { 238, 52, 0 , 0 }, 240 | { 246, 52, 0 , 0 }, 241 | { 254, 52, 0 , 0 }, 242 | { 262, 52, 7 , 8 }, 243 | { 277, 52, 0 , 0 }, 244 | { 285, 52, 0 , 0 }, 245 | { 293, 52, 5 , 3 }, 246 | { 306, 52, 7 , 8 }, 247 | { 321, 52, 5 , 1 }, 248 | { 334, 52, 3 , 3 }, 249 | { 345, 52, 5 , 7 }, 250 | { 358, 52, 0 , 0 }, 251 | { 366, 52, 0 , 0 }, 252 | { 374, 52, 0 , 0 }, 253 | { 382, 52, 5 , 10 }, 254 | { 395, 52, 7 , 11 }, 255 | { 410, 52, 1 , 1 }, 256 | { 419, 52, 0 , 0 }, 257 | { 427, 52, 0 , 0 }, 258 | { 435, 52, 0 , 0 }, 259 | { 443, 52, 0 , 0 }, 260 | { 451, 52, 0 , 0 }, 261 | { 459, 52, 0 , 0 }, 262 | { 467, 52, 5 , 13 }, 263 | { 480, 52, 5 , 11 }, 264 | { 493, 52, 5 , 14 }, 265 | { 4, 76, 5 , 14 }, 266 | { 17, 76, 5 , 14 }, 267 | { 30, 76, 5 , 14 }, 268 | { 43, 76, 5 , 13 }, 269 | { 56, 76, 5 , 13 }, 270 | { 69, 76, 9 , 11 }, 271 | { 86, 76, 5 , 13 }, 272 | { 99, 76, 5 , 14 }, 273 | { 112, 76, 5 , 14 }, 274 | { 125, 76, 5 , 14 }, 275 | { 138, 76, 5 , 13 }, 276 | { 151, 76, 2 , 14 }, 277 | { 161, 76, 2 , 14 }, 278 | { 171, 76, 3 , 14 }, 279 | { 182, 76, 3 , 13 }, 280 | { 193, 76, 5 , 11 }, 281 | { 206, 76, 5 , 14 }, 282 | { 219, 76, 5 , 14 }, 283 | { 232, 76, 5 , 14 }, 284 | { 245, 76, 5 , 14 }, 285 | { 258, 76, 5 , 14 }, 286 | { 271, 76, 5 , 13 }, 287 | { 284, 76, 5 , 5 }, 288 | { 297, 76, 5 , 13 }, 289 | { 310, 76, 5 , 14 }, 290 | { 323, 76, 5 , 14 }, 291 | { 336, 76, 5 , 14 }, 292 | { 349, 76, 5 , 13 }, 293 | { 362, 76, 5 , 14 }, 294 | { 375, 76, 5 , 11 }, 295 | { 388, 76, 5 , 11 }, 296 | { 401, 76, 5 , 11 }, 297 | { 414, 76, 5 , 11 }, 298 | { 427, 76, 5 , 11 }, 299 | { 440, 76, 5 , 11 }, 300 | { 453, 76, 5 , 10 }, 301 | { 466, 76, 5 , 10 }, 302 | { 479, 76, 9 , 8 }, 303 | { 496, 76, 5 , 10 }, 304 | { 4, 100, 5 , 11 }, 305 | { 17, 100, 5 , 11 }, 306 | { 30, 100, 5 , 11 }, 307 | { 43, 100, 5 , 10 }, 308 | { 56, 100, 2 , 11 }, 309 | { 66, 100, 2 , 11 }, 310 | { 76, 100, 3 , 11 }, 311 | { 87, 100, 3 , 10 }, 312 | { 98, 100, 5 , 11 }, 313 | { 111, 100, 5 , 11 }, 314 | { 124, 100, 5 , 11 }, 315 | { 137, 100, 5 , 11 }, 316 | { 150, 100, 5 , 11 }, 317 | { 163, 100, 5 , 11 }, 318 | { 176, 100, 5 , 10 }, 319 | { 189, 100, 5 , 5 }, 320 | { 202, 100, 5 , 10 }, 321 | { 215, 100, 5 , 11 }, 322 | { 228, 100, 5 , 11 }, 323 | { 241, 100, 5 , 11 }, 324 | { 254, 100, 5 , 10 }, 325 | { 267, 100, 5 , 13 }, 326 | { 280, 100, 4 , 8 }, 327 | { 292, 100, 5 , 12 }, 328 | }; 329 | 330 | // Font glyphs info data 331 | // NOTE: No glyphs.image data provided 332 | static const GlyphInfo terminalFontGlyphs[189] = { 333 | { 32, 0, 14, 4, { 0 }}, 334 | { 33, 1, 3, 3, { 0 }}, 335 | { 34, 1, 3, 5, { 0 }}, 336 | { 35, 1, 3, 8, { 0 }}, 337 | { 36, 1, 3, 7, { 0 }}, 338 | { 37, 1, 3, 7, { 0 }}, 339 | { 38, 1, 3, 7, { 0 }}, 340 | { 39, 1, 3, 3, { 0 }}, 341 | { 40, 1, 2, 4, { 0 }}, 342 | { 41, 1, 2, 4, { 0 }}, 343 | { 42, 1, 3, 5, { 0 }}, 344 | { 43, 1, 7, 7, { 0 }}, 345 | { 44, 1, 13, 3, { 0 }}, 346 | { 45, 1, 9, 7, { 0 }}, 347 | { 46, 1, 13, 3, { 0 }}, 348 | { 47, 1, 2, 8, { 0 }}, 349 | { 48, 1, 3, 7, { 0 }}, 350 | { 49, 1, 3, 4, { 0 }}, 351 | { 50, 1, 3, 7, { 0 }}, 352 | { 51, 1, 3, 7, { 0 }}, 353 | { 52, 1, 3, 7, { 0 }}, 354 | { 53, 1, 3, 7, { 0 }}, 355 | { 54, 1, 3, 7, { 0 }}, 356 | { 55, 1, 3, 7, { 0 }}, 357 | { 56, 1, 3, 7, { 0 }}, 358 | { 57, 1, 3, 7, { 0 }}, 359 | { 58, 1, 6, 3, { 0 }}, 360 | { 59, 1, 6, 3, { 0 }}, 361 | { 60, 1, 7, 6, { 0 }}, 362 | { 61, 1, 8, 7, { 0 }}, 363 | { 62, 1, 7, 6, { 0 }}, 364 | { 63, 1, 3, 7, { 0 }}, 365 | { 64, 2, 3, 15, { 0 }}, 366 | { 65, 1, 3, 7, { 0 }}, 367 | { 66, 1, 3, 7, { 0 }}, 368 | { 67, 1, 3, 7, { 0 }}, 369 | { 68, 1, 3, 7, { 0 }}, 370 | { 69, 1, 3, 7, { 0 }}, 371 | { 70, 1, 3, 7, { 0 }}, 372 | { 71, 1, 3, 7, { 0 }}, 373 | { 72, 1, 3, 7, { 0 }}, 374 | { 73, 1, 3, 3, { 0 }}, 375 | { 74, 1, 3, 7, { 0 }}, 376 | { 75, 1, 3, 7, { 0 }}, 377 | { 76, 1, 3, 7, { 0 }}, 378 | { 77, 1, 3, 9, { 0 }}, 379 | { 78, 1, 3, 7, { 0 }}, 380 | { 79, 1, 3, 7, { 0 }}, 381 | { 80, 1, 3, 7, { 0 }}, 382 | { 81, 1, 3, 7, { 0 }}, 383 | { 82, 1, 3, 7, { 0 }}, 384 | { 83, 1, 3, 7, { 0 }}, 385 | { 84, 1, 3, 7, { 0 }}, 386 | { 85, 1, 3, 7, { 0 }}, 387 | { 86, 1, 3, 7, { 0 }}, 388 | { 87, 1, 3, 9, { 0 }}, 389 | { 88, 1, 3, 7, { 0 }}, 390 | { 89, 1, 3, 7, { 0 }}, 391 | { 90, 1, 3, 7, { 0 }}, 392 | { 91, 1, 2, 4, { 0 }}, 393 | { 92, 1, 2, 8, { 0 }}, 394 | { 93, 1, 2, 4, { 0 }}, 395 | { 94, 1, 3, 7, { 0 }}, 396 | { 95, 1, 15, 7, { 0 }}, 397 | { 96, 1, 0, 4, { 0 }}, 398 | { 97, 1, 6, 7, { 0 }}, 399 | { 98, 1, 3, 7, { 0 }}, 400 | { 99, 1, 6, 7, { 0 }}, 401 | { 100, 1, 3, 7, { 0 }}, 402 | { 101, 1, 6, 7, { 0 }}, 403 | { 102, 1, 3, 6, { 0 }}, 404 | { 103, 1, 6, 7, { 0 }}, 405 | { 104, 1, 3, 7, { 0 }}, 406 | { 105, 1, 3, 3, { 0 }}, 407 | { 106, 1, 3, 3, { 0 }}, 408 | { 107, 1, 3, 7, { 0 }}, 409 | { 108, 1, 3, 3, { 0 }}, 410 | { 109, 1, 6, 9, { 0 }}, 411 | { 110, 1, 6, 7, { 0 }}, 412 | { 111, 1, 6, 7, { 0 }}, 413 | { 112, 1, 6, 7, { 0 }}, 414 | { 113, 1, 6, 7, { 0 }}, 415 | { 114, 1, 6, 6, { 0 }}, 416 | { 115, 1, 6, 7, { 0 }}, 417 | { 116, 1, 3, 5, { 0 }}, 418 | { 117, 1, 6, 7, { 0 }}, 419 | { 118, 1, 6, 7, { 0 }}, 420 | { 119, 1, 6, 9, { 0 }}, 421 | { 120, 1, 6, 7, { 0 }}, 422 | { 121, 1, 6, 7, { 0 }}, 423 | { 122, 1, 6, 7, { 0 }}, 424 | { 123, 1, 2, 5, { 0 }}, 425 | { 124, 1, 1, 3, { 0 }}, 426 | { 125, 1, 2, 5, { 0 }}, 427 | { 126, 1, 8, 7, { 0 }}, 428 | { 161, 1, 3, 3, { 0 }}, 429 | { 162, 1, 3, 7, { 0 }}, 430 | { 163, 1, 3, 7, { 0 }}, 431 | { 8364, 1, 3, 7, { 0 }}, 432 | { 165, 1, 3, 7, { 0 }}, 433 | { 352, 0, 14, 4, { 0 }}, 434 | { 167, 0, 14, 4, { 0 }}, 435 | { 353, 0, 14, 4, { 0 }}, 436 | { 169, 1, 3, 9, { 0 }}, 437 | { 170, 0, 14, 4, { 0 }}, 438 | { 171, 0, 14, 4, { 0 }}, 439 | { 172, 1, 8, 7, { 0 }}, 440 | { 174, 1, 3, 9, { 0 }}, 441 | { 175, 1, 1, 7, { 0 }}, 442 | { 176, 1, 0, 5, { 0 }}, 443 | { 177, 1, 7, 7, { 0 }}, 444 | { 178, 0, 14, 4, { 0 }}, 445 | { 179, 0, 14, 4, { 0 }}, 446 | { 381, 0, 14, 4, { 0 }}, 447 | { 181, 1, 6, 7, { 0 }}, 448 | { 182, 1, 3, 9, { 0 }}, 449 | { 183, 1, 8, 3, { 0 }}, 450 | { 382, 0, 14, 4, { 0 }}, 451 | { 185, 0, 14, 4, { 0 }}, 452 | { 186, 0, 14, 4, { 0 }}, 453 | { 187, 0, 14, 4, { 0 }}, 454 | { 338, 0, 14, 4, { 0 }}, 455 | { 339, 0, 14, 4, { 0 }}, 456 | { 376, 1, 1, 7, { 0 }}, 457 | { 191, 1, 3, 7, { 0 }}, 458 | { 192, 1, 0, 7, { 0 }}, 459 | { 193, 1, 0, 7, { 0 }}, 460 | { 194, 1, 0, 7, { 0 }}, 461 | { 195, 1, 0, 7, { 0 }}, 462 | { 196, 1, 1, 7, { 0 }}, 463 | { 197, 1, 1, 7, { 0 }}, 464 | { 198, 1, 3, 11, { 0 }}, 465 | { 199, 1, 3, 7, { 0 }}, 466 | { 200, 1, 0, 7, { 0 }}, 467 | { 201, 1, 0, 7, { 0 }}, 468 | { 202, 1, 0, 7, { 0 }}, 469 | { 203, 1, 1, 7, { 0 }}, 470 | { 204, 0, 0, 3, { 0 }}, 471 | { 205, 1, 0, 3, { 0 }}, 472 | { 206, 0, 0, 3, { 0 }}, 473 | { 207, 0, 1, 3, { 0 }}, 474 | { 208, 1, 3, 7, { 0 }}, 475 | { 209, 1, 0, 7, { 0 }}, 476 | { 210, 1, 0, 7, { 0 }}, 477 | { 211, 1, 0, 7, { 0 }}, 478 | { 212, 1, 0, 7, { 0 }}, 479 | { 213, 1, 0, 7, { 0 }}, 480 | { 214, 1, 1, 7, { 0 }}, 481 | { 215, 1, 7, 7, { 0 }}, 482 | { 216, 1, 2, 7, { 0 }}, 483 | { 217, 1, 0, 7, { 0 }}, 484 | { 218, 1, 0, 7, { 0 }}, 485 | { 219, 1, 0, 7, { 0 }}, 486 | { 220, 1, 1, 7, { 0 }}, 487 | { 221, 1, 0, 7, { 0 }}, 488 | { 222, 1, 3, 7, { 0 }}, 489 | { 223, 1, 3, 7, { 0 }}, 490 | { 224, 1, 3, 7, { 0 }}, 491 | { 225, 1, 3, 7, { 0 }}, 492 | { 226, 1, 3, 7, { 0 }}, 493 | { 227, 1, 3, 7, { 0 }}, 494 | { 228, 1, 4, 7, { 0 }}, 495 | { 229, 1, 4, 7, { 0 }}, 496 | { 230, 1, 6, 11, { 0 }}, 497 | { 231, 1, 6, 7, { 0 }}, 498 | { 232, 1, 3, 7, { 0 }}, 499 | { 233, 1, 3, 7, { 0 }}, 500 | { 234, 1, 3, 7, { 0 }}, 501 | { 235, 1, 4, 7, { 0 }}, 502 | { 236, 0, 3, 3, { 0 }}, 503 | { 237, 1, 3, 3, { 0 }}, 504 | { 238, 0, 3, 3, { 0 }}, 505 | { 239, 0, 4, 3, { 0 }}, 506 | { 240, 1, 3, 7, { 0 }}, 507 | { 241, 1, 3, 7, { 0 }}, 508 | { 242, 1, 3, 7, { 0 }}, 509 | { 243, 1, 3, 7, { 0 }}, 510 | { 244, 1, 3, 7, { 0 }}, 511 | { 245, 1, 3, 7, { 0 }}, 512 | { 246, 1, 4, 7, { 0 }}, 513 | { 247, 1, 7, 7, { 0 }}, 514 | { 248, 1, 5, 7, { 0 }}, 515 | { 249, 1, 3, 7, { 0 }}, 516 | { 250, 1, 3, 7, { 0 }}, 517 | { 251, 1, 3, 7, { 0 }}, 518 | { 252, 1, 4, 7, { 0 }}, 519 | { 253, 1, 3, 7, { 0 }}, 520 | { 254, 1, 6, 6, { 0 }}, 521 | { 255, 1, 4, 7, { 0 }}, 522 | }; 523 | 524 | // Style loading function: Terminal 525 | static void GuiLoadStyleTerminal(void) 526 | { 527 | // Load style properties provided 528 | // NOTE: Default properties are propagated 529 | for (int i = 0; i < TERMINAL_STYLE_PROPS_COUNT; i++) 530 | { 531 | GuiSetStyle(terminalStyleProps[i].controlId, terminalStyleProps[i].propertyId, terminalStyleProps[i].propertyValue); 532 | } 533 | 534 | // Custom font loading 535 | // NOTE: Compressed font image data (DEFLATE), it requires DecompressData() function 536 | int terminalFontDataSize = 0; 537 | unsigned char *data = DecompressData(terminalFontData, TERMINAL_STYLE_FONT_ATLAS_COMP_SIZE, &terminalFontDataSize); 538 | Image imFont = { data, 512, 256, 1, 2 }; 539 | 540 | Font font = { 0 }; 541 | font.baseSize = 16; 542 | font.glyphCount = 189; 543 | 544 | // Load texture from image 545 | font.texture = LoadTextureFromImage(imFont); 546 | UnloadImage(imFont); // Uncompressed image data can be unloaded from memory 547 | 548 | // Copy char recs data from global fontRecs 549 | // NOTE: Required to avoid issues if trying to free font 550 | font.recs = (Rectangle *)RAYGUI_MALLOC(font.glyphCount*sizeof(Rectangle)); 551 | memcpy(font.recs, terminalFontRecs, font.glyphCount*sizeof(Rectangle)); 552 | 553 | // Copy font char info data from global fontChars 554 | // NOTE: Required to avoid issues if trying to free font 555 | font.glyphs = (GlyphInfo *)RAYGUI_MALLOC(font.glyphCount*sizeof(GlyphInfo)); 556 | memcpy(font.glyphs, terminalFontGlyphs, font.glyphCount*sizeof(GlyphInfo)); 557 | 558 | GuiSetFont(font); 559 | 560 | // Setup a white rectangle on the font to be used on shapes drawing, 561 | // it makes possible to draw shapes and text (full UI) in a single draw call 562 | Rectangle fontWhiteRec = { 510, 254, 1, 1 }; 563 | SetShapesTexture(font.texture, fontWhiteRec); 564 | 565 | //----------------------------------------------------------------- 566 | 567 | // TODO: Custom user style setup: Set specific properties here (if required) 568 | // i.e. Controls specific BORDER_WIDTH, TEXT_PADDING, TEXT_ALIGNMENT 569 | } 570 | --------------------------------------------------------------------------------