├── .gitignore ├── LICENSE ├── README.md ├── examples ├── asset_browser │ ├── asset_browser.cpp │ ├── asset_browser.h │ ├── imgui_utils.cpp │ ├── imgui_utils.h │ ├── item_view.h │ ├── item_views.cpp │ └── main.cpp ├── docking_example.cpp ├── editor.cpp ├── imgui_style_example.cpp └── simple.cpp ├── extras ├── FA6FreeSolidFontData.h ├── FontAwsome_LICENSE.txt └── IconsFontAwesome6.h ├── imgui_impl_raylib.h ├── premake-VisualStudio.bat ├── premake-mingw.bat ├── premake5 ├── premake5.exe ├── premake5.lua ├── premake5.osx ├── raylib_premake5.lua ├── resources ├── driusstraight.ttf └── parrots.png ├── rlImGui.cpp ├── rlImGui.h └── rlImGuiColors.h /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # NuGet Symbol Packages 188 | *.snupkg 189 | # The packages folder can be ignored because of Package Restore 190 | **/[Pp]ackages/* 191 | # except build/, which is used as an MSBuild target. 192 | !**/[Pp]ackages/build/ 193 | # Uncomment if necessary however generally it will be regenerated when needed 194 | #!**/[Pp]ackages/repositories.config 195 | # NuGet v3's project.json files produces more ignorable files 196 | *.nuget.props 197 | *.nuget.targets 198 | 199 | # Microsoft Azure Build Output 200 | csx/ 201 | *.build.csdef 202 | 203 | # Microsoft Azure Emulator 204 | ecf/ 205 | rcf/ 206 | 207 | # Windows Store app package directories and files 208 | AppPackages/ 209 | BundleArtifacts/ 210 | Package.StoreAssociation.xml 211 | _pkginfo.txt 212 | *.appx 213 | *.appxbundle 214 | *.appxupload 215 | 216 | # Visual Studio cache files 217 | # files ending in .cache can be ignored 218 | *.[Cc]ache 219 | # but keep track of directories ending in .cache 220 | !?*.[Cc]ache/ 221 | 222 | # Others 223 | ClientBin/ 224 | ~$* 225 | *~ 226 | *.dbmdl 227 | *.dbproj.schemaview 228 | *.jfm 229 | *.pfx 230 | *.publishsettings 231 | orleans.codegen.cs 232 | 233 | # Including strong name files can present a security risk 234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 235 | #*.snk 236 | 237 | # Since there are multiple workflows, uncomment next line to ignore bower_components 238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 239 | #bower_components/ 240 | 241 | # RIA/Silverlight projects 242 | Generated_Code/ 243 | 244 | # Backup & report files from converting an old project file 245 | # to a newer Visual Studio version. Backup files are not needed, 246 | # because we have git ;-) 247 | _UpgradeReport_Files/ 248 | Backup*/ 249 | UpgradeLog*.XML 250 | UpgradeLog*.htm 251 | ServiceFabricBackup/ 252 | *.rptproj.bak 253 | 254 | # SQL Server files 255 | *.mdf 256 | *.ldf 257 | *.ndf 258 | 259 | # Business Intelligence projects 260 | *.rdl.data 261 | *.bim.layout 262 | *.bim_*.settings 263 | *.rptproj.rsuser 264 | *- [Bb]ackup.rdl 265 | *- [Bb]ackup ([0-9]).rdl 266 | *- [Bb]ackup ([0-9][0-9]).rdl 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | 278 | # Visual Studio 6 build log 279 | *.plg 280 | 281 | # Visual Studio 6 workspace options file 282 | *.opt 283 | 284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 285 | *.vbw 286 | 287 | # Visual Studio LightSwitch build output 288 | **/*.HTMLClient/GeneratedArtifacts 289 | **/*.DesktopClient/GeneratedArtifacts 290 | **/*.DesktopClient/ModelManifest.xml 291 | **/*.Server/GeneratedArtifacts 292 | **/*.Server/ModelManifest.xml 293 | _Pvt_Extensions 294 | 295 | # Paket dependency manager 296 | .paket/paket.exe 297 | paket-files/ 298 | 299 | # FAKE - F# Make 300 | .fake/ 301 | 302 | # CodeRush personal settings 303 | .cr/personal 304 | 305 | # Python Tools for Visual Studio (PTVS) 306 | __pycache__/ 307 | *.pyc 308 | 309 | # Cake - Uncomment if you are using it 310 | # tools/** 311 | # !tools/packages.config 312 | 313 | # Tabs Studio 314 | *.tss 315 | 316 | # Telerik's JustMock configuration file 317 | *.jmconfig 318 | 319 | # BizTalk build output 320 | *.btp.cs 321 | *.btm.cs 322 | *.odx.cs 323 | *.xsd.cs 324 | 325 | # OpenCover UI analysis results 326 | OpenCover/ 327 | 328 | # Azure Stream Analytics local run output 329 | ASALocalRun/ 330 | 331 | # MSBuild Binary and Structured Log 332 | *.binlog 333 | 334 | # NVidia Nsight GPU debugger configuration file 335 | *.nvuser 336 | 337 | # MFractors (Xamarin productivity tool) working folder 338 | .mfractor/ 339 | 340 | # Local History for Visual Studio 341 | .localhistory/ 342 | 343 | # BeatPulse healthcheck temp database 344 | healthchecksdb 345 | 346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 347 | MigrationBackup/ 348 | 349 | # Ionide (cross platform F# VS Code tools) working folder 350 | .ionide/ 351 | /build/ImGuiSample.vcxproj 352 | /build/ImGuiSample.vcxproj.filters 353 | /build/editor.vcxproj 354 | /build/editor.vcxproj.filters 355 | /build/imgui.ini 356 | /build/raylib.vcxproj 357 | /build/raylib.vcxproj.filters 358 | /build/rlImGui.vcxproj 359 | /build/rlImGui.vcxproj.filters 360 | /build/simple.vcxproj 361 | /build/simple.vcxproj.filters 362 | /examples/editor.vcxproj 363 | /examples/editor.vcxproj.filters 364 | /examples/simple.vcxproj 365 | /examples/simple.vcxproj.filters 366 | /premake5.exe 367 | /rlImGui.sln 368 | *.ini 369 | raylib-master 370 | _build 371 | Catalog 372 | imgui-master 373 | build 374 | Makefile 375 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020-2021 Jeffery Myers 2 | 3 | This software is provided "as-is", without any express or implied warranty. In no event 4 | will the authors be held liable for any damages arising from the use of this software. 5 | 6 | Permission is granted to anyone to use this software for any purpose, including commercial 7 | applications, and to alter it and redistribute it freely, subject to the following restrictions: 8 | 9 | 1. The origin of this software must not be misrepresented; you must not claim that you 10 | wrote the original software. If you use this software in a product, an acknowledgment 11 | in the product documentation would be appreciated but is not required. 12 | 13 | 2. Altered source versions must be plainly marked as such, and must not be misrepresented 14 | as being the original software. 15 | 16 | 3. This notice may not be removed or altered from any source distribution. 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # rlImGui 2 | 3 | A Raylib integration with DearImGui 4 | 5 | rlImgui provides a backend for [Dear ImGui](https://github.com/ocornut/imgui) using [Raylib](https://www.raylib.com/). 6 | 7 | # Building 8 | the rlImGui repository itself is setup to use premake to generate a static library and examples for Visual Studio 2019. Premake can also be used to generate makefiles for linux. rlImGui can be used as a static library, or by direclty including the files into your game project. 9 | Preamke is not required to use rlImGui, it is simply just what is used for development. 10 | 11 | ## Other Systems 12 | rlImGui has no dependencies other than raylib and imgui. If you want to use any other build system, you can simply just build rlImGui and ImGui into a library, or even add the files direclty to your game if it can use C++ code. There are no specific build requirements for rlImgui itself. 13 | 14 | # Setup 15 | 16 | Using rlImGui in your code is very easy. Once you have included the library, or source files for rlImGui and ImGui in your project, simply do the following. 17 | ``` 18 | #include "rlImGui.h" // include the API header 19 | 20 | // before your game loop 21 | rlImGuiSetup(true); // sets up ImGui with ether a dark or light default theme 22 | 23 | // inside your game loop, between BeginDrawing() and EndDrawing() 24 | rlImGuiBegin(); // starts the ImGui content mode. Make all ImGui calls after this 25 | 26 | rlImGuiEnd(); // ends the ImGui content mode. Make all ImGui calls before this 27 | 28 | // after your game loop is over, before you close the window 29 | 30 | rlImGuiShutdown(); // cleans up ImGui 31 | ``` 32 | 33 | # Examples 34 | There are two example programs in the examples folder. 35 | 36 | ## Simple 37 | This is the most simple use of ImGui in raylib, it just shows the ImGui demo window. 38 | ![image](https://user-images.githubusercontent.com/322174/136596910-da1b60ae-4a39-48f0-ae84-f568bc396870.png) 39 | 40 | 41 | ## Editor 42 | This is a more complex example of ImGui, showing how to use raylib 2d and 3d cameras to draw into ImGui windows using render textures. 43 | ![image](https://user-images.githubusercontent.com/322174/136596949-033ffe0a-2476-4030-988a-5bf5b6e2ade7.png) 44 | 45 | # Extras 46 | 47 | ## rlImGuiColors.h 48 | This file has a converter to change Raylib colors into ImGui Colors 49 | 50 | ## Font Awesome Icons 51 | Support for Font Awesome 6 https://fontawesome.com/ is built into rlImGui and enabled by default. You can simply 52 | #include "extras/IconsFontAwesome6.h" 53 | To use the ICON_FA macros for any icon in the free set. 54 | 55 | If you wish to disable font awesome support you can #define NO_FONT_AWESOME 56 | 57 | 58 | # Images 59 | Raylib textures can be drawn in ImGui using the following functions 60 | ``` 61 | void rlImGuiImage(const Texture *image); 62 | void rlImGuiImageSize(const Texture *image, int width, int height); 63 | void rlImGuiImageSizeV(const Texture* image, Vector2 size); 64 | void rlImGuiImageRect(const Texture* image, int destWidth, int destHeight, Rectangle sourceRect); 65 | void rlImGuiImageRenderTexture(const RenderTexture* image); 66 | void rlImGuiImageRenderTextureFit(const RenderTexture* image, bool center); 67 | 68 | bool rlImGuiImageButton(const Texture *image); 69 | bool rlImGuiImageButtonSize(const char* name, const Texture* image, Vector2 size); 70 | ``` 71 | 72 | # C vs C++ 73 | ImGui is a C++ library, so rlImGui uses C++ to create the backend and integration with Raylib. 74 | The rlImGui.h API only uses features that are common to C and C++, so rlImGui can be built as a static library and used by pure C code. Users of ImGui who wish to use pure C must use an ImGui wrapper, such as [https://github.com/cimgui/cimgui]. 75 | 76 | # Low level API 77 | If you would like more controll over the ImGui Backend, you can use the low level API that is found in imgui_impl_raylib.h. This is API follows the patterns of other ImGui backends and does not do automatic context management. An example of it's use can be found in imgui_style_example.cpp 78 | 79 | # Note for High DPI displays 80 | If your system does a display scale, like 125% or %150, you will write code to handle that. 81 | If you set the FLAG_WINDOW_HIGHDPI flag in raylib, that will create a frame buffer that is automatically scaled to fit your display. This makes it easy to define all your code in a 'normal' resolution, but has the disadvantage of making it harder to define other bufers in the native resolution. The most common side effect of this is that fonts look blury, because they are rendered at the non scaled resolution. 82 | rlImGui on non-apple platforms will scale the default fonts by the display scale to compensate, but if you have your own fonts, you will need to do the same. 83 | Note that apple platforms have several driver bugs with high DPI (retena displays), and rlImGui tries to compensate for them, but your results may vary or be inconsistent with other platforms. 84 | 85 | The better option is to not use FLAG_WINDOW_HIGHDPI and let raylib run in the native resolution. You should then scale all your input values by GetWindowDPIScale. 86 | 87 | Some examples show how to scale hardcoded values by the display scale to compensate and make your GUI look good in any scale. 88 | -------------------------------------------------------------------------------- /examples/asset_browser/asset_browser.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - asset browser 4 | * 5 | * This is a more complex ImGui Integration 6 | * It shows how to build windows on top of 2d and 3d views using a render texture 7 | * 8 | * Copyright (c) 2024 Jeffery Myers 9 | * 10 | ********************************************************************************************/ 11 | 12 | #define _CRT_NONSTDC_NO_WARNINGS 13 | 14 | #include "asset_browser.h" 15 | #include "imgui_utils.h" 16 | #include "imgui.h" 17 | #include "imgui_internal.h" 18 | #include "raylib.h" 19 | #include "extras/IconsFontAwesome6.h" 20 | 21 | #include 22 | 23 | 24 | AssetBrowserPanel::AssetBrowserPanel() 25 | { 26 | AssetRoot = GetWorkingDirectory(); 27 | RebuildFolderTree(); 28 | SetCurrentFolder(&FolderRoot); 29 | 30 | CurrentView = &ListView; 31 | } 32 | 33 | void AssetBrowserPanel::Show() 34 | { 35 | ShowHeader(); 36 | 37 | ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_SizingStretchSame | ImGuiTableFlags_Borders; 38 | 39 | if (ImGui::BeginTable("AssetBrowserTab", 2, flags, ImGui::GetContentRegionAvail())) 40 | { 41 | ImGui::TableSetupColumn("FolderView", ImGuiTableColumnFlags_None, 0.25f); 42 | ImGui::TableSetupColumn("AssetView", ImGuiTableColumnFlags_None, 0.75f); 43 | ImGui::TableNextRow(); 44 | ImGui::TableNextColumn(); 45 | 46 | if (ImGui::BeginChild("FolderList", ImGui::GetContentRegionAvail(),ImGuiChildFlags_None, ImGuiWindowFlags_None)) 47 | { 48 | ShowFolderTree(); 49 | ImGui::EndChild(); 50 | } 51 | 52 | ImGui::TableNextColumn(); 53 | ShowFilePane(); 54 | ImGui::EndTable(); 55 | } 56 | } 57 | 58 | void AssetBrowserPanel::RebuildFolderTree() 59 | { 60 | FolderRoot.Children.clear(); 61 | 62 | FolderRoot.FullPath = AssetRoot; 63 | FolderRoot.Name = GetFileNameWithoutExt(AssetRoot.c_str()); 64 | FolderRoot.Parent = nullptr; 65 | FolderRoot.Icon = ICON_FA_SERVER; 66 | FolderRoot.ForceOpenNextFrame = true; 67 | FolderRoot.PopulateChildren(); 68 | } 69 | 70 | void AssetBrowserPanel::SetCurrentFolder(FolderInfo* folder) 71 | { 72 | if (CurrentFolderContents.Folder == folder) 73 | return; 74 | 75 | CurrentFolderContents.Folder = folder; 76 | CurrentFolderContents.Files.clear(); 77 | 78 | if (folder == nullptr) 79 | return; 80 | 81 | FolderInfo* openFolder = folder; 82 | while (openFolder != nullptr) 83 | { 84 | openFolder->ForceOpenNextFrame = true; 85 | openFolder = openFolder->Parent; 86 | } 87 | 88 | auto files = LoadDirectoryFiles(CurrentFolderContents.Folder->FullPath.c_str()); 89 | 90 | for (unsigned int i = 0; i < files.count; i++) 91 | { 92 | if (DirectoryExists(files.paths[i])) 93 | continue; 94 | 95 | const char* name = GetFileName(files.paths[i]); 96 | if (!name || *name == '.') 97 | continue; 98 | 99 | FileInfo& file = CurrentFolderContents.Files.emplace_back(); 100 | file.FullPath = files.paths[i]; 101 | file.Name = name; 102 | file.Icon = GetFileIcon(name); 103 | } 104 | 105 | UnloadDirectoryFiles(files); 106 | } 107 | 108 | void AssetBrowserPanel::FolderInfo::PopulateChildren() 109 | { 110 | constexpr Color folderColor = { 255,255,145,255 }; 111 | 112 | auto folders = LoadDirectoryFiles(FullPath.c_str()); 113 | 114 | for (unsigned int i = 0; i < folders.count; i++) 115 | { 116 | if (DirectoryExists(folders.paths[i])) 117 | { 118 | const char* name = GetFileNameWithoutExt(folders.paths[i]); 119 | if (!name || *name == '.') 120 | continue; 121 | 122 | FolderInfo& child = Children.emplace_back(); 123 | child.FullPath = folders.paths[i]; 124 | child.Name = name; 125 | child.Parent = this; 126 | child.Tint = folderColor; 127 | child.Icon = ICON_FA_FOLDER; 128 | child.PopulateChildren(); 129 | } 130 | } 131 | UnloadDirectoryFiles(folders); 132 | } 133 | 134 | bool AssetBrowserPanel::ShowFolderTreeNode(FolderInfo& info) 135 | { 136 | ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick; 137 | if (info.Children.empty()) 138 | flags |= ImGuiTreeNodeFlags_Leaf; 139 | 140 | if (CurrentFolderContents.Folder == &info) 141 | flags |= ImGuiTreeNodeFlags_Selected; 142 | 143 | if (info.ForceOpenNextFrame) 144 | { 145 | ImGui::SetNextItemOpen(true); 146 | } 147 | 148 | bool open = ImGui::TreeNodeEx(info.Name.c_str(), flags, "%s %s", info.Icon.c_str(), info.Name.c_str()); 149 | 150 | if (info.ForceOpenNextFrame && CurrentFolderContents.Folder == &info) 151 | ImGui::ScrollToItem(ImGuiScrollFlags_KeepVisibleCenterY); 152 | 153 | info.ForceOpenNextFrame = false; 154 | if (ImGui::IsItemClicked()) 155 | SetCurrentFolder(&info); 156 | 157 | if (open) 158 | { 159 | for (auto& node : info.Children) 160 | ShowFolderTreeNode(node); 161 | 162 | ImGui::TreePop(); 163 | } 164 | 165 | return CurrentFolderContents.Folder == &info; 166 | } 167 | 168 | void AssetBrowserPanel::ShowHeader() 169 | { 170 | ImGui::PushStyleVar(ImGuiStyleVar_ChildBorderSize, 1); 171 | if (ImGui::BeginChild("Header", ImVec2{ ImGui::GetContentRegionAvail().x, ImGui::GetFrameHeight() })) 172 | { 173 | ImGui::Text("%s Root", ICON_FA_FOLDER_OPEN); 174 | ImGui::SameLine(); 175 | ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x * 0.33f); 176 | ImGui::InputText("###Path", (char*)(CurrentFolderContents.Folder->FullPath.c_str() + AssetRoot.size()), CurrentFolderContents.Folder->FullPath.size(), ImGuiInputTextFlags_ReadOnly); 177 | 178 | ImGui::EndChild(); 179 | } 180 | ImGui::PopStyleVar(); 181 | } 182 | 183 | void AssetBrowserPanel::ShowFolderTree() 184 | { 185 | ShowFolderTreeNode(FolderRoot); 186 | } 187 | 188 | void AssetBrowserPanel::ShowFilePane() 189 | { 190 | if (ImGui::BeginChild("FileList", ImGui::GetContentRegionAvail(), ImGuiChildFlags_None, ImGuiWindowFlags_None)) 191 | { 192 | if (CurrentView) 193 | { 194 | auto *item = CurrentView->Show(CurrentFolderContents); 195 | if (item) 196 | { 197 | AssetItemInfo* assetItem = static_cast(item); 198 | if (!assetItem->IsFile()) 199 | SetCurrentFolder(static_cast(item)); 200 | } 201 | } 202 | ImGui::EndChild(); 203 | } 204 | } 205 | 206 | ViewableItem* AssetBrowserPanel::AssetContainer::Reset() 207 | { 208 | FileItr = Files.begin(); 209 | FolderItr = Folder->Children.begin(); 210 | if (FileItr != Files.end()) 211 | return &(*FileItr); 212 | if (FolderItr != Folder->Children.end()) 213 | return &(*FolderItr); 214 | 215 | return nullptr; 216 | } 217 | 218 | size_t AssetBrowserPanel::AssetContainer::Count() 219 | { 220 | return Files.size() + Folder->Children.size(); 221 | } 222 | 223 | ViewableItem* AssetBrowserPanel::AssetContainer::Next() 224 | { 225 | if (FileItr != Files.end()) 226 | { 227 | FileItr++; 228 | if (FileItr != Files.end()) 229 | return &(*FileItr); 230 | else 231 | { 232 | if (FolderItr != Folder->Children.end()) 233 | return &(*FolderItr); 234 | else 235 | return nullptr; 236 | } 237 | } 238 | 239 | if (FolderItr != Folder->Children.end()) 240 | { 241 | FolderItr++; 242 | if (FolderItr != Folder->Children.end()) 243 | return &(*FolderItr); 244 | } 245 | 246 | return nullptr; 247 | } 248 | 249 | const char* AssetBrowserPanel::GetFileIcon(const char* filename) 250 | { 251 | const char* e = GetFileExtension(filename); 252 | 253 | if (e == nullptr) 254 | return ICON_FA_FILE; 255 | 256 | std::string ext = e; 257 | 258 | std::transform(ext.begin(), ext.end(), ext.begin(), 259 | [](unsigned char c) { return std::tolower(c); } // correct 260 | ); 261 | 262 | if (!ext.empty()) 263 | { 264 | if (ext==".png") 265 | return ICON_FA_FILE_IMAGE; 266 | 267 | if (ext==".wav" || ext==".mp3" || ext==".oog") 268 | return ICON_FA_FILE_AUDIO; 269 | 270 | if (ext==".ttf" || ext==".otf" || ext==".fnt") 271 | return ICON_FA_FONT; 272 | 273 | if (ext==".txt" || ext==".md") 274 | return ICON_FA_FILE_LINES; 275 | 276 | if (ext==".lua" || ext==".c" || ext==".h" || ext==".cpp") 277 | return ICON_FA_FILE_CODE; 278 | } 279 | return ICON_FA_FILE; 280 | } -------------------------------------------------------------------------------- /examples/asset_browser/asset_browser.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - asset browser 4 | * 5 | * This is a more complex ImGui Integration 6 | * It shows how to build windows on top of 2d and 3d views using a render texture 7 | * 8 | * Copyright (c) 2024 Jeffery Myers 9 | * 10 | ********************************************************************************************/ 11 | 12 | #pragma once 13 | 14 | #include "item_view.h" 15 | #include "raylib.h" 16 | 17 | #include 18 | #include 19 | #include 20 | 21 | class AssetBrowserPanel 22 | { 23 | public: 24 | AssetBrowserPanel(); 25 | 26 | void Show(); 27 | 28 | private: 29 | std::string AssetRoot; 30 | 31 | class AssetItemInfo : public ViewableItem 32 | { 33 | protected: 34 | bool File = false; 35 | 36 | public: 37 | AssetItemInfo(bool file) : File(file) {} 38 | bool IsFile() const { return File; } 39 | }; 40 | 41 | class FileInfo : public AssetItemInfo 42 | { 43 | public: 44 | FileInfo() : AssetItemInfo(true) {} 45 | 46 | std::string FullPath; 47 | }; 48 | 49 | class FolderInfo : public AssetItemInfo 50 | { 51 | public: 52 | FolderInfo() : AssetItemInfo(false) {} 53 | 54 | std::string FullPath; 55 | FolderInfo* Parent = nullptr; 56 | std::list Children; 57 | 58 | bool ForceOpenNextFrame = false; 59 | 60 | void PopulateChildren(); 61 | }; 62 | 63 | FolderInfo FolderRoot; 64 | 65 | class AssetContainer : public ViewableItemContainer 66 | { 67 | public: 68 | ViewableItem* Reset() override; 69 | size_t Count() override; 70 | ViewableItem* Next() override; 71 | 72 | FolderInfo* Folder = nullptr; 73 | std::vector Files; 74 | 75 | std::vector::iterator FileItr; 76 | std::list::iterator FolderItr; 77 | }; 78 | 79 | AssetContainer CurrentFolderContents; 80 | 81 | ListItemView ListView; 82 | 83 | ItemView* CurrentView = nullptr; 84 | 85 | void RebuildFolderTree(); 86 | 87 | void SetCurrentFolder(FolderInfo* folder); 88 | 89 | bool ShowFolderTreeNode(FolderInfo& folder); 90 | void ShowFolderTree(); 91 | void ShowFilePane(); 92 | void ShowHeader(); 93 | 94 | const char* GetFileIcon(const char* filename); 95 | }; -------------------------------------------------------------------------------- /examples/asset_browser/imgui_utils.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - asset browser 4 | * 5 | * This is a more complex ImGui Integration 6 | * It shows how to build windows on top of 2d and 3d views using a render texture 7 | * 8 | * Copyright (c) 2024 Jeffery Myers 9 | * 10 | ********************************************************************************************/ 11 | 12 | #include "imgui_utils.h" 13 | 14 | #include "imgui.h" 15 | #include "imgui_internal.h" 16 | 17 | namespace ImGuiUtils 18 | { 19 | 20 | bool IsSpace(char aCharacter) 21 | { 22 | // all space characters are values 32 or less (space is 32) 23 | // so we can convert them to a bitmask and use a single condition 24 | const int mask = (1 << (' ' - 1)) | (1 << ('\f' - 1)) | (1 << ('\n' - 1)) | (1 << ('\r' - 1)) | (1 << ('\t' - 1)) | (1 << ('\v' - 1)); 25 | return (mask & (1 << ((aCharacter && aCharacter <= 32) * (aCharacter - 1)))) != 0; 26 | } 27 | 28 | //------------------------------------------------------------------------------------------------- 29 | // Todo: Add support for soft-hyphens when using word boundaries? 30 | //------------------------------------------------------------------------------------------------- 31 | void TextWithEllipsis(const char* string, float aMaxWidth, bool useWordBoundaries, float aSpacing) 32 | { 33 | char const* partStart = string; 34 | char const* partEnd = string; 35 | 36 | ImWchar elipsisChar = ImGui::GetFont()->EllipsisChar; 37 | char elipsisText[8]; 38 | ImTextStrToUtf8(elipsisText, sizeof(elipsisText), &elipsisChar, (&elipsisChar) + 1); 39 | 40 | if (aSpacing < 0.0f) aSpacing = ImGui::GetStyle().ItemSpacing.x; 41 | 42 | float const ellipsisWidth = ImGui::CalcTextSize(elipsisText).x + aSpacing; 43 | float width = 0; 44 | bool addElipsis = false; 45 | 46 | while (*partStart != 0 ) 47 | { 48 | // Add space to next segment 49 | while (IsSpace(*partEnd)) 50 | partEnd++; 51 | 52 | if (useWordBoundaries) 53 | { 54 | // get next 'word' by looking for space after non-space 55 | while (*partEnd != 0 && !IsSpace(*partEnd)) 56 | ++partEnd; 57 | } 58 | else 59 | { 60 | if (*partEnd != 0) 61 | ++partEnd; 62 | } 63 | 64 | ImVec2 const wordSize = ImGui::CalcTextSize(partStart, partEnd); 65 | 66 | // Clearly we have space for this word so just add it 67 | if (wordSize.x + width + ellipsisWidth < aMaxWidth) 68 | { 69 | width += wordSize.x; 70 | partStart = partEnd; 71 | } 72 | // If we're just at the end of the word and we just fit then we can commit here 73 | else if (*partEnd == 0 && wordSize.x + width < aMaxWidth) 74 | { 75 | width += wordSize.x; 76 | partStart = partEnd; 77 | } 78 | // we're done so add elipsis where the current segment starts 79 | else 80 | { 81 | addElipsis = true; 82 | break; 83 | } 84 | } 85 | 86 | ImGui::TextUnformatted(string, partStart); 87 | 88 | if (addElipsis) 89 | { 90 | ImGui::SameLine(0.0f, aSpacing); 91 | ImGui::TextUnformatted(elipsisText); 92 | } 93 | } 94 | } -------------------------------------------------------------------------------- /examples/asset_browser/imgui_utils.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - asset browser 4 | * 5 | * This is a more complex ImGui Integration 6 | * It shows how to build windows on top of 2d and 3d views using a render texture 7 | * 8 | * Copyright (c) 2024 Jeffery Myers 9 | * 10 | ********************************************************************************************/ 11 | 12 | #pragma once 13 | 14 | #include 15 | #include "raylib.h" 16 | 17 | namespace ImGuiUtils 18 | { 19 | void TextWithEllipsis(const char* string, float maxWidth, bool useWordBoundaries = false, float aSpacing = 0); 20 | 21 | 22 | // DPI scaling functions 23 | inline float ScaleToDPIF(float value) 24 | { 25 | return GetWindowScaleDPI().x * value; 26 | } 27 | 28 | inline int ScaleToDPII(int value) 29 | { 30 | return int(GetWindowScaleDPI().x * value); 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /examples/asset_browser/item_view.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - asset browser 4 | * 5 | * This is a more complex ImGui Integration 6 | * It shows how to build windows on top of 2d and 3d views using a render texture 7 | * 8 | * Copyright (c) 2024 Jeffery Myers 9 | * 10 | ********************************************************************************************/ 11 | 12 | #pragma once 13 | 14 | #include 15 | #include "raylib.h" 16 | 17 | class ViewableItem 18 | { 19 | public: 20 | virtual ~ViewableItem() = default; 21 | 22 | std::string Name; 23 | std::string Icon; 24 | Color Tint = BLANK; 25 | }; 26 | 27 | class ViewableItemContainer 28 | { 29 | public: 30 | virtual ~ViewableItemContainer() = default; 31 | virtual ViewableItem* Reset() = 0; 32 | virtual size_t Count() = 0; 33 | virtual ViewableItem* Next() = 0; 34 | }; 35 | 36 | class ItemView 37 | { 38 | public: 39 | virtual ~ItemView() = default; 40 | virtual ViewableItem* Show(ViewableItemContainer& container) = 0; 41 | }; 42 | 43 | class ListItemView : public ItemView 44 | { 45 | public: 46 | ViewableItem* Show(ViewableItemContainer& container) override; 47 | }; 48 | -------------------------------------------------------------------------------- /examples/asset_browser/item_views.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - asset browser 4 | * 5 | * This is a more complex ImGui Integration 6 | * It shows how to build windows on top of 2d and 3d views using a render texture 7 | * 8 | * Copyright (c) 2024 Jeffery Myers 9 | * 10 | ********************************************************************************************/ 11 | 12 | #include "item_view.h" 13 | 14 | #include "imgui.h" 15 | #include "imgui_utils.h" 16 | #include "rlImGuiColors.h" 17 | #include "raylib.h" 18 | 19 | extern ImFont* IconFont; 20 | 21 | ViewableItem* ListItemView::Show(ViewableItemContainer& container) 22 | { 23 | ViewableItem* item = container.Reset(); 24 | 25 | ViewableItem* selected = nullptr; 26 | while (item) 27 | { 28 | float x = ImGui::GetCursorPosX(); 29 | 30 | const char* name = TextFormat("###%s", item->Name.c_str()); 31 | if (item->Tint.a > 0) 32 | ImGui::TextColored(rlImGuiColors::Convert(item->Tint), " %s", item->Icon.c_str()); 33 | else 34 | ImGui::Text(" %s", item->Icon.c_str()); 35 | 36 | ImGui::SameLine(0, 0); 37 | ImGui::Text(" %s", item->Name.c_str()); 38 | ImGui::SameLine(0, 0); 39 | 40 | ImGui::SetCursorPosX(x); 41 | //ImGui::SetItemAllowOverlap(); 42 | 43 | ImGui::Selectable(name); 44 | if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(0)) 45 | { 46 | selected = item; 47 | } 48 | 49 | item = container.Next(); 50 | } 51 | 52 | return selected; 53 | } -------------------------------------------------------------------------------- /examples/asset_browser/main.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - asset browser 4 | * 5 | * This is a more complex ImGui Integration 6 | * It shows how to build windows on top of 2d and 3d views using a render texture 7 | * 8 | * Copyright (c) 2024 Jeffery Myers 9 | * 10 | ********************************************************************************************/ 11 | 12 | 13 | #include "raylib.h" 14 | #include "raymath.h" 15 | 16 | #include "imgui.h" 17 | #include "rlImGui.h" 18 | #include "rlImGuiColors.h" 19 | #include "extras/FA6FreeSolidFontData.h" 20 | 21 | #include "asset_browser.h" 22 | 23 | #include 24 | 25 | 26 | ImFont* IconFont = nullptr; 27 | 28 | int main(int argc, char* argv[]) 29 | { 30 | // Initialization 31 | //-------------------------------------------------------------------------------------- 32 | int screenWidth = 1280; 33 | int screenHeight = 800; 34 | 35 | SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT); 36 | InitWindow(screenWidth, screenHeight, "raylib-Extras [ImGui] example - Asset browser"); 37 | SetTargetFPS(144); 38 | 39 | rlImGuiBeginInitImGui(); 40 | ImGui::StyleColorsDark(); 41 | 42 | static const ImWchar icons_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; 43 | ImFontConfig icons_config; 44 | icons_config.MergeMode = true; 45 | icons_config.PixelSnapH = true; 46 | icons_config.FontDataOwnedByAtlas = false; 47 | 48 | icons_config.GlyphMaxAdvanceX = std::numeric_limits::max(); 49 | icons_config.RasterizerMultiply = 1.0f; 50 | icons_config.OversampleH = 2; 51 | icons_config.OversampleV = 1; 52 | 53 | icons_config.GlyphRanges = icons_ranges; 54 | 55 | ImGuiIO& io = ImGui::GetIO(); 56 | io.Fonts->AddFontFromMemoryCompressedTTF((void*)fa_solid_900_compressed_data, fa_solid_900_compressed_size, 12, &icons_config, icons_ranges); 57 | 58 | icons_config.MergeMode = false; 59 | IconFont = io.Fonts->AddFontFromMemoryCompressedTTF((void*)fa_solid_900_compressed_data, fa_solid_900_compressed_size, 72, &icons_config, icons_ranges); 60 | 61 | rlImGuiEndInitImGui(); 62 | 63 | AssetBrowserPanel assetBrowser; 64 | 65 | // Main game loop 66 | while (!WindowShouldClose()) // Detect window close button or ESC key 67 | { 68 | 69 | BeginDrawing(); 70 | ClearBackground(DARKGRAY); 71 | 72 | rlImGuiBegin(); 73 | 74 | ImGui::SetNextWindowPos(ImVec2(0, 0)); 75 | ImGui::SetNextWindowSize(ImVec2(float(GetScreenWidth()), float(GetScreenHeight()))); 76 | if (ImGui::Begin("Frame", 0, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoSavedSettings)) 77 | { 78 | assetBrowser.Show(); 79 | } 80 | ImGui::End(); 81 | 82 | rlImGuiEnd(); 83 | 84 | EndDrawing(); 85 | //---------------------------------------------------------------------------------- 86 | } 87 | rlImGuiShutdown(); 88 | 89 | // De-Initialization 90 | //-------------------------------------------------------------------------------------- 91 | CloseWindow(); // Close window and OpenGL context 92 | //-------------------------------------------------------------------------------------- 93 | 94 | return 0; 95 | } -------------------------------------------------------------------------------- /examples/docking_example.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - Docking example 4 | * 5 | * This is an example of using the ImGui docking features that are part of docking branch 6 | * You must replace the default imgui with the code from the docking branch for this to work 7 | * https://github.com/ocornut/imgui/tree/docking 8 | * 9 | * Copyright (c) 2024 Jeffery Myers 10 | * 11 | ********************************************************************************************/ 12 | 13 | #include "raylib.h" 14 | #include "raymath.h" 15 | 16 | #include "imgui.h" 17 | #include "rlImGui.h" 18 | 19 | // DPI scaling functions 20 | float ScaleToDPIF(float value) 21 | { 22 | return GetWindowScaleDPI().x * value; 23 | } 24 | 25 | int ScaleToDPII(int value) 26 | { 27 | return int(GetWindowScaleDPI().x * value); 28 | } 29 | 30 | int main(int argc, char* argv[]) 31 | { 32 | // Initialization 33 | //-------------------------------------------------------------------------------------- 34 | int screenWidth = 1280; 35 | int screenHeight = 800; 36 | 37 | // do not set the FLAG_WINDOW_HIGHDPI flag, that scales a low res framebuffer up to the native resolution. 38 | // use the native resolution and scale your geometry. 39 | SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE); 40 | InitWindow(screenWidth, screenHeight, "raylib-Extras [ImGui] example - Docking"); 41 | SetTargetFPS(144); 42 | rlImGuiSetup(true); 43 | 44 | bool run = true; 45 | 46 | bool showDemoWindow = true; 47 | 48 | // if the linked ImGui has docking, enable it. 49 | // this will only be true if you use the docking branch of ImGui. 50 | #ifdef IMGUI_HAS_DOCK 51 | ImGui::GetIO().ConfigFlags |= ImGuiConfigFlags_DockingEnable; 52 | #endif 53 | 54 | // Main game loop 55 | while (!WindowShouldClose() && run) // Detect window close button or ESC key, or a quit from the menu 56 | { 57 | BeginDrawing(); 58 | ClearBackground(DARKGRAY); 59 | 60 | // draw something to the raylib window below the GUI. 61 | DrawCircle(GetScreenWidth() / 2, GetScreenHeight() / 2, GetScreenHeight() * 0.45f, DARKGREEN); 62 | 63 | // start ImGui content 64 | rlImGuiBegin(); 65 | 66 | // if you want windows to dock to the viewport, call this. 67 | #ifdef IMGUI_HAS_DOCK 68 | ImGui::DockSpaceOverViewport(0, NULL, ImGuiDockNodeFlags_PassthruCentralNode); // set ImGuiDockNodeFlags_PassthruCentralNode so that we can see the raylib contents behind the dockspace 69 | #endif 70 | 71 | // show a simple menu bar 72 | if (ImGui::BeginMainMenuBar()) 73 | { 74 | if (ImGui::BeginMenu("File")) 75 | { 76 | if (ImGui::MenuItem("Quit")) 77 | run = false; 78 | 79 | ImGui::EndMenu(); 80 | } 81 | 82 | if (ImGui::BeginMenu("Window")) 83 | { 84 | if (ImGui::MenuItem("Demo Window", nullptr, showDemoWindow)) 85 | showDemoWindow = !showDemoWindow; 86 | 87 | ImGui::EndMenu(); 88 | } 89 | ImGui::EndMainMenuBar(); 90 | } 91 | 92 | // show some windows 93 | 94 | if (showDemoWindow) 95 | ImGui::ShowDemoWindow(&showDemoWindow); 96 | 97 | if (ImGui::Begin("Test Window")) 98 | { 99 | ImGui::TextUnformatted("Another window"); 100 | } 101 | ImGui::End(); 102 | 103 | // end ImGui Content 104 | rlImGuiEnd(); 105 | 106 | EndDrawing(); 107 | //---------------------------------------------------------------------------------- 108 | } 109 | rlImGuiShutdown(); 110 | 111 | // De-Initialization 112 | //-------------------------------------------------------------------------------------- 113 | CloseWindow(); // Close window and OpenGL context 114 | //-------------------------------------------------------------------------------------- 115 | 116 | return 0; 117 | } -------------------------------------------------------------------------------- /examples/editor.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - editor 4 | * 5 | * This is a more complex ImGui Integration 6 | * It shows how to build windows on top of 2d and 3d views using a render texture 7 | * 8 | * Copyright (c) 2021 Jeffery Myers 9 | * 10 | ********************************************************************************************/ 11 | 12 | 13 | #include "raylib.h" 14 | #include "raymath.h" 15 | 16 | #include "imgui.h" 17 | #include "rlImGui.h" 18 | #include "rlImGuiColors.h" 19 | 20 | bool Quit = false; 21 | 22 | bool ImGuiDemoOpen = false; 23 | 24 | // DPI scaling functions 25 | float ScaleToDPIF(float value) 26 | { 27 | return GetWindowScaleDPI().x * value; 28 | } 29 | 30 | int ScaleToDPII(int value) 31 | { 32 | return int(GetWindowScaleDPI().x * value); 33 | } 34 | 35 | class DocumentWindow 36 | { 37 | public: 38 | bool Open = false; 39 | 40 | RenderTexture ViewTexture; 41 | 42 | virtual void Setup() = 0; 43 | virtual void Shutdown() = 0; 44 | virtual void Show() = 0; 45 | virtual void Update() = 0; 46 | 47 | bool Focused = false; 48 | 49 | Rectangle ContentRect = { 0 }; 50 | }; 51 | 52 | class ImageViewerWindow : public DocumentWindow 53 | { 54 | public: 55 | 56 | void Setup() override 57 | { 58 | Camera.zoom = 1; 59 | Camera.target.x = 0; 60 | Camera.target.y = 0; 61 | Camera.rotation = 0; 62 | Camera.offset.x = GetScreenWidth() / 2.0f; 63 | Camera.offset.y = GetScreenHeight() / 2.0f; 64 | 65 | ViewTexture = LoadRenderTexture(GetScreenWidth(), GetScreenHeight()); 66 | ImageTexture = LoadTexture("resources/parrots.png"); 67 | 68 | UpdateRenderTexture(); 69 | } 70 | 71 | void Show() override 72 | { 73 | ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); 74 | ImGui::SetNextWindowSizeConstraints(ImVec2(ScaleToDPIF(400.0f), ScaleToDPIF(400.0f)), ImVec2(float(GetScreenWidth()), float(GetScreenHeight()))); 75 | 76 | Focused = false; 77 | 78 | if (ImGui::Begin("Image Viewer", &Open, ImGuiWindowFlags_NoScrollbar)) 79 | { 80 | // save off the screen space content rectangle 81 | ContentRect = { ImGui::GetWindowPos().x + ImGui::GetCursorScreenPos().x, ImGui::GetWindowPos().y + ImGui::GetCursorScreenPos().y, ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }; 82 | 83 | Focused = ImGui::IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows); 84 | 85 | ImVec2 size = ImGui::GetContentRegionAvail(); 86 | 87 | // center the scratch pad in the view 88 | Rectangle viewRect = { 0 }; 89 | viewRect.x = ViewTexture.texture.width / 2 - size.x / 2; 90 | viewRect.y = ViewTexture.texture.height / 2 - size.y / 2; 91 | viewRect.width = size.x; 92 | viewRect.height = -size.y; 93 | 94 | if (ImGui::BeginChild("Toolbar", ImVec2(ImGui::GetContentRegionAvail().x, 25))) 95 | { 96 | ImGui::SetCursorPosX(2); 97 | ImGui::SetCursorPosY(3); 98 | 99 | if (ImGui::Button("None")) 100 | { 101 | CurrentToolMode = ToolMode::None; 102 | } 103 | ImGui::SameLine(); 104 | 105 | if (ImGui::Button("Move")) 106 | { 107 | CurrentToolMode = ToolMode::Move; 108 | } 109 | 110 | ImGui::SameLine(); 111 | switch (CurrentToolMode) 112 | { 113 | case ToolMode::None: 114 | ImGui::TextUnformatted("No Tool"); 115 | break; 116 | case ToolMode::Move: 117 | ImGui::TextUnformatted("Move Tool"); 118 | break; 119 | default: 120 | break; 121 | } 122 | 123 | ImGui::SameLine(); 124 | ImGui::TextUnformatted(TextFormat("camera target X%f Y%f", Camera.target.x, Camera.target.y)); 125 | ImGui::EndChild(); 126 | } 127 | 128 | rlImGuiImageRect(&ViewTexture.texture, int(size.x), int(size.y), viewRect); 129 | } 130 | ImGui::End(); 131 | ImGui::PopStyleVar(); 132 | } 133 | 134 | void Update() override 135 | { 136 | if (!Open) 137 | return; 138 | 139 | if (IsWindowResized()) 140 | { 141 | UnloadRenderTexture(ViewTexture); 142 | ViewTexture = LoadRenderTexture(GetScreenWidth(), GetScreenHeight()); 143 | 144 | Camera.offset.x = GetScreenWidth() / 2.0f; 145 | Camera.offset.y = GetScreenHeight() / 2.0f; 146 | } 147 | 148 | Vector2 mousePos = GetMousePosition(); 149 | 150 | if (Focused) 151 | { 152 | if (CurrentToolMode == ToolMode::Move) 153 | { 154 | // only do this tool when the mouse is in the content area of the window 155 | if (IsMouseButtonDown(0) && CheckCollisionPointRec(mousePos, ContentRect)) 156 | { 157 | if (!Dragging) 158 | { 159 | LastMousePos = mousePos; 160 | LastTarget = Camera.target; 161 | } 162 | Dragging = true; 163 | Vector2 mouseDelta = Vector2Subtract(LastMousePos, mousePos); 164 | 165 | mouseDelta.x /= Camera.zoom; 166 | mouseDelta.y /= Camera.zoom; 167 | Camera.target = Vector2Add(LastTarget, mouseDelta); 168 | 169 | DirtyScene = true; 170 | 171 | } 172 | else 173 | { 174 | Dragging = false; 175 | } 176 | } 177 | } 178 | else 179 | { 180 | Dragging = false; 181 | } 182 | 183 | if (DirtyScene) 184 | { 185 | DirtyScene = false; 186 | UpdateRenderTexture(); 187 | } 188 | } 189 | 190 | Texture ImageTexture; 191 | Camera2D Camera = { 0 }; 192 | 193 | Vector2 LastMousePos = { 0 }; 194 | Vector2 LastTarget = { 0 }; 195 | bool Dragging = false; 196 | 197 | bool DirtyScene = false; 198 | 199 | enum class ToolMode 200 | { 201 | None, 202 | Move, 203 | }; 204 | 205 | ToolMode CurrentToolMode = ToolMode::None; 206 | 207 | void UpdateRenderTexture() 208 | { 209 | BeginTextureMode(ViewTexture); 210 | ClearBackground(BLUE); 211 | 212 | // camera with our view offset with a world origin of 0,0 213 | BeginMode2D(Camera); 214 | 215 | // center the image at 0,0 216 | DrawTexture(ImageTexture, ImageTexture.width / -2, ImageTexture.height / -2, WHITE); 217 | 218 | EndMode2D(); 219 | EndTextureMode(); 220 | } 221 | 222 | void Shutdown() override 223 | { 224 | UnloadRenderTexture(ViewTexture); 225 | UnloadTexture(ImageTexture); 226 | } 227 | }; 228 | 229 | class SceneViewWindow : public DocumentWindow 230 | { 231 | public: 232 | Camera3D Camera = { 0 }; 233 | 234 | void Setup() override 235 | { 236 | ViewTexture = LoadRenderTexture(GetScreenWidth(), GetScreenHeight()); 237 | 238 | Camera.fovy = 45; 239 | Camera.up.y = 1; 240 | Camera.position.y = 3; 241 | Camera.position.z = -25; 242 | 243 | Image img = GenImageChecked(ScaleToDPII(256), ScaleToDPII(256), ScaleToDPII(32), ScaleToDPII(32), DARKGRAY, WHITE); 244 | GridTexture = LoadTextureFromImage(img); 245 | UnloadImage(img); 246 | GenTextureMipmaps(&GridTexture); 247 | SetTextureFilter(GridTexture, TEXTURE_FILTER_ANISOTROPIC_16X); 248 | SetTextureWrap(GridTexture, TEXTURE_WRAP_CLAMP); 249 | } 250 | 251 | void Shutdown() override 252 | { 253 | UnloadRenderTexture(ViewTexture); 254 | UnloadTexture(GridTexture); 255 | } 256 | 257 | void Show() override 258 | { 259 | ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); 260 | ImGui::SetNextWindowSizeConstraints(ImVec2(ScaleToDPIF(400.0f), ScaleToDPIF(400.0f)), ImVec2((float)GetScreenWidth(), (float)GetScreenHeight())); 261 | 262 | if (ImGui::Begin("3D View", &Open, ImGuiWindowFlags_NoScrollbar)) 263 | { 264 | Focused = ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows); 265 | // draw the view 266 | rlImGuiImageRenderTextureFit(&ViewTexture, true); 267 | } 268 | ImGui::End(); 269 | ImGui::PopStyleVar(); 270 | } 271 | 272 | void Update() override 273 | { 274 | if (!Open) 275 | return; 276 | 277 | if (IsWindowResized()) 278 | { 279 | UnloadRenderTexture(ViewTexture); 280 | ViewTexture = LoadRenderTexture(GetScreenWidth(), GetScreenHeight()); 281 | } 282 | 283 | float period = 10; 284 | float magnitude = 25; 285 | 286 | Camera.position.x = sinf(float(GetTime() / period)) * magnitude; 287 | 288 | BeginTextureMode(ViewTexture); 289 | ClearBackground(SKYBLUE); 290 | 291 | BeginMode3D(Camera); 292 | 293 | // grid of cube trees on a plane to make a "world" 294 | DrawPlane(Vector3{ 0, 0, 0 }, Vector2{ 50, 50 }, BEIGE); // simple world plane 295 | float spacing = 4; 296 | int count = 5; 297 | 298 | for (float x = -count * spacing; x <= count * spacing; x += spacing) 299 | { 300 | for (float z = -count * spacing; z <= count * spacing; z += spacing) 301 | { 302 | Vector3 pos = { x, 0.5f, z }; 303 | 304 | Vector3 min = { x - 0.5f,0,z - 0.5f }; 305 | Vector3 max = { x + 0.5f,1,z + 0.5f }; 306 | 307 | DrawCube(Vector3{ x, 1.5f, z }, 1, 1, 1, GREEN); 308 | DrawCube(Vector3{ x, 0.5f, z }, 0.25f, 1, 0.25f, BROWN); 309 | } 310 | } 311 | 312 | EndMode3D(); 313 | EndTextureMode(); 314 | } 315 | 316 | Texture2D GridTexture = { 0 }; 317 | }; 318 | 319 | 320 | ImageViewerWindow ImageViewer; 321 | SceneViewWindow SceneView; 322 | 323 | void DoMainMenu() 324 | { 325 | if (ImGui::BeginMainMenuBar()) 326 | { 327 | if (ImGui::BeginMenu("File")) 328 | { 329 | if (ImGui::MenuItem("Exit")) 330 | Quit = true; 331 | 332 | ImGui::EndMenu(); 333 | } 334 | 335 | if (ImGui::BeginMenu("Window")) 336 | { 337 | ImGui::MenuItem("ImGui Demo", nullptr, &ImGuiDemoOpen); 338 | ImGui::MenuItem("Image Viewer", nullptr, &ImageViewer.Open); 339 | ImGui::MenuItem("3D View", nullptr, &SceneView.Open); 340 | 341 | ImGui::EndMenu(); 342 | } 343 | ImGui::EndMainMenuBar(); 344 | } 345 | } 346 | 347 | int main(int argc, char* argv[]) 348 | { 349 | // Initialization 350 | //-------------------------------------------------------------------------------------- 351 | int screenWidth = 1900; 352 | int screenHeight = 900; 353 | 354 | // do not set the FLAG_WINDOW_HIGHDPI flag, that scales a low res framebuffer up to the native resolution. 355 | // use the native resolution and scale your geometry. 356 | SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT); 357 | InitWindow(screenWidth, screenHeight, "raylib-Extras [ImGui] example - Editor Example"); 358 | SetTargetFPS(144); 359 | rlImGuiSetup(true); 360 | ImGui::GetIO().ConfigWindowsMoveFromTitleBarOnly = true; 361 | 362 | ImageViewer.Setup(); 363 | ImageViewer.Open = true; 364 | 365 | SceneView.Setup(); 366 | SceneView.Open = true; 367 | 368 | // Main game loop 369 | while (!WindowShouldClose() && !Quit) // Detect window close button or ESC key 370 | { 371 | ImageViewer.Update(); 372 | SceneView.Update(); 373 | 374 | BeginDrawing(); 375 | ClearBackground(DARKGRAY); 376 | 377 | rlImGuiBegin(); 378 | DoMainMenu(); 379 | 380 | if (ImGuiDemoOpen) 381 | ImGui::ShowDemoWindow(&ImGuiDemoOpen); 382 | 383 | if (ImageViewer.Open) 384 | ImageViewer.Show(); 385 | 386 | if (SceneView.Open) 387 | SceneView.Show(); 388 | 389 | rlImGuiEnd(); 390 | 391 | EndDrawing(); 392 | //---------------------------------------------------------------------------------- 393 | } 394 | rlImGuiShutdown(); 395 | 396 | ImageViewer.Shutdown(); 397 | SceneView.Shutdown(); 398 | 399 | // De-Initialization 400 | //-------------------------------------------------------------------------------------- 401 | CloseWindow(); // Close window and OpenGL context 402 | //-------------------------------------------------------------------------------------- 403 | 404 | return 0; 405 | } -------------------------------------------------------------------------------- /examples/imgui_style_example.cpp: -------------------------------------------------------------------------------- 1 | // Dear ImGui: standalone example application for Raylib with OpenGL 2 | // (Raylib is a simple learning library for game development) 3 | 4 | // Learn about Dear ImGui: 5 | // - FAQ https://dearimgui.com/faq 6 | // - Getting Started https://dearimgui.com/getting-started 7 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 8 | // - Introduction, links and more at the top of imgui.cpp 9 | 10 | #include "imgui.h" 11 | #include "imgui_impl_raylib.h" 12 | #include "raylib.h" 13 | 14 | #include 15 | 16 | // DPI scaling functions 17 | // Use these to scale any hardcoded values to the native display resolution 18 | float ScaleToDPIF(float value) 19 | { 20 | return GetWindowScaleDPI().x * value; 21 | } 22 | 23 | int ScaleToDPII(int value) 24 | { 25 | return int(GetWindowScaleDPI().x * value); 26 | } 27 | 28 | // Main code 29 | int main(int, char**) 30 | { 31 | // Setup raylib window 32 | // do not set the FLAG_WINDOW_HIGHDPI flag, that scales a low res framebuffer up to the native resolution. 33 | // use the native resolution and scale your geometry. 34 | 35 | SetConfigFlags(FLAG_WINDOW_RESIZABLE); 36 | InitWindow(1280, 720, "Dear ImGui Raylib(OpenGL) example"); 37 | 38 | // Setup Dear ImGui context 39 | ImGui::CreateContext(); 40 | ImGuiIO& io = ImGui::GetIO(); (void)io; 41 | io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls 42 | io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls 43 | 44 | // tell ImGui the display scale 45 | if (!IsWindowState(FLAG_WINDOW_HIGHDPI)) 46 | { 47 | io.DisplayFramebufferScale.x = GetWindowScaleDPI().x; 48 | io.DisplayFramebufferScale.y = GetWindowScaleDPI().y; 49 | } 50 | 51 | // Setup Dear ImGui style 52 | ImGui::StyleColorsDark(); 53 | //ImGui::StyleColorsLight(); 54 | 55 | // Setup Platform/Renderer backends 56 | ImGui_ImplRaylib_Init(); 57 | 58 | // Load Fonts 59 | // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. 60 | // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. 61 | // - If the file cannot be loaded, the function will return a nullptr. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). 62 | // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. 63 | // - Use '#define IMGUI_ENABLE_FREETYPE' in your imconfig file to use Freetype for higher quality font rendering. 64 | // - Read 'docs/FONTS.md' for more instructions and details. 65 | // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! 66 | 67 | // to properly scale for high DPI displays, we need to cale the font size by the dpi sale 68 | static constexpr int DefaultFonSize = 13; 69 | ImFontConfig defaultConfig; 70 | defaultConfig.SizePixels = DefaultFonSize; 71 | 72 | if (!IsWindowState(FLAG_WINDOW_HIGHDPI)) 73 | { 74 | defaultConfig.SizePixels = defaultConfig.SizePixels * GetWindowScaleDPI().y; 75 | defaultConfig.RasterizerMultiply = GetWindowScaleDPI().y; 76 | } 77 | 78 | defaultConfig.PixelSnapH = true; 79 | io.Fonts->AddFontDefault(&defaultConfig); 80 | 81 | //io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\segoeui.ttf", 18.0f); 82 | //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); 83 | //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); 84 | //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); 85 | ImFont* font = io.Fonts->AddFontFromFileTTF("resources/driusstraight.ttf", ScaleToDPIF(18.0f), nullptr, io.Fonts->GetGlyphRangesJapanese()); 86 | IM_ASSERT(font != nullptr); 87 | 88 | // Our state 89 | bool show_demo_window = true; 90 | bool show_another_window = false; 91 | ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); 92 | 93 | // Main loop 94 | bool done = false; 95 | while (!done) 96 | { 97 | // Poll and handle events (inputs, window resize, etc.) 98 | // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. 99 | // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data. 100 | // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data. 101 | // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. 102 | ImGui_ImplRaylib_ProcessEvents(); 103 | 104 | // Start the Dear ImGui frame 105 | ImGui_ImplRaylib_NewFrame(); 106 | ImGui::NewFrame(); 107 | 108 | // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). 109 | if (show_demo_window) 110 | ImGui::ShowDemoWindow(&show_demo_window); 111 | 112 | // 2. Show a simple window that we create ourselves. We use a Begin/End pair to create a named window. 113 | { 114 | static float f = 0.0f; 115 | static int counter = 0; 116 | 117 | ImGui::Begin("Hello, world!"); // Create a window called "Hello, world!" and append into it. 118 | 119 | ImGui::Text("This is some useful text."); // Display some text (you can use a format strings too) 120 | ImGui::Checkbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state 121 | ImGui::Checkbox("Another Window", &show_another_window); 122 | 123 | ImGui::SliderFloat("float", &f, 0.0f, 1.0f); // Edit 1 float using a slider from 0.0f to 1.0f 124 | ImGui::ColorEdit3("clear color", &clear_color.x); // Edit 3 floats representing a color 125 | 126 | if (ImGui::Button("Button")) // Buttons return true when clicked (most widgets return true when edited/activated) 127 | counter++; 128 | ImGui::SameLine(); 129 | ImGui::Text("counter = %d", counter); 130 | 131 | ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate); 132 | ImGui::End(); 133 | } 134 | 135 | // 3. Show another simple window. 136 | if (show_another_window) 137 | { 138 | ImGui::Begin("Another Window", &show_another_window); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) 139 | ImGui::Text("Hello from another window!"); 140 | if (ImGui::Button("Close Me")) 141 | show_another_window = false; 142 | ImGui::End(); 143 | } 144 | 145 | // Rendering 146 | ImGui::Render(); 147 | BeginDrawing(); 148 | ClearBackground(Color{ uint8_t(clear_color.x * 255), uint8_t(clear_color.y * 255), uint8_t(clear_color.z * 255), uint8_t(clear_color.w * 255) }); 149 | ImGui_ImplRaylib_RenderDrawData(ImGui::GetDrawData()); 150 | EndDrawing(); 151 | 152 | done = WindowShouldClose(); 153 | } 154 | // Cleanup 155 | ImGui_ImplRaylib_Shutdown(); 156 | ImGui::DestroyContext(); 157 | 158 | CloseWindow(); 159 | 160 | return 0; 161 | } 162 | -------------------------------------------------------------------------------- /examples/simple.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************************* 2 | * 3 | * raylib-extras [ImGui] example - Simple Integration 4 | * 5 | * This is a simple ImGui Integration 6 | * It is done using C++ but with C style code 7 | * It can be done in C as well if you use the C ImGui wrapper 8 | * https://github.com/cimgui/cimgui 9 | * 10 | * Copyright (c) 2021 Jeffery Myers 11 | * 12 | ********************************************************************************************/ 13 | 14 | #include "raylib.h" 15 | #include "raymath.h" 16 | 17 | #include "imgui.h" 18 | #include "rlImGui.h" 19 | 20 | 21 | // DPI scaling functions 22 | float ScaleToDPIF(float value) 23 | { 24 | return GetWindowScaleDPI().x * value; 25 | } 26 | 27 | int ScaleToDPII(int value) 28 | { 29 | return int(GetWindowScaleDPI().x * value); 30 | } 31 | 32 | int main(int argc, char* argv[]) 33 | { 34 | // Initialization 35 | //-------------------------------------------------------------------------------------- 36 | int screenWidth = 1280; 37 | int screenHeight = 800; 38 | 39 | SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE); 40 | InitWindow(screenWidth, screenHeight, "raylib-Extras [ImGui] example - simple ImGui Demo"); 41 | SetTargetFPS(144); 42 | rlImGuiSetup(true); 43 | 44 | Texture image = LoadTexture("resources/parrots.png"); 45 | 46 | // Main game loop 47 | while (!WindowShouldClose()) // Detect window close button or ESC key 48 | { 49 | BeginDrawing(); 50 | ClearBackground(DARKGRAY); 51 | 52 | // start ImGui Conent 53 | rlImGuiBegin(); 54 | 55 | // show ImGui Content 56 | bool open = true; 57 | ImGui::ShowDemoWindow(&open); 58 | 59 | open = true; 60 | if (ImGui::Begin("Test Window", &open)) 61 | { 62 | ImGui::TextUnformatted(ICON_FA_JEDI); 63 | 64 | rlImGuiImage(&image); 65 | } 66 | ImGui::End(); 67 | 68 | // end ImGui Content 69 | rlImGuiEnd(); 70 | 71 | EndDrawing(); 72 | //---------------------------------------------------------------------------------- 73 | } 74 | 75 | // De-Initialization 76 | //-------------------------------------------------------------------------------------- 77 | rlImGuiShutdown(); 78 | UnloadTexture(image); 79 | CloseWindow(); // Close window and OpenGL context 80 | //-------------------------------------------------------------------------------------- 81 | 82 | return 0; 83 | } -------------------------------------------------------------------------------- /extras/FontAwsome_LICENSE.txt: -------------------------------------------------------------------------------- 1 | Font Awesome Free License 2 | ------------------------- 3 | 4 | Font Awesome Free is free, open source, and GPL friendly. You can use it for 5 | commercial projects, open source projects, or really almost whatever you want. 6 | Full Font Awesome Free license: https://fontawesome.com/license/free. 7 | 8 | # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) 9 | In the Font Awesome Free download, the CC BY 4.0 license applies to all icons 10 | packaged as SVG and JS file types. 11 | 12 | # Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL) 13 | In the Font Awesome Free download, the SIL OFL license applies to all icons 14 | packaged as web and desktop font files. 15 | 16 | # Code: MIT License (https://opensource.org/licenses/MIT) 17 | In the Font Awesome Free download, the MIT license applies to all non-font and 18 | non-icon files. 19 | 20 | # Attribution 21 | Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font 22 | Awesome Free files already contain embedded comments with sufficient 23 | attribution, so you shouldn't need to do anything additional when using these 24 | files normally. 25 | 26 | We've kept attribution comments terse, so we ask that you do not actively work 27 | to remove them from files, especially code. They're a great way for folks to 28 | learn about Font Awesome. 29 | 30 | # Brand Icons 31 | All brand icons are trademarks of their respective owners. The use of these 32 | trademarks does not indicate endorsement of the trademark holder by Font 33 | Awesome, nor vice versa. **Please do not use brand logos for any purpose except 34 | to represent the company, product, or service to which they refer.** 35 | -------------------------------------------------------------------------------- /extras/IconsFontAwesome6.h: -------------------------------------------------------------------------------- 1 | // Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for languages C and C++ 2 | // from https://github.com/FortAwesome/Font-Awesome/raw/6.x/metadata/icons.yml 3 | // for use with https://github.com/FortAwesome/Font-Awesome/blob/6.x/webfonts/fa-regular-400.ttf, https://github.com/FortAwesome/Font-Awesome/blob/6.x/webfonts/fa-solid-900.ttf 4 | #pragma once 5 | 6 | #define FONT_ICON_FILE_NAME_FAR "fa-regular-400.ttf" 7 | #define FONT_ICON_FILE_NAME_FAS "fa-solid-900.ttf" 8 | 9 | #define ICON_MIN_FA 0xe005 10 | #define ICON_MAX_16_FA 0xf8ff 11 | #define ICON_MAX_FA 0xf8ff 12 | #define ICON_FA_0 "0" // U+0030 13 | #define ICON_FA_1 "1" // U+0031 14 | #define ICON_FA_2 "2" // U+0032 15 | #define ICON_FA_3 "3" // U+0033 16 | #define ICON_FA_4 "4" // U+0034 17 | #define ICON_FA_5 "5" // U+0035 18 | #define ICON_FA_6 "6" // U+0036 19 | #define ICON_FA_7 "7" // U+0037 20 | #define ICON_FA_8 "8" // U+0038 21 | #define ICON_FA_9 "9" // U+0039 22 | #define ICON_FA_A "A" // U+0041 23 | #define ICON_FA_ADDRESS_BOOK "\xef\x8a\xb9" // U+f2b9 24 | #define ICON_FA_ADDRESS_CARD "\xef\x8a\xbb" // U+f2bb 25 | #define ICON_FA_ALIGN_CENTER "\xef\x80\xb7" // U+f037 26 | #define ICON_FA_ALIGN_JUSTIFY "\xef\x80\xb9" // U+f039 27 | #define ICON_FA_ALIGN_LEFT "\xef\x80\xb6" // U+f036 28 | #define ICON_FA_ALIGN_RIGHT "\xef\x80\xb8" // U+f038 29 | #define ICON_FA_ANCHOR "\xef\x84\xbd" // U+f13d 30 | #define ICON_FA_ANCHOR_CIRCLE_CHECK "\xee\x92\xaa" // U+e4aa 31 | #define ICON_FA_ANCHOR_CIRCLE_EXCLAMATION "\xee\x92\xab" // U+e4ab 32 | #define ICON_FA_ANCHOR_CIRCLE_XMARK "\xee\x92\xac" // U+e4ac 33 | #define ICON_FA_ANCHOR_LOCK "\xee\x92\xad" // U+e4ad 34 | #define ICON_FA_ANGLE_DOWN "\xef\x84\x87" // U+f107 35 | #define ICON_FA_ANGLE_LEFT "\xef\x84\x84" // U+f104 36 | #define ICON_FA_ANGLE_RIGHT "\xef\x84\x85" // U+f105 37 | #define ICON_FA_ANGLE_UP "\xef\x84\x86" // U+f106 38 | #define ICON_FA_ANGLES_DOWN "\xef\x84\x83" // U+f103 39 | #define ICON_FA_ANGLES_LEFT "\xef\x84\x80" // U+f100 40 | #define ICON_FA_ANGLES_RIGHT "\xef\x84\x81" // U+f101 41 | #define ICON_FA_ANGLES_UP "\xef\x84\x82" // U+f102 42 | #define ICON_FA_ANKH "\xef\x99\x84" // U+f644 43 | #define ICON_FA_APPLE_WHOLE "\xef\x97\x91" // U+f5d1 44 | #define ICON_FA_ARCHWAY "\xef\x95\x97" // U+f557 45 | #define ICON_FA_ARROW_DOWN "\xef\x81\xa3" // U+f063 46 | #define ICON_FA_ARROW_DOWN_1_9 "\xef\x85\xa2" // U+f162 47 | #define ICON_FA_ARROW_DOWN_9_1 "\xef\xa2\x86" // U+f886 48 | #define ICON_FA_ARROW_DOWN_A_Z "\xef\x85\x9d" // U+f15d 49 | #define ICON_FA_ARROW_DOWN_LONG "\xef\x85\xb5" // U+f175 50 | #define ICON_FA_ARROW_DOWN_SHORT_WIDE "\xef\xa2\x84" // U+f884 51 | #define ICON_FA_ARROW_DOWN_UP_ACROSS_LINE "\xee\x92\xaf" // U+e4af 52 | #define ICON_FA_ARROW_DOWN_UP_LOCK "\xee\x92\xb0" // U+e4b0 53 | #define ICON_FA_ARROW_DOWN_WIDE_SHORT "\xef\x85\xa0" // U+f160 54 | #define ICON_FA_ARROW_DOWN_Z_A "\xef\xa2\x81" // U+f881 55 | #define ICON_FA_ARROW_LEFT "\xef\x81\xa0" // U+f060 56 | #define ICON_FA_ARROW_LEFT_LONG "\xef\x85\xb7" // U+f177 57 | #define ICON_FA_ARROW_POINTER "\xef\x89\x85" // U+f245 58 | #define ICON_FA_ARROW_RIGHT "\xef\x81\xa1" // U+f061 59 | #define ICON_FA_ARROW_RIGHT_ARROW_LEFT "\xef\x83\xac" // U+f0ec 60 | #define ICON_FA_ARROW_RIGHT_FROM_BRACKET "\xef\x82\x8b" // U+f08b 61 | #define ICON_FA_ARROW_RIGHT_LONG "\xef\x85\xb8" // U+f178 62 | #define ICON_FA_ARROW_RIGHT_TO_BRACKET "\xef\x82\x90" // U+f090 63 | #define ICON_FA_ARROW_RIGHT_TO_CITY "\xee\x92\xb3" // U+e4b3 64 | #define ICON_FA_ARROW_ROTATE_LEFT "\xef\x83\xa2" // U+f0e2 65 | #define ICON_FA_ARROW_ROTATE_RIGHT "\xef\x80\x9e" // U+f01e 66 | #define ICON_FA_ARROW_TREND_DOWN "\xee\x82\x97" // U+e097 67 | #define ICON_FA_ARROW_TREND_UP "\xee\x82\x98" // U+e098 68 | #define ICON_FA_ARROW_TURN_DOWN "\xef\x85\x89" // U+f149 69 | #define ICON_FA_ARROW_TURN_UP "\xef\x85\x88" // U+f148 70 | #define ICON_FA_ARROW_UP "\xef\x81\xa2" // U+f062 71 | #define ICON_FA_ARROW_UP_1_9 "\xef\x85\xa3" // U+f163 72 | #define ICON_FA_ARROW_UP_9_1 "\xef\xa2\x87" // U+f887 73 | #define ICON_FA_ARROW_UP_A_Z "\xef\x85\x9e" // U+f15e 74 | #define ICON_FA_ARROW_UP_FROM_BRACKET "\xee\x82\x9a" // U+e09a 75 | #define ICON_FA_ARROW_UP_FROM_GROUND_WATER "\xee\x92\xb5" // U+e4b5 76 | #define ICON_FA_ARROW_UP_FROM_WATER_PUMP "\xee\x92\xb6" // U+e4b6 77 | #define ICON_FA_ARROW_UP_LONG "\xef\x85\xb6" // U+f176 78 | #define ICON_FA_ARROW_UP_RIGHT_DOTS "\xee\x92\xb7" // U+e4b7 79 | #define ICON_FA_ARROW_UP_RIGHT_FROM_SQUARE "\xef\x82\x8e" // U+f08e 80 | #define ICON_FA_ARROW_UP_SHORT_WIDE "\xef\xa2\x85" // U+f885 81 | #define ICON_FA_ARROW_UP_WIDE_SHORT "\xef\x85\xa1" // U+f161 82 | #define ICON_FA_ARROW_UP_Z_A "\xef\xa2\x82" // U+f882 83 | #define ICON_FA_ARROWS_DOWN_TO_LINE "\xee\x92\xb8" // U+e4b8 84 | #define ICON_FA_ARROWS_DOWN_TO_PEOPLE "\xee\x92\xb9" // U+e4b9 85 | #define ICON_FA_ARROWS_LEFT_RIGHT "\xef\x81\xbe" // U+f07e 86 | #define ICON_FA_ARROWS_LEFT_RIGHT_TO_LINE "\xee\x92\xba" // U+e4ba 87 | #define ICON_FA_ARROWS_ROTATE "\xef\x80\xa1" // U+f021 88 | #define ICON_FA_ARROWS_SPIN "\xee\x92\xbb" // U+e4bb 89 | #define ICON_FA_ARROWS_SPLIT_UP_AND_LEFT "\xee\x92\xbc" // U+e4bc 90 | #define ICON_FA_ARROWS_TO_CIRCLE "\xee\x92\xbd" // U+e4bd 91 | #define ICON_FA_ARROWS_TO_DOT "\xee\x92\xbe" // U+e4be 92 | #define ICON_FA_ARROWS_TO_EYE "\xee\x92\xbf" // U+e4bf 93 | #define ICON_FA_ARROWS_TURN_RIGHT "\xee\x93\x80" // U+e4c0 94 | #define ICON_FA_ARROWS_TURN_TO_DOTS "\xee\x93\x81" // U+e4c1 95 | #define ICON_FA_ARROWS_UP_DOWN "\xef\x81\xbd" // U+f07d 96 | #define ICON_FA_ARROWS_UP_DOWN_LEFT_RIGHT "\xef\x81\x87" // U+f047 97 | #define ICON_FA_ARROWS_UP_TO_LINE "\xee\x93\x82" // U+e4c2 98 | #define ICON_FA_ASTERISK "*" // U+002a 99 | #define ICON_FA_AT "@" // U+0040 100 | #define ICON_FA_ATOM "\xef\x97\x92" // U+f5d2 101 | #define ICON_FA_AUDIO_DESCRIPTION "\xef\x8a\x9e" // U+f29e 102 | #define ICON_FA_AUSTRAL_SIGN "\xee\x82\xa9" // U+e0a9 103 | #define ICON_FA_AWARD "\xef\x95\x99" // U+f559 104 | #define ICON_FA_B "B" // U+0042 105 | #define ICON_FA_BABY "\xef\x9d\xbc" // U+f77c 106 | #define ICON_FA_BABY_CARRIAGE "\xef\x9d\xbd" // U+f77d 107 | #define ICON_FA_BACKWARD "\xef\x81\x8a" // U+f04a 108 | #define ICON_FA_BACKWARD_FAST "\xef\x81\x89" // U+f049 109 | #define ICON_FA_BACKWARD_STEP "\xef\x81\x88" // U+f048 110 | #define ICON_FA_BACON "\xef\x9f\xa5" // U+f7e5 111 | #define ICON_FA_BACTERIA "\xee\x81\x99" // U+e059 112 | #define ICON_FA_BACTERIUM "\xee\x81\x9a" // U+e05a 113 | #define ICON_FA_BAG_SHOPPING "\xef\x8a\x90" // U+f290 114 | #define ICON_FA_BAHAI "\xef\x99\xa6" // U+f666 115 | #define ICON_FA_BAHT_SIGN "\xee\x82\xac" // U+e0ac 116 | #define ICON_FA_BAN "\xef\x81\x9e" // U+f05e 117 | #define ICON_FA_BAN_SMOKING "\xef\x95\x8d" // U+f54d 118 | #define ICON_FA_BANDAGE "\xef\x91\xa2" // U+f462 119 | #define ICON_FA_BARCODE "\xef\x80\xaa" // U+f02a 120 | #define ICON_FA_BARS "\xef\x83\x89" // U+f0c9 121 | #define ICON_FA_BARS_PROGRESS "\xef\xa0\xa8" // U+f828 122 | #define ICON_FA_BARS_STAGGERED "\xef\x95\x90" // U+f550 123 | #define ICON_FA_BASEBALL "\xef\x90\xb3" // U+f433 124 | #define ICON_FA_BASEBALL_BAT_BALL "\xef\x90\xb2" // U+f432 125 | #define ICON_FA_BASKET_SHOPPING "\xef\x8a\x91" // U+f291 126 | #define ICON_FA_BASKETBALL "\xef\x90\xb4" // U+f434 127 | #define ICON_FA_BATH "\xef\x8b\x8d" // U+f2cd 128 | #define ICON_FA_BATTERY_EMPTY "\xef\x89\x84" // U+f244 129 | #define ICON_FA_BATTERY_FULL "\xef\x89\x80" // U+f240 130 | #define ICON_FA_BATTERY_HALF "\xef\x89\x82" // U+f242 131 | #define ICON_FA_BATTERY_QUARTER "\xef\x89\x83" // U+f243 132 | #define ICON_FA_BATTERY_THREE_QUARTERS "\xef\x89\x81" // U+f241 133 | #define ICON_FA_BED "\xef\x88\xb6" // U+f236 134 | #define ICON_FA_BED_PULSE "\xef\x92\x87" // U+f487 135 | #define ICON_FA_BEER_MUG_EMPTY "\xef\x83\xbc" // U+f0fc 136 | #define ICON_FA_BELL "\xef\x83\xb3" // U+f0f3 137 | #define ICON_FA_BELL_CONCIERGE "\xef\x95\xa2" // U+f562 138 | #define ICON_FA_BELL_SLASH "\xef\x87\xb6" // U+f1f6 139 | #define ICON_FA_BEZIER_CURVE "\xef\x95\x9b" // U+f55b 140 | #define ICON_FA_BICYCLE "\xef\x88\x86" // U+f206 141 | #define ICON_FA_BINOCULARS "\xef\x87\xa5" // U+f1e5 142 | #define ICON_FA_BIOHAZARD "\xef\x9e\x80" // U+f780 143 | #define ICON_FA_BITCOIN_SIGN "\xee\x82\xb4" // U+e0b4 144 | #define ICON_FA_BLENDER "\xef\x94\x97" // U+f517 145 | #define ICON_FA_BLENDER_PHONE "\xef\x9a\xb6" // U+f6b6 146 | #define ICON_FA_BLOG "\xef\x9e\x81" // U+f781 147 | #define ICON_FA_BOLD "\xef\x80\xb2" // U+f032 148 | #define ICON_FA_BOLT "\xef\x83\xa7" // U+f0e7 149 | #define ICON_FA_BOLT_LIGHTNING "\xee\x82\xb7" // U+e0b7 150 | #define ICON_FA_BOMB "\xef\x87\xa2" // U+f1e2 151 | #define ICON_FA_BONE "\xef\x97\x97" // U+f5d7 152 | #define ICON_FA_BONG "\xef\x95\x9c" // U+f55c 153 | #define ICON_FA_BOOK "\xef\x80\xad" // U+f02d 154 | #define ICON_FA_BOOK_ATLAS "\xef\x95\x98" // U+f558 155 | #define ICON_FA_BOOK_BIBLE "\xef\x99\x87" // U+f647 156 | #define ICON_FA_BOOK_BOOKMARK "\xee\x82\xbb" // U+e0bb 157 | #define ICON_FA_BOOK_JOURNAL_WHILLS "\xef\x99\xaa" // U+f66a 158 | #define ICON_FA_BOOK_MEDICAL "\xef\x9f\xa6" // U+f7e6 159 | #define ICON_FA_BOOK_OPEN "\xef\x94\x98" // U+f518 160 | #define ICON_FA_BOOK_OPEN_READER "\xef\x97\x9a" // U+f5da 161 | #define ICON_FA_BOOK_QURAN "\xef\x9a\x87" // U+f687 162 | #define ICON_FA_BOOK_SKULL "\xef\x9a\xb7" // U+f6b7 163 | #define ICON_FA_BOOKMARK "\xef\x80\xae" // U+f02e 164 | #define ICON_FA_BORDER_ALL "\xef\xa1\x8c" // U+f84c 165 | #define ICON_FA_BORDER_NONE "\xef\xa1\x90" // U+f850 166 | #define ICON_FA_BORDER_TOP_LEFT "\xef\xa1\x93" // U+f853 167 | #define ICON_FA_BORE_HOLE "\xee\x93\x83" // U+e4c3 168 | #define ICON_FA_BOTTLE_DROPLET "\xee\x93\x84" // U+e4c4 169 | #define ICON_FA_BOTTLE_WATER "\xee\x93\x85" // U+e4c5 170 | #define ICON_FA_BOWL_FOOD "\xee\x93\x86" // U+e4c6 171 | #define ICON_FA_BOWL_RICE "\xee\x8b\xab" // U+e2eb 172 | #define ICON_FA_BOWLING_BALL "\xef\x90\xb6" // U+f436 173 | #define ICON_FA_BOX "\xef\x91\xa6" // U+f466 174 | #define ICON_FA_BOX_ARCHIVE "\xef\x86\x87" // U+f187 175 | #define ICON_FA_BOX_OPEN "\xef\x92\x9e" // U+f49e 176 | #define ICON_FA_BOX_TISSUE "\xee\x81\x9b" // U+e05b 177 | #define ICON_FA_BOXES_PACKING "\xee\x93\x87" // U+e4c7 178 | #define ICON_FA_BOXES_STACKED "\xef\x91\xa8" // U+f468 179 | #define ICON_FA_BRAILLE "\xef\x8a\xa1" // U+f2a1 180 | #define ICON_FA_BRAIN "\xef\x97\x9c" // U+f5dc 181 | #define ICON_FA_BRAZILIAN_REAL_SIGN "\xee\x91\xac" // U+e46c 182 | #define ICON_FA_BREAD_SLICE "\xef\x9f\xac" // U+f7ec 183 | #define ICON_FA_BRIDGE "\xee\x93\x88" // U+e4c8 184 | #define ICON_FA_BRIDGE_CIRCLE_CHECK "\xee\x93\x89" // U+e4c9 185 | #define ICON_FA_BRIDGE_CIRCLE_EXCLAMATION "\xee\x93\x8a" // U+e4ca 186 | #define ICON_FA_BRIDGE_CIRCLE_XMARK "\xee\x93\x8b" // U+e4cb 187 | #define ICON_FA_BRIDGE_LOCK "\xee\x93\x8c" // U+e4cc 188 | #define ICON_FA_BRIDGE_WATER "\xee\x93\x8e" // U+e4ce 189 | #define ICON_FA_BRIEFCASE "\xef\x82\xb1" // U+f0b1 190 | #define ICON_FA_BRIEFCASE_MEDICAL "\xef\x91\xa9" // U+f469 191 | #define ICON_FA_BROOM "\xef\x94\x9a" // U+f51a 192 | #define ICON_FA_BROOM_BALL "\xef\x91\x98" // U+f458 193 | #define ICON_FA_BRUSH "\xef\x95\x9d" // U+f55d 194 | #define ICON_FA_BUCKET "\xee\x93\x8f" // U+e4cf 195 | #define ICON_FA_BUG "\xef\x86\x88" // U+f188 196 | #define ICON_FA_BUG_SLASH "\xee\x92\x90" // U+e490 197 | #define ICON_FA_BUGS "\xee\x93\x90" // U+e4d0 198 | #define ICON_FA_BUILDING "\xef\x86\xad" // U+f1ad 199 | #define ICON_FA_BUILDING_CIRCLE_ARROW_RIGHT "\xee\x93\x91" // U+e4d1 200 | #define ICON_FA_BUILDING_CIRCLE_CHECK "\xee\x93\x92" // U+e4d2 201 | #define ICON_FA_BUILDING_CIRCLE_EXCLAMATION "\xee\x93\x93" // U+e4d3 202 | #define ICON_FA_BUILDING_CIRCLE_XMARK "\xee\x93\x94" // U+e4d4 203 | #define ICON_FA_BUILDING_COLUMNS "\xef\x86\x9c" // U+f19c 204 | #define ICON_FA_BUILDING_FLAG "\xee\x93\x95" // U+e4d5 205 | #define ICON_FA_BUILDING_LOCK "\xee\x93\x96" // U+e4d6 206 | #define ICON_FA_BUILDING_NGO "\xee\x93\x97" // U+e4d7 207 | #define ICON_FA_BUILDING_SHIELD "\xee\x93\x98" // U+e4d8 208 | #define ICON_FA_BUILDING_UN "\xee\x93\x99" // U+e4d9 209 | #define ICON_FA_BUILDING_USER "\xee\x93\x9a" // U+e4da 210 | #define ICON_FA_BUILDING_WHEAT "\xee\x93\x9b" // U+e4db 211 | #define ICON_FA_BULLHORN "\xef\x82\xa1" // U+f0a1 212 | #define ICON_FA_BULLSEYE "\xef\x85\x80" // U+f140 213 | #define ICON_FA_BURGER "\xef\xa0\x85" // U+f805 214 | #define ICON_FA_BURST "\xee\x93\x9c" // U+e4dc 215 | #define ICON_FA_BUS "\xef\x88\x87" // U+f207 216 | #define ICON_FA_BUS_SIMPLE "\xef\x95\x9e" // U+f55e 217 | #define ICON_FA_BUSINESS_TIME "\xef\x99\x8a" // U+f64a 218 | #define ICON_FA_C "C" // U+0043 219 | #define ICON_FA_CAKE_CANDLES "\xef\x87\xbd" // U+f1fd 220 | #define ICON_FA_CALCULATOR "\xef\x87\xac" // U+f1ec 221 | #define ICON_FA_CALENDAR "\xef\x84\xb3" // U+f133 222 | #define ICON_FA_CALENDAR_CHECK "\xef\x89\xb4" // U+f274 223 | #define ICON_FA_CALENDAR_DAY "\xef\x9e\x83" // U+f783 224 | #define ICON_FA_CALENDAR_DAYS "\xef\x81\xb3" // U+f073 225 | #define ICON_FA_CALENDAR_MINUS "\xef\x89\xb2" // U+f272 226 | #define ICON_FA_CALENDAR_PLUS "\xef\x89\xb1" // U+f271 227 | #define ICON_FA_CALENDAR_WEEK "\xef\x9e\x84" // U+f784 228 | #define ICON_FA_CALENDAR_XMARK "\xef\x89\xb3" // U+f273 229 | #define ICON_FA_CAMERA "\xef\x80\xb0" // U+f030 230 | #define ICON_FA_CAMERA_RETRO "\xef\x82\x83" // U+f083 231 | #define ICON_FA_CAMERA_ROTATE "\xee\x83\x98" // U+e0d8 232 | #define ICON_FA_CAMPGROUND "\xef\x9a\xbb" // U+f6bb 233 | #define ICON_FA_CANDY_CANE "\xef\x9e\x86" // U+f786 234 | #define ICON_FA_CANNABIS "\xef\x95\x9f" // U+f55f 235 | #define ICON_FA_CAPSULES "\xef\x91\xab" // U+f46b 236 | #define ICON_FA_CAR "\xef\x86\xb9" // U+f1b9 237 | #define ICON_FA_CAR_BATTERY "\xef\x97\x9f" // U+f5df 238 | #define ICON_FA_CAR_BURST "\xef\x97\xa1" // U+f5e1 239 | #define ICON_FA_CAR_ON "\xee\x93\x9d" // U+e4dd 240 | #define ICON_FA_CAR_REAR "\xef\x97\x9e" // U+f5de 241 | #define ICON_FA_CAR_SIDE "\xef\x97\xa4" // U+f5e4 242 | #define ICON_FA_CAR_TUNNEL "\xee\x93\x9e" // U+e4de 243 | #define ICON_FA_CARAVAN "\xef\xa3\xbf" // U+f8ff 244 | #define ICON_FA_CARET_DOWN "\xef\x83\x97" // U+f0d7 245 | #define ICON_FA_CARET_LEFT "\xef\x83\x99" // U+f0d9 246 | #define ICON_FA_CARET_RIGHT "\xef\x83\x9a" // U+f0da 247 | #define ICON_FA_CARET_UP "\xef\x83\x98" // U+f0d8 248 | #define ICON_FA_CARROT "\xef\x9e\x87" // U+f787 249 | #define ICON_FA_CART_ARROW_DOWN "\xef\x88\x98" // U+f218 250 | #define ICON_FA_CART_FLATBED "\xef\x91\xb4" // U+f474 251 | #define ICON_FA_CART_FLATBED_SUITCASE "\xef\x96\x9d" // U+f59d 252 | #define ICON_FA_CART_PLUS "\xef\x88\x97" // U+f217 253 | #define ICON_FA_CART_SHOPPING "\xef\x81\xba" // U+f07a 254 | #define ICON_FA_CASH_REGISTER "\xef\x9e\x88" // U+f788 255 | #define ICON_FA_CAT "\xef\x9a\xbe" // U+f6be 256 | #define ICON_FA_CEDI_SIGN "\xee\x83\x9f" // U+e0df 257 | #define ICON_FA_CENT_SIGN "\xee\x8f\xb5" // U+e3f5 258 | #define ICON_FA_CERTIFICATE "\xef\x82\xa3" // U+f0a3 259 | #define ICON_FA_CHAIR "\xef\x9b\x80" // U+f6c0 260 | #define ICON_FA_CHALKBOARD "\xef\x94\x9b" // U+f51b 261 | #define ICON_FA_CHALKBOARD_USER "\xef\x94\x9c" // U+f51c 262 | #define ICON_FA_CHAMPAGNE_GLASSES "\xef\x9e\x9f" // U+f79f 263 | #define ICON_FA_CHARGING_STATION "\xef\x97\xa7" // U+f5e7 264 | #define ICON_FA_CHART_AREA "\xef\x87\xbe" // U+f1fe 265 | #define ICON_FA_CHART_BAR "\xef\x82\x80" // U+f080 266 | #define ICON_FA_CHART_COLUMN "\xee\x83\xa3" // U+e0e3 267 | #define ICON_FA_CHART_GANTT "\xee\x83\xa4" // U+e0e4 268 | #define ICON_FA_CHART_LINE "\xef\x88\x81" // U+f201 269 | #define ICON_FA_CHART_PIE "\xef\x88\x80" // U+f200 270 | #define ICON_FA_CHART_SIMPLE "\xee\x91\xb3" // U+e473 271 | #define ICON_FA_CHECK "\xef\x80\x8c" // U+f00c 272 | #define ICON_FA_CHECK_DOUBLE "\xef\x95\xa0" // U+f560 273 | #define ICON_FA_CHECK_TO_SLOT "\xef\x9d\xb2" // U+f772 274 | #define ICON_FA_CHEESE "\xef\x9f\xaf" // U+f7ef 275 | #define ICON_FA_CHESS "\xef\x90\xb9" // U+f439 276 | #define ICON_FA_CHESS_BISHOP "\xef\x90\xba" // U+f43a 277 | #define ICON_FA_CHESS_BOARD "\xef\x90\xbc" // U+f43c 278 | #define ICON_FA_CHESS_KING "\xef\x90\xbf" // U+f43f 279 | #define ICON_FA_CHESS_KNIGHT "\xef\x91\x81" // U+f441 280 | #define ICON_FA_CHESS_PAWN "\xef\x91\x83" // U+f443 281 | #define ICON_FA_CHESS_QUEEN "\xef\x91\x85" // U+f445 282 | #define ICON_FA_CHESS_ROOK "\xef\x91\x87" // U+f447 283 | #define ICON_FA_CHEVRON_DOWN "\xef\x81\xb8" // U+f078 284 | #define ICON_FA_CHEVRON_LEFT "\xef\x81\x93" // U+f053 285 | #define ICON_FA_CHEVRON_RIGHT "\xef\x81\x94" // U+f054 286 | #define ICON_FA_CHEVRON_UP "\xef\x81\xb7" // U+f077 287 | #define ICON_FA_CHILD "\xef\x86\xae" // U+f1ae 288 | #define ICON_FA_CHILD_DRESS "\xee\x96\x9c" // U+e59c 289 | #define ICON_FA_CHILD_REACHING "\xee\x96\x9d" // U+e59d 290 | #define ICON_FA_CHILD_RIFLE "\xee\x93\xa0" // U+e4e0 291 | #define ICON_FA_CHILDREN "\xee\x93\xa1" // U+e4e1 292 | #define ICON_FA_CHURCH "\xef\x94\x9d" // U+f51d 293 | #define ICON_FA_CIRCLE "\xef\x84\x91" // U+f111 294 | #define ICON_FA_CIRCLE_ARROW_DOWN "\xef\x82\xab" // U+f0ab 295 | #define ICON_FA_CIRCLE_ARROW_LEFT "\xef\x82\xa8" // U+f0a8 296 | #define ICON_FA_CIRCLE_ARROW_RIGHT "\xef\x82\xa9" // U+f0a9 297 | #define ICON_FA_CIRCLE_ARROW_UP "\xef\x82\xaa" // U+f0aa 298 | #define ICON_FA_CIRCLE_CHECK "\xef\x81\x98" // U+f058 299 | #define ICON_FA_CIRCLE_CHEVRON_DOWN "\xef\x84\xba" // U+f13a 300 | #define ICON_FA_CIRCLE_CHEVRON_LEFT "\xef\x84\xb7" // U+f137 301 | #define ICON_FA_CIRCLE_CHEVRON_RIGHT "\xef\x84\xb8" // U+f138 302 | #define ICON_FA_CIRCLE_CHEVRON_UP "\xef\x84\xb9" // U+f139 303 | #define ICON_FA_CIRCLE_DOLLAR_TO_SLOT "\xef\x92\xb9" // U+f4b9 304 | #define ICON_FA_CIRCLE_DOT "\xef\x86\x92" // U+f192 305 | #define ICON_FA_CIRCLE_DOWN "\xef\x8d\x98" // U+f358 306 | #define ICON_FA_CIRCLE_EXCLAMATION "\xef\x81\xaa" // U+f06a 307 | #define ICON_FA_CIRCLE_H "\xef\x91\xbe" // U+f47e 308 | #define ICON_FA_CIRCLE_HALF_STROKE "\xef\x81\x82" // U+f042 309 | #define ICON_FA_CIRCLE_INFO "\xef\x81\x9a" // U+f05a 310 | #define ICON_FA_CIRCLE_LEFT "\xef\x8d\x99" // U+f359 311 | #define ICON_FA_CIRCLE_MINUS "\xef\x81\x96" // U+f056 312 | #define ICON_FA_CIRCLE_NODES "\xee\x93\xa2" // U+e4e2 313 | #define ICON_FA_CIRCLE_NOTCH "\xef\x87\x8e" // U+f1ce 314 | #define ICON_FA_CIRCLE_PAUSE "\xef\x8a\x8b" // U+f28b 315 | #define ICON_FA_CIRCLE_PLAY "\xef\x85\x84" // U+f144 316 | #define ICON_FA_CIRCLE_PLUS "\xef\x81\x95" // U+f055 317 | #define ICON_FA_CIRCLE_QUESTION "\xef\x81\x99" // U+f059 318 | #define ICON_FA_CIRCLE_RADIATION "\xef\x9e\xba" // U+f7ba 319 | #define ICON_FA_CIRCLE_RIGHT "\xef\x8d\x9a" // U+f35a 320 | #define ICON_FA_CIRCLE_STOP "\xef\x8a\x8d" // U+f28d 321 | #define ICON_FA_CIRCLE_UP "\xef\x8d\x9b" // U+f35b 322 | #define ICON_FA_CIRCLE_USER "\xef\x8a\xbd" // U+f2bd 323 | #define ICON_FA_CIRCLE_XMARK "\xef\x81\x97" // U+f057 324 | #define ICON_FA_CITY "\xef\x99\x8f" // U+f64f 325 | #define ICON_FA_CLAPPERBOARD "\xee\x84\xb1" // U+e131 326 | #define ICON_FA_CLIPBOARD "\xef\x8c\xa8" // U+f328 327 | #define ICON_FA_CLIPBOARD_CHECK "\xef\x91\xac" // U+f46c 328 | #define ICON_FA_CLIPBOARD_LIST "\xef\x91\xad" // U+f46d 329 | #define ICON_FA_CLIPBOARD_QUESTION "\xee\x93\xa3" // U+e4e3 330 | #define ICON_FA_CLIPBOARD_USER "\xef\x9f\xb3" // U+f7f3 331 | #define ICON_FA_CLOCK "\xef\x80\x97" // U+f017 332 | #define ICON_FA_CLOCK_ROTATE_LEFT "\xef\x87\x9a" // U+f1da 333 | #define ICON_FA_CLONE "\xef\x89\x8d" // U+f24d 334 | #define ICON_FA_CLOSED_CAPTIONING "\xef\x88\x8a" // U+f20a 335 | #define ICON_FA_CLOUD "\xef\x83\x82" // U+f0c2 336 | #define ICON_FA_CLOUD_ARROW_DOWN "\xef\x83\xad" // U+f0ed 337 | #define ICON_FA_CLOUD_ARROW_UP "\xef\x83\xae" // U+f0ee 338 | #define ICON_FA_CLOUD_BOLT "\xef\x9d\xac" // U+f76c 339 | #define ICON_FA_CLOUD_MEATBALL "\xef\x9c\xbb" // U+f73b 340 | #define ICON_FA_CLOUD_MOON "\xef\x9b\x83" // U+f6c3 341 | #define ICON_FA_CLOUD_MOON_RAIN "\xef\x9c\xbc" // U+f73c 342 | #define ICON_FA_CLOUD_RAIN "\xef\x9c\xbd" // U+f73d 343 | #define ICON_FA_CLOUD_SHOWERS_HEAVY "\xef\x9d\x80" // U+f740 344 | #define ICON_FA_CLOUD_SHOWERS_WATER "\xee\x93\xa4" // U+e4e4 345 | #define ICON_FA_CLOUD_SUN "\xef\x9b\x84" // U+f6c4 346 | #define ICON_FA_CLOUD_SUN_RAIN "\xef\x9d\x83" // U+f743 347 | #define ICON_FA_CLOVER "\xee\x84\xb9" // U+e139 348 | #define ICON_FA_CODE "\xef\x84\xa1" // U+f121 349 | #define ICON_FA_CODE_BRANCH "\xef\x84\xa6" // U+f126 350 | #define ICON_FA_CODE_COMMIT "\xef\x8e\x86" // U+f386 351 | #define ICON_FA_CODE_COMPARE "\xee\x84\xba" // U+e13a 352 | #define ICON_FA_CODE_FORK "\xee\x84\xbb" // U+e13b 353 | #define ICON_FA_CODE_MERGE "\xef\x8e\x87" // U+f387 354 | #define ICON_FA_CODE_PULL_REQUEST "\xee\x84\xbc" // U+e13c 355 | #define ICON_FA_COINS "\xef\x94\x9e" // U+f51e 356 | #define ICON_FA_COLON_SIGN "\xee\x85\x80" // U+e140 357 | #define ICON_FA_COMMENT "\xef\x81\xb5" // U+f075 358 | #define ICON_FA_COMMENT_DOLLAR "\xef\x99\x91" // U+f651 359 | #define ICON_FA_COMMENT_DOTS "\xef\x92\xad" // U+f4ad 360 | #define ICON_FA_COMMENT_MEDICAL "\xef\x9f\xb5" // U+f7f5 361 | #define ICON_FA_COMMENT_SLASH "\xef\x92\xb3" // U+f4b3 362 | #define ICON_FA_COMMENT_SMS "\xef\x9f\x8d" // U+f7cd 363 | #define ICON_FA_COMMENTS "\xef\x82\x86" // U+f086 364 | #define ICON_FA_COMMENTS_DOLLAR "\xef\x99\x93" // U+f653 365 | #define ICON_FA_COMPACT_DISC "\xef\x94\x9f" // U+f51f 366 | #define ICON_FA_COMPASS "\xef\x85\x8e" // U+f14e 367 | #define ICON_FA_COMPASS_DRAFTING "\xef\x95\xa8" // U+f568 368 | #define ICON_FA_COMPRESS "\xef\x81\xa6" // U+f066 369 | #define ICON_FA_COMPUTER "\xee\x93\xa5" // U+e4e5 370 | #define ICON_FA_COMPUTER_MOUSE "\xef\xa3\x8c" // U+f8cc 371 | #define ICON_FA_COOKIE "\xef\x95\xa3" // U+f563 372 | #define ICON_FA_COOKIE_BITE "\xef\x95\xa4" // U+f564 373 | #define ICON_FA_COPY "\xef\x83\x85" // U+f0c5 374 | #define ICON_FA_COPYRIGHT "\xef\x87\xb9" // U+f1f9 375 | #define ICON_FA_COUCH "\xef\x92\xb8" // U+f4b8 376 | #define ICON_FA_COW "\xef\x9b\x88" // U+f6c8 377 | #define ICON_FA_CREDIT_CARD "\xef\x82\x9d" // U+f09d 378 | #define ICON_FA_CROP "\xef\x84\xa5" // U+f125 379 | #define ICON_FA_CROP_SIMPLE "\xef\x95\xa5" // U+f565 380 | #define ICON_FA_CROSS "\xef\x99\x94" // U+f654 381 | #define ICON_FA_CROSSHAIRS "\xef\x81\x9b" // U+f05b 382 | #define ICON_FA_CROW "\xef\x94\xa0" // U+f520 383 | #define ICON_FA_CROWN "\xef\x94\xa1" // U+f521 384 | #define ICON_FA_CRUTCH "\xef\x9f\xb7" // U+f7f7 385 | #define ICON_FA_CRUZEIRO_SIGN "\xee\x85\x92" // U+e152 386 | #define ICON_FA_CUBE "\xef\x86\xb2" // U+f1b2 387 | #define ICON_FA_CUBES "\xef\x86\xb3" // U+f1b3 388 | #define ICON_FA_CUBES_STACKED "\xee\x93\xa6" // U+e4e6 389 | #define ICON_FA_D "D" // U+0044 390 | #define ICON_FA_DATABASE "\xef\x87\x80" // U+f1c0 391 | #define ICON_FA_DELETE_LEFT "\xef\x95\x9a" // U+f55a 392 | #define ICON_FA_DEMOCRAT "\xef\x9d\x87" // U+f747 393 | #define ICON_FA_DESKTOP "\xef\x8e\x90" // U+f390 394 | #define ICON_FA_DHARMACHAKRA "\xef\x99\x95" // U+f655 395 | #define ICON_FA_DIAGRAM_NEXT "\xee\x91\xb6" // U+e476 396 | #define ICON_FA_DIAGRAM_PREDECESSOR "\xee\x91\xb7" // U+e477 397 | #define ICON_FA_DIAGRAM_PROJECT "\xef\x95\x82" // U+f542 398 | #define ICON_FA_DIAGRAM_SUCCESSOR "\xee\x91\xba" // U+e47a 399 | #define ICON_FA_DIAMOND "\xef\x88\x99" // U+f219 400 | #define ICON_FA_DIAMOND_TURN_RIGHT "\xef\x97\xab" // U+f5eb 401 | #define ICON_FA_DICE "\xef\x94\xa2" // U+f522 402 | #define ICON_FA_DICE_D20 "\xef\x9b\x8f" // U+f6cf 403 | #define ICON_FA_DICE_D6 "\xef\x9b\x91" // U+f6d1 404 | #define ICON_FA_DICE_FIVE "\xef\x94\xa3" // U+f523 405 | #define ICON_FA_DICE_FOUR "\xef\x94\xa4" // U+f524 406 | #define ICON_FA_DICE_ONE "\xef\x94\xa5" // U+f525 407 | #define ICON_FA_DICE_SIX "\xef\x94\xa6" // U+f526 408 | #define ICON_FA_DICE_THREE "\xef\x94\xa7" // U+f527 409 | #define ICON_FA_DICE_TWO "\xef\x94\xa8" // U+f528 410 | #define ICON_FA_DISEASE "\xef\x9f\xba" // U+f7fa 411 | #define ICON_FA_DISPLAY "\xee\x85\xa3" // U+e163 412 | #define ICON_FA_DIVIDE "\xef\x94\xa9" // U+f529 413 | #define ICON_FA_DNA "\xef\x91\xb1" // U+f471 414 | #define ICON_FA_DOG "\xef\x9b\x93" // U+f6d3 415 | #define ICON_FA_DOLLAR_SIGN "$" // U+0024 416 | #define ICON_FA_DOLLY "\xef\x91\xb2" // U+f472 417 | #define ICON_FA_DONG_SIGN "\xee\x85\xa9" // U+e169 418 | #define ICON_FA_DOOR_CLOSED "\xef\x94\xaa" // U+f52a 419 | #define ICON_FA_DOOR_OPEN "\xef\x94\xab" // U+f52b 420 | #define ICON_FA_DOVE "\xef\x92\xba" // U+f4ba 421 | #define ICON_FA_DOWN_LEFT_AND_UP_RIGHT_TO_CENTER "\xef\x90\xa2" // U+f422 422 | #define ICON_FA_DOWN_LONG "\xef\x8c\x89" // U+f309 423 | #define ICON_FA_DOWNLOAD "\xef\x80\x99" // U+f019 424 | #define ICON_FA_DRAGON "\xef\x9b\x95" // U+f6d5 425 | #define ICON_FA_DRAW_POLYGON "\xef\x97\xae" // U+f5ee 426 | #define ICON_FA_DROPLET "\xef\x81\x83" // U+f043 427 | #define ICON_FA_DROPLET_SLASH "\xef\x97\x87" // U+f5c7 428 | #define ICON_FA_DRUM "\xef\x95\xa9" // U+f569 429 | #define ICON_FA_DRUM_STEELPAN "\xef\x95\xaa" // U+f56a 430 | #define ICON_FA_DRUMSTICK_BITE "\xef\x9b\x97" // U+f6d7 431 | #define ICON_FA_DUMBBELL "\xef\x91\x8b" // U+f44b 432 | #define ICON_FA_DUMPSTER "\xef\x9e\x93" // U+f793 433 | #define ICON_FA_DUMPSTER_FIRE "\xef\x9e\x94" // U+f794 434 | #define ICON_FA_DUNGEON "\xef\x9b\x99" // U+f6d9 435 | #define ICON_FA_E "E" // U+0045 436 | #define ICON_FA_EAR_DEAF "\xef\x8a\xa4" // U+f2a4 437 | #define ICON_FA_EAR_LISTEN "\xef\x8a\xa2" // U+f2a2 438 | #define ICON_FA_EARTH_AFRICA "\xef\x95\xbc" // U+f57c 439 | #define ICON_FA_EARTH_AMERICAS "\xef\x95\xbd" // U+f57d 440 | #define ICON_FA_EARTH_ASIA "\xef\x95\xbe" // U+f57e 441 | #define ICON_FA_EARTH_EUROPE "\xef\x9e\xa2" // U+f7a2 442 | #define ICON_FA_EARTH_OCEANIA "\xee\x91\xbb" // U+e47b 443 | #define ICON_FA_EGG "\xef\x9f\xbb" // U+f7fb 444 | #define ICON_FA_EJECT "\xef\x81\x92" // U+f052 445 | #define ICON_FA_ELEVATOR "\xee\x85\xad" // U+e16d 446 | #define ICON_FA_ELLIPSIS "\xef\x85\x81" // U+f141 447 | #define ICON_FA_ELLIPSIS_VERTICAL "\xef\x85\x82" // U+f142 448 | #define ICON_FA_ENVELOPE "\xef\x83\xa0" // U+f0e0 449 | #define ICON_FA_ENVELOPE_CIRCLE_CHECK "\xee\x93\xa8" // U+e4e8 450 | #define ICON_FA_ENVELOPE_OPEN "\xef\x8a\xb6" // U+f2b6 451 | #define ICON_FA_ENVELOPE_OPEN_TEXT "\xef\x99\x98" // U+f658 452 | #define ICON_FA_ENVELOPES_BULK "\xef\x99\xb4" // U+f674 453 | #define ICON_FA_EQUALS "=" // U+003d 454 | #define ICON_FA_ERASER "\xef\x84\xad" // U+f12d 455 | #define ICON_FA_ETHERNET "\xef\x9e\x96" // U+f796 456 | #define ICON_FA_EURO_SIGN "\xef\x85\x93" // U+f153 457 | #define ICON_FA_EXCLAMATION "!" // U+0021 458 | #define ICON_FA_EXPAND "\xef\x81\xa5" // U+f065 459 | #define ICON_FA_EXPLOSION "\xee\x93\xa9" // U+e4e9 460 | #define ICON_FA_EYE "\xef\x81\xae" // U+f06e 461 | #define ICON_FA_EYE_DROPPER "\xef\x87\xbb" // U+f1fb 462 | #define ICON_FA_EYE_LOW_VISION "\xef\x8a\xa8" // U+f2a8 463 | #define ICON_FA_EYE_SLASH "\xef\x81\xb0" // U+f070 464 | #define ICON_FA_F "F" // U+0046 465 | #define ICON_FA_FACE_ANGRY "\xef\x95\x96" // U+f556 466 | #define ICON_FA_FACE_DIZZY "\xef\x95\xa7" // U+f567 467 | #define ICON_FA_FACE_FLUSHED "\xef\x95\xb9" // U+f579 468 | #define ICON_FA_FACE_FROWN "\xef\x84\x99" // U+f119 469 | #define ICON_FA_FACE_FROWN_OPEN "\xef\x95\xba" // U+f57a 470 | #define ICON_FA_FACE_GRIMACE "\xef\x95\xbf" // U+f57f 471 | #define ICON_FA_FACE_GRIN "\xef\x96\x80" // U+f580 472 | #define ICON_FA_FACE_GRIN_BEAM "\xef\x96\x82" // U+f582 473 | #define ICON_FA_FACE_GRIN_BEAM_SWEAT "\xef\x96\x83" // U+f583 474 | #define ICON_FA_FACE_GRIN_HEARTS "\xef\x96\x84" // U+f584 475 | #define ICON_FA_FACE_GRIN_SQUINT "\xef\x96\x85" // U+f585 476 | #define ICON_FA_FACE_GRIN_SQUINT_TEARS "\xef\x96\x86" // U+f586 477 | #define ICON_FA_FACE_GRIN_STARS "\xef\x96\x87" // U+f587 478 | #define ICON_FA_FACE_GRIN_TEARS "\xef\x96\x88" // U+f588 479 | #define ICON_FA_FACE_GRIN_TONGUE "\xef\x96\x89" // U+f589 480 | #define ICON_FA_FACE_GRIN_TONGUE_SQUINT "\xef\x96\x8a" // U+f58a 481 | #define ICON_FA_FACE_GRIN_TONGUE_WINK "\xef\x96\x8b" // U+f58b 482 | #define ICON_FA_FACE_GRIN_WIDE "\xef\x96\x81" // U+f581 483 | #define ICON_FA_FACE_GRIN_WINK "\xef\x96\x8c" // U+f58c 484 | #define ICON_FA_FACE_KISS "\xef\x96\x96" // U+f596 485 | #define ICON_FA_FACE_KISS_BEAM "\xef\x96\x97" // U+f597 486 | #define ICON_FA_FACE_KISS_WINK_HEART "\xef\x96\x98" // U+f598 487 | #define ICON_FA_FACE_LAUGH "\xef\x96\x99" // U+f599 488 | #define ICON_FA_FACE_LAUGH_BEAM "\xef\x96\x9a" // U+f59a 489 | #define ICON_FA_FACE_LAUGH_SQUINT "\xef\x96\x9b" // U+f59b 490 | #define ICON_FA_FACE_LAUGH_WINK "\xef\x96\x9c" // U+f59c 491 | #define ICON_FA_FACE_MEH "\xef\x84\x9a" // U+f11a 492 | #define ICON_FA_FACE_MEH_BLANK "\xef\x96\xa4" // U+f5a4 493 | #define ICON_FA_FACE_ROLLING_EYES "\xef\x96\xa5" // U+f5a5 494 | #define ICON_FA_FACE_SAD_CRY "\xef\x96\xb3" // U+f5b3 495 | #define ICON_FA_FACE_SAD_TEAR "\xef\x96\xb4" // U+f5b4 496 | #define ICON_FA_FACE_SMILE "\xef\x84\x98" // U+f118 497 | #define ICON_FA_FACE_SMILE_BEAM "\xef\x96\xb8" // U+f5b8 498 | #define ICON_FA_FACE_SMILE_WINK "\xef\x93\x9a" // U+f4da 499 | #define ICON_FA_FACE_SURPRISE "\xef\x97\x82" // U+f5c2 500 | #define ICON_FA_FACE_TIRED "\xef\x97\x88" // U+f5c8 501 | #define ICON_FA_FAN "\xef\xa1\xa3" // U+f863 502 | #define ICON_FA_FAUCET "\xee\x80\x85" // U+e005 503 | #define ICON_FA_FAUCET_DRIP "\xee\x80\x86" // U+e006 504 | #define ICON_FA_FAX "\xef\x86\xac" // U+f1ac 505 | #define ICON_FA_FEATHER "\xef\x94\xad" // U+f52d 506 | #define ICON_FA_FEATHER_POINTED "\xef\x95\xab" // U+f56b 507 | #define ICON_FA_FERRY "\xee\x93\xaa" // U+e4ea 508 | #define ICON_FA_FILE "\xef\x85\x9b" // U+f15b 509 | #define ICON_FA_FILE_ARROW_DOWN "\xef\x95\xad" // U+f56d 510 | #define ICON_FA_FILE_ARROW_UP "\xef\x95\xb4" // U+f574 511 | #define ICON_FA_FILE_AUDIO "\xef\x87\x87" // U+f1c7 512 | #define ICON_FA_FILE_CIRCLE_CHECK "\xee\x92\x93" // U+e493 513 | #define ICON_FA_FILE_CIRCLE_EXCLAMATION "\xee\x93\xab" // U+e4eb 514 | #define ICON_FA_FILE_CIRCLE_MINUS "\xee\x93\xad" // U+e4ed 515 | #define ICON_FA_FILE_CIRCLE_PLUS "\xee\x93\xae" // U+e4ee 516 | #define ICON_FA_FILE_CIRCLE_QUESTION "\xee\x93\xaf" // U+e4ef 517 | #define ICON_FA_FILE_CIRCLE_XMARK "\xee\x92\x94" // U+e494 518 | #define ICON_FA_FILE_CODE "\xef\x87\x89" // U+f1c9 519 | #define ICON_FA_FILE_CONTRACT "\xef\x95\xac" // U+f56c 520 | #define ICON_FA_FILE_CSV "\xef\x9b\x9d" // U+f6dd 521 | #define ICON_FA_FILE_EXCEL "\xef\x87\x83" // U+f1c3 522 | #define ICON_FA_FILE_EXPORT "\xef\x95\xae" // U+f56e 523 | #define ICON_FA_FILE_IMAGE "\xef\x87\x85" // U+f1c5 524 | #define ICON_FA_FILE_IMPORT "\xef\x95\xaf" // U+f56f 525 | #define ICON_FA_FILE_INVOICE "\xef\x95\xb0" // U+f570 526 | #define ICON_FA_FILE_INVOICE_DOLLAR "\xef\x95\xb1" // U+f571 527 | #define ICON_FA_FILE_LINES "\xef\x85\x9c" // U+f15c 528 | #define ICON_FA_FILE_MEDICAL "\xef\x91\xb7" // U+f477 529 | #define ICON_FA_FILE_PDF "\xef\x87\x81" // U+f1c1 530 | #define ICON_FA_FILE_PEN "\xef\x8c\x9c" // U+f31c 531 | #define ICON_FA_FILE_POWERPOINT "\xef\x87\x84" // U+f1c4 532 | #define ICON_FA_FILE_PRESCRIPTION "\xef\x95\xb2" // U+f572 533 | #define ICON_FA_FILE_SHIELD "\xee\x93\xb0" // U+e4f0 534 | #define ICON_FA_FILE_SIGNATURE "\xef\x95\xb3" // U+f573 535 | #define ICON_FA_FILE_VIDEO "\xef\x87\x88" // U+f1c8 536 | #define ICON_FA_FILE_WAVEFORM "\xef\x91\xb8" // U+f478 537 | #define ICON_FA_FILE_WORD "\xef\x87\x82" // U+f1c2 538 | #define ICON_FA_FILE_ZIPPER "\xef\x87\x86" // U+f1c6 539 | #define ICON_FA_FILL "\xef\x95\xb5" // U+f575 540 | #define ICON_FA_FILL_DRIP "\xef\x95\xb6" // U+f576 541 | #define ICON_FA_FILM "\xef\x80\x88" // U+f008 542 | #define ICON_FA_FILTER "\xef\x82\xb0" // U+f0b0 543 | #define ICON_FA_FILTER_CIRCLE_DOLLAR "\xef\x99\xa2" // U+f662 544 | #define ICON_FA_FILTER_CIRCLE_XMARK "\xee\x85\xbb" // U+e17b 545 | #define ICON_FA_FINGERPRINT "\xef\x95\xb7" // U+f577 546 | #define ICON_FA_FIRE "\xef\x81\xad" // U+f06d 547 | #define ICON_FA_FIRE_BURNER "\xee\x93\xb1" // U+e4f1 548 | #define ICON_FA_FIRE_EXTINGUISHER "\xef\x84\xb4" // U+f134 549 | #define ICON_FA_FIRE_FLAME_CURVED "\xef\x9f\xa4" // U+f7e4 550 | #define ICON_FA_FIRE_FLAME_SIMPLE "\xef\x91\xaa" // U+f46a 551 | #define ICON_FA_FISH "\xef\x95\xb8" // U+f578 552 | #define ICON_FA_FISH_FINS "\xee\x93\xb2" // U+e4f2 553 | #define ICON_FA_FLAG "\xef\x80\xa4" // U+f024 554 | #define ICON_FA_FLAG_CHECKERED "\xef\x84\x9e" // U+f11e 555 | #define ICON_FA_FLAG_USA "\xef\x9d\x8d" // U+f74d 556 | #define ICON_FA_FLASK "\xef\x83\x83" // U+f0c3 557 | #define ICON_FA_FLASK_VIAL "\xee\x93\xb3" // U+e4f3 558 | #define ICON_FA_FLOPPY_DISK "\xef\x83\x87" // U+f0c7 559 | #define ICON_FA_FLORIN_SIGN "\xee\x86\x84" // U+e184 560 | #define ICON_FA_FOLDER "\xef\x81\xbb" // U+f07b 561 | #define ICON_FA_FOLDER_CLOSED "\xee\x86\x85" // U+e185 562 | #define ICON_FA_FOLDER_MINUS "\xef\x99\x9d" // U+f65d 563 | #define ICON_FA_FOLDER_OPEN "\xef\x81\xbc" // U+f07c 564 | #define ICON_FA_FOLDER_PLUS "\xef\x99\x9e" // U+f65e 565 | #define ICON_FA_FOLDER_TREE "\xef\xa0\x82" // U+f802 566 | #define ICON_FA_FONT "\xef\x80\xb1" // U+f031 567 | #define ICON_FA_FONT_AWESOME "\xef\x8a\xb4" // U+f2b4 568 | #define ICON_FA_FOOTBALL "\xef\x91\x8e" // U+f44e 569 | #define ICON_FA_FORWARD "\xef\x81\x8e" // U+f04e 570 | #define ICON_FA_FORWARD_FAST "\xef\x81\x90" // U+f050 571 | #define ICON_FA_FORWARD_STEP "\xef\x81\x91" // U+f051 572 | #define ICON_FA_FRANC_SIGN "\xee\x86\x8f" // U+e18f 573 | #define ICON_FA_FROG "\xef\x94\xae" // U+f52e 574 | #define ICON_FA_FUTBOL "\xef\x87\xa3" // U+f1e3 575 | #define ICON_FA_G "G" // U+0047 576 | #define ICON_FA_GAMEPAD "\xef\x84\x9b" // U+f11b 577 | #define ICON_FA_GAS_PUMP "\xef\x94\xaf" // U+f52f 578 | #define ICON_FA_GAUGE "\xef\x98\xa4" // U+f624 579 | #define ICON_FA_GAUGE_HIGH "\xef\x98\xa5" // U+f625 580 | #define ICON_FA_GAUGE_SIMPLE "\xef\x98\xa9" // U+f629 581 | #define ICON_FA_GAUGE_SIMPLE_HIGH "\xef\x98\xaa" // U+f62a 582 | #define ICON_FA_GAVEL "\xef\x83\xa3" // U+f0e3 583 | #define ICON_FA_GEAR "\xef\x80\x93" // U+f013 584 | #define ICON_FA_GEARS "\xef\x82\x85" // U+f085 585 | #define ICON_FA_GEM "\xef\x8e\xa5" // U+f3a5 586 | #define ICON_FA_GENDERLESS "\xef\x88\xad" // U+f22d 587 | #define ICON_FA_GHOST "\xef\x9b\xa2" // U+f6e2 588 | #define ICON_FA_GIFT "\xef\x81\xab" // U+f06b 589 | #define ICON_FA_GIFTS "\xef\x9e\x9c" // U+f79c 590 | #define ICON_FA_GLASS_WATER "\xee\x93\xb4" // U+e4f4 591 | #define ICON_FA_GLASS_WATER_DROPLET "\xee\x93\xb5" // U+e4f5 592 | #define ICON_FA_GLASSES "\xef\x94\xb0" // U+f530 593 | #define ICON_FA_GLOBE "\xef\x82\xac" // U+f0ac 594 | #define ICON_FA_GOLF_BALL_TEE "\xef\x91\x90" // U+f450 595 | #define ICON_FA_GOPURAM "\xef\x99\xa4" // U+f664 596 | #define ICON_FA_GRADUATION_CAP "\xef\x86\x9d" // U+f19d 597 | #define ICON_FA_GREATER_THAN ">" // U+003e 598 | #define ICON_FA_GREATER_THAN_EQUAL "\xef\x94\xb2" // U+f532 599 | #define ICON_FA_GRIP "\xef\x96\x8d" // U+f58d 600 | #define ICON_FA_GRIP_LINES "\xef\x9e\xa4" // U+f7a4 601 | #define ICON_FA_GRIP_LINES_VERTICAL "\xef\x9e\xa5" // U+f7a5 602 | #define ICON_FA_GRIP_VERTICAL "\xef\x96\x8e" // U+f58e 603 | #define ICON_FA_GROUP_ARROWS_ROTATE "\xee\x93\xb6" // U+e4f6 604 | #define ICON_FA_GUARANI_SIGN "\xee\x86\x9a" // U+e19a 605 | #define ICON_FA_GUITAR "\xef\x9e\xa6" // U+f7a6 606 | #define ICON_FA_GUN "\xee\x86\x9b" // U+e19b 607 | #define ICON_FA_H "H" // U+0048 608 | #define ICON_FA_HAMMER "\xef\x9b\xa3" // U+f6e3 609 | #define ICON_FA_HAMSA "\xef\x99\xa5" // U+f665 610 | #define ICON_FA_HAND "\xef\x89\x96" // U+f256 611 | #define ICON_FA_HAND_BACK_FIST "\xef\x89\x95" // U+f255 612 | #define ICON_FA_HAND_DOTS "\xef\x91\xa1" // U+f461 613 | #define ICON_FA_HAND_FIST "\xef\x9b\x9e" // U+f6de 614 | #define ICON_FA_HAND_HOLDING "\xef\x92\xbd" // U+f4bd 615 | #define ICON_FA_HAND_HOLDING_DOLLAR "\xef\x93\x80" // U+f4c0 616 | #define ICON_FA_HAND_HOLDING_DROPLET "\xef\x93\x81" // U+f4c1 617 | #define ICON_FA_HAND_HOLDING_HAND "\xee\x93\xb7" // U+e4f7 618 | #define ICON_FA_HAND_HOLDING_HEART "\xef\x92\xbe" // U+f4be 619 | #define ICON_FA_HAND_HOLDING_MEDICAL "\xee\x81\x9c" // U+e05c 620 | #define ICON_FA_HAND_LIZARD "\xef\x89\x98" // U+f258 621 | #define ICON_FA_HAND_MIDDLE_FINGER "\xef\xa0\x86" // U+f806 622 | #define ICON_FA_HAND_PEACE "\xef\x89\x9b" // U+f25b 623 | #define ICON_FA_HAND_POINT_DOWN "\xef\x82\xa7" // U+f0a7 624 | #define ICON_FA_HAND_POINT_LEFT "\xef\x82\xa5" // U+f0a5 625 | #define ICON_FA_HAND_POINT_RIGHT "\xef\x82\xa4" // U+f0a4 626 | #define ICON_FA_HAND_POINT_UP "\xef\x82\xa6" // U+f0a6 627 | #define ICON_FA_HAND_POINTER "\xef\x89\x9a" // U+f25a 628 | #define ICON_FA_HAND_SCISSORS "\xef\x89\x97" // U+f257 629 | #define ICON_FA_HAND_SPARKLES "\xee\x81\x9d" // U+e05d 630 | #define ICON_FA_HAND_SPOCK "\xef\x89\x99" // U+f259 631 | #define ICON_FA_HANDCUFFS "\xee\x93\xb8" // U+e4f8 632 | #define ICON_FA_HANDS "\xef\x8a\xa7" // U+f2a7 633 | #define ICON_FA_HANDS_ASL_INTERPRETING "\xef\x8a\xa3" // U+f2a3 634 | #define ICON_FA_HANDS_BOUND "\xee\x93\xb9" // U+e4f9 635 | #define ICON_FA_HANDS_BUBBLES "\xee\x81\x9e" // U+e05e 636 | #define ICON_FA_HANDS_CLAPPING "\xee\x86\xa8" // U+e1a8 637 | #define ICON_FA_HANDS_HOLDING "\xef\x93\x82" // U+f4c2 638 | #define ICON_FA_HANDS_HOLDING_CHILD "\xee\x93\xba" // U+e4fa 639 | #define ICON_FA_HANDS_HOLDING_CIRCLE "\xee\x93\xbb" // U+e4fb 640 | #define ICON_FA_HANDS_PRAYING "\xef\x9a\x84" // U+f684 641 | #define ICON_FA_HANDSHAKE "\xef\x8a\xb5" // U+f2b5 642 | #define ICON_FA_HANDSHAKE_ANGLE "\xef\x93\x84" // U+f4c4 643 | #define ICON_FA_HANDSHAKE_SIMPLE "\xef\x93\x86" // U+f4c6 644 | #define ICON_FA_HANDSHAKE_SIMPLE_SLASH "\xee\x81\x9f" // U+e05f 645 | #define ICON_FA_HANDSHAKE_SLASH "\xee\x81\xa0" // U+e060 646 | #define ICON_FA_HANUKIAH "\xef\x9b\xa6" // U+f6e6 647 | #define ICON_FA_HARD_DRIVE "\xef\x82\xa0" // U+f0a0 648 | #define ICON_FA_HASHTAG "#" // U+0023 649 | #define ICON_FA_HAT_COWBOY "\xef\xa3\x80" // U+f8c0 650 | #define ICON_FA_HAT_COWBOY_SIDE "\xef\xa3\x81" // U+f8c1 651 | #define ICON_FA_HAT_WIZARD "\xef\x9b\xa8" // U+f6e8 652 | #define ICON_FA_HEAD_SIDE_COUGH "\xee\x81\xa1" // U+e061 653 | #define ICON_FA_HEAD_SIDE_COUGH_SLASH "\xee\x81\xa2" // U+e062 654 | #define ICON_FA_HEAD_SIDE_MASK "\xee\x81\xa3" // U+e063 655 | #define ICON_FA_HEAD_SIDE_VIRUS "\xee\x81\xa4" // U+e064 656 | #define ICON_FA_HEADING "\xef\x87\x9c" // U+f1dc 657 | #define ICON_FA_HEADPHONES "\xef\x80\xa5" // U+f025 658 | #define ICON_FA_HEADPHONES_SIMPLE "\xef\x96\x8f" // U+f58f 659 | #define ICON_FA_HEADSET "\xef\x96\x90" // U+f590 660 | #define ICON_FA_HEART "\xef\x80\x84" // U+f004 661 | #define ICON_FA_HEART_CIRCLE_BOLT "\xee\x93\xbc" // U+e4fc 662 | #define ICON_FA_HEART_CIRCLE_CHECK "\xee\x93\xbd" // U+e4fd 663 | #define ICON_FA_HEART_CIRCLE_EXCLAMATION "\xee\x93\xbe" // U+e4fe 664 | #define ICON_FA_HEART_CIRCLE_MINUS "\xee\x93\xbf" // U+e4ff 665 | #define ICON_FA_HEART_CIRCLE_PLUS "\xee\x94\x80" // U+e500 666 | #define ICON_FA_HEART_CIRCLE_XMARK "\xee\x94\x81" // U+e501 667 | #define ICON_FA_HEART_CRACK "\xef\x9e\xa9" // U+f7a9 668 | #define ICON_FA_HEART_PULSE "\xef\x88\x9e" // U+f21e 669 | #define ICON_FA_HELICOPTER "\xef\x94\xb3" // U+f533 670 | #define ICON_FA_HELICOPTER_SYMBOL "\xee\x94\x82" // U+e502 671 | #define ICON_FA_HELMET_SAFETY "\xef\xa0\x87" // U+f807 672 | #define ICON_FA_HELMET_UN "\xee\x94\x83" // U+e503 673 | #define ICON_FA_HIGHLIGHTER "\xef\x96\x91" // U+f591 674 | #define ICON_FA_HILL_AVALANCHE "\xee\x94\x87" // U+e507 675 | #define ICON_FA_HILL_ROCKSLIDE "\xee\x94\x88" // U+e508 676 | #define ICON_FA_HIPPO "\xef\x9b\xad" // U+f6ed 677 | #define ICON_FA_HOCKEY_PUCK "\xef\x91\x93" // U+f453 678 | #define ICON_FA_HOLLY_BERRY "\xef\x9e\xaa" // U+f7aa 679 | #define ICON_FA_HORSE "\xef\x9b\xb0" // U+f6f0 680 | #define ICON_FA_HORSE_HEAD "\xef\x9e\xab" // U+f7ab 681 | #define ICON_FA_HOSPITAL "\xef\x83\xb8" // U+f0f8 682 | #define ICON_FA_HOSPITAL_USER "\xef\xa0\x8d" // U+f80d 683 | #define ICON_FA_HOT_TUB_PERSON "\xef\x96\x93" // U+f593 684 | #define ICON_FA_HOTDOG "\xef\xa0\x8f" // U+f80f 685 | #define ICON_FA_HOTEL "\xef\x96\x94" // U+f594 686 | #define ICON_FA_HOURGLASS "\xef\x89\x94" // U+f254 687 | #define ICON_FA_HOURGLASS_EMPTY "\xef\x89\x92" // U+f252 688 | #define ICON_FA_HOURGLASS_END "\xef\x89\x93" // U+f253 689 | #define ICON_FA_HOURGLASS_START "\xef\x89\x91" // U+f251 690 | #define ICON_FA_HOUSE "\xef\x80\x95" // U+f015 691 | #define ICON_FA_HOUSE_CHIMNEY "\xee\x8e\xaf" // U+e3af 692 | #define ICON_FA_HOUSE_CHIMNEY_CRACK "\xef\x9b\xb1" // U+f6f1 693 | #define ICON_FA_HOUSE_CHIMNEY_MEDICAL "\xef\x9f\xb2" // U+f7f2 694 | #define ICON_FA_HOUSE_CHIMNEY_USER "\xee\x81\xa5" // U+e065 695 | #define ICON_FA_HOUSE_CHIMNEY_WINDOW "\xee\x80\x8d" // U+e00d 696 | #define ICON_FA_HOUSE_CIRCLE_CHECK "\xee\x94\x89" // U+e509 697 | #define ICON_FA_HOUSE_CIRCLE_EXCLAMATION "\xee\x94\x8a" // U+e50a 698 | #define ICON_FA_HOUSE_CIRCLE_XMARK "\xee\x94\x8b" // U+e50b 699 | #define ICON_FA_HOUSE_CRACK "\xee\x8e\xb1" // U+e3b1 700 | #define ICON_FA_HOUSE_FIRE "\xee\x94\x8c" // U+e50c 701 | #define ICON_FA_HOUSE_FLAG "\xee\x94\x8d" // U+e50d 702 | #define ICON_FA_HOUSE_FLOOD_WATER "\xee\x94\x8e" // U+e50e 703 | #define ICON_FA_HOUSE_FLOOD_WATER_CIRCLE_ARROW_RIGHT "\xee\x94\x8f" // U+e50f 704 | #define ICON_FA_HOUSE_LAPTOP "\xee\x81\xa6" // U+e066 705 | #define ICON_FA_HOUSE_LOCK "\xee\x94\x90" // U+e510 706 | #define ICON_FA_HOUSE_MEDICAL "\xee\x8e\xb2" // U+e3b2 707 | #define ICON_FA_HOUSE_MEDICAL_CIRCLE_CHECK "\xee\x94\x91" // U+e511 708 | #define ICON_FA_HOUSE_MEDICAL_CIRCLE_EXCLAMATION "\xee\x94\x92" // U+e512 709 | #define ICON_FA_HOUSE_MEDICAL_CIRCLE_XMARK "\xee\x94\x93" // U+e513 710 | #define ICON_FA_HOUSE_MEDICAL_FLAG "\xee\x94\x94" // U+e514 711 | #define ICON_FA_HOUSE_SIGNAL "\xee\x80\x92" // U+e012 712 | #define ICON_FA_HOUSE_TSUNAMI "\xee\x94\x95" // U+e515 713 | #define ICON_FA_HOUSE_USER "\xee\x86\xb0" // U+e1b0 714 | #define ICON_FA_HRYVNIA_SIGN "\xef\x9b\xb2" // U+f6f2 715 | #define ICON_FA_HURRICANE "\xef\x9d\x91" // U+f751 716 | #define ICON_FA_I "I" // U+0049 717 | #define ICON_FA_I_CURSOR "\xef\x89\x86" // U+f246 718 | #define ICON_FA_ICE_CREAM "\xef\xa0\x90" // U+f810 719 | #define ICON_FA_ICICLES "\xef\x9e\xad" // U+f7ad 720 | #define ICON_FA_ICONS "\xef\xa1\xad" // U+f86d 721 | #define ICON_FA_ID_BADGE "\xef\x8b\x81" // U+f2c1 722 | #define ICON_FA_ID_CARD "\xef\x8b\x82" // U+f2c2 723 | #define ICON_FA_ID_CARD_CLIP "\xef\x91\xbf" // U+f47f 724 | #define ICON_FA_IGLOO "\xef\x9e\xae" // U+f7ae 725 | #define ICON_FA_IMAGE "\xef\x80\xbe" // U+f03e 726 | #define ICON_FA_IMAGE_PORTRAIT "\xef\x8f\xa0" // U+f3e0 727 | #define ICON_FA_IMAGES "\xef\x8c\x82" // U+f302 728 | #define ICON_FA_INBOX "\xef\x80\x9c" // U+f01c 729 | #define ICON_FA_INDENT "\xef\x80\xbc" // U+f03c 730 | #define ICON_FA_INDIAN_RUPEE_SIGN "\xee\x86\xbc" // U+e1bc 731 | #define ICON_FA_INDUSTRY "\xef\x89\xb5" // U+f275 732 | #define ICON_FA_INFINITY "\xef\x94\xb4" // U+f534 733 | #define ICON_FA_INFO "\xef\x84\xa9" // U+f129 734 | #define ICON_FA_ITALIC "\xef\x80\xb3" // U+f033 735 | #define ICON_FA_J "J" // U+004a 736 | #define ICON_FA_JAR "\xee\x94\x96" // U+e516 737 | #define ICON_FA_JAR_WHEAT "\xee\x94\x97" // U+e517 738 | #define ICON_FA_JEDI "\xef\x99\xa9" // U+f669 739 | #define ICON_FA_JET_FIGHTER "\xef\x83\xbb" // U+f0fb 740 | #define ICON_FA_JET_FIGHTER_UP "\xee\x94\x98" // U+e518 741 | #define ICON_FA_JOINT "\xef\x96\x95" // U+f595 742 | #define ICON_FA_JUG_DETERGENT "\xee\x94\x99" // U+e519 743 | #define ICON_FA_K "K" // U+004b 744 | #define ICON_FA_KAABA "\xef\x99\xab" // U+f66b 745 | #define ICON_FA_KEY "\xef\x82\x84" // U+f084 746 | #define ICON_FA_KEYBOARD "\xef\x84\x9c" // U+f11c 747 | #define ICON_FA_KHANDA "\xef\x99\xad" // U+f66d 748 | #define ICON_FA_KIP_SIGN "\xee\x87\x84" // U+e1c4 749 | #define ICON_FA_KIT_MEDICAL "\xef\x91\xb9" // U+f479 750 | #define ICON_FA_KITCHEN_SET "\xee\x94\x9a" // U+e51a 751 | #define ICON_FA_KIWI_BIRD "\xef\x94\xb5" // U+f535 752 | #define ICON_FA_L "L" // U+004c 753 | #define ICON_FA_LAND_MINE_ON "\xee\x94\x9b" // U+e51b 754 | #define ICON_FA_LANDMARK "\xef\x99\xaf" // U+f66f 755 | #define ICON_FA_LANDMARK_DOME "\xef\x9d\x92" // U+f752 756 | #define ICON_FA_LANDMARK_FLAG "\xee\x94\x9c" // U+e51c 757 | #define ICON_FA_LANGUAGE "\xef\x86\xab" // U+f1ab 758 | #define ICON_FA_LAPTOP "\xef\x84\x89" // U+f109 759 | #define ICON_FA_LAPTOP_CODE "\xef\x97\xbc" // U+f5fc 760 | #define ICON_FA_LAPTOP_FILE "\xee\x94\x9d" // U+e51d 761 | #define ICON_FA_LAPTOP_MEDICAL "\xef\xa0\x92" // U+f812 762 | #define ICON_FA_LARI_SIGN "\xee\x87\x88" // U+e1c8 763 | #define ICON_FA_LAYER_GROUP "\xef\x97\xbd" // U+f5fd 764 | #define ICON_FA_LEAF "\xef\x81\xac" // U+f06c 765 | #define ICON_FA_LEFT_LONG "\xef\x8c\x8a" // U+f30a 766 | #define ICON_FA_LEFT_RIGHT "\xef\x8c\xb7" // U+f337 767 | #define ICON_FA_LEMON "\xef\x82\x94" // U+f094 768 | #define ICON_FA_LESS_THAN "<" // U+003c 769 | #define ICON_FA_LESS_THAN_EQUAL "\xef\x94\xb7" // U+f537 770 | #define ICON_FA_LIFE_RING "\xef\x87\x8d" // U+f1cd 771 | #define ICON_FA_LIGHTBULB "\xef\x83\xab" // U+f0eb 772 | #define ICON_FA_LINES_LEANING "\xee\x94\x9e" // U+e51e 773 | #define ICON_FA_LINK "\xef\x83\x81" // U+f0c1 774 | #define ICON_FA_LINK_SLASH "\xef\x84\xa7" // U+f127 775 | #define ICON_FA_LIRA_SIGN "\xef\x86\x95" // U+f195 776 | #define ICON_FA_LIST "\xef\x80\xba" // U+f03a 777 | #define ICON_FA_LIST_CHECK "\xef\x82\xae" // U+f0ae 778 | #define ICON_FA_LIST_OL "\xef\x83\x8b" // U+f0cb 779 | #define ICON_FA_LIST_UL "\xef\x83\x8a" // U+f0ca 780 | #define ICON_FA_LITECOIN_SIGN "\xee\x87\x93" // U+e1d3 781 | #define ICON_FA_LOCATION_ARROW "\xef\x84\xa4" // U+f124 782 | #define ICON_FA_LOCATION_CROSSHAIRS "\xef\x98\x81" // U+f601 783 | #define ICON_FA_LOCATION_DOT "\xef\x8f\x85" // U+f3c5 784 | #define ICON_FA_LOCATION_PIN "\xef\x81\x81" // U+f041 785 | #define ICON_FA_LOCATION_PIN_LOCK "\xee\x94\x9f" // U+e51f 786 | #define ICON_FA_LOCK "\xef\x80\xa3" // U+f023 787 | #define ICON_FA_LOCK_OPEN "\xef\x8f\x81" // U+f3c1 788 | #define ICON_FA_LOCUST "\xee\x94\xa0" // U+e520 789 | #define ICON_FA_LUNGS "\xef\x98\x84" // U+f604 790 | #define ICON_FA_LUNGS_VIRUS "\xee\x81\xa7" // U+e067 791 | #define ICON_FA_M "M" // U+004d 792 | #define ICON_FA_MAGNET "\xef\x81\xb6" // U+f076 793 | #define ICON_FA_MAGNIFYING_GLASS "\xef\x80\x82" // U+f002 794 | #define ICON_FA_MAGNIFYING_GLASS_ARROW_RIGHT "\xee\x94\xa1" // U+e521 795 | #define ICON_FA_MAGNIFYING_GLASS_CHART "\xee\x94\xa2" // U+e522 796 | #define ICON_FA_MAGNIFYING_GLASS_DOLLAR "\xef\x9a\x88" // U+f688 797 | #define ICON_FA_MAGNIFYING_GLASS_LOCATION "\xef\x9a\x89" // U+f689 798 | #define ICON_FA_MAGNIFYING_GLASS_MINUS "\xef\x80\x90" // U+f010 799 | #define ICON_FA_MAGNIFYING_GLASS_PLUS "\xef\x80\x8e" // U+f00e 800 | #define ICON_FA_MANAT_SIGN "\xee\x87\x95" // U+e1d5 801 | #define ICON_FA_MAP "\xef\x89\xb9" // U+f279 802 | #define ICON_FA_MAP_LOCATION "\xef\x96\x9f" // U+f59f 803 | #define ICON_FA_MAP_LOCATION_DOT "\xef\x96\xa0" // U+f5a0 804 | #define ICON_FA_MAP_PIN "\xef\x89\xb6" // U+f276 805 | #define ICON_FA_MARKER "\xef\x96\xa1" // U+f5a1 806 | #define ICON_FA_MARS "\xef\x88\xa2" // U+f222 807 | #define ICON_FA_MARS_AND_VENUS "\xef\x88\xa4" // U+f224 808 | #define ICON_FA_MARS_AND_VENUS_BURST "\xee\x94\xa3" // U+e523 809 | #define ICON_FA_MARS_DOUBLE "\xef\x88\xa7" // U+f227 810 | #define ICON_FA_MARS_STROKE "\xef\x88\xa9" // U+f229 811 | #define ICON_FA_MARS_STROKE_RIGHT "\xef\x88\xab" // U+f22b 812 | #define ICON_FA_MARS_STROKE_UP "\xef\x88\xaa" // U+f22a 813 | #define ICON_FA_MARTINI_GLASS "\xef\x95\xbb" // U+f57b 814 | #define ICON_FA_MARTINI_GLASS_CITRUS "\xef\x95\xa1" // U+f561 815 | #define ICON_FA_MARTINI_GLASS_EMPTY "\xef\x80\x80" // U+f000 816 | #define ICON_FA_MASK "\xef\x9b\xba" // U+f6fa 817 | #define ICON_FA_MASK_FACE "\xee\x87\x97" // U+e1d7 818 | #define ICON_FA_MASK_VENTILATOR "\xee\x94\xa4" // U+e524 819 | #define ICON_FA_MASKS_THEATER "\xef\x98\xb0" // U+f630 820 | #define ICON_FA_MATTRESS_PILLOW "\xee\x94\xa5" // U+e525 821 | #define ICON_FA_MAXIMIZE "\xef\x8c\x9e" // U+f31e 822 | #define ICON_FA_MEDAL "\xef\x96\xa2" // U+f5a2 823 | #define ICON_FA_MEMORY "\xef\x94\xb8" // U+f538 824 | #define ICON_FA_MENORAH "\xef\x99\xb6" // U+f676 825 | #define ICON_FA_MERCURY "\xef\x88\xa3" // U+f223 826 | #define ICON_FA_MESSAGE "\xef\x89\xba" // U+f27a 827 | #define ICON_FA_METEOR "\xef\x9d\x93" // U+f753 828 | #define ICON_FA_MICROCHIP "\xef\x8b\x9b" // U+f2db 829 | #define ICON_FA_MICROPHONE "\xef\x84\xb0" // U+f130 830 | #define ICON_FA_MICROPHONE_LINES "\xef\x8f\x89" // U+f3c9 831 | #define ICON_FA_MICROPHONE_LINES_SLASH "\xef\x94\xb9" // U+f539 832 | #define ICON_FA_MICROPHONE_SLASH "\xef\x84\xb1" // U+f131 833 | #define ICON_FA_MICROSCOPE "\xef\x98\x90" // U+f610 834 | #define ICON_FA_MILL_SIGN "\xee\x87\xad" // U+e1ed 835 | #define ICON_FA_MINIMIZE "\xef\x9e\x8c" // U+f78c 836 | #define ICON_FA_MINUS "\xef\x81\xa8" // U+f068 837 | #define ICON_FA_MITTEN "\xef\x9e\xb5" // U+f7b5 838 | #define ICON_FA_MOBILE "\xef\x8f\x8e" // U+f3ce 839 | #define ICON_FA_MOBILE_BUTTON "\xef\x84\x8b" // U+f10b 840 | #define ICON_FA_MOBILE_RETRO "\xee\x94\xa7" // U+e527 841 | #define ICON_FA_MOBILE_SCREEN "\xef\x8f\x8f" // U+f3cf 842 | #define ICON_FA_MOBILE_SCREEN_BUTTON "\xef\x8f\x8d" // U+f3cd 843 | #define ICON_FA_MONEY_BILL "\xef\x83\x96" // U+f0d6 844 | #define ICON_FA_MONEY_BILL_1 "\xef\x8f\x91" // U+f3d1 845 | #define ICON_FA_MONEY_BILL_1_WAVE "\xef\x94\xbb" // U+f53b 846 | #define ICON_FA_MONEY_BILL_TRANSFER "\xee\x94\xa8" // U+e528 847 | #define ICON_FA_MONEY_BILL_TREND_UP "\xee\x94\xa9" // U+e529 848 | #define ICON_FA_MONEY_BILL_WAVE "\xef\x94\xba" // U+f53a 849 | #define ICON_FA_MONEY_BILL_WHEAT "\xee\x94\xaa" // U+e52a 850 | #define ICON_FA_MONEY_BILLS "\xee\x87\xb3" // U+e1f3 851 | #define ICON_FA_MONEY_CHECK "\xef\x94\xbc" // U+f53c 852 | #define ICON_FA_MONEY_CHECK_DOLLAR "\xef\x94\xbd" // U+f53d 853 | #define ICON_FA_MONUMENT "\xef\x96\xa6" // U+f5a6 854 | #define ICON_FA_MOON "\xef\x86\x86" // U+f186 855 | #define ICON_FA_MORTAR_PESTLE "\xef\x96\xa7" // U+f5a7 856 | #define ICON_FA_MOSQUE "\xef\x99\xb8" // U+f678 857 | #define ICON_FA_MOSQUITO "\xee\x94\xab" // U+e52b 858 | #define ICON_FA_MOSQUITO_NET "\xee\x94\xac" // U+e52c 859 | #define ICON_FA_MOTORCYCLE "\xef\x88\x9c" // U+f21c 860 | #define ICON_FA_MOUND "\xee\x94\xad" // U+e52d 861 | #define ICON_FA_MOUNTAIN "\xef\x9b\xbc" // U+f6fc 862 | #define ICON_FA_MOUNTAIN_CITY "\xee\x94\xae" // U+e52e 863 | #define ICON_FA_MOUNTAIN_SUN "\xee\x94\xaf" // U+e52f 864 | #define ICON_FA_MUG_HOT "\xef\x9e\xb6" // U+f7b6 865 | #define ICON_FA_MUG_SAUCER "\xef\x83\xb4" // U+f0f4 866 | #define ICON_FA_MUSIC "\xef\x80\x81" // U+f001 867 | #define ICON_FA_N "N" // U+004e 868 | #define ICON_FA_NAIRA_SIGN "\xee\x87\xb6" // U+e1f6 869 | #define ICON_FA_NETWORK_WIRED "\xef\x9b\xbf" // U+f6ff 870 | #define ICON_FA_NEUTER "\xef\x88\xac" // U+f22c 871 | #define ICON_FA_NEWSPAPER "\xef\x87\xaa" // U+f1ea 872 | #define ICON_FA_NOT_EQUAL "\xef\x94\xbe" // U+f53e 873 | #define ICON_FA_NOTE_STICKY "\xef\x89\x89" // U+f249 874 | #define ICON_FA_NOTES_MEDICAL "\xef\x92\x81" // U+f481 875 | #define ICON_FA_O "O" // U+004f 876 | #define ICON_FA_OBJECT_GROUP "\xef\x89\x87" // U+f247 877 | #define ICON_FA_OBJECT_UNGROUP "\xef\x89\x88" // U+f248 878 | #define ICON_FA_OIL_CAN "\xef\x98\x93" // U+f613 879 | #define ICON_FA_OIL_WELL "\xee\x94\xb2" // U+e532 880 | #define ICON_FA_OM "\xef\x99\xb9" // U+f679 881 | #define ICON_FA_OTTER "\xef\x9c\x80" // U+f700 882 | #define ICON_FA_OUTDENT "\xef\x80\xbb" // U+f03b 883 | #define ICON_FA_P "P" // U+0050 884 | #define ICON_FA_PAGER "\xef\xa0\x95" // U+f815 885 | #define ICON_FA_PAINT_ROLLER "\xef\x96\xaa" // U+f5aa 886 | #define ICON_FA_PAINTBRUSH "\xef\x87\xbc" // U+f1fc 887 | #define ICON_FA_PALETTE "\xef\x94\xbf" // U+f53f 888 | #define ICON_FA_PALLET "\xef\x92\x82" // U+f482 889 | #define ICON_FA_PANORAMA "\xee\x88\x89" // U+e209 890 | #define ICON_FA_PAPER_PLANE "\xef\x87\x98" // U+f1d8 891 | #define ICON_FA_PAPERCLIP "\xef\x83\x86" // U+f0c6 892 | #define ICON_FA_PARACHUTE_BOX "\xef\x93\x8d" // U+f4cd 893 | #define ICON_FA_PARAGRAPH "\xef\x87\x9d" // U+f1dd 894 | #define ICON_FA_PASSPORT "\xef\x96\xab" // U+f5ab 895 | #define ICON_FA_PASTE "\xef\x83\xaa" // U+f0ea 896 | #define ICON_FA_PAUSE "\xef\x81\x8c" // U+f04c 897 | #define ICON_FA_PAW "\xef\x86\xb0" // U+f1b0 898 | #define ICON_FA_PEACE "\xef\x99\xbc" // U+f67c 899 | #define ICON_FA_PEN "\xef\x8c\x84" // U+f304 900 | #define ICON_FA_PEN_CLIP "\xef\x8c\x85" // U+f305 901 | #define ICON_FA_PEN_FANCY "\xef\x96\xac" // U+f5ac 902 | #define ICON_FA_PEN_NIB "\xef\x96\xad" // U+f5ad 903 | #define ICON_FA_PEN_RULER "\xef\x96\xae" // U+f5ae 904 | #define ICON_FA_PEN_TO_SQUARE "\xef\x81\x84" // U+f044 905 | #define ICON_FA_PENCIL "\xef\x8c\x83" // U+f303 906 | #define ICON_FA_PEOPLE_ARROWS_LEFT_RIGHT "\xee\x81\xa8" // U+e068 907 | #define ICON_FA_PEOPLE_CARRY_BOX "\xef\x93\x8e" // U+f4ce 908 | #define ICON_FA_PEOPLE_GROUP "\xee\x94\xb3" // U+e533 909 | #define ICON_FA_PEOPLE_LINE "\xee\x94\xb4" // U+e534 910 | #define ICON_FA_PEOPLE_PULLING "\xee\x94\xb5" // U+e535 911 | #define ICON_FA_PEOPLE_ROBBERY "\xee\x94\xb6" // U+e536 912 | #define ICON_FA_PEOPLE_ROOF "\xee\x94\xb7" // U+e537 913 | #define ICON_FA_PEPPER_HOT "\xef\xa0\x96" // U+f816 914 | #define ICON_FA_PERCENT "%" // U+0025 915 | #define ICON_FA_PERSON "\xef\x86\x83" // U+f183 916 | #define ICON_FA_PERSON_ARROW_DOWN_TO_LINE "\xee\x94\xb8" // U+e538 917 | #define ICON_FA_PERSON_ARROW_UP_FROM_LINE "\xee\x94\xb9" // U+e539 918 | #define ICON_FA_PERSON_BIKING "\xef\xa1\x8a" // U+f84a 919 | #define ICON_FA_PERSON_BOOTH "\xef\x9d\x96" // U+f756 920 | #define ICON_FA_PERSON_BREASTFEEDING "\xee\x94\xba" // U+e53a 921 | #define ICON_FA_PERSON_BURST "\xee\x94\xbb" // U+e53b 922 | #define ICON_FA_PERSON_CANE "\xee\x94\xbc" // U+e53c 923 | #define ICON_FA_PERSON_CHALKBOARD "\xee\x94\xbd" // U+e53d 924 | #define ICON_FA_PERSON_CIRCLE_CHECK "\xee\x94\xbe" // U+e53e 925 | #define ICON_FA_PERSON_CIRCLE_EXCLAMATION "\xee\x94\xbf" // U+e53f 926 | #define ICON_FA_PERSON_CIRCLE_MINUS "\xee\x95\x80" // U+e540 927 | #define ICON_FA_PERSON_CIRCLE_PLUS "\xee\x95\x81" // U+e541 928 | #define ICON_FA_PERSON_CIRCLE_QUESTION "\xee\x95\x82" // U+e542 929 | #define ICON_FA_PERSON_CIRCLE_XMARK "\xee\x95\x83" // U+e543 930 | #define ICON_FA_PERSON_DIGGING "\xef\xa1\x9e" // U+f85e 931 | #define ICON_FA_PERSON_DOTS_FROM_LINE "\xef\x91\xb0" // U+f470 932 | #define ICON_FA_PERSON_DRESS "\xef\x86\x82" // U+f182 933 | #define ICON_FA_PERSON_DRESS_BURST "\xee\x95\x84" // U+e544 934 | #define ICON_FA_PERSON_DROWNING "\xee\x95\x85" // U+e545 935 | #define ICON_FA_PERSON_FALLING "\xee\x95\x86" // U+e546 936 | #define ICON_FA_PERSON_FALLING_BURST "\xee\x95\x87" // U+e547 937 | #define ICON_FA_PERSON_HALF_DRESS "\xee\x95\x88" // U+e548 938 | #define ICON_FA_PERSON_HARASSING "\xee\x95\x89" // U+e549 939 | #define ICON_FA_PERSON_HIKING "\xef\x9b\xac" // U+f6ec 940 | #define ICON_FA_PERSON_MILITARY_POINTING "\xee\x95\x8a" // U+e54a 941 | #define ICON_FA_PERSON_MILITARY_RIFLE "\xee\x95\x8b" // U+e54b 942 | #define ICON_FA_PERSON_MILITARY_TO_PERSON "\xee\x95\x8c" // U+e54c 943 | #define ICON_FA_PERSON_PRAYING "\xef\x9a\x83" // U+f683 944 | #define ICON_FA_PERSON_PREGNANT "\xee\x8c\x9e" // U+e31e 945 | #define ICON_FA_PERSON_RAYS "\xee\x95\x8d" // U+e54d 946 | #define ICON_FA_PERSON_RIFLE "\xee\x95\x8e" // U+e54e 947 | #define ICON_FA_PERSON_RUNNING "\xef\x9c\x8c" // U+f70c 948 | #define ICON_FA_PERSON_SHELTER "\xee\x95\x8f" // U+e54f 949 | #define ICON_FA_PERSON_SKATING "\xef\x9f\x85" // U+f7c5 950 | #define ICON_FA_PERSON_SKIING "\xef\x9f\x89" // U+f7c9 951 | #define ICON_FA_PERSON_SKIING_NORDIC "\xef\x9f\x8a" // U+f7ca 952 | #define ICON_FA_PERSON_SNOWBOARDING "\xef\x9f\x8e" // U+f7ce 953 | #define ICON_FA_PERSON_SWIMMING "\xef\x97\x84" // U+f5c4 954 | #define ICON_FA_PERSON_THROUGH_WINDOW "\xee\x90\xb3" // U+e433 955 | #define ICON_FA_PERSON_WALKING "\xef\x95\x94" // U+f554 956 | #define ICON_FA_PERSON_WALKING_ARROW_LOOP_LEFT "\xee\x95\x91" // U+e551 957 | #define ICON_FA_PERSON_WALKING_ARROW_RIGHT "\xee\x95\x92" // U+e552 958 | #define ICON_FA_PERSON_WALKING_DASHED_LINE_ARROW_RIGHT "\xee\x95\x93" // U+e553 959 | #define ICON_FA_PERSON_WALKING_LUGGAGE "\xee\x95\x94" // U+e554 960 | #define ICON_FA_PERSON_WALKING_WITH_CANE "\xef\x8a\x9d" // U+f29d 961 | #define ICON_FA_PESETA_SIGN "\xee\x88\xa1" // U+e221 962 | #define ICON_FA_PESO_SIGN "\xee\x88\xa2" // U+e222 963 | #define ICON_FA_PHONE "\xef\x82\x95" // U+f095 964 | #define ICON_FA_PHONE_FLIP "\xef\xa1\xb9" // U+f879 965 | #define ICON_FA_PHONE_SLASH "\xef\x8f\x9d" // U+f3dd 966 | #define ICON_FA_PHONE_VOLUME "\xef\x8a\xa0" // U+f2a0 967 | #define ICON_FA_PHOTO_FILM "\xef\xa1\xbc" // U+f87c 968 | #define ICON_FA_PIGGY_BANK "\xef\x93\x93" // U+f4d3 969 | #define ICON_FA_PILLS "\xef\x92\x84" // U+f484 970 | #define ICON_FA_PIZZA_SLICE "\xef\xa0\x98" // U+f818 971 | #define ICON_FA_PLACE_OF_WORSHIP "\xef\x99\xbf" // U+f67f 972 | #define ICON_FA_PLANE "\xef\x81\xb2" // U+f072 973 | #define ICON_FA_PLANE_ARRIVAL "\xef\x96\xaf" // U+f5af 974 | #define ICON_FA_PLANE_CIRCLE_CHECK "\xee\x95\x95" // U+e555 975 | #define ICON_FA_PLANE_CIRCLE_EXCLAMATION "\xee\x95\x96" // U+e556 976 | #define ICON_FA_PLANE_CIRCLE_XMARK "\xee\x95\x97" // U+e557 977 | #define ICON_FA_PLANE_DEPARTURE "\xef\x96\xb0" // U+f5b0 978 | #define ICON_FA_PLANE_LOCK "\xee\x95\x98" // U+e558 979 | #define ICON_FA_PLANE_SLASH "\xee\x81\xa9" // U+e069 980 | #define ICON_FA_PLANE_UP "\xee\x88\xad" // U+e22d 981 | #define ICON_FA_PLANT_WILT "\xee\x90\xbb" // U+e43b 982 | #define ICON_FA_PLATE_WHEAT "\xee\x95\x9a" // U+e55a 983 | #define ICON_FA_PLAY "\xef\x81\x8b" // U+f04b 984 | #define ICON_FA_PLUG "\xef\x87\xa6" // U+f1e6 985 | #define ICON_FA_PLUG_CIRCLE_BOLT "\xee\x95\x9b" // U+e55b 986 | #define ICON_FA_PLUG_CIRCLE_CHECK "\xee\x95\x9c" // U+e55c 987 | #define ICON_FA_PLUG_CIRCLE_EXCLAMATION "\xee\x95\x9d" // U+e55d 988 | #define ICON_FA_PLUG_CIRCLE_MINUS "\xee\x95\x9e" // U+e55e 989 | #define ICON_FA_PLUG_CIRCLE_PLUS "\xee\x95\x9f" // U+e55f 990 | #define ICON_FA_PLUG_CIRCLE_XMARK "\xee\x95\xa0" // U+e560 991 | #define ICON_FA_PLUS "+" // U+002b 992 | #define ICON_FA_PLUS_MINUS "\xee\x90\xbc" // U+e43c 993 | #define ICON_FA_PODCAST "\xef\x8b\x8e" // U+f2ce 994 | #define ICON_FA_POO "\xef\x8b\xbe" // U+f2fe 995 | #define ICON_FA_POO_STORM "\xef\x9d\x9a" // U+f75a 996 | #define ICON_FA_POOP "\xef\x98\x99" // U+f619 997 | #define ICON_FA_POWER_OFF "\xef\x80\x91" // U+f011 998 | #define ICON_FA_PRESCRIPTION "\xef\x96\xb1" // U+f5b1 999 | #define ICON_FA_PRESCRIPTION_BOTTLE "\xef\x92\x85" // U+f485 1000 | #define ICON_FA_PRESCRIPTION_BOTTLE_MEDICAL "\xef\x92\x86" // U+f486 1001 | #define ICON_FA_PRINT "\xef\x80\xaf" // U+f02f 1002 | #define ICON_FA_PUMP_MEDICAL "\xee\x81\xaa" // U+e06a 1003 | #define ICON_FA_PUMP_SOAP "\xee\x81\xab" // U+e06b 1004 | #define ICON_FA_PUZZLE_PIECE "\xef\x84\xae" // U+f12e 1005 | #define ICON_FA_Q "Q" // U+0051 1006 | #define ICON_FA_QRCODE "\xef\x80\xa9" // U+f029 1007 | #define ICON_FA_QUESTION "?" // U+003f 1008 | #define ICON_FA_QUOTE_LEFT "\xef\x84\x8d" // U+f10d 1009 | #define ICON_FA_QUOTE_RIGHT "\xef\x84\x8e" // U+f10e 1010 | #define ICON_FA_R "R" // U+0052 1011 | #define ICON_FA_RADIATION "\xef\x9e\xb9" // U+f7b9 1012 | #define ICON_FA_RADIO "\xef\xa3\x97" // U+f8d7 1013 | #define ICON_FA_RAINBOW "\xef\x9d\x9b" // U+f75b 1014 | #define ICON_FA_RANKING_STAR "\xee\x95\xa1" // U+e561 1015 | #define ICON_FA_RECEIPT "\xef\x95\x83" // U+f543 1016 | #define ICON_FA_RECORD_VINYL "\xef\xa3\x99" // U+f8d9 1017 | #define ICON_FA_RECTANGLE_AD "\xef\x99\x81" // U+f641 1018 | #define ICON_FA_RECTANGLE_LIST "\xef\x80\xa2" // U+f022 1019 | #define ICON_FA_RECTANGLE_XMARK "\xef\x90\x90" // U+f410 1020 | #define ICON_FA_RECYCLE "\xef\x86\xb8" // U+f1b8 1021 | #define ICON_FA_REGISTERED "\xef\x89\x9d" // U+f25d 1022 | #define ICON_FA_REPEAT "\xef\x8d\xa3" // U+f363 1023 | #define ICON_FA_REPLY "\xef\x8f\xa5" // U+f3e5 1024 | #define ICON_FA_REPLY_ALL "\xef\x84\xa2" // U+f122 1025 | #define ICON_FA_REPUBLICAN "\xef\x9d\x9e" // U+f75e 1026 | #define ICON_FA_RESTROOM "\xef\x9e\xbd" // U+f7bd 1027 | #define ICON_FA_RETWEET "\xef\x81\xb9" // U+f079 1028 | #define ICON_FA_RIBBON "\xef\x93\x96" // U+f4d6 1029 | #define ICON_FA_RIGHT_FROM_BRACKET "\xef\x8b\xb5" // U+f2f5 1030 | #define ICON_FA_RIGHT_LEFT "\xef\x8d\xa2" // U+f362 1031 | #define ICON_FA_RIGHT_LONG "\xef\x8c\x8b" // U+f30b 1032 | #define ICON_FA_RIGHT_TO_BRACKET "\xef\x8b\xb6" // U+f2f6 1033 | #define ICON_FA_RING "\xef\x9c\x8b" // U+f70b 1034 | #define ICON_FA_ROAD "\xef\x80\x98" // U+f018 1035 | #define ICON_FA_ROAD_BARRIER "\xee\x95\xa2" // U+e562 1036 | #define ICON_FA_ROAD_BRIDGE "\xee\x95\xa3" // U+e563 1037 | #define ICON_FA_ROAD_CIRCLE_CHECK "\xee\x95\xa4" // U+e564 1038 | #define ICON_FA_ROAD_CIRCLE_EXCLAMATION "\xee\x95\xa5" // U+e565 1039 | #define ICON_FA_ROAD_CIRCLE_XMARK "\xee\x95\xa6" // U+e566 1040 | #define ICON_FA_ROAD_LOCK "\xee\x95\xa7" // U+e567 1041 | #define ICON_FA_ROAD_SPIKES "\xee\x95\xa8" // U+e568 1042 | #define ICON_FA_ROBOT "\xef\x95\x84" // U+f544 1043 | #define ICON_FA_ROCKET "\xef\x84\xb5" // U+f135 1044 | #define ICON_FA_ROTATE "\xef\x8b\xb1" // U+f2f1 1045 | #define ICON_FA_ROTATE_LEFT "\xef\x8b\xaa" // U+f2ea 1046 | #define ICON_FA_ROTATE_RIGHT "\xef\x8b\xb9" // U+f2f9 1047 | #define ICON_FA_ROUTE "\xef\x93\x97" // U+f4d7 1048 | #define ICON_FA_RSS "\xef\x82\x9e" // U+f09e 1049 | #define ICON_FA_RUBLE_SIGN "\xef\x85\x98" // U+f158 1050 | #define ICON_FA_RUG "\xee\x95\xa9" // U+e569 1051 | #define ICON_FA_RULER "\xef\x95\x85" // U+f545 1052 | #define ICON_FA_RULER_COMBINED "\xef\x95\x86" // U+f546 1053 | #define ICON_FA_RULER_HORIZONTAL "\xef\x95\x87" // U+f547 1054 | #define ICON_FA_RULER_VERTICAL "\xef\x95\x88" // U+f548 1055 | #define ICON_FA_RUPEE_SIGN "\xef\x85\x96" // U+f156 1056 | #define ICON_FA_RUPIAH_SIGN "\xee\x88\xbd" // U+e23d 1057 | #define ICON_FA_S "S" // U+0053 1058 | #define ICON_FA_SACK_DOLLAR "\xef\xa0\x9d" // U+f81d 1059 | #define ICON_FA_SACK_XMARK "\xee\x95\xaa" // U+e56a 1060 | #define ICON_FA_SAILBOAT "\xee\x91\x85" // U+e445 1061 | #define ICON_FA_SATELLITE "\xef\x9e\xbf" // U+f7bf 1062 | #define ICON_FA_SATELLITE_DISH "\xef\x9f\x80" // U+f7c0 1063 | #define ICON_FA_SCALE_BALANCED "\xef\x89\x8e" // U+f24e 1064 | #define ICON_FA_SCALE_UNBALANCED "\xef\x94\x95" // U+f515 1065 | #define ICON_FA_SCALE_UNBALANCED_FLIP "\xef\x94\x96" // U+f516 1066 | #define ICON_FA_SCHOOL "\xef\x95\x89" // U+f549 1067 | #define ICON_FA_SCHOOL_CIRCLE_CHECK "\xee\x95\xab" // U+e56b 1068 | #define ICON_FA_SCHOOL_CIRCLE_EXCLAMATION "\xee\x95\xac" // U+e56c 1069 | #define ICON_FA_SCHOOL_CIRCLE_XMARK "\xee\x95\xad" // U+e56d 1070 | #define ICON_FA_SCHOOL_FLAG "\xee\x95\xae" // U+e56e 1071 | #define ICON_FA_SCHOOL_LOCK "\xee\x95\xaf" // U+e56f 1072 | #define ICON_FA_SCISSORS "\xef\x83\x84" // U+f0c4 1073 | #define ICON_FA_SCREWDRIVER "\xef\x95\x8a" // U+f54a 1074 | #define ICON_FA_SCREWDRIVER_WRENCH "\xef\x9f\x99" // U+f7d9 1075 | #define ICON_FA_SCROLL "\xef\x9c\x8e" // U+f70e 1076 | #define ICON_FA_SCROLL_TORAH "\xef\x9a\xa0" // U+f6a0 1077 | #define ICON_FA_SD_CARD "\xef\x9f\x82" // U+f7c2 1078 | #define ICON_FA_SECTION "\xee\x91\x87" // U+e447 1079 | #define ICON_FA_SEEDLING "\xef\x93\x98" // U+f4d8 1080 | #define ICON_FA_SERVER "\xef\x88\xb3" // U+f233 1081 | #define ICON_FA_SHAPES "\xef\x98\x9f" // U+f61f 1082 | #define ICON_FA_SHARE "\xef\x81\xa4" // U+f064 1083 | #define ICON_FA_SHARE_FROM_SQUARE "\xef\x85\x8d" // U+f14d 1084 | #define ICON_FA_SHARE_NODES "\xef\x87\xa0" // U+f1e0 1085 | #define ICON_FA_SHEET_PLASTIC "\xee\x95\xb1" // U+e571 1086 | #define ICON_FA_SHEKEL_SIGN "\xef\x88\x8b" // U+f20b 1087 | #define ICON_FA_SHIELD "\xef\x84\xb2" // U+f132 1088 | #define ICON_FA_SHIELD_CAT "\xee\x95\xb2" // U+e572 1089 | #define ICON_FA_SHIELD_DOG "\xee\x95\xb3" // U+e573 1090 | #define ICON_FA_SHIELD_HALVED "\xef\x8f\xad" // U+f3ed 1091 | #define ICON_FA_SHIELD_HEART "\xee\x95\xb4" // U+e574 1092 | #define ICON_FA_SHIELD_VIRUS "\xee\x81\xac" // U+e06c 1093 | #define ICON_FA_SHIP "\xef\x88\x9a" // U+f21a 1094 | #define ICON_FA_SHIRT "\xef\x95\x93" // U+f553 1095 | #define ICON_FA_SHOE_PRINTS "\xef\x95\x8b" // U+f54b 1096 | #define ICON_FA_SHOP "\xef\x95\x8f" // U+f54f 1097 | #define ICON_FA_SHOP_LOCK "\xee\x92\xa5" // U+e4a5 1098 | #define ICON_FA_SHOP_SLASH "\xee\x81\xb0" // U+e070 1099 | #define ICON_FA_SHOWER "\xef\x8b\x8c" // U+f2cc 1100 | #define ICON_FA_SHRIMP "\xee\x91\x88" // U+e448 1101 | #define ICON_FA_SHUFFLE "\xef\x81\xb4" // U+f074 1102 | #define ICON_FA_SHUTTLE_SPACE "\xef\x86\x97" // U+f197 1103 | #define ICON_FA_SIGN_HANGING "\xef\x93\x99" // U+f4d9 1104 | #define ICON_FA_SIGNAL "\xef\x80\x92" // U+f012 1105 | #define ICON_FA_SIGNATURE "\xef\x96\xb7" // U+f5b7 1106 | #define ICON_FA_SIGNS_POST "\xef\x89\xb7" // U+f277 1107 | #define ICON_FA_SIM_CARD "\xef\x9f\x84" // U+f7c4 1108 | #define ICON_FA_SINK "\xee\x81\xad" // U+e06d 1109 | #define ICON_FA_SITEMAP "\xef\x83\xa8" // U+f0e8 1110 | #define ICON_FA_SKULL "\xef\x95\x8c" // U+f54c 1111 | #define ICON_FA_SKULL_CROSSBONES "\xef\x9c\x94" // U+f714 1112 | #define ICON_FA_SLASH "\xef\x9c\x95" // U+f715 1113 | #define ICON_FA_SLEIGH "\xef\x9f\x8c" // U+f7cc 1114 | #define ICON_FA_SLIDERS "\xef\x87\x9e" // U+f1de 1115 | #define ICON_FA_SMOG "\xef\x9d\x9f" // U+f75f 1116 | #define ICON_FA_SMOKING "\xef\x92\x8d" // U+f48d 1117 | #define ICON_FA_SNOWFLAKE "\xef\x8b\x9c" // U+f2dc 1118 | #define ICON_FA_SNOWMAN "\xef\x9f\x90" // U+f7d0 1119 | #define ICON_FA_SNOWPLOW "\xef\x9f\x92" // U+f7d2 1120 | #define ICON_FA_SOAP "\xee\x81\xae" // U+e06e 1121 | #define ICON_FA_SOCKS "\xef\x9a\x96" // U+f696 1122 | #define ICON_FA_SOLAR_PANEL "\xef\x96\xba" // U+f5ba 1123 | #define ICON_FA_SORT "\xef\x83\x9c" // U+f0dc 1124 | #define ICON_FA_SORT_DOWN "\xef\x83\x9d" // U+f0dd 1125 | #define ICON_FA_SORT_UP "\xef\x83\x9e" // U+f0de 1126 | #define ICON_FA_SPA "\xef\x96\xbb" // U+f5bb 1127 | #define ICON_FA_SPAGHETTI_MONSTER_FLYING "\xef\x99\xbb" // U+f67b 1128 | #define ICON_FA_SPELL_CHECK "\xef\xa2\x91" // U+f891 1129 | #define ICON_FA_SPIDER "\xef\x9c\x97" // U+f717 1130 | #define ICON_FA_SPINNER "\xef\x84\x90" // U+f110 1131 | #define ICON_FA_SPLOTCH "\xef\x96\xbc" // U+f5bc 1132 | #define ICON_FA_SPOON "\xef\x8b\xa5" // U+f2e5 1133 | #define ICON_FA_SPRAY_CAN "\xef\x96\xbd" // U+f5bd 1134 | #define ICON_FA_SPRAY_CAN_SPARKLES "\xef\x97\x90" // U+f5d0 1135 | #define ICON_FA_SQUARE "\xef\x83\x88" // U+f0c8 1136 | #define ICON_FA_SQUARE_ARROW_UP_RIGHT "\xef\x85\x8c" // U+f14c 1137 | #define ICON_FA_SQUARE_CARET_DOWN "\xef\x85\x90" // U+f150 1138 | #define ICON_FA_SQUARE_CARET_LEFT "\xef\x86\x91" // U+f191 1139 | #define ICON_FA_SQUARE_CARET_RIGHT "\xef\x85\x92" // U+f152 1140 | #define ICON_FA_SQUARE_CARET_UP "\xef\x85\x91" // U+f151 1141 | #define ICON_FA_SQUARE_CHECK "\xef\x85\x8a" // U+f14a 1142 | #define ICON_FA_SQUARE_ENVELOPE "\xef\x86\x99" // U+f199 1143 | #define ICON_FA_SQUARE_FULL "\xef\x91\x9c" // U+f45c 1144 | #define ICON_FA_SQUARE_H "\xef\x83\xbd" // U+f0fd 1145 | #define ICON_FA_SQUARE_MINUS "\xef\x85\x86" // U+f146 1146 | #define ICON_FA_SQUARE_NFI "\xee\x95\xb6" // U+e576 1147 | #define ICON_FA_SQUARE_PARKING "\xef\x95\x80" // U+f540 1148 | #define ICON_FA_SQUARE_PEN "\xef\x85\x8b" // U+f14b 1149 | #define ICON_FA_SQUARE_PERSON_CONFINED "\xee\x95\xb7" // U+e577 1150 | #define ICON_FA_SQUARE_PHONE "\xef\x82\x98" // U+f098 1151 | #define ICON_FA_SQUARE_PHONE_FLIP "\xef\xa1\xbb" // U+f87b 1152 | #define ICON_FA_SQUARE_PLUS "\xef\x83\xbe" // U+f0fe 1153 | #define ICON_FA_SQUARE_POLL_HORIZONTAL "\xef\x9a\x82" // U+f682 1154 | #define ICON_FA_SQUARE_POLL_VERTICAL "\xef\x9a\x81" // U+f681 1155 | #define ICON_FA_SQUARE_ROOT_VARIABLE "\xef\x9a\x98" // U+f698 1156 | #define ICON_FA_SQUARE_RSS "\xef\x85\x83" // U+f143 1157 | #define ICON_FA_SQUARE_SHARE_NODES "\xef\x87\xa1" // U+f1e1 1158 | #define ICON_FA_SQUARE_UP_RIGHT "\xef\x8d\xa0" // U+f360 1159 | #define ICON_FA_SQUARE_VIRUS "\xee\x95\xb8" // U+e578 1160 | #define ICON_FA_SQUARE_XMARK "\xef\x8b\x93" // U+f2d3 1161 | #define ICON_FA_STAFF_AESCULAPIUS "\xee\x95\xb9" // U+e579 1162 | #define ICON_FA_STAIRS "\xee\x8a\x89" // U+e289 1163 | #define ICON_FA_STAMP "\xef\x96\xbf" // U+f5bf 1164 | #define ICON_FA_STAR "\xef\x80\x85" // U+f005 1165 | #define ICON_FA_STAR_AND_CRESCENT "\xef\x9a\x99" // U+f699 1166 | #define ICON_FA_STAR_HALF "\xef\x82\x89" // U+f089 1167 | #define ICON_FA_STAR_HALF_STROKE "\xef\x97\x80" // U+f5c0 1168 | #define ICON_FA_STAR_OF_DAVID "\xef\x9a\x9a" // U+f69a 1169 | #define ICON_FA_STAR_OF_LIFE "\xef\x98\xa1" // U+f621 1170 | #define ICON_FA_STERLING_SIGN "\xef\x85\x94" // U+f154 1171 | #define ICON_FA_STETHOSCOPE "\xef\x83\xb1" // U+f0f1 1172 | #define ICON_FA_STOP "\xef\x81\x8d" // U+f04d 1173 | #define ICON_FA_STOPWATCH "\xef\x8b\xb2" // U+f2f2 1174 | #define ICON_FA_STOPWATCH_20 "\xee\x81\xaf" // U+e06f 1175 | #define ICON_FA_STORE "\xef\x95\x8e" // U+f54e 1176 | #define ICON_FA_STORE_SLASH "\xee\x81\xb1" // U+e071 1177 | #define ICON_FA_STREET_VIEW "\xef\x88\x9d" // U+f21d 1178 | #define ICON_FA_STRIKETHROUGH "\xef\x83\x8c" // U+f0cc 1179 | #define ICON_FA_STROOPWAFEL "\xef\x95\x91" // U+f551 1180 | #define ICON_FA_SUBSCRIPT "\xef\x84\xac" // U+f12c 1181 | #define ICON_FA_SUITCASE "\xef\x83\xb2" // U+f0f2 1182 | #define ICON_FA_SUITCASE_MEDICAL "\xef\x83\xba" // U+f0fa 1183 | #define ICON_FA_SUITCASE_ROLLING "\xef\x97\x81" // U+f5c1 1184 | #define ICON_FA_SUN "\xef\x86\x85" // U+f185 1185 | #define ICON_FA_SUN_PLANT_WILT "\xee\x95\xba" // U+e57a 1186 | #define ICON_FA_SUPERSCRIPT "\xef\x84\xab" // U+f12b 1187 | #define ICON_FA_SWATCHBOOK "\xef\x97\x83" // U+f5c3 1188 | #define ICON_FA_SYNAGOGUE "\xef\x9a\x9b" // U+f69b 1189 | #define ICON_FA_SYRINGE "\xef\x92\x8e" // U+f48e 1190 | #define ICON_FA_T "T" // U+0054 1191 | #define ICON_FA_TABLE "\xef\x83\x8e" // U+f0ce 1192 | #define ICON_FA_TABLE_CELLS "\xef\x80\x8a" // U+f00a 1193 | #define ICON_FA_TABLE_CELLS_LARGE "\xef\x80\x89" // U+f009 1194 | #define ICON_FA_TABLE_COLUMNS "\xef\x83\x9b" // U+f0db 1195 | #define ICON_FA_TABLE_LIST "\xef\x80\x8b" // U+f00b 1196 | #define ICON_FA_TABLE_TENNIS_PADDLE_BALL "\xef\x91\x9d" // U+f45d 1197 | #define ICON_FA_TABLET "\xef\x8f\xbb" // U+f3fb 1198 | #define ICON_FA_TABLET_BUTTON "\xef\x84\x8a" // U+f10a 1199 | #define ICON_FA_TABLET_SCREEN_BUTTON "\xef\x8f\xba" // U+f3fa 1200 | #define ICON_FA_TABLETS "\xef\x92\x90" // U+f490 1201 | #define ICON_FA_TACHOGRAPH_DIGITAL "\xef\x95\xa6" // U+f566 1202 | #define ICON_FA_TAG "\xef\x80\xab" // U+f02b 1203 | #define ICON_FA_TAGS "\xef\x80\xac" // U+f02c 1204 | #define ICON_FA_TAPE "\xef\x93\x9b" // U+f4db 1205 | #define ICON_FA_TARP "\xee\x95\xbb" // U+e57b 1206 | #define ICON_FA_TARP_DROPLET "\xee\x95\xbc" // U+e57c 1207 | #define ICON_FA_TAXI "\xef\x86\xba" // U+f1ba 1208 | #define ICON_FA_TEETH "\xef\x98\xae" // U+f62e 1209 | #define ICON_FA_TEETH_OPEN "\xef\x98\xaf" // U+f62f 1210 | #define ICON_FA_TEMPERATURE_ARROW_DOWN "\xee\x80\xbf" // U+e03f 1211 | #define ICON_FA_TEMPERATURE_ARROW_UP "\xee\x81\x80" // U+e040 1212 | #define ICON_FA_TEMPERATURE_EMPTY "\xef\x8b\x8b" // U+f2cb 1213 | #define ICON_FA_TEMPERATURE_FULL "\xef\x8b\x87" // U+f2c7 1214 | #define ICON_FA_TEMPERATURE_HALF "\xef\x8b\x89" // U+f2c9 1215 | #define ICON_FA_TEMPERATURE_HIGH "\xef\x9d\xa9" // U+f769 1216 | #define ICON_FA_TEMPERATURE_LOW "\xef\x9d\xab" // U+f76b 1217 | #define ICON_FA_TEMPERATURE_QUARTER "\xef\x8b\x8a" // U+f2ca 1218 | #define ICON_FA_TEMPERATURE_THREE_QUARTERS "\xef\x8b\x88" // U+f2c8 1219 | #define ICON_FA_TENGE_SIGN "\xef\x9f\x97" // U+f7d7 1220 | #define ICON_FA_TENT "\xee\x95\xbd" // U+e57d 1221 | #define ICON_FA_TENT_ARROW_DOWN_TO_LINE "\xee\x95\xbe" // U+e57e 1222 | #define ICON_FA_TENT_ARROW_LEFT_RIGHT "\xee\x95\xbf" // U+e57f 1223 | #define ICON_FA_TENT_ARROW_TURN_LEFT "\xee\x96\x80" // U+e580 1224 | #define ICON_FA_TENT_ARROWS_DOWN "\xee\x96\x81" // U+e581 1225 | #define ICON_FA_TENTS "\xee\x96\x82" // U+e582 1226 | #define ICON_FA_TERMINAL "\xef\x84\xa0" // U+f120 1227 | #define ICON_FA_TEXT_HEIGHT "\xef\x80\xb4" // U+f034 1228 | #define ICON_FA_TEXT_SLASH "\xef\xa1\xbd" // U+f87d 1229 | #define ICON_FA_TEXT_WIDTH "\xef\x80\xb5" // U+f035 1230 | #define ICON_FA_THERMOMETER "\xef\x92\x91" // U+f491 1231 | #define ICON_FA_THUMBS_DOWN "\xef\x85\xa5" // U+f165 1232 | #define ICON_FA_THUMBS_UP "\xef\x85\xa4" // U+f164 1233 | #define ICON_FA_THUMBTACK "\xef\x82\x8d" // U+f08d 1234 | #define ICON_FA_TICKET "\xef\x85\x85" // U+f145 1235 | #define ICON_FA_TICKET_SIMPLE "\xef\x8f\xbf" // U+f3ff 1236 | #define ICON_FA_TIMELINE "\xee\x8a\x9c" // U+e29c 1237 | #define ICON_FA_TOGGLE_OFF "\xef\x88\x84" // U+f204 1238 | #define ICON_FA_TOGGLE_ON "\xef\x88\x85" // U+f205 1239 | #define ICON_FA_TOILET "\xef\x9f\x98" // U+f7d8 1240 | #define ICON_FA_TOILET_PAPER "\xef\x9c\x9e" // U+f71e 1241 | #define ICON_FA_TOILET_PAPER_SLASH "\xee\x81\xb2" // U+e072 1242 | #define ICON_FA_TOILET_PORTABLE "\xee\x96\x83" // U+e583 1243 | #define ICON_FA_TOILETS_PORTABLE "\xee\x96\x84" // U+e584 1244 | #define ICON_FA_TOOLBOX "\xef\x95\x92" // U+f552 1245 | #define ICON_FA_TOOTH "\xef\x97\x89" // U+f5c9 1246 | #define ICON_FA_TORII_GATE "\xef\x9a\xa1" // U+f6a1 1247 | #define ICON_FA_TORNADO "\xef\x9d\xaf" // U+f76f 1248 | #define ICON_FA_TOWER_BROADCAST "\xef\x94\x99" // U+f519 1249 | #define ICON_FA_TOWER_CELL "\xee\x96\x85" // U+e585 1250 | #define ICON_FA_TOWER_OBSERVATION "\xee\x96\x86" // U+e586 1251 | #define ICON_FA_TRACTOR "\xef\x9c\xa2" // U+f722 1252 | #define ICON_FA_TRADEMARK "\xef\x89\x9c" // U+f25c 1253 | #define ICON_FA_TRAFFIC_LIGHT "\xef\x98\xb7" // U+f637 1254 | #define ICON_FA_TRAILER "\xee\x81\x81" // U+e041 1255 | #define ICON_FA_TRAIN "\xef\x88\xb8" // U+f238 1256 | #define ICON_FA_TRAIN_SUBWAY "\xef\x88\xb9" // U+f239 1257 | #define ICON_FA_TRAIN_TRAM "\xef\x9f\x9a" // U+f7da 1258 | #define ICON_FA_TRANSGENDER "\xef\x88\xa5" // U+f225 1259 | #define ICON_FA_TRASH "\xef\x87\xb8" // U+f1f8 1260 | #define ICON_FA_TRASH_ARROW_UP "\xef\xa0\xa9" // U+f829 1261 | #define ICON_FA_TRASH_CAN "\xef\x8b\xad" // U+f2ed 1262 | #define ICON_FA_TRASH_CAN_ARROW_UP "\xef\xa0\xaa" // U+f82a 1263 | #define ICON_FA_TREE "\xef\x86\xbb" // U+f1bb 1264 | #define ICON_FA_TREE_CITY "\xee\x96\x87" // U+e587 1265 | #define ICON_FA_TRIANGLE_EXCLAMATION "\xef\x81\xb1" // U+f071 1266 | #define ICON_FA_TROPHY "\xef\x82\x91" // U+f091 1267 | #define ICON_FA_TROWEL "\xee\x96\x89" // U+e589 1268 | #define ICON_FA_TROWEL_BRICKS "\xee\x96\x8a" // U+e58a 1269 | #define ICON_FA_TRUCK "\xef\x83\x91" // U+f0d1 1270 | #define ICON_FA_TRUCK_ARROW_RIGHT "\xee\x96\x8b" // U+e58b 1271 | #define ICON_FA_TRUCK_DROPLET "\xee\x96\x8c" // U+e58c 1272 | #define ICON_FA_TRUCK_FAST "\xef\x92\x8b" // U+f48b 1273 | #define ICON_FA_TRUCK_FIELD "\xee\x96\x8d" // U+e58d 1274 | #define ICON_FA_TRUCK_FIELD_UN "\xee\x96\x8e" // U+e58e 1275 | #define ICON_FA_TRUCK_FRONT "\xee\x8a\xb7" // U+e2b7 1276 | #define ICON_FA_TRUCK_MEDICAL "\xef\x83\xb9" // U+f0f9 1277 | #define ICON_FA_TRUCK_MONSTER "\xef\x98\xbb" // U+f63b 1278 | #define ICON_FA_TRUCK_MOVING "\xef\x93\x9f" // U+f4df 1279 | #define ICON_FA_TRUCK_PICKUP "\xef\x98\xbc" // U+f63c 1280 | #define ICON_FA_TRUCK_PLANE "\xee\x96\x8f" // U+e58f 1281 | #define ICON_FA_TRUCK_RAMP_BOX "\xef\x93\x9e" // U+f4de 1282 | #define ICON_FA_TTY "\xef\x87\xa4" // U+f1e4 1283 | #define ICON_FA_TURKISH_LIRA_SIGN "\xee\x8a\xbb" // U+e2bb 1284 | #define ICON_FA_TURN_DOWN "\xef\x8e\xbe" // U+f3be 1285 | #define ICON_FA_TURN_UP "\xef\x8e\xbf" // U+f3bf 1286 | #define ICON_FA_TV "\xef\x89\xac" // U+f26c 1287 | #define ICON_FA_U "U" // U+0055 1288 | #define ICON_FA_UMBRELLA "\xef\x83\xa9" // U+f0e9 1289 | #define ICON_FA_UMBRELLA_BEACH "\xef\x97\x8a" // U+f5ca 1290 | #define ICON_FA_UNDERLINE "\xef\x83\x8d" // U+f0cd 1291 | #define ICON_FA_UNIVERSAL_ACCESS "\xef\x8a\x9a" // U+f29a 1292 | #define ICON_FA_UNLOCK "\xef\x82\x9c" // U+f09c 1293 | #define ICON_FA_UNLOCK_KEYHOLE "\xef\x84\xbe" // U+f13e 1294 | #define ICON_FA_UP_DOWN "\xef\x8c\xb8" // U+f338 1295 | #define ICON_FA_UP_DOWN_LEFT_RIGHT "\xef\x82\xb2" // U+f0b2 1296 | #define ICON_FA_UP_LONG "\xef\x8c\x8c" // U+f30c 1297 | #define ICON_FA_UP_RIGHT_AND_DOWN_LEFT_FROM_CENTER "\xef\x90\xa4" // U+f424 1298 | #define ICON_FA_UP_RIGHT_FROM_SQUARE "\xef\x8d\x9d" // U+f35d 1299 | #define ICON_FA_UPLOAD "\xef\x82\x93" // U+f093 1300 | #define ICON_FA_USER "\xef\x80\x87" // U+f007 1301 | #define ICON_FA_USER_ASTRONAUT "\xef\x93\xbb" // U+f4fb 1302 | #define ICON_FA_USER_CHECK "\xef\x93\xbc" // U+f4fc 1303 | #define ICON_FA_USER_CLOCK "\xef\x93\xbd" // U+f4fd 1304 | #define ICON_FA_USER_DOCTOR "\xef\x83\xb0" // U+f0f0 1305 | #define ICON_FA_USER_GEAR "\xef\x93\xbe" // U+f4fe 1306 | #define ICON_FA_USER_GRADUATE "\xef\x94\x81" // U+f501 1307 | #define ICON_FA_USER_GROUP "\xef\x94\x80" // U+f500 1308 | #define ICON_FA_USER_INJURED "\xef\x9c\xa8" // U+f728 1309 | #define ICON_FA_USER_LARGE "\xef\x90\x86" // U+f406 1310 | #define ICON_FA_USER_LARGE_SLASH "\xef\x93\xba" // U+f4fa 1311 | #define ICON_FA_USER_LOCK "\xef\x94\x82" // U+f502 1312 | #define ICON_FA_USER_MINUS "\xef\x94\x83" // U+f503 1313 | #define ICON_FA_USER_NINJA "\xef\x94\x84" // U+f504 1314 | #define ICON_FA_USER_NURSE "\xef\xa0\xaf" // U+f82f 1315 | #define ICON_FA_USER_PEN "\xef\x93\xbf" // U+f4ff 1316 | #define ICON_FA_USER_PLUS "\xef\x88\xb4" // U+f234 1317 | #define ICON_FA_USER_SECRET "\xef\x88\x9b" // U+f21b 1318 | #define ICON_FA_USER_SHIELD "\xef\x94\x85" // U+f505 1319 | #define ICON_FA_USER_SLASH "\xef\x94\x86" // U+f506 1320 | #define ICON_FA_USER_TAG "\xef\x94\x87" // U+f507 1321 | #define ICON_FA_USER_TIE "\xef\x94\x88" // U+f508 1322 | #define ICON_FA_USER_XMARK "\xef\x88\xb5" // U+f235 1323 | #define ICON_FA_USERS "\xef\x83\x80" // U+f0c0 1324 | #define ICON_FA_USERS_BETWEEN_LINES "\xee\x96\x91" // U+e591 1325 | #define ICON_FA_USERS_GEAR "\xef\x94\x89" // U+f509 1326 | #define ICON_FA_USERS_LINE "\xee\x96\x92" // U+e592 1327 | #define ICON_FA_USERS_RAYS "\xee\x96\x93" // U+e593 1328 | #define ICON_FA_USERS_RECTANGLE "\xee\x96\x94" // U+e594 1329 | #define ICON_FA_USERS_SLASH "\xee\x81\xb3" // U+e073 1330 | #define ICON_FA_USERS_VIEWFINDER "\xee\x96\x95" // U+e595 1331 | #define ICON_FA_UTENSILS "\xef\x8b\xa7" // U+f2e7 1332 | #define ICON_FA_V "V" // U+0056 1333 | #define ICON_FA_VAN_SHUTTLE "\xef\x96\xb6" // U+f5b6 1334 | #define ICON_FA_VAULT "\xee\x8b\x85" // U+e2c5 1335 | #define ICON_FA_VECTOR_SQUARE "\xef\x97\x8b" // U+f5cb 1336 | #define ICON_FA_VENUS "\xef\x88\xa1" // U+f221 1337 | #define ICON_FA_VENUS_DOUBLE "\xef\x88\xa6" // U+f226 1338 | #define ICON_FA_VENUS_MARS "\xef\x88\xa8" // U+f228 1339 | #define ICON_FA_VEST "\xee\x82\x85" // U+e085 1340 | #define ICON_FA_VEST_PATCHES "\xee\x82\x86" // U+e086 1341 | #define ICON_FA_VIAL "\xef\x92\x92" // U+f492 1342 | #define ICON_FA_VIAL_CIRCLE_CHECK "\xee\x96\x96" // U+e596 1343 | #define ICON_FA_VIAL_VIRUS "\xee\x96\x97" // U+e597 1344 | #define ICON_FA_VIALS "\xef\x92\x93" // U+f493 1345 | #define ICON_FA_VIDEO "\xef\x80\xbd" // U+f03d 1346 | #define ICON_FA_VIDEO_SLASH "\xef\x93\xa2" // U+f4e2 1347 | #define ICON_FA_VIHARA "\xef\x9a\xa7" // U+f6a7 1348 | #define ICON_FA_VIRUS "\xee\x81\xb4" // U+e074 1349 | #define ICON_FA_VIRUS_COVID "\xee\x92\xa8" // U+e4a8 1350 | #define ICON_FA_VIRUS_COVID_SLASH "\xee\x92\xa9" // U+e4a9 1351 | #define ICON_FA_VIRUS_SLASH "\xee\x81\xb5" // U+e075 1352 | #define ICON_FA_VIRUSES "\xee\x81\xb6" // U+e076 1353 | #define ICON_FA_VOICEMAIL "\xef\xa2\x97" // U+f897 1354 | #define ICON_FA_VOLCANO "\xef\x9d\xb0" // U+f770 1355 | #define ICON_FA_VOLLEYBALL "\xef\x91\x9f" // U+f45f 1356 | #define ICON_FA_VOLUME_HIGH "\xef\x80\xa8" // U+f028 1357 | #define ICON_FA_VOLUME_LOW "\xef\x80\xa7" // U+f027 1358 | #define ICON_FA_VOLUME_OFF "\xef\x80\xa6" // U+f026 1359 | #define ICON_FA_VOLUME_XMARK "\xef\x9a\xa9" // U+f6a9 1360 | #define ICON_FA_VR_CARDBOARD "\xef\x9c\xa9" // U+f729 1361 | #define ICON_FA_W "W" // U+0057 1362 | #define ICON_FA_WALKIE_TALKIE "\xef\xa3\xaf" // U+f8ef 1363 | #define ICON_FA_WALLET "\xef\x95\x95" // U+f555 1364 | #define ICON_FA_WAND_MAGIC "\xef\x83\x90" // U+f0d0 1365 | #define ICON_FA_WAND_MAGIC_SPARKLES "\xee\x8b\x8a" // U+e2ca 1366 | #define ICON_FA_WAND_SPARKLES "\xef\x9c\xab" // U+f72b 1367 | #define ICON_FA_WAREHOUSE "\xef\x92\x94" // U+f494 1368 | #define ICON_FA_WATER "\xef\x9d\xb3" // U+f773 1369 | #define ICON_FA_WATER_LADDER "\xef\x97\x85" // U+f5c5 1370 | #define ICON_FA_WAVE_SQUARE "\xef\xa0\xbe" // U+f83e 1371 | #define ICON_FA_WEIGHT_HANGING "\xef\x97\x8d" // U+f5cd 1372 | #define ICON_FA_WEIGHT_SCALE "\xef\x92\x96" // U+f496 1373 | #define ICON_FA_WHEAT_AWN "\xee\x8b\x8d" // U+e2cd 1374 | #define ICON_FA_WHEAT_AWN_CIRCLE_EXCLAMATION "\xee\x96\x98" // U+e598 1375 | #define ICON_FA_WHEELCHAIR "\xef\x86\x93" // U+f193 1376 | #define ICON_FA_WHEELCHAIR_MOVE "\xee\x8b\x8e" // U+e2ce 1377 | #define ICON_FA_WHISKEY_GLASS "\xef\x9e\xa0" // U+f7a0 1378 | #define ICON_FA_WIFI "\xef\x87\xab" // U+f1eb 1379 | #define ICON_FA_WIND "\xef\x9c\xae" // U+f72e 1380 | #define ICON_FA_WINDOW_MAXIMIZE "\xef\x8b\x90" // U+f2d0 1381 | #define ICON_FA_WINDOW_MINIMIZE "\xef\x8b\x91" // U+f2d1 1382 | #define ICON_FA_WINDOW_RESTORE "\xef\x8b\x92" // U+f2d2 1383 | #define ICON_FA_WINE_BOTTLE "\xef\x9c\xaf" // U+f72f 1384 | #define ICON_FA_WINE_GLASS "\xef\x93\xa3" // U+f4e3 1385 | #define ICON_FA_WINE_GLASS_EMPTY "\xef\x97\x8e" // U+f5ce 1386 | #define ICON_FA_WON_SIGN "\xef\x85\x99" // U+f159 1387 | #define ICON_FA_WORM "\xee\x96\x99" // U+e599 1388 | #define ICON_FA_WRENCH "\xef\x82\xad" // U+f0ad 1389 | #define ICON_FA_X "X" // U+0058 1390 | #define ICON_FA_X_RAY "\xef\x92\x97" // U+f497 1391 | #define ICON_FA_XMARK "\xef\x80\x8d" // U+f00d 1392 | #define ICON_FA_XMARKS_LINES "\xee\x96\x9a" // U+e59a 1393 | #define ICON_FA_Y "Y" // U+0059 1394 | #define ICON_FA_YEN_SIGN "\xef\x85\x97" // U+f157 1395 | #define ICON_FA_YIN_YANG "\xef\x9a\xad" // U+f6ad 1396 | #define ICON_FA_Z "Z" // U+005a 1397 | -------------------------------------------------------------------------------- /imgui_impl_raylib.h: -------------------------------------------------------------------------------- 1 | /********************************************************************************************** 2 | * 3 | * raylibExtras * Utilities and Shared Components for Raylib 4 | * 5 | * rlImGui * basic ImGui integration 6 | * 7 | * LICENSE: ZLIB 8 | * 9 | * Copyright (c) 2024 Jeffery Myers 10 | * 11 | * Permission is hereby granted, free of charge, to any person obtaining a copy 12 | * of this software and associated documentation files (the "Software"), to deal 13 | * in the Software without restriction, including without limitation the rights 14 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | * copies of the Software, and to permit persons to whom the Software is 16 | * furnished to do so, subject to the following conditions: 17 | * 18 | * The above copyright notice and this permission notice shall be included in all 19 | * copies or substantial portions of the Software. 20 | * 21 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 27 | * SOFTWARE. 28 | * 29 | **********************************************************************************************/ 30 | 31 | // dear imgui: Platform Backend for Raylib 32 | // (Info: Raylib is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc. using OpenGL) 33 | // This is is the low level ImGui backend for raylib, a higher level API that matches the raylib API can be found in rlImGui.h 34 | 35 | // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. 36 | // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. 37 | // Learn about Dear ImGui: 38 | // - FAQ https://dearimgui.com/faq 39 | // - Getting Started https://dearimgui.com/getting-started 40 | // - Documentation https://dearimgui.com/docs (same as your local docs/ folder). 41 | // - Introduction, links and more at the top of imgui.cpp 42 | 43 | #pragma once 44 | #include "imgui.h" // IMGUI_IMPL_API 45 | #ifndef IMGUI_DISABLE 46 | 47 | IMGUI_IMPL_API bool ImGui_ImplRaylib_Init(void); 48 | IMGUI_IMPL_API void ImGui_ImplRaylib_BuildFontAtlas(void); 49 | IMGUI_IMPL_API void ImGui_ImplRaylib_Shutdown(void); 50 | IMGUI_IMPL_API void ImGui_ImplRaylib_NewFrame(void); 51 | IMGUI_IMPL_API void ImGui_ImplRaylib_RenderDrawData(ImDrawData* draw_data); 52 | IMGUI_IMPL_API bool ImGui_ImplRaylib_ProcessEvents(void); 53 | 54 | #endif // #ifndef IMGUI_DISABLE 55 | -------------------------------------------------------------------------------- /premake-VisualStudio.bat: -------------------------------------------------------------------------------- 1 | premake5.exe vs2022 2 | pause 3 | -------------------------------------------------------------------------------- /premake-mingw.bat: -------------------------------------------------------------------------------- 1 | premake5.exe gmake2 2 | pause 3 | -------------------------------------------------------------------------------- /premake5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raylib-extras/rlImGui/9512b36b8cb563274138ec10d82568a51e40d812/premake5 -------------------------------------------------------------------------------- /premake5.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raylib-extras/rlImGui/9512b36b8cb563274138ec10d82568a51e40d812/premake5.exe -------------------------------------------------------------------------------- /premake5.lua: -------------------------------------------------------------------------------- 1 | newoption 2 | { 3 | trigger = "graphics", 4 | value = "OPENGL_VERSION", 5 | description = "version of OpenGL to build raylib against", 6 | allowed = { 7 | { "opengl11", "OpenGL 1.1"}, 8 | { "opengl21", "OpenGL 2.1"}, 9 | { "opengl33", "OpenGL 3.3"}, 10 | { "opengl43", "OpenGL 4.3"} 11 | }, 12 | default = "opengl33" 13 | } 14 | 15 | function define_C() 16 | language "C" 17 | end 18 | 19 | function define_Cpp() 20 | language "C++" 21 | end 22 | 23 | function string.starts(String,Start) 24 | return string.sub(String,1,string.len(Start))==Start 25 | end 26 | 27 | function link_to(lib) 28 | links (lib) 29 | includedirs ("../"..lib.."/include", "../"..lib.."/" ) 30 | end 31 | 32 | function download_progress(total, current) 33 | local ratio = current / total; 34 | ratio = math.min(math.max(ratio, 0), 1); 35 | local percent = math.floor(ratio * 100); 36 | print("Download progress (" .. percent .. "%/100%)") 37 | end 38 | 39 | function check_raylib() 40 | if(os.isdir("raylib") == false and os.isdir("raylib-master") == false) then 41 | if(not os.isfile("raylib-master.zip")) then 42 | print("Raylib not found, downloading from github") 43 | local result_str, response_code = http.download("https://github.com/raysan5/raylib/archive/refs/heads/master.zip", "raylib-master.zip", { 44 | progress = download_progress, 45 | headers = { "From: Premake", "Referer: Premake" } 46 | }) 47 | end 48 | print("Unzipping to " .. os.getcwd()) 49 | zip.extract("raylib-master.zip", os.getcwd()) 50 | os.remove("raylib-master.zip") 51 | end 52 | end 53 | 54 | function check_imgui() 55 | if(os.isdir("imgui") == false and os.isdir("imgui-master") == false) then 56 | if(not os.isfile("imgui-master.zip")) then 57 | print("imgui not found, downloading from github") 58 | local result_str, response_code = http.download("https://github.com/ocornut/imgui/archive/refs/heads/master.zip", "imgui-master.zip", { 59 | progress = download_progress, 60 | headers = { "From: Premake", "Referer: Premake" } 61 | }) 62 | end 63 | print("Unzipping to " .. os.getcwd()) 64 | zip.extract("imgui-master.zip", os.getcwd()) 65 | os.remove("imgui-master.zip") 66 | end 67 | end 68 | 69 | workspace "rlImGui" 70 | configurations { "Debug", "Release" } 71 | platforms { "x64"} 72 | defaultplatform "x64" 73 | 74 | filter "configurations:Debug" 75 | defines { "DEBUG" } 76 | symbols "On" 77 | 78 | filter "configurations:Release" 79 | defines { "NDEBUG" } 80 | optimize "On" 81 | 82 | filter { "platforms:x64" } 83 | architecture "x86_64" 84 | 85 | filter { "system:linux" } 86 | defines { "_GLFW_X11" } 87 | defines { "_GNU_SOURCE" } 88 | 89 | targetdir "bin/%{cfg.buildcfg}/" 90 | 91 | 92 | cdialect "C99" 93 | cppdialect "C++17" 94 | check_raylib() 95 | check_imgui() 96 | 97 | include ("raylib_premake5.lua") 98 | 99 | project "rlImGui" 100 | kind "StaticLib" 101 | location "build" 102 | targetdir "bin/%{cfg.buildcfg}" 103 | language "C++" 104 | cdialect "C99" 105 | cppdialect "C++17" 106 | include_raylib() 107 | includedirs { "rlImGui", "imgui", "imgui-master"} 108 | vpaths 109 | { 110 | ["Header Files"] = { "*.h"}, 111 | ["Source Files"] = {"*.cpp"}, 112 | ["ImGui Files"] = { "imgui/*.h","imgui/*.cpp", "imgui-master/*.h","imgui-master/*.cpp" }, 113 | } 114 | files {"imgui-master/*.h", "imgui-master/*.cpp", "imgui/*.h", "imgui/*.cpp", "*.cpp", "*.h", "extras/**.h"} 115 | 116 | defines {"IMGUI_DISABLE_OBSOLETE_FUNCTIONS","IMGUI_DISABLE_OBSOLETE_KEYIO"} 117 | 118 | group "Examples" 119 | project "simple" 120 | kind "ConsoleApp" 121 | language "C++" 122 | cdialect "C99" 123 | cppdialect "C++17" 124 | location "build" 125 | targetdir "bin/%{cfg.buildcfg}" 126 | 127 | vpaths 128 | { 129 | ["Header Files"] = { "examples/**.h"}, 130 | ["Source Files"] = {"examples/**.cpp", "examples/**.c"}, 131 | } 132 | files {"examples/simple.cpp"} 133 | link_raylib() 134 | links {"rlImGui"} 135 | includedirs {"./", "imgui", "imgui-master" } 136 | 137 | filter "action:vs*" 138 | debugdir "$(SolutionDir)" 139 | 140 | 141 | project "editor" 142 | kind "ConsoleApp" 143 | language "C++" 144 | cdialect "C99" 145 | cppdialect "C++17" 146 | location "build" 147 | targetdir "bin/%{cfg.buildcfg}" 148 | 149 | 150 | vpaths 151 | { 152 | ["Header Files"] = { "examples/**.h"}, 153 | ["Source Files"] = {"examples/**.cpp", "examples/**.c"}, 154 | } 155 | files {"examples/editor.cpp"} 156 | link_raylib() 157 | links {"rlImGui"} 158 | includedirs {"./", "imgui", "imgui-master" } 159 | 160 | filter "action:vs*" 161 | debugdir "$(SolutionDir)" 162 | 163 | 164 | project "imgui_style_example" 165 | kind "ConsoleApp" 166 | language "C++" 167 | cdialect "C99" 168 | cppdialect "C++17" 169 | location "build" 170 | targetdir "bin/%{cfg.buildcfg}" 171 | 172 | vpaths 173 | { 174 | ["Header Files"] = { "examples/**.h"}, 175 | ["Source Files"] = {"examples/**.cpp", "examples/**.c"}, 176 | } 177 | files {"examples/imgui_style_example.cpp"} 178 | link_raylib() 179 | links {"rlImGui"} 180 | includedirs {"./", "imgui", "imgui-master" } 181 | 182 | filter "action:vs*" 183 | debugdir "$(SolutionDir)" 184 | 185 | project "docking_example" 186 | kind "ConsoleApp" 187 | language "C++" 188 | cdialect "C99" 189 | cppdialect "C++17" 190 | location "build" 191 | targetdir "bin/%{cfg.buildcfg}" 192 | 193 | vpaths 194 | { 195 | ["Header Files"] = { "examples/**.h"}, 196 | ["Source Files"] = {"examples/**.cpp", "examples/**.c"}, 197 | } 198 | files {"examples/docking_example.cpp"} 199 | link_raylib() 200 | links {"rlImGui"} 201 | includedirs {"./", "imgui", "imgui-master" } 202 | 203 | filter "action:vs*" 204 | debugdir "$(SolutionDir)" 205 | 206 | project "asset_browser" 207 | kind "ConsoleApp" 208 | language "C++" 209 | cdialect "C99" 210 | cppdialect "C++17" 211 | location "build" 212 | targetdir "bin/%{cfg.buildcfg}" 213 | 214 | vpaths 215 | { 216 | ["Header Files"] = { "examples/asset_browser/**.h"}, 217 | ["Source Files"] = {"examples/asset_browser/**.cpp", "examples/asset_browser/**.c"}, 218 | } 219 | files {"examples/asset_browser/**.cpp", "examples/asset_browser/**.h"} 220 | link_raylib() 221 | links {"rlImGui"} 222 | includedirs {"./", "examples/asset_browser/", "imgui", "imgui-master" } 223 | 224 | filter "action:vs*" 225 | debugdir "$(SolutionDir)" 226 | -------------------------------------------------------------------------------- /premake5.osx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raylib-extras/rlImGui/9512b36b8cb563274138ec10d82568a51e40d812/premake5.osx -------------------------------------------------------------------------------- /raylib_premake5.lua: -------------------------------------------------------------------------------- 1 | -- Copyright (c) 2020-2024 Jeffery Myers 2 | -- 3 | --This software is provided "as-is", without any express or implied warranty. In no event 4 | --will the authors be held liable for any damages arising from the use of this software. 5 | 6 | --Permission is granted to anyone to use this software for any purpose, including commercial 7 | --applications, and to alter it and redistribute it freely, subject to the following restrictions: 8 | 9 | -- 1. The origin of this software must not be misrepresented; you must not claim that you 10 | -- wrote the original software. If you use this software in a product, an acknowledgment 11 | -- in the product documentation would be appreciated but is not required. 12 | -- 13 | -- 2. Altered source versions must be plainly marked as such, and must not be misrepresented 14 | -- as being the original software. 15 | -- 16 | -- 3. This notice may not be removed or altered from any source distribution. 17 | 18 | function platform_defines() 19 | defines{"PLATFORM_DESKTOP"} 20 | 21 | filter {"options:graphics=opengl43"} 22 | defines{"GRAPHICS_API_OPENGL_43"} 23 | 24 | filter {"options:graphics=opengl33"} 25 | defines{"GRAPHICS_API_OPENGL_33"} 26 | 27 | filter {"options:graphics=opengl21"} 28 | defines{"GRAPHICS_API_OPENGL_21"} 29 | 30 | filter {"options:graphics=opengl11"} 31 | defines{"GRAPHICS_API_OPENGL_11"} 32 | 33 | filter {"system:macosx"} 34 | disablewarnings {"deprecated-declarations"} 35 | 36 | filter {"system:linux"} 37 | defines {"_GLFW_X11"} 38 | defines {"_GNU_SOURCE"} 39 | -- This is necessary, otherwise compilation will fail since 40 | -- there is no CLOCK_MONOTOMIC. raylib claims to have a workaround 41 | -- to compile under c99 without -D_GNU_SOURCE, but it didn't seem 42 | -- to work. raylib's Makefile also adds this flag, probably why it went 43 | -- unnoticed for so long. 44 | -- It compiles under c11 without -D_GNU_SOURCE, because c11 requires 45 | -- to have CLOCK_MONOTOMIC 46 | -- See: https://github.com/raysan5/raylib/issues/2729 47 | 48 | filter{} 49 | end 50 | 51 | function get_raylib_dir() 52 | if (os.isdir("raylib-master")) then 53 | return "raylib-master" 54 | end 55 | if (os.isdir("../raylib-master")) then 56 | return "raylib-master" 57 | end 58 | return "raylib" 59 | end 60 | 61 | function link_raylib() 62 | links {"raylib"} 63 | 64 | raylib_dir = get_raylib_dir(); 65 | includedirs {raylib_dir .. "/src" } 66 | includedirs {raylib_dir .."/src/external" } 67 | includedirs {raylib_dir .."/src/external/glfw/include" } 68 | platform_defines() 69 | filter "action:vs*" 70 | defines{"_WINSOCK_DEPRECATED_NO_WARNINGS", "_CRT_SECURE_NO_WARNINGS"} 71 | dependson {"raylib"} 72 | links {"raylib.lib"} 73 | characterset ("MBCS") 74 | buildoptions { "/Zc:__cplusplus" } 75 | 76 | filter "system:windows" 77 | defines{"_WIN32"} 78 | links {"winmm", "gdi32"} 79 | libdirs {"bin/%{cfg.buildcfg}"} 80 | 81 | filter "system:linux" 82 | links {"pthread", "m", "dl", "rt", "X11"} 83 | 84 | filter "system:macosx" 85 | links {"OpenGL.framework", "Cocoa.framework", "IOKit.framework", "CoreFoundation.framework", "CoreAudio.framework", "CoreVideo.framework", "AudioToolbox.framework"} 86 | 87 | filter{} 88 | end 89 | 90 | function include_raylib() 91 | raylib_dir = get_raylib_dir(); 92 | includedirs {raylib_dir .."/src" } 93 | includedirs {raylib_dir .."/src/external" } 94 | includedirs {raylib_dir .."/src/external/glfw/include" } 95 | platform_defines() 96 | 97 | filter "action:vs*" 98 | defines{"_WINSOCK_DEPRECATED_NO_WARNINGS", "_CRT_SECURE_NO_WARNINGS"} 99 | 100 | filter{} 101 | end 102 | 103 | project "raylib" 104 | kind "StaticLib" 105 | 106 | platform_defines() 107 | 108 | location "build" 109 | language "C" 110 | cdialect "C99" 111 | cppdialect "C++17" 112 | targetdir "bin/%{cfg.buildcfg}" 113 | 114 | filter "action:vs*" 115 | defines{"_WINSOCK_DEPRECATED_NO_WARNINGS", "_CRT_SECURE_NO_WARNINGS"} 116 | characterset ("MBCS") 117 | buildoptions { "/Zc:__cplusplus" } 118 | filter{} 119 | 120 | raylib_dir = get_raylib_dir(); 121 | print ("Using raylib dir " .. raylib_dir); 122 | includedirs {raylib_dir .. "/src", raylib_dir .. "/src/external/glfw/include" } 123 | vpaths 124 | { 125 | ["Header Files"] = { raylib_dir .. "/src/**.h"}, 126 | ["Source Files/*"] = { raylib_dir .. "/src/**.c"}, 127 | } 128 | files {raylib_dir .. "/src/*.h", raylib_dir .. "/src/*.c"} 129 | removefiles {raylib_dir .. "/src/rcore_*.c"} 130 | 131 | filter { "system:macosx", "files:" .. raylib_dir .. "/src/rglfw.c" } 132 | compileas "Objective-C" 133 | 134 | filter{} 135 | -------------------------------------------------------------------------------- /resources/driusstraight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raylib-extras/rlImGui/9512b36b8cb563274138ec10d82568a51e40d812/resources/driusstraight.ttf -------------------------------------------------------------------------------- /resources/parrots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raylib-extras/rlImGui/9512b36b8cb563274138ec10d82568a51e40d812/resources/parrots.png -------------------------------------------------------------------------------- /rlImGui.cpp: -------------------------------------------------------------------------------- 1 | /********************************************************************************************** 2 | * 3 | * raylibExtras * Utilities and Shared Components for Raylib 4 | * 5 | * rlImGui * basic ImGui integration 6 | * 7 | * LICENSE: ZLIB 8 | * 9 | * Copyright (c) 2024 Jeffery Myers 10 | * 11 | * Permission is hereby granted, free of charge, to any person obtaining a copy 12 | * of this software and associated documentation files (the "Software"), to deal 13 | * in the Software without restriction, including without limitation the rights 14 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | * copies of the Software, and to permit persons to whom the Software is 16 | * furnished to do so, subject to the following conditions: 17 | * 18 | * The above copyright notice and this permission notice shall be included in all 19 | * copies or substantial portions of the Software. 20 | * 21 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 27 | * SOFTWARE. 28 | * 29 | **********************************************************************************************/ 30 | #include "rlImGui.h" 31 | 32 | #include "imgui_impl_raylib.h" 33 | 34 | #include "raylib.h" 35 | #include "rlgl.h" 36 | 37 | #include "imgui.h" 38 | 39 | #include 40 | #include 41 | #include 42 | #include 43 | 44 | #ifndef NO_FONT_AWESOME 45 | #include "extras/FA6FreeSolidFontData.h" 46 | #endif 47 | 48 | static ImGuiMouseCursor CurrentMouseCursor = ImGuiMouseCursor_COUNT; 49 | static MouseCursor MouseCursorMap[ImGuiMouseCursor_COUNT]; 50 | 51 | ImGuiContext* GlobalContext = nullptr; 52 | 53 | static std::map RaylibKeyMap; 54 | 55 | static bool LastFrameFocused = false; 56 | 57 | static bool LastControlPressed = false; 58 | static bool LastShiftPressed = false; 59 | static bool LastAltPressed = false; 60 | static bool LastSuperPressed = false; 61 | 62 | // internal only functions 63 | bool rlImGuiIsControlDown() { return IsKeyDown(KEY_RIGHT_CONTROL) || IsKeyDown(KEY_LEFT_CONTROL); } 64 | bool rlImGuiIsShiftDown() { return IsKeyDown(KEY_RIGHT_SHIFT) || IsKeyDown(KEY_LEFT_SHIFT); } 65 | bool rlImGuiIsAltDown() { return IsKeyDown(KEY_RIGHT_ALT) || IsKeyDown(KEY_LEFT_ALT); } 66 | bool rlImGuiIsSuperDown() { return IsKeyDown(KEY_RIGHT_SUPER) || IsKeyDown(KEY_LEFT_SUPER); } 67 | 68 | struct ImGui_ImplRaylib_Data 69 | { 70 | Texture FontTexture; 71 | }; 72 | 73 | ImGui_ImplRaylib_Data* ImGui_ImplRaylib_GetBackendData() 74 | { 75 | return ImGui::GetCurrentContext() ? static_cast(ImGui::GetPlatformIO().Renderer_RenderState) : nullptr; 76 | } 77 | 78 | void ImGui_ImplRaylib_CreateBackendData() 79 | { 80 | if (!ImGui::GetCurrentContext() || ImGui::GetPlatformIO().Renderer_RenderState) 81 | return; 82 | 83 | ImGui::GetPlatformIO().Renderer_RenderState = MemAlloc(sizeof(ImGui_ImplRaylib_Data)); 84 | } 85 | 86 | void ImGui_ImplRaylib_FreeBackendData() 87 | { 88 | if (!ImGui::GetCurrentContext()) 89 | return; 90 | 91 | MemFree(ImGui::GetPlatformIO().Renderer_RenderState); 92 | } 93 | 94 | void ReloadFonts(void) 95 | { 96 | auto* platData = ImGui_ImplRaylib_GetBackendData(); 97 | if (!platData) 98 | return; 99 | 100 | ImGuiPlatformIO& platIo = ImGui::GetPlatformIO(); 101 | ImGuiIO& io = ImGui::GetIO(); 102 | unsigned char* pixels = nullptr; 103 | 104 | int width; 105 | int height; 106 | io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height, nullptr); 107 | Image image = GenImageColor(width, height, BLANK); 108 | memcpy(image.data, pixels, width * height * 4); 109 | 110 | if (IsTextureValid(platData->FontTexture)) 111 | { 112 | UnloadTexture(platData->FontTexture); 113 | } 114 | platData->FontTexture = LoadTextureFromImage(image); 115 | UnloadImage(image); 116 | io.Fonts->TexID = static_cast(platData->FontTexture.id); 117 | } 118 | 119 | static const char* GetClipTextCallback(ImGuiContext*) 120 | { 121 | return GetClipboardText(); 122 | } 123 | 124 | static void SetClipTextCallback(ImGuiContext*, const char* text) 125 | { 126 | SetClipboardText(text); 127 | } 128 | 129 | static void ImGuiNewFrame(float deltaTime) 130 | { 131 | ImGuiIO& io = ImGui::GetIO(); 132 | auto* platData = ImGui_ImplRaylib_GetBackendData(); 133 | if (!platData) 134 | { 135 | ImGui_ImplRaylib_CreateBackendData(); 136 | platData = ImGui_ImplRaylib_GetBackendData(); 137 | if (!platData) 138 | return; 139 | } 140 | 141 | if (!IsTextureValid(platData->FontTexture)) 142 | ReloadFonts(); 143 | 144 | Vector2 resolutionScale = GetWindowScaleDPI(); 145 | 146 | #ifndef PLATFORM_DRM 147 | if (IsWindowFullscreen()) 148 | { 149 | int monitor = GetCurrentMonitor(); 150 | io.DisplaySize.x = float(GetMonitorWidth(monitor)); 151 | io.DisplaySize.y = float(GetMonitorHeight(monitor)); 152 | } 153 | else 154 | { 155 | io.DisplaySize.x = float(GetScreenWidth()); 156 | io.DisplaySize.y = float(GetScreenHeight()); 157 | } 158 | 159 | #if !defined(__APPLE__) 160 | if (!IsWindowState(FLAG_WINDOW_HIGHDPI)) 161 | resolutionScale = Vector2{ 1,1 }; 162 | #endif 163 | #else 164 | io.DisplaySize.x = float(GetScreenWidth()); 165 | io.DisplaySize.y = float(GetScreenHeight()); 166 | #endif 167 | 168 | io.DisplayFramebufferScale = ImVec2(resolutionScale.x, resolutionScale.y); 169 | 170 | if (deltaTime <= 0) 171 | deltaTime = 0.001f; 172 | 173 | io.DeltaTime = deltaTime; 174 | 175 | if (ImGui::GetIO().BackendFlags & ImGuiBackendFlags_HasMouseCursors) 176 | { 177 | if ((io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) == 0) 178 | { 179 | ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor(); 180 | if (imgui_cursor != CurrentMouseCursor || io.MouseDrawCursor) 181 | { 182 | CurrentMouseCursor = imgui_cursor; 183 | if (io.MouseDrawCursor || imgui_cursor == ImGuiMouseCursor_None) 184 | { 185 | HideCursor(); 186 | } 187 | else 188 | { 189 | ShowCursor(); 190 | 191 | if (!(io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange)) 192 | { 193 | SetMouseCursor((imgui_cursor > -1 && imgui_cursor < ImGuiMouseCursor_COUNT) ? MouseCursorMap[imgui_cursor] : MOUSE_CURSOR_DEFAULT); 194 | } 195 | } 196 | } 197 | } 198 | } 199 | } 200 | 201 | static void ImGuiTriangleVert(ImDrawVert& idx_vert) 202 | { 203 | Color *c = reinterpret_cast(&idx_vert.col); 204 | rlColor4ub(c->r, c->g, c->b, c->a); 205 | rlTexCoord2f(idx_vert.uv.x, idx_vert.uv.y); 206 | rlVertex2f(idx_vert.pos.x, idx_vert.pos.y); 207 | } 208 | 209 | static void ImGuiRenderTriangles(unsigned int count, int indexStart, const ImVector& indexBuffer, const ImVector& vertBuffer, ImTextureID texturePtr) 210 | { 211 | if (count < 3) 212 | return; 213 | 214 | unsigned int textureId = static_cast(texturePtr); 215 | 216 | rlBegin(RL_TRIANGLES); 217 | rlSetTexture(textureId); 218 | 219 | for (unsigned int i = 0; i <= (count - 3); i += 3) 220 | { 221 | ImDrawIdx indexA = indexBuffer[indexStart + i]; 222 | ImDrawIdx indexB = indexBuffer[indexStart + i + 1]; 223 | ImDrawIdx indexC = indexBuffer[indexStart + i + 2]; 224 | 225 | ImDrawVert vertexA = vertBuffer[indexA]; 226 | ImDrawVert vertexB = vertBuffer[indexB]; 227 | ImDrawVert vertexC = vertBuffer[indexC]; 228 | 229 | ImGuiTriangleVert(vertexA); 230 | ImGuiTriangleVert(vertexB); 231 | ImGuiTriangleVert(vertexC); 232 | } 233 | rlEnd(); 234 | } 235 | 236 | static void EnableScissor(float x, float y, float width, float height) 237 | { 238 | rlEnableScissorTest(); 239 | ImGuiIO& io = ImGui::GetIO(); 240 | 241 | ImVec2 scale = io.DisplayFramebufferScale; 242 | #if !defined(__APPLE__) 243 | if (!IsWindowState(FLAG_WINDOW_HIGHDPI)) 244 | { 245 | scale.x = 1; 246 | scale.y = 1; 247 | } 248 | #endif 249 | 250 | rlScissor((int)(x * scale.x), 251 | int((io.DisplaySize.y - (int)(y + height)) * scale.y), 252 | (int)(width * scale.x), 253 | (int)(height * scale.y)); 254 | } 255 | 256 | static void SetupMouseCursors(void) 257 | { 258 | MouseCursorMap[ImGuiMouseCursor_Arrow] = MOUSE_CURSOR_ARROW; 259 | MouseCursorMap[ImGuiMouseCursor_TextInput] = MOUSE_CURSOR_IBEAM; 260 | MouseCursorMap[ImGuiMouseCursor_Hand] = MOUSE_CURSOR_POINTING_HAND; 261 | MouseCursorMap[ImGuiMouseCursor_ResizeAll] = MOUSE_CURSOR_RESIZE_ALL; 262 | MouseCursorMap[ImGuiMouseCursor_ResizeEW] = MOUSE_CURSOR_RESIZE_EW; 263 | MouseCursorMap[ImGuiMouseCursor_ResizeNESW] = MOUSE_CURSOR_RESIZE_NESW; 264 | MouseCursorMap[ImGuiMouseCursor_ResizeNS] = MOUSE_CURSOR_RESIZE_NS; 265 | MouseCursorMap[ImGuiMouseCursor_ResizeNWSE] = MOUSE_CURSOR_RESIZE_NWSE; 266 | MouseCursorMap[ImGuiMouseCursor_NotAllowed] = MOUSE_CURSOR_NOT_ALLOWED; 267 | } 268 | 269 | void SetupFontAwesome(void) 270 | { 271 | #ifndef NO_FONT_AWESOME 272 | static const ImWchar icons_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; 273 | ImFontConfig icons_config; 274 | icons_config.MergeMode = true; 275 | icons_config.PixelSnapH = true; 276 | icons_config.FontDataOwnedByAtlas = false; 277 | 278 | icons_config.GlyphMaxAdvanceX = std::numeric_limits::max(); 279 | icons_config.RasterizerMultiply = 1.0f; 280 | icons_config.OversampleH = 2; 281 | icons_config.OversampleV = 1; 282 | 283 | icons_config.GlyphRanges = icons_ranges; 284 | 285 | ImGuiIO& io = ImGui::GetIO(); 286 | 287 | float size = FONT_AWESOME_ICON_SIZE; 288 | #if !defined(__APPLE__) 289 | if (!IsWindowState(FLAG_WINDOW_HIGHDPI)) 290 | size *= GetWindowScaleDPI().y; 291 | 292 | 293 | icons_config.RasterizerMultiply = GetWindowScaleDPI().y; 294 | #endif 295 | 296 | io.Fonts->AddFontFromMemoryCompressedTTF((void*)fa_solid_900_compressed_data, fa_solid_900_compressed_size, size, &icons_config, icons_ranges); 297 | #endif 298 | 299 | } 300 | 301 | void SetupBackend(void) 302 | { 303 | ImGuiIO& io = ImGui::GetIO(); 304 | io.BackendPlatformName = "imgui_impl_raylib"; 305 | io.BackendFlags |= ImGuiBackendFlags_HasGamepad | ImGuiBackendFlags_HasSetMousePos; 306 | 307 | #ifndef PLATFORM_DRM 308 | io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors; 309 | #endif 310 | 311 | io.MousePos = ImVec2(0, 0); 312 | 313 | ImGuiPlatformIO& platformIO = ImGui::GetPlatformIO(); 314 | 315 | platformIO.Platform_SetClipboardTextFn = SetClipTextCallback; 316 | platformIO.Platform_GetClipboardTextFn = GetClipTextCallback; 317 | 318 | platformIO.Platform_ClipboardUserData = nullptr; 319 | 320 | ImGui_ImplRaylib_CreateBackendData(); 321 | } 322 | 323 | void rlImGuiEndInitImGui(void) 324 | { 325 | ImGui::SetCurrentContext(GlobalContext); 326 | 327 | SetupFontAwesome(); 328 | 329 | SetupMouseCursors(); 330 | 331 | SetupBackend(); 332 | } 333 | 334 | static void SetupKeymap(void) 335 | { 336 | if (!RaylibKeyMap.empty()) 337 | return; 338 | 339 | // build up a map of raylib keys to ImGuiKeys 340 | RaylibKeyMap[KEY_APOSTROPHE] = ImGuiKey_Apostrophe; 341 | RaylibKeyMap[KEY_COMMA] = ImGuiKey_Comma; 342 | RaylibKeyMap[KEY_MINUS] = ImGuiKey_Minus; 343 | RaylibKeyMap[KEY_PERIOD] = ImGuiKey_Period; 344 | RaylibKeyMap[KEY_SLASH] = ImGuiKey_Slash; 345 | RaylibKeyMap[KEY_ZERO] = ImGuiKey_0; 346 | RaylibKeyMap[KEY_ONE] = ImGuiKey_1; 347 | RaylibKeyMap[KEY_TWO] = ImGuiKey_2; 348 | RaylibKeyMap[KEY_THREE] = ImGuiKey_3; 349 | RaylibKeyMap[KEY_FOUR] = ImGuiKey_4; 350 | RaylibKeyMap[KEY_FIVE] = ImGuiKey_5; 351 | RaylibKeyMap[KEY_SIX] = ImGuiKey_6; 352 | RaylibKeyMap[KEY_SEVEN] = ImGuiKey_7; 353 | RaylibKeyMap[KEY_EIGHT] = ImGuiKey_8; 354 | RaylibKeyMap[KEY_NINE] = ImGuiKey_9; 355 | RaylibKeyMap[KEY_SEMICOLON] = ImGuiKey_Semicolon; 356 | RaylibKeyMap[KEY_EQUAL] = ImGuiKey_Equal; 357 | RaylibKeyMap[KEY_A] = ImGuiKey_A; 358 | RaylibKeyMap[KEY_B] = ImGuiKey_B; 359 | RaylibKeyMap[KEY_C] = ImGuiKey_C; 360 | RaylibKeyMap[KEY_D] = ImGuiKey_D; 361 | RaylibKeyMap[KEY_E] = ImGuiKey_E; 362 | RaylibKeyMap[KEY_F] = ImGuiKey_F; 363 | RaylibKeyMap[KEY_G] = ImGuiKey_G; 364 | RaylibKeyMap[KEY_H] = ImGuiKey_H; 365 | RaylibKeyMap[KEY_I] = ImGuiKey_I; 366 | RaylibKeyMap[KEY_J] = ImGuiKey_J; 367 | RaylibKeyMap[KEY_K] = ImGuiKey_K; 368 | RaylibKeyMap[KEY_L] = ImGuiKey_L; 369 | RaylibKeyMap[KEY_M] = ImGuiKey_M; 370 | RaylibKeyMap[KEY_N] = ImGuiKey_N; 371 | RaylibKeyMap[KEY_O] = ImGuiKey_O; 372 | RaylibKeyMap[KEY_P] = ImGuiKey_P; 373 | RaylibKeyMap[KEY_Q] = ImGuiKey_Q; 374 | RaylibKeyMap[KEY_R] = ImGuiKey_R; 375 | RaylibKeyMap[KEY_S] = ImGuiKey_S; 376 | RaylibKeyMap[KEY_T] = ImGuiKey_T; 377 | RaylibKeyMap[KEY_U] = ImGuiKey_U; 378 | RaylibKeyMap[KEY_V] = ImGuiKey_V; 379 | RaylibKeyMap[KEY_W] = ImGuiKey_W; 380 | RaylibKeyMap[KEY_X] = ImGuiKey_X; 381 | RaylibKeyMap[KEY_Y] = ImGuiKey_Y; 382 | RaylibKeyMap[KEY_Z] = ImGuiKey_Z; 383 | RaylibKeyMap[KEY_SPACE] = ImGuiKey_Space; 384 | RaylibKeyMap[KEY_ESCAPE] = ImGuiKey_Escape; 385 | RaylibKeyMap[KEY_ENTER] = ImGuiKey_Enter; 386 | RaylibKeyMap[KEY_TAB] = ImGuiKey_Tab; 387 | RaylibKeyMap[KEY_BACKSPACE] = ImGuiKey_Backspace; 388 | RaylibKeyMap[KEY_INSERT] = ImGuiKey_Insert; 389 | RaylibKeyMap[KEY_DELETE] = ImGuiKey_Delete; 390 | RaylibKeyMap[KEY_RIGHT] = ImGuiKey_RightArrow; 391 | RaylibKeyMap[KEY_LEFT] = ImGuiKey_LeftArrow; 392 | RaylibKeyMap[KEY_DOWN] = ImGuiKey_DownArrow; 393 | RaylibKeyMap[KEY_UP] = ImGuiKey_UpArrow; 394 | RaylibKeyMap[KEY_PAGE_UP] = ImGuiKey_PageUp; 395 | RaylibKeyMap[KEY_PAGE_DOWN] = ImGuiKey_PageDown; 396 | RaylibKeyMap[KEY_HOME] = ImGuiKey_Home; 397 | RaylibKeyMap[KEY_END] = ImGuiKey_End; 398 | RaylibKeyMap[KEY_CAPS_LOCK] = ImGuiKey_CapsLock; 399 | RaylibKeyMap[KEY_SCROLL_LOCK] = ImGuiKey_ScrollLock; 400 | RaylibKeyMap[KEY_NUM_LOCK] = ImGuiKey_NumLock; 401 | RaylibKeyMap[KEY_PRINT_SCREEN] = ImGuiKey_PrintScreen; 402 | RaylibKeyMap[KEY_PAUSE] = ImGuiKey_Pause; 403 | RaylibKeyMap[KEY_F1] = ImGuiKey_F1; 404 | RaylibKeyMap[KEY_F2] = ImGuiKey_F2; 405 | RaylibKeyMap[KEY_F3] = ImGuiKey_F3; 406 | RaylibKeyMap[KEY_F4] = ImGuiKey_F4; 407 | RaylibKeyMap[KEY_F5] = ImGuiKey_F5; 408 | RaylibKeyMap[KEY_F6] = ImGuiKey_F6; 409 | RaylibKeyMap[KEY_F7] = ImGuiKey_F7; 410 | RaylibKeyMap[KEY_F8] = ImGuiKey_F8; 411 | RaylibKeyMap[KEY_F9] = ImGuiKey_F9; 412 | RaylibKeyMap[KEY_F10] = ImGuiKey_F10; 413 | RaylibKeyMap[KEY_F11] = ImGuiKey_F11; 414 | RaylibKeyMap[KEY_F12] = ImGuiKey_F12; 415 | RaylibKeyMap[KEY_LEFT_SHIFT] = ImGuiKey_LeftShift; 416 | RaylibKeyMap[KEY_LEFT_CONTROL] = ImGuiKey_LeftCtrl; 417 | RaylibKeyMap[KEY_LEFT_ALT] = ImGuiKey_LeftAlt; 418 | RaylibKeyMap[KEY_LEFT_SUPER] = ImGuiKey_LeftSuper; 419 | RaylibKeyMap[KEY_RIGHT_SHIFT] = ImGuiKey_RightShift; 420 | RaylibKeyMap[KEY_RIGHT_CONTROL] = ImGuiKey_RightCtrl; 421 | RaylibKeyMap[KEY_RIGHT_ALT] = ImGuiKey_RightAlt; 422 | RaylibKeyMap[KEY_RIGHT_SUPER] = ImGuiKey_RightSuper; 423 | RaylibKeyMap[KEY_KB_MENU] = ImGuiKey_Menu; 424 | RaylibKeyMap[KEY_LEFT_BRACKET] = ImGuiKey_LeftBracket; 425 | RaylibKeyMap[KEY_BACKSLASH] = ImGuiKey_Backslash; 426 | RaylibKeyMap[KEY_RIGHT_BRACKET] = ImGuiKey_RightBracket; 427 | RaylibKeyMap[KEY_GRAVE] = ImGuiKey_GraveAccent; 428 | RaylibKeyMap[KEY_KP_0] = ImGuiKey_Keypad0; 429 | RaylibKeyMap[KEY_KP_1] = ImGuiKey_Keypad1; 430 | RaylibKeyMap[KEY_KP_2] = ImGuiKey_Keypad2; 431 | RaylibKeyMap[KEY_KP_3] = ImGuiKey_Keypad3; 432 | RaylibKeyMap[KEY_KP_4] = ImGuiKey_Keypad4; 433 | RaylibKeyMap[KEY_KP_5] = ImGuiKey_Keypad5; 434 | RaylibKeyMap[KEY_KP_6] = ImGuiKey_Keypad6; 435 | RaylibKeyMap[KEY_KP_7] = ImGuiKey_Keypad7; 436 | RaylibKeyMap[KEY_KP_8] = ImGuiKey_Keypad8; 437 | RaylibKeyMap[KEY_KP_9] = ImGuiKey_Keypad9; 438 | RaylibKeyMap[KEY_KP_DECIMAL] = ImGuiKey_KeypadDecimal; 439 | RaylibKeyMap[KEY_KP_DIVIDE] = ImGuiKey_KeypadDivide; 440 | RaylibKeyMap[KEY_KP_MULTIPLY] = ImGuiKey_KeypadMultiply; 441 | RaylibKeyMap[KEY_KP_SUBTRACT] = ImGuiKey_KeypadSubtract; 442 | RaylibKeyMap[KEY_KP_ADD] = ImGuiKey_KeypadAdd; 443 | RaylibKeyMap[KEY_KP_ENTER] = ImGuiKey_KeypadEnter; 444 | RaylibKeyMap[KEY_KP_EQUAL] = ImGuiKey_KeypadEqual; 445 | } 446 | 447 | static void SetupGlobals(void) 448 | { 449 | LastFrameFocused = IsWindowFocused(); 450 | LastControlPressed = false; 451 | LastShiftPressed = false; 452 | LastAltPressed = false; 453 | LastSuperPressed = false; 454 | } 455 | 456 | void rlImGuiBeginInitImGui(void) 457 | { 458 | SetupGlobals(); 459 | if (GlobalContext == nullptr) 460 | GlobalContext = ImGui::CreateContext(nullptr); 461 | SetupKeymap(); 462 | 463 | ImGuiIO& io = ImGui::GetIO(); 464 | 465 | ImFontConfig defaultConfig; 466 | 467 | static constexpr int DefaultFonSize = 13; 468 | 469 | defaultConfig.SizePixels = DefaultFonSize; 470 | #if !defined(__APPLE__) 471 | if (!IsWindowState(FLAG_WINDOW_HIGHDPI)) 472 | defaultConfig.SizePixels = ceilf(defaultConfig.SizePixels * GetWindowScaleDPI().y); 473 | 474 | defaultConfig.RasterizerMultiply = GetWindowScaleDPI().y; 475 | #endif 476 | 477 | defaultConfig.PixelSnapH = true; 478 | io.Fonts->AddFontDefault(&defaultConfig); 479 | } 480 | 481 | void rlImGuiSetup(bool dark) 482 | { 483 | rlImGuiBeginInitImGui(); 484 | 485 | if (dark) 486 | ImGui::StyleColorsDark(); 487 | else 488 | ImGui::StyleColorsLight(); 489 | 490 | rlImGuiEndInitImGui(); 491 | } 492 | 493 | void rlImGuiReloadFonts(void) 494 | { 495 | ImGui::SetCurrentContext(GlobalContext); 496 | 497 | ReloadFonts(); 498 | } 499 | 500 | void rlImGuiBegin(void) 501 | { 502 | ImGui::SetCurrentContext(GlobalContext); 503 | rlImGuiBeginDelta(GetFrameTime()); 504 | } 505 | 506 | void rlImGuiBeginDelta(float deltaTime) 507 | { 508 | ImGui::SetCurrentContext(GlobalContext); 509 | 510 | ImGuiNewFrame(deltaTime); 511 | ImGui_ImplRaylib_ProcessEvents(); 512 | ImGui::NewFrame(); 513 | } 514 | 515 | void rlImGuiEnd(void) 516 | { 517 | ImGui::SetCurrentContext(GlobalContext); 518 | ImGui::Render(); 519 | ImGui_ImplRaylib_RenderDrawData(ImGui::GetDrawData()); 520 | } 521 | 522 | void rlImGuiShutdown(void) 523 | { 524 | if (GlobalContext == nullptr) 525 | return; 526 | 527 | ImGui::SetCurrentContext(GlobalContext); 528 | ImGui_ImplRaylib_Shutdown(); 529 | 530 | ImGui::DestroyContext(GlobalContext); 531 | GlobalContext = nullptr; 532 | } 533 | 534 | void rlImGuiImage(const Texture* image) 535 | { 536 | if (!image) 537 | return; 538 | 539 | if (GlobalContext) 540 | ImGui::SetCurrentContext(GlobalContext); 541 | 542 | ImGui::Image(ImTextureID(image->id), ImVec2(float(image->width), float(image->height))); 543 | } 544 | 545 | bool rlImGuiImageButton(const char* name, const Texture* image) 546 | { 547 | if (!image) 548 | return false; 549 | 550 | if (GlobalContext) 551 | ImGui::SetCurrentContext(GlobalContext); 552 | 553 | return ImGui::ImageButton(name, ImTextureID(image->id), ImVec2(float(image->width), float(image->height))); 554 | } 555 | 556 | bool rlImGuiImageButtonSize(const char* name, const Texture* image, Vector2 size) 557 | { 558 | if (!image) 559 | return false; 560 | 561 | if (GlobalContext) 562 | ImGui::SetCurrentContext(GlobalContext); 563 | 564 | return ImGui::ImageButton(name, ImTextureID(image->id), ImVec2(size.x, size.y)); 565 | } 566 | 567 | void rlImGuiImageSize(const Texture* image, int width, int height) 568 | { 569 | if (!image) 570 | return; 571 | 572 | if (GlobalContext) 573 | ImGui::SetCurrentContext(GlobalContext); 574 | 575 | ImGui::Image(ImTextureID(image->id), ImVec2(float(width), float(height))); 576 | } 577 | 578 | void rlImGuiImageSizeV(const Texture* image, Vector2 size) 579 | { 580 | if (!image) 581 | return; 582 | 583 | if (GlobalContext) 584 | ImGui::SetCurrentContext(GlobalContext); 585 | 586 | ImGui::Image(ImTextureID(image->id), ImVec2(size.x, size.y)); 587 | } 588 | 589 | void rlImGuiImageRect(const Texture* image, int destWidth, int destHeight, Rectangle sourceRect) 590 | { 591 | if (!image) 592 | return; 593 | 594 | if (GlobalContext) 595 | ImGui::SetCurrentContext(GlobalContext); 596 | 597 | ImVec2 uv0; 598 | ImVec2 uv1; 599 | 600 | if (sourceRect.width < 0) 601 | { 602 | uv0.x = -sourceRect.x / image->width; 603 | uv1.x = (uv0.x - float(fabs(sourceRect.width) / image->width)); 604 | } 605 | else 606 | { 607 | uv0.x = sourceRect.x / image->width; 608 | uv1.x = uv0.x + float(sourceRect.width / image->width); 609 | } 610 | 611 | if (sourceRect.height < 0) 612 | { 613 | uv0.y = -sourceRect.y / image->height; 614 | uv1.y = (uv0.y - fabsf(sourceRect.height) / image->height); 615 | } 616 | else 617 | { 618 | uv0.y = sourceRect.y / image->height; 619 | uv1.y = uv0.y + sourceRect.height / image->height; 620 | } 621 | 622 | ImGui::Image((ImTextureID)image->id, ImVec2(float(destWidth), float(destHeight)), uv0, uv1); 623 | } 624 | 625 | void rlImGuiImageRenderTexture(const RenderTexture* image) 626 | { 627 | if (!image) 628 | return; 629 | 630 | if (GlobalContext) 631 | ImGui::SetCurrentContext(GlobalContext); 632 | 633 | rlImGuiImageRect(&image->texture, image->texture.width, image->texture.height, Rectangle{ 0,0, float(image->texture.width), -float(image->texture.height) }); 634 | } 635 | 636 | void rlImGuiImageRenderTextureFit(const RenderTexture* image, bool center) 637 | { 638 | if (!image) 639 | return; 640 | 641 | if (GlobalContext) 642 | ImGui::SetCurrentContext(GlobalContext); 643 | 644 | ImVec2 area = ImGui::GetContentRegionAvail(); 645 | 646 | float scale = area.x / image->texture.width; 647 | 648 | float y = image->texture.height * scale; 649 | if (y > area.y) 650 | { 651 | scale = area.y / image->texture.height; 652 | } 653 | 654 | int sizeX = int(image->texture.width * scale); 655 | int sizeY = int(image->texture.height * scale); 656 | 657 | if (center) 658 | { 659 | ImGui::SetCursorPosX(0); 660 | ImGui::SetCursorPosX(area.x/2 - sizeX/2); 661 | ImGui::SetCursorPosY(ImGui::GetCursorPosY() + (area.y / 2 - sizeY / 2)); 662 | } 663 | 664 | rlImGuiImageRect(&image->texture, sizeX, sizeY, Rectangle{ 0,0, float(image->texture.width), -float(image->texture.height) }); 665 | } 666 | 667 | // raw ImGui backend API 668 | bool ImGui_ImplRaylib_Init(void) 669 | { 670 | SetupGlobals(); 671 | 672 | SetupKeymap(); 673 | 674 | SetupMouseCursors(); 675 | 676 | SetupBackend(); 677 | 678 | return true; 679 | } 680 | 681 | void ImGui_ImplRaylib_BuildFontAtlas(void) 682 | { 683 | ReloadFonts(); 684 | } 685 | 686 | void ImGui_ImplRaylib_Shutdown() 687 | { 688 | ImGuiIO& io =ImGui::GetIO(); 689 | 690 | auto* plat = ImGui_ImplRaylib_GetBackendData(); 691 | 692 | if (plat && IsTextureValid(plat->FontTexture)) 693 | { 694 | UnloadTexture(plat->FontTexture); 695 | } 696 | 697 | ImGui_ImplRaylib_FreeBackendData(); 698 | 699 | io.Fonts->TexID = 0; 700 | } 701 | 702 | void ImGui_ImplRaylib_NewFrame(void) 703 | { 704 | ImGuiNewFrame(GetFrameTime()); 705 | } 706 | 707 | void ImGui_ImplRaylib_RenderDrawData(ImDrawData* draw_data) 708 | { 709 | rlDrawRenderBatchActive(); 710 | rlDisableBackfaceCulling(); 711 | 712 | for (int l = 0; l < draw_data->CmdListsCount; ++l) 713 | { 714 | const ImDrawList* commandList = draw_data->CmdLists[l]; 715 | 716 | for (const auto& cmd : commandList->CmdBuffer) 717 | { 718 | EnableScissor(cmd.ClipRect.x - draw_data->DisplayPos.x, cmd.ClipRect.y - draw_data->DisplayPos.y, cmd.ClipRect.z - (cmd.ClipRect.x - draw_data->DisplayPos.x), cmd.ClipRect.w - (cmd.ClipRect.y - draw_data->DisplayPos.y)); 719 | if (cmd.UserCallback != nullptr) 720 | { 721 | cmd.UserCallback(commandList, &cmd); 722 | 723 | continue; 724 | } 725 | 726 | ImGuiRenderTriangles(cmd.ElemCount, cmd.IdxOffset, commandList->IdxBuffer, commandList->VtxBuffer, cmd.TextureId); 727 | rlDrawRenderBatchActive(); 728 | } 729 | } 730 | 731 | rlSetTexture(0); 732 | rlDisableScissorTest(); 733 | rlEnableBackfaceCulling(); 734 | } 735 | 736 | void HandleGamepadButtonEvent(ImGuiIO& io, GamepadButton button, ImGuiKey key) 737 | { 738 | if (IsGamepadButtonPressed(0, button)) 739 | io.AddKeyEvent(key, true); 740 | else if (IsGamepadButtonReleased(0, button)) 741 | io.AddKeyEvent(key, false); 742 | } 743 | 744 | void HandleGamepadStickEvent(ImGuiIO& io, GamepadAxis axis, ImGuiKey negKey, ImGuiKey posKey) 745 | { 746 | constexpr float deadZone = 0.20f; 747 | 748 | float axisValue = GetGamepadAxisMovement(0, axis); 749 | 750 | io.AddKeyAnalogEvent(negKey, axisValue < -deadZone, axisValue < -deadZone ? -axisValue : 0); 751 | io.AddKeyAnalogEvent(posKey, axisValue > deadZone, axisValue > deadZone ? axisValue : 0); 752 | } 753 | 754 | bool ImGui_ImplRaylib_ProcessEvents(void) 755 | { 756 | ImGuiIO& io = ImGui::GetIO(); 757 | 758 | bool focused = IsWindowFocused(); 759 | if (focused != LastFrameFocused) 760 | io.AddFocusEvent(focused); 761 | LastFrameFocused = focused; 762 | 763 | // handle the modifyer key events so that shortcuts work 764 | bool ctrlDown = rlImGuiIsControlDown(); 765 | if (ctrlDown != LastControlPressed) 766 | io.AddKeyEvent(ImGuiMod_Ctrl, ctrlDown); 767 | LastControlPressed = ctrlDown; 768 | 769 | bool shiftDown = rlImGuiIsShiftDown(); 770 | if (shiftDown != LastShiftPressed) 771 | io.AddKeyEvent(ImGuiMod_Shift, shiftDown); 772 | LastShiftPressed = shiftDown; 773 | 774 | bool altDown = rlImGuiIsAltDown(); 775 | if (altDown != LastAltPressed) 776 | io.AddKeyEvent(ImGuiMod_Alt, altDown); 777 | LastAltPressed = altDown; 778 | 779 | bool superDown = rlImGuiIsSuperDown(); 780 | if (superDown != LastSuperPressed) 781 | io.AddKeyEvent(ImGuiMod_Super, superDown); 782 | LastSuperPressed = superDown; 783 | 784 | // walk the keymap and check for up and down events 785 | for (const auto keyItr : RaylibKeyMap) 786 | { 787 | if (IsKeyReleased(keyItr.first)) 788 | io.AddKeyEvent(keyItr.second, false); 789 | else if(IsKeyPressed(keyItr.first)) 790 | io.AddKeyEvent(keyItr.second, true); 791 | } 792 | 793 | if (io.WantCaptureKeyboard) 794 | { 795 | // add the text input in order 796 | unsigned int pressed = GetCharPressed(); 797 | while (pressed != 0) 798 | { 799 | io.AddInputCharacter(pressed); 800 | pressed = GetCharPressed(); 801 | } 802 | } 803 | 804 | bool processsMouse = focused; 805 | 806 | #if defined(RLIMGUI_ALWAYS_TRACK_MOUSE) 807 | processsMouse = true; 808 | #endif 809 | 810 | if (processsMouse) 811 | { 812 | if (!io.WantSetMousePos) 813 | { 814 | io.AddMousePosEvent(float(GetMouseX()), float(GetMouseY())); 815 | } 816 | 817 | auto setMouseEvent = [&io](int rayMouse, int imGuiMouse) 818 | { 819 | if (IsMouseButtonPressed(rayMouse)) 820 | io.AddMouseButtonEvent(imGuiMouse, true); 821 | else if (IsMouseButtonReleased(rayMouse)) 822 | io.AddMouseButtonEvent(imGuiMouse, false); 823 | }; 824 | 825 | setMouseEvent(MOUSE_BUTTON_LEFT, ImGuiMouseButton_Left); 826 | setMouseEvent(MOUSE_BUTTON_RIGHT, ImGuiMouseButton_Right); 827 | setMouseEvent(MOUSE_BUTTON_MIDDLE, ImGuiMouseButton_Middle); 828 | setMouseEvent(MOUSE_BUTTON_FORWARD, ImGuiMouseButton_Middle + 1); 829 | setMouseEvent(MOUSE_BUTTON_BACK, ImGuiMouseButton_Middle + 2); 830 | 831 | { 832 | Vector2 mouseWheel = GetMouseWheelMoveV(); 833 | io.AddMouseWheelEvent(mouseWheel.x, mouseWheel.y); 834 | } 835 | } 836 | else 837 | { 838 | io.AddMousePosEvent(std::numeric_limits::min(), std::numeric_limits::min()); 839 | } 840 | 841 | if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad && IsGamepadAvailable(0)) 842 | { 843 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_LEFT_FACE_UP, ImGuiKey_GamepadDpadUp); 844 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_LEFT_FACE_RIGHT, ImGuiKey_GamepadDpadRight); 845 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_LEFT_FACE_DOWN, ImGuiKey_GamepadDpadDown); 846 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_LEFT_FACE_LEFT, ImGuiKey_GamepadDpadLeft); 847 | 848 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_RIGHT_FACE_UP, ImGuiKey_GamepadFaceUp); 849 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, ImGuiKey_GamepadFaceLeft); 850 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_RIGHT_FACE_DOWN, ImGuiKey_GamepadFaceDown); 851 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_RIGHT_FACE_LEFT, ImGuiKey_GamepadFaceRight); 852 | 853 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_LEFT_TRIGGER_1, ImGuiKey_GamepadL1); 854 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_LEFT_TRIGGER_2, ImGuiKey_GamepadL2); 855 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_RIGHT_TRIGGER_1, ImGuiKey_GamepadR1); 856 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_RIGHT_TRIGGER_2, ImGuiKey_GamepadR2); 857 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_LEFT_THUMB, ImGuiKey_GamepadL3); 858 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_RIGHT_THUMB, ImGuiKey_GamepadR3); 859 | 860 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_MIDDLE_LEFT, ImGuiKey_GamepadStart); 861 | HandleGamepadButtonEvent(io, GAMEPAD_BUTTON_MIDDLE_RIGHT, ImGuiKey_GamepadBack); 862 | 863 | // left stick 864 | HandleGamepadStickEvent(io, GAMEPAD_AXIS_LEFT_X, ImGuiKey_GamepadLStickLeft, ImGuiKey_GamepadLStickRight); 865 | HandleGamepadStickEvent(io, GAMEPAD_AXIS_LEFT_Y, ImGuiKey_GamepadLStickUp, ImGuiKey_GamepadLStickDown); 866 | 867 | // right stick 868 | HandleGamepadStickEvent(io, GAMEPAD_AXIS_RIGHT_X, ImGuiKey_GamepadRStickLeft, ImGuiKey_GamepadRStickRight); 869 | HandleGamepadStickEvent(io, GAMEPAD_AXIS_RIGHT_Y, ImGuiKey_GamepadRStickUp, ImGuiKey_GamepadRStickDown); 870 | } 871 | 872 | return true; 873 | } 874 | -------------------------------------------------------------------------------- /rlImGui.h: -------------------------------------------------------------------------------- 1 | /********************************************************************************************** 2 | * 3 | * raylibExtras * Utilities and Shared Components for Raylib 4 | * 5 | * rlImGui * basic ImGui integration 6 | * 7 | * LICENSE: ZLIB 8 | * 9 | * Copyright (c) 2024 Jeffery Myers 10 | * 11 | * Permission is hereby granted, free of charge, to any person obtaining a copy 12 | * of this software and associated documentation files (the "Software"), to deal 13 | * in the Software without restriction, including without limitation the rights 14 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | * copies of the Software, and to permit persons to whom the Software is 16 | * furnished to do so, subject to the following conditions: 17 | * 18 | * The above copyright notice and this permission notice shall be included in all 19 | * copies or substantial portions of the Software. 20 | * 21 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 27 | * SOFTWARE. 28 | * 29 | **********************************************************************************************/ 30 | 31 | #pragma once 32 | 33 | #include "raylib.h" 34 | 35 | // Function specifiers in case library is build/used as a shared library 36 | // NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll 37 | // NOTE: visibility("default") attribute makes symbols "visible" when compiled with -fvisibility=hidden 38 | #if defined(_WIN32) 39 | #if defined(__TINYC__) 40 | #define __declspec(x) __attribute__((x)) 41 | #endif 42 | #if defined(BUILD_LIBTYPE_SHARED) 43 | #define RLIMGUIAPI __declspec(dllexport) // We are building the library as a Win32 shared library (.dll) 44 | #elif defined(USE_LIBTYPE_SHARED) 45 | #define RLIMGUIAPI __declspec(dllimport) // We are using the library as a Win32 shared library (.dll) 46 | #endif 47 | #else 48 | #if defined(BUILD_LIBTYPE_SHARED) 49 | #define RLIMGUIAPI __attribute__((visibility("default"))) // We are building as a Unix shared library (.so/.dylib) 50 | #endif 51 | #endif 52 | 53 | #ifndef RLIMGUIAPI 54 | #define RLIMGUIAPI // Functions defined as 'extern' by default (implicit specifiers) 55 | #endif 56 | 57 | #ifndef NO_FONT_AWESOME 58 | #include "extras/IconsFontAwesome6.h" 59 | #ifndef FONT_AWESOME_ICON_SIZE 60 | #define FONT_AWESOME_ICON_SIZE 11 61 | #endif 62 | #endif 63 | 64 | #ifdef __cplusplus 65 | extern "C" { 66 | #endif 67 | 68 | // High level API. This API is designed in the style of raylib and meant to work with reaylib code. 69 | // It will manage it's own ImGui context and call common ImGui functions (like NewFrame and Render) for you 70 | // for a lower level API that matches the other ImGui platforms, please see imgui_impl_raylib.h 71 | 72 | /// 73 | /// Sets up ImGui, loads fonts and themes 74 | /// Calls ImGui_ImplRaylib_Init and sets the theme. Will install Font awesome by default 75 | /// 76 | /// when true(default) the dark theme is used, when false the light theme is used 77 | RLIMGUIAPI void rlImGuiSetup(bool darkTheme); 78 | 79 | /// 80 | /// Starts a new ImGui Frame 81 | /// Calls ImGui_ImplRaylib_NewFrame, ImGui_ImplRaylib_ProcessEvents, and ImGui::NewFrame together 82 | /// 83 | RLIMGUIAPI void rlImGuiBegin(void); 84 | 85 | /// 86 | /// Ends an ImGui frame and submits all ImGui drawing to raylib for processing. 87 | /// Calls ImGui:Render, an d ImGui_ImplRaylib_RenderDrawData to draw to the current raylib render target 88 | /// 89 | RLIMGUIAPI void rlImGuiEnd(void); 90 | 91 | /// 92 | /// Cleanup ImGui and unload font atlas 93 | /// Calls ImGui_ImplRaylib_Shutdown 94 | /// 95 | RLIMGUIAPI void rlImGuiShutdown(void); 96 | 97 | // Advanced StartupAPI 98 | 99 | /// 100 | /// Custom initialization. Not needed if you call rlImGuiSetup. Only needed if you want to add custom setup code. 101 | /// must be followed by rlImGuiEndInitImGui 102 | /// Called by ImGui_ImplRaylib_Init, and does the first part of setup, before fonts are rendered 103 | /// 104 | RLIMGUIAPI void rlImGuiBeginInitImGui(void); 105 | 106 | /// 107 | /// End Custom initialization. Not needed if you call rlImGuiSetup. Only needed if you want to add custom setup code. 108 | /// must be proceeded by rlImGuiBeginInitImGui 109 | /// Called by ImGui_ImplRaylib_Init and does the second part of setup, and renders fonts. 110 | /// 111 | RLIMGUIAPI void rlImGuiEndInitImGui(void); 112 | 113 | /// 114 | /// Forces the font texture atlas to be recomputed and re-cached 115 | /// 116 | RLIMGUIAPI void rlImGuiReloadFonts(void); 117 | 118 | // Advanced Update API 119 | 120 | /// 121 | /// Starts a new ImGui Frame with a specified delta time 122 | /// 123 | /// delta time, any value < 0 will use raylib GetFrameTime 124 | RLIMGUIAPI void rlImGuiBeginDelta(float deltaTime); 125 | 126 | // ImGui Image API extensions 127 | // Purely for convenience in working with raylib textures as images. 128 | // If you want to call ImGui image functions directly, simply pass them the pointer to the texture. 129 | 130 | /// 131 | /// Draw a texture as an image in an ImGui Context 132 | /// Uses the current ImGui Cursor position and the full texture size. 133 | /// 134 | /// The raylib texture to draw 135 | RLIMGUIAPI void rlImGuiImage(const Texture *image); 136 | 137 | /// 138 | /// Draw a texture as an image in an ImGui Context at a specific size 139 | /// Uses the current ImGui Cursor position and the specified width and height 140 | /// The image will be scaled up or down to fit as needed 141 | /// 142 | /// The raylib texture to draw 143 | /// The width of the drawn image 144 | /// The height of the drawn image 145 | RLIMGUIAPI void rlImGuiImageSize(const Texture *image, int width, int height); 146 | 147 | /// 148 | /// Draw a texture as an image in an ImGui Context at a specific size 149 | /// Uses the current ImGui Cursor position and the specified size 150 | /// The image will be scaled up or down to fit as needed 151 | /// 152 | /// The raylib texture to draw 153 | /// The size of drawn image 154 | RLIMGUIAPI void rlImGuiImageSizeV(const Texture* image, Vector2 size); 155 | 156 | /// 157 | /// Draw a portion texture as an image in an ImGui Context at a defined size 158 | /// Uses the current ImGui Cursor position and the specified size 159 | /// The image will be scaled up or down to fit as needed 160 | /// 161 | /// The raylib texture to draw 162 | /// The width of the drawn image 163 | /// The height of the drawn image 164 | /// The portion of the texture to draw as an image. Negative values for the width and height will flip the image 165 | RLIMGUIAPI void rlImGuiImageRect(const Texture* image, int destWidth, int destHeight, Rectangle sourceRect); 166 | 167 | /// 168 | /// Draws a render texture as an image an ImGui Context, automatically flipping the Y axis so it will show correctly on screen 169 | /// 170 | /// The render texture to draw 171 | RLIMGUIAPI void rlImGuiImageRenderTexture(const RenderTexture* image); 172 | 173 | /// 174 | /// Draws a render texture as an image an ImGui Context, automatically flipping the Y axis so it will show correctly on screen 175 | /// Fits the render texture to the available content area 176 | /// 177 | /// The render texture to draw 178 | /// When true the image will be centered in the content area 179 | RLIMGUIAPI void rlImGuiImageRenderTextureFit(const RenderTexture* image, bool center); 180 | 181 | /// 182 | /// Draws a texture as an image button in an ImGui context. Uses the current ImGui cursor position and the full size of the texture 183 | /// 184 | /// The display name and ImGui ID for the button 185 | /// The texture to draw 186 | /// True if the button was clicked 187 | bool rlImGuiImageButton(const char* name, const Texture* image); 188 | 189 | /// 190 | /// Draws a texture as an image button in an ImGui context. Uses the current ImGui cursor position and the specified size. 191 | /// 192 | /// The display name and ImGui ID for the button 193 | /// The texture to draw 194 | /// The size of the button 195 | /// True if the button was clicked 196 | RLIMGUIAPI bool rlImGuiImageButtonSize(const char* name, const Texture* image, Vector2 size); 197 | 198 | #ifdef __cplusplus 199 | } 200 | #endif 201 | -------------------------------------------------------------------------------- /rlImGuiColors.h: -------------------------------------------------------------------------------- 1 | /********************************************************************************************** 2 | * 3 | * raylibExtras * Utilities and Shared Components for Raylib 4 | * 5 | * rlImGui * basic ImGui integration 6 | * 7 | * LICENSE: ZLIB 8 | * 9 | * Copyright (c) 2024 Jeffery Myers 10 | * 11 | * Permission is hereby granted, free of charge, to any person obtaining a copy 12 | * of this software and associated documentation files (the "Software"), to deal 13 | * in the Software without restriction, including without limitation the rights 14 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15 | * copies of the Software, and to permit persons to whom the Software is 16 | * furnished to do so, subject to the following conditions: 17 | * 18 | * The above copyright notice and this permission notice shall be included in all 19 | * copies or substantial portions of the Software. 20 | * 21 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 24 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 25 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 26 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 27 | * SOFTWARE. 28 | * 29 | **********************************************************************************************/ 30 | 31 | #pragma once 32 | 33 | #include "raylib.h" 34 | #include "imgui.h" 35 | 36 | namespace rlImGuiColors 37 | { 38 | inline ImVec4 Convert(::Color color) 39 | { 40 | return ImVec4(color.r / 255.0f, color.g / 255.0f, color.b / 255.0f, color.a / 255.0f); 41 | } 42 | 43 | inline ::Color Convert(ImVec4 color) 44 | { 45 | return ::Color{ (unsigned char)(color.x * 255.0f), (unsigned char)(color.y * 255.0f), (unsigned char)(color.z * 255.0f), (unsigned char)(color.w * 255.0f) }; 46 | } 47 | } 48 | --------------------------------------------------------------------------------