2014-08-30 19:02:55 +00:00
2015-01-18 12:19:49 +00:00
The code in imgui.cpp embeds a copy of 'ProggyClean.ttf' that you can use without any external files.
2016-05-04 15:20:11 +00:00
The files in this folder are only provided as a convenience, you can use any of your own .TTF files.
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-05-04 15:20:11 +00:00
If you want to use icons in ImGui, a good idea is to merge an icon font within your main font, and refer to icons directly in your strings.
You can use headers files with definitions for popular icon fonts codepoints, by Juliette Foucaut, at https://github.com/juliettef/IconFontCppHeaders
2015-01-18 12:19:49 +00:00
---------------------------------
LOADING INSTRUCTIONS
---------------------------------
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();
2015-01-18 12:19:49 +00:00
Load .TTF file with:
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
2015-07-15 13:01:21 +00:00
Detailed options:
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
---------------------------------
REMAP CODEPOINTS
---------------------------------
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 CP-1251 for Cyrillic) will not work.
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.
You can 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.
2015-08-06 03:59:07 +00:00
---------------------------------
EMBED A FONT IN SOURCE CODE
---------------------------------
2015-07-02 14:16:23 +00:00
Compile and use 'binary_to_compressed_c.cpp' to create a compressed C style array. Then load the font with:
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
2015-08-06 03:59:07 +00:00
Cousine-Regular.ttf
Digitized data copyright (c) 2010 Google Corporation.
Licensed under the SIL Open Font License, Version 1.1
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
ProggyTiny.ttf
Copyright (c) 2004, 2005 Tristan Grimmer
MIT License
recommended loading setting in ImGui: Size = 10.0, DisplayOffset.Y = +1
Karla-Regular
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
---------------------------------
LINKS
---------------------------------
2015-11-24 15:35:07 +00:00
Icon fonts
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/
2015-11-24 15:35:07 +00:00
2015-08-06 03:59:07 +00:00
Typefaces for source code beautification
https://github.com/chrissimpkins/codeface
2015-08-11 20:45:42 +00:00
Programmation fonts
http://s9w.github.io/font_compare/
2015-08-06 03:59:07 +00:00
Proggy Programming Fonts
http://upperbounds.net
Inconsolata
http://www.levien.com/type/myfonts/inconsolata.html
Adobe Source Code Pro: Monospaced font family for user interface and coding environments
https://github.com/adobe-fonts/source-code-pro
Monospace/Fixed Width Programmer's Fonts
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).