Awesome
Support development of IconFontCppHeaders through GitHub Sponsors or Patreon
<img src="https://img.shields.io/static/v1?logo=github&label=Github&message=Sponsor&color=#ea4aaa" width="200"/> <img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron" width="150"/>
IconFontCppHeaders
https://github.com/juliettef/IconFontCppHeaders
C and C++ headers, C# and Python classes, Rust files and Go package for icon fonts Font Awesome, Fork Awesome, Google Material Design, Pictogrammers Material Design icons, Kenney game icons, Fontaudio, Codicons and Lucide.
A set of header files and classes for using icon fonts in C, C++, C#, Python, Rust and Go, along with the python generator used to create the files.
Each header contains defines for one font, with each icon code point defined as ICON_*
, along with the min, max and max 16 bit code points for font loading purposes. The min excludes the ASCII characters code points. The max 16 bit is for use with libraries that only support 16 bit code points, for example Dear ImGui.
In addition the python script can be used to convert ttf font files to C and C++ headers.
Each ttf icon font file is converted to a C and C++ header file containing a single array of bytes.
To enable conversion, run the GenerateIconFontCppHeaders.py
script with ttf2headerC = True
.
Icon Fonts
Font Awesome [ FA ]
Font Awesome 4
Font Awesome 5 free
- github.com/FortAwesome/Font-Awesome/tree/5.x
- icons.yml
- fa-brands-400.ttf
- fa-regular-400.ttf
- fa-solid-900.ttf
Font Awesome 5 pro
- Paid product, see notes about generating the header files
Font Awesome 6 free
- github.com/FortAwesome/Font-Awesome/tree/6.x
- icons.yml
- fa-brands-400.ttf
- fa-regular-400.ttf
- fa-solid-900.ttf
Font Awesome 6 pro
- Commercial product, not supported but generation should be similar to FA5 Pro, or see @jakerieger's fork
Fork Awesome [ FK ]
Google Material Design Icons [ MD ] and Material Symbols [ MS ]
Material Design Icons [ MD ]
Material Symbols [ MS ]
- fonts.google.com/icons?icon.set=Material+Symbols
- Codepoints
- MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].ttf
- MaterialSymbolsRounded[FILL,GRAD,opsz,wght].ttf
- MaterialSymbolsSharp[FILL,GRAD,opsz,wght].ttf
Pictogrammers Material Design Icons [ MDI ]
- pictogrammers.com/library/mdi
- github.com/Templarian/MaterialDesign-Webfont
- materialdesignicons.css
- materialdesignicons-webfont.ttf
Kenney Game Icons and Expansion [ KI ]
- kenney.nl/assets/game-icons and kenney.nl/assets/game-icons-expansion
- github.com/nicodinh/kenney-icon-font
- kenney-icons.css
- kenney-icon-font.ttf
Fontaudio [ FAD ]
Codicons [ CI ]
- microsoft.github.io/vscode-codicons/dist/codicon
- github.com/microsoft/vscode-codicons
- codicon.css
- codicon.ttf
Lucide [ LC ]
Ionicons
- Unsupported as of 29 Apr 2020. See Issue #16.
Notes about Font Awesome 5 and 6
Codepoints grouping
Font Awesome 5 and 6 split the different styles of icons into different font files with identical codepoints for light, regular and solid styles, and a different set of codepoints for brands. We have put the brands into a separate header file.
Generating Pro header files (Font Awesome 5)
Download the Font Awesome Pro Web package from fontawesome.com. To generate the headers, drop icons.yml
in the same directory as GenerateIconFontCppHeaders.py
before running the script. The file icons.yml
is under ..\fontawesome-pro-n.n.n-web\metadata\icons.yml
where n.n.n
is the version number.
Icon files:
..\fontawesome-pro-n.n.n-web\metadata\icons.yml
..\fontawesome-pro-n.n.n-web\webfonts\fa-brands-400.ttf
..\fontawesome-pro-n.n.n-web\webfonts\fa-light-300.ttf
..\fontawesome-pro-n.n.n-web\webfonts\fa-regular-400.ttf
..\fontawesome-pro-n.n.n-web\webfonts\fa-solid-900.ttf
Example Code
Using Dear ImGui as an example UI library:
#include "IconsFontAwesome5.h"
ImGuiIO& io = ImGui::GetIO();
io.Fonts->AddFontDefault();
float baseFontSize = 13.0f; // 13.0f is the size of the default font. Change to the font size you use.
float iconFontSize = baseFontSize * 2.0f / 3.0f; // FontAwesome fonts need to have their sizes reduced by 2.0f/3.0f in order to align correctly
// merge in icons from Font Awesome
static const ImWchar icons_ranges[] = { ICON_MIN_FA, ICON_MAX_16_FA, 0 };
ImFontConfig icons_config;
icons_config.MergeMode = true;
icons_config.PixelSnapH = true;
icons_config.GlyphMinAdvanceX = iconFontSize;
io.Fonts->AddFontFromFileTTF( FONT_ICON_FILE_NAME_FAS, iconFontSize, &icons_config, icons_ranges );
// use FONT_ICON_FILE_NAME_FAR if you want regular instead of solid
// in an imgui window somewhere...
ImGui::Text( ICON_FA_PAINT_BRUSH " Paint" ); // use string literal concatenation
// outputs a paint brush icon and 'Paint' as a string.
Projects using the font icon header files
Avoyd
Voxel editor and 6 degree of freedom FPS game with editable environments. The voxel editor's UI uses Dear ImGui with Font Awesome icon fonts.
www.avoyd.com
bgfx
Cross-platform rendering library
bkaradzic.github.io/bgfx/overview
github.com/bkaradzic/bgfx
glChAoS.P
Real time 3D strange attractors scout
www.michelemorrone.eu/glchaosp
github.com/BrutPitt/glChAoS.P
iPlug2
Cross platform C++ audio plug-in framework
iplug2.github.io
github.com/iplug2/iplug2
Lumix Engine
3D C++ open source game engine
github.com/nem0/LumixEngine
Tracy Profiler
Real time, nanosecond resolution, remote telemetry frame profiler for games and other applications.
bitbucket.org/wolfpld/tracy
Visual 6502 Remix
Transistor level 6502 Hardware Simulation
floooh.github.io/visual6502remix
github.com/floooh/v6502r
Games
Related Tools
ImGuiFontStudio
Create font subsets
github.com/aiekick/ImGuiFontStudio
Contributing
Thanks to everyone who has contributed to IconFontCppHeaders so far. In order to make things easier please bear in mind the following:
- I regularly update the repository. If you urgently need an update and can't run the generator yourself, raise an issue specifying the icon set(s) you need updated.
- Don't submit PRs for updating the defines (the output of the generator).
- Before submitting a PR, please raise an issue describing the problem or the enhancement you suggest. If you're able, propose an implementation.
- If you use IconFontCppHeaders and would like your project to be featured on this page, raise an issue or email me at juliette@enkisoftware.com.
Credits
Development - Juliette Foucaut - @juliettef
Requirements - Doug Binks - @dougbinks
None language implementation and refactoring - Leonard Ritter - @paniq
Suggestion to add a define for the ttf file name - Sean Barrett - @nothings
Initial Font Awesome 5 implementation - Codecat - @codecat
Suggestion to add Fork Awesome - Julien Deswaef - @xuv
Suggestion to add Ionicons - Omar Cornut - @ocornut
C# language implementation - Rokas Kupstys - @rokups
Suggestion to add Material Design Icons - Gustav Madeso - @madeso
Fontaudio implementation - Oli Larkin - @olilarkin
Initial ttf to C and C++ headers conversion implementation - Charles Mailly - @Caerind
Python language implementation - Hang Yu - @yhyu13
Go language implementation - Matt Pharr - @mpp
Codicons implementation - Robert Ryan - @rtryan98
Rust language implementation - Gaeel Bradshaw-Rodriguez - @Bradshaw
Pictogrammers Material Design icons implementation - Bobby Anguelov - @BobbyAnguelov
Lucide icons implementation - Lucide Contributors - @lucide-icons