2014-08-30 19:02:55 +00:00
2017-11-11 15:20:34 +00:00
The code in imgui.cpp embeds a copy of 'ProggyClean.ttf' (by Tristan Grimmer) that is used by default.
We embed the font in source code so you can use Dear ImGui without any file system access.
You may also load external .TTF/.OTF files.
The files in this folder are suggested fonts, provided as a convenience.
2017-08-14 03:29:54 +00:00
(Note: .OTF support in stb_truetype.h currently doesn't appear to load every font)
2015-01-18 12:19:49 +00:00
2016-01-20 10:30:28 +00:00
Fonts are rasterized in a single texture at the time of calling either of io.Fonts.GetTexDataAsAlpha8()/GetTexDataAsRGBA32()/Build().
2016-11-06 21:53:36 +00:00
---------------------------------
USING ICONS
---------------------------------
2016-05-04 15:20:11 +00:00
2016-11-06 21:53:36 +00:00
Using an icon font (such as FontAwesome: http://fontawesome.io) is an easy and practical way to use icons in your ImGui application.
A common pattern is to merge the icon font within your main font, so you can refer to the icons directly from your strings without having to change fonts back and forth.
To refer to the icon from your C++ code, you can use headers files created by Juliette Foucaut, at https://github.com/juliettef/IconFontCppHeaders
2017-11-11 15:20:34 +00:00
See Links below for other icons fonts and related tools.
2016-11-06 21:53:36 +00:00
// Merge icons into default tool font
#include "IconsFontAwesome.h"
ImGuiIO& io = ImGui::GetIO();
io.Fonts->AddFontDefault();
ImFontConfig config;
config.MergeMode = true;
2017-08-07 07:21:21 +00:00
static const ImWchar icon_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 };
2016-11-06 21:53:36 +00:00
io.Fonts->AddFontFromFileTTF("fonts/fontawesome-webfont.ttf", 13.0f, &config, icon_ranges);
2017-08-07 07:21:21 +00:00
2016-11-06 21:53:36 +00:00
// Usage, e.g.
ImGui::Text("%s Search", ICON_FA_SEARCH);
2016-05-04 15:20:11 +00:00
2017-08-09 14:42:03 +00:00
2015-01-18 12:19:49 +00:00
---------------------------------
2016-11-06 21:53:36 +00:00
FONTS LOADING INSTRUCTIONS
2015-01-18 12:19:49 +00:00
---------------------------------
2014-08-30 19:02:55 +00:00
2015-07-15 13:01:21 +00:00
Load default font with:
ImGuiIO& io = ImGui::GetIO();
io.Fonts->AddFontDefault();
2017-08-14 03:29:54 +00:00
Load .TTF/.OTF file with:
2015-01-18 12:19:49 +00:00
ImGuiIO& io = ImGui::GetIO();
2015-08-06 04:00:27 +00:00
io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels);
2015-01-08 23:49:17 +00:00
2017-11-11 15:20:34 +00:00
Advanced options:
2015-07-15 13:01:21 +00:00
ImFontConfig config;
config.OversampleH = 3;
2016-01-20 10:30:28 +00:00
config.OversampleV = 1;
2015-07-15 13:01:21 +00:00
config.GlyphExtraSpacing.x = 1.0f;
2015-08-06 04:00:27 +00:00
io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, &config);
2015-07-15 13:01:21 +00:00
2016-01-20 10:30:28 +00:00
If you have very large number of glyphs or multiple fonts:
- Mind the fact that some graphics drivers have texture size limitation.
- Set io.Fonts.TexDesiredWidth to specify a texture width to minimize texture height (see comment in ImFontAtlas::Build function).
- You may reduce oversampling, e.g. config.OversampleH = 2 or 1.
- Reduce glyphs ranges, consider calculating them based on your source data if this is possible.
2015-08-06 03:59:07 +00:00
Combine two fonts into one:
2015-07-15 13:01:21 +00:00
2016-05-04 15:20:11 +00:00
// Load a first font
2015-07-15 13:01:21 +00:00
io.Fonts->AddFontDefault();
2016-05-04 15:20:11 +00:00
// Add character ranges and merge into the previous font
2015-10-25 16:06:42 +00:00
// The ranges array is not copied by the AddFont* functions and is used lazily
// so ensure it is available for duration of font usage
2015-11-29 11:11:03 +00:00
static const ImWchar icons_ranges[] = { 0xf000, 0xf3ff, 0 }; // will not be copied by AddFont* so keep in scope.
2015-07-15 13:01:21 +00:00
ImFontConfig config;
config.MergeMode = true;
2015-11-29 11:11:03 +00:00
io.Fonts->AddFontFromFileTTF("DroidSans.ttf", 18.0f, &config, io.Fonts->GetGlyphRangesJapanese());
io.Fonts->AddFontFromFileTTF("fontawesome-webfont.ttf", 18.0f, &config, icons_ranges);
2015-07-15 13:01:21 +00:00
Add a fourth parameter to bake specific font ranges only:
2014-08-30 19:02:55 +00:00
2015-08-06 03:59:07 +00:00
// Basic Latin, Extended Latin
2015-08-06 04:00:27 +00:00
io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, NULL, io.Fonts->GetGlyphRangesDefault());
2015-08-06 03:59:07 +00:00
// Include full set of about 21000 CJK Unified Ideographs
2015-08-06 04:00:27 +00:00
io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, NULL, io.Fonts->GetGlyphRangesJapanese());
2015-08-06 03:59:07 +00:00
// Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs
2015-08-06 04:00:27 +00:00
io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, NULL, io.Fonts->GetGlyphRangesChinese());
2014-09-26 00:20:56 +00:00
2015-07-02 14:16:23 +00:00
Offset font vertically by altering the io.Font->DisplayOffset value:
2014-09-26 00:20:56 +00:00
2015-08-06 04:00:27 +00:00
ImFont* font = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels);
2015-01-18 12:19:49 +00:00
font->DisplayOffset.y += 1; // Render 1 pixel down
2014-08-30 19:02:55 +00:00
2016-05-04 15:20:11 +00:00
2017-08-09 14:42:03 +00:00
---------------------------------
BUILDING CUSTOM GLYPH RANGES
---------------------------------
You can use the ImFontAtlas::GlyphRangesBuilder helper to create glyph ranges based on text input.
For exemple: for a game where your script is known, if you can feed your entire script to it and only build the characters the game needs.
ImVector<ImWchar> ranges;
ImFontAtlas::GlyphRangesBuilder builder;
builder.AddText("Hello world"); // Add a string (here "Hello world" contains 7 unique characters)
builder.AddChar(0x7262); // Add a specific character
builder.AddRanges(io.Fonts->GetGlyphRangesJapanese()); // Add one of the default ranges
builder.BuildRanges(&ranges); // Build the final result (ordered ranges with all the unique characters submitted)
io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_in_pixels, NULL, ranges.Data);
2016-05-04 15:20:11 +00:00
---------------------------------
2016-11-06 21:53:36 +00:00
REMAPPING CODEPOINTS
2016-05-04 15:20:11 +00:00
---------------------------------
2017-11-11 15:20:34 +00:00
All your strings needs to use UTF-8 encoding. Specifying literal in your source code using a local code page (such as CP-923 for Japanese, or CP-1251 for Cyrillic) will NOT work!
2016-05-04 15:20:11 +00:00
In C++11 you can encode a string literal in UTF-8 by using the u8"hello" syntax. Otherwise you can convert yourself to UTF-8 or load text data from file already saved as UTF-8.
2017-11-11 15:20:34 +00:00
e.g.
u8"hello"
u8"こんにちは"
You may also try to remap your local codepage characters to their Unicode codepoint using font->AddRemapChar(), but international users may have problems reading/editing your source code.
2016-05-04 15:20:11 +00:00
2015-08-06 03:59:07 +00:00
---------------------------------
2016-11-06 21:53:36 +00:00
EMBEDDING FONT IN SOURCE CODE
2015-08-06 03:59:07 +00:00
---------------------------------
2017-11-11 15:20:34 +00:00
Compile and use 'binary_to_compressed_c.cpp' to create a compressed C style array that you can embed in source code.
2017-05-02 08:43:00 +00:00
See the documentation in binary_to_compressed_c.cpp for instruction on how to use the tool.
2017-11-11 15:20:34 +00:00
You may find a precompiled version binary_to_compressed_c.exe for Windows instead of demo binaries package (see README).
The tool optionally used Base85 encoding to reduce the size of _source code_ but the read-only arrays will be about 20% bigger.
2017-05-02 08:43:00 +00:00
Then load the font with:
2015-07-02 14:16:23 +00:00
ImFont* font = io.Fonts->AddFontFromMemoryCompressedTTF(compressed_data, compressed_data_size, size_pixels, ...);
2015-08-06 03:59:07 +00:00
Or
ImFont* font = io.Fonts->AddFontFromMemoryCompressedBase85TTF(compressed_data_base85, size_pixels, ...);
2016-05-04 15:20:11 +00:00
2015-08-06 03:59:07 +00:00
---------------------------------
2016-05-04 15:20:11 +00:00
FONT FILES INCLUDED IN THIS FOLDER
2015-08-06 03:59:07 +00:00
---------------------------------
2015-07-02 14:16:23 +00:00
2016-11-06 21:21:10 +00:00
Roboto-Medium.ttf
Apache License 2.0
by Christian Robertson
https://fonts.google.com/specimen/Roboto
2015-08-06 03:59:07 +00:00
Cousine-Regular.ttf
2016-11-06 21:21:10 +00:00
by Steve Matteson
2015-08-06 03:59:07 +00:00
Digitized data copyright (c) 2010 Google Corporation.
2016-11-06 21:21:10 +00:00
Licensed under the SIL Open Font License, Version 1.1
https://fonts.google.com/specimen/Cousine
2015-08-06 03:59:07 +00:00
DroidSans.ttf
Copyright (c) Steve Matteson
Apache License, version 2.0
http://www.google.com/fonts/specimen/Droid+Sans
ProggyClean.ttf
Copyright (c) 2004, 2005 Tristan Grimmer
MIT License
recommended loading setting in ImGui: Size = 13.0, DisplayOffset.Y = +1
2016-11-06 21:21:10 +00:00
http://www.proggyfonts.net/
2015-08-06 03:59:07 +00:00
ProggyTiny.ttf
Copyright (c) 2004, 2005 Tristan Grimmer
MIT License
recommended loading setting in ImGui: Size = 10.0, DisplayOffset.Y = +1
2016-11-06 21:21:10 +00:00
http://www.proggyfonts.net/
2015-08-06 03:59:07 +00:00
2016-11-06 21:21:10 +00:00
Karla-Regular.ttf
2015-08-06 03:59:07 +00:00
Copyright (c) 2012, Jonathan Pinhorn
SIL OPEN FONT LICENSE Version 1.1
2016-05-04 15:20:11 +00:00
2015-08-06 03:59:07 +00:00
---------------------------------
2017-11-11 15:20:34 +00:00
LINKS & OTHER FONTS
2015-08-06 03:59:07 +00:00
---------------------------------
2017-11-11 15:20:34 +00:00
(Icons) Icon fonts
2015-11-24 15:35:07 +00:00
https://fortawesome.github.io/Font-Awesome/
https://github.com/SamBrishes/kenney-icon-font
2016-05-04 15:20:11 +00:00
https://design.google.com/icons/
2017-11-11 15:20:34 +00:00
You can use https://github.com/juliettef/IconFontCppHeaders for C/C++ header files with name #define to access icon codepoint in source code.
2015-11-24 15:35:07 +00:00
2017-11-11 15:20:34 +00:00
(Icons) IcoMoon - Custom Icon font builder
2017-08-07 07:21:21 +00:00
https://icomoon.io/app
2017-11-11 15:20:34 +00:00
(Regular) Open Sans Fonts
https://fonts.google.com/specimen/Open+Sans
(Regular) Google Noto Fonts (worldwide languages)
https://www.google.com/get/noto/
2015-08-11 20:45:42 +00:00
2017-11-11 15:20:34 +00:00
(Monospace) Typefaces for source code beautification
https://github.com/chrissimpkins/codeface
(Monospace) Programmation fonts
2015-08-11 20:45:42 +00:00
http://s9w.github.io/font_compare/
2015-08-06 03:59:07 +00:00
2017-11-11 15:20:34 +00:00
(Monospace) Proggy Programming Fonts
2015-08-06 03:59:07 +00:00
http://upperbounds.net
2017-11-11 15:20:34 +00:00
(Monospace) Inconsolata
2015-08-06 03:59:07 +00:00
http://www.levien.com/type/myfonts/inconsolata.html
2017-11-11 15:20:34 +00:00
(Monospace) Adobe Source Code Pro: Monospaced font family for user interface and coding environments
2015-08-06 03:59:07 +00:00
https://github.com/adobe-fonts/source-code-pro
2017-11-11 15:20:34 +00:00
(Monospace) Monospace/Fixed Width Programmer's Fonts
2015-08-06 03:59:07 +00:00
http://www.lowing.org/fonts/
(Japanese) M+ fonts by Coji Morishita are free and include most useful Kanjis you would need.
http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html
Or use Arial Unicode or other Unicode fonts provided with Windows for full characters coverage (not sure of their licensing).