diff options
Diffstat (limited to '{{cookiecutter.project_name}}/src/external/imgui/docs/FONTS.txt')
| -rw-r--r-- | {{cookiecutter.project_name}}/src/external/imgui/docs/FONTS.txt | 376 |
1 files changed, 376 insertions, 0 deletions
diff --git a/{{cookiecutter.project_name}}/src/external/imgui/docs/FONTS.txt b/{{cookiecutter.project_name}}/src/external/imgui/docs/FONTS.txt new file mode 100644 index 0000000..e3690f1 --- /dev/null +++ b/{{cookiecutter.project_name}}/src/external/imgui/docs/FONTS.txt @@ -0,0 +1,376 @@ +dear imgui +FONTS DOCUMENTATION + +Also read https://www.dearimgui.org/faq for more fonts related infos. + +The code in imgui.cpp embeds a copy of 'ProggyClean.ttf' (by Tristan Grimmer), +a 13 pixels high, pixel-perfect font used by default. +We embed it 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. + +Please read the FAQ: https://www.dearimgui.org/faq +Please use the Discord server: http://discord.dearimgui.org and not the Github issue tracker for basic font loading questions. + + +--------------------------------------- + INDEX: +--------------------------------------- + +- Readme First / FAQ +- Fonts Loading Instructions +- Using Icons +- Using FreeType rasterizer +- Building Custom Glyph Ranges +- Using custom colorful icons +- Embedding Fonts in Source Code +- Credits/Licences for fonts included in repository +- Fonts Links + + +--------------------------------------- + README FIRST / FAQ +--------------------------------------- + +- You can use the style editor ImGui::ShowStyleEditor() in the "Fonts" section to browse your fonts + and understand what's going on if you have an issue. +- Fonts are rasterized in a single texture at the time of calling either of io.Fonts->GetTexDataAsAlpha8()/GetTexDataAsRGBA32()/Build(). +- Make sure your font ranges data are persistent and available at the time the font atlas is being built. +- Use C++11 u8"my text" syntax to encode literal strings as UTF-8. e.g.: + u8"hello" + u8"こんにちは" // this will be encoded as UTF-8 +- If you want to include a backslash \ character in your string literal, you need to double them e.g. "folder\\filename". + Read FAQ for details. + + +--------------------------------------- + FONTS LOADING INSTRUCTIONS +--------------------------------------- + +Load default font: + + ImGuiIO& io = ImGui::GetIO(); + io.Fonts->AddFontDefault(); + +Load .TTF/.OTF file with: + + ImGuiIO& io = ImGui::GetIO(); + io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels); + +Load multiple fonts: + + ImGuiIO& io = ImGui::GetIO(); + ImFont* font1 = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels); + ImFont* font2 = io.Fonts->AddFontFromFileTTF("anotherfont.otf", size_pixels); + + // Select font at runtime + ImGui::Text("Hello"); // use the default font (which is the first loaded font) + ImGui::PushFont(font2); + ImGui::Text("Hello with another font"); + ImGui::PopFont(); + +For advanced options create a ImFontConfig structure and pass it to the AddFont function (it will be copied internally): + + ImFontConfig config; + config.OversampleH = 2; + config.OversampleV = 1; + config.GlyphExtraSpacing.x = 1.0f; + ImFont* font = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, &config); + +Combine two fonts into one: + + // Load a first font + ImFont* font = io.Fonts->AddFontDefault(); + + // Add character ranges and merge into the previous font + // The ranges array is not copied by the AddFont* functions and is used lazily + // so ensure it is available at the time of building or calling GetTexDataAsRGBA32(). + static const ImWchar icons_ranges[] = { 0xf000, 0xf3ff, 0 }; // Will not be copied by AddFont* so keep in scope. + ImFontConfig config; + config.MergeMode = true; + io.Fonts->AddFontFromFileTTF("DroidSans.ttf", 18.0f, &config, io.Fonts->GetGlyphRangesJapanese()); + io.Fonts->AddFontFromFileTTF("fontawesome-webfont.ttf", 18.0f, &config, icons_ranges); + io.Fonts->Build(); + +Font atlas is too large? + +- If you have very large number of glyphs or multiple fonts, the texture may become too big for your graphics API. +- The typical result of failing to upload a texture is if every glyphs appears as white rectangles. +- In particular, using a large range such as GetGlyphRangesChineseSimplifiedCommon() is not recommended + unless you set OversampleH/OversampleV to 1 and use a small font size. +- Mind the fact that some graphics drivers have texture size limitation. +- If you are building a PC application, mind the fact that users may run on hardware with lower specs than yours. + +Some solutions: + + - 1) Reduce glyphs ranges by calculating them from source localization data. + You can use ImFontGlyphRangesBuilder for this purpose, this will be the biggest win! + - 2) You may reduce oversampling, e.g. config.OversampleH = config.OversampleV = 1, this will largely reduce your texture size. + - 3) Set io.Fonts.TexDesiredWidth to specify a texture width to minimize texture height (see comment in ImFontAtlas::Build function). + - 4) Set io.Fonts.Flags |= ImFontAtlasFlags_NoPowerOfTwoHeight; to disable rounding the texture height to the next power of two. + - Read about oversampling here: https://github.com/nothings/stb/blob/master/tests/oversample + + +Add a fourth parameter to bake specific font ranges only: + + // Basic Latin, Extended Latin + io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, NULL, io.Fonts->GetGlyphRangesDefault()); + + // Default + Selection of 2500 Ideographs used by Simplified Chinese + io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, NULL, io.Fonts->GetGlyphRangesChineseSimplifiedCommon()); + + // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs + io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels, NULL, io.Fonts->GetGlyphRangesJapanese()); + +See "BUILDING CUSTOM GLYPH RANGES" section to create your own ranges. +Offset font vertically by altering the io.Font->DisplayOffset value: + + ImFont* font = io.Fonts->AddFontFromFileTTF("font.ttf", size_pixels); + font->DisplayOffset.y = 1; // Render 1 pixel down + + +--------------------------------------- + USING ICONS +--------------------------------------- + +Using an icon font (such as FontAwesome: http://fontawesome.io or OpenFontIcons. https://github.com/traverseda/OpenFontIcons) +is an easy and practical way to use icons in your Dear ImGui application. +A common pattern is to merge the icon font within your main font, so you can embed icons directly from your strings without +having to change fonts back and forth. + +To refer to the icon UTF-8 codepoints from your C++ code, you may use those headers files created by Juliette Foucaut: + + https://github.com/juliettef/IconFontCppHeaders + +Those files contains a bunch of named #define which you can use to refer to specific icons of the font, e.g.: + + #define ICON_FA_MUSIC "\xef\x80\x81" + #define ICON_FA_SEARCH "\xef\x80\x82" + +Example Setup: + + // Merge icons into default tool font + #include "IconsFontAwesome.h" + ImGuiIO& io = ImGui::GetIO(); + io.Fonts->AddFontDefault(); + + ImFontConfig config; + config.MergeMode = true; + config.GlyphMinAdvanceX = 13.0f; // Use if you want to make the icon monospaced + static const ImWchar icon_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; + io.Fonts->AddFontFromFileTTF("fonts/fontawesome-webfont.ttf", 13.0f, &config, icon_ranges); + +Example Usage: + + // Usage, e.g. + ImGui::Text("%s among %d items", ICON_FA_SEARCH, count); + ImGui::Button(ICON_FA_SEARCH " Search"); + +Important to understand: C string _literals_ can be concatenated at compilation time, e.g. "hello" " world" +ICON_FA_SEARCH is defined as a string literal so this is the same as "A" "B" becoming "AB" + +See Links below for other icons fonts and related tools. + + +--------------------------------------- + FREETYPE RASTERIZER, SMALL FONT SIZES +--------------------------------------- + +Dear ImGui uses imstb_truetype.h to rasterize fonts (with optional oversampling). +This technique and its implementation are not ideal for fonts rendered at _small sizes_, which may appear a +little blurry or hard to read. + +There is an implementation of the ImFontAtlas builder using FreeType that you can use in the misc/freetype/ folder. + +FreeType supports auto-hinting which tends to improve the readability of small fonts. +Note that this code currently creates textures that are unoptimally too large (could be fixed with some work). +Also note that correct sRGB space blending will have an important effect on your font rendering quality. + + +--------------------------------------- + BUILDING CUSTOM GLYPH RANGES +--------------------------------------- + +You can use the ImFontGlyphRangesBuilder helper to create glyph ranges based on text input. +For example: 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; + ImFontGlyphRangesBuilder 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); + io.Fonts->Build(); // Build the atlas while 'ranges' is still in scope and not deleted. + + +--------------------------------------- + USING CUSTOM COLORFUL ICONS +--------------------------------------- + +(This is a BETA api, use if you are familiar with dear imgui and with your rendering back-end) + +You can use the ImFontAtlas::AddCustomRect() and ImFontAtlas::AddCustomRectFontGlyph() api to register rectangles +that will be packed into the font atlas texture. Register them before building the atlas, then call Build(). +You can then use ImFontAtlas::GetCustomRectByIndex(int) to query the position/size of your rectangle within the +texture, and blit/copy any graphics data of your choice into those rectangles. + +Pseudo-code: + + // Add font, then register two custom 13x13 rectangles mapped to glyph 'a' and 'b' of this font + ImFont* font = io.Fonts->AddFontDefault(); + int rect_ids[2]; + rect_ids[0] = io.Fonts->AddCustomRectFontGlyph(font, 'a', 13, 13, 13+1); + rect_ids[1] = io.Fonts->AddCustomRectFontGlyph(font, 'b', 13, 13, 13+1); + + // Build atlas + io.Fonts->Build(); + + // Retrieve texture in RGBA format + unsigned char* tex_pixels = NULL; + int tex_width, tex_height; + io.Fonts->GetTexDataAsRGBA32(&tex_pixels, &tex_width, &tex_height); + + for (int rect_n = 0; rect_n < IM_ARRAYSIZE(rect_ids); rect_n++) + { + int rect_id = rects_ids[rect_n]; + if (const ImFontAtlas::CustomRect* rect = io.Fonts->GetCustomRectByIndex(rect_id)) + { + // Fill the custom rectangle with red pixels (in reality you would draw/copy your bitmap data here!) + for (int y = 0; y < rect->Height; y++) + { + ImU32* p = (ImU32*)tex_pixels + (rect->Y + y) * tex_width + (rect->X); + for (int x = rect->Width; x > 0; x--) + *p++ = IM_COL32(255, 0, 0, 255); + } + } + } + + +--------------------------------------- + EMBEDDING FONTS IN SOURCE CODE +--------------------------------------- + +Compile and use 'binary_to_compressed_c.cpp' to create a compressed C style array that you can embed in source code. +See the documentation in binary_to_compressed_c.cpp for instruction on how to use the tool. +You may find a precompiled version binary_to_compressed_c.exe for Windows instead of demo binaries package (see README). +The tool can optionally output Base85 encoding to reduce the size of _source code_ but the read-only arrays in the +actual binary will be about 20% bigger. + +Then load the font with: + ImFont* font = io.Fonts->AddFontFromMemoryCompressedTTF(compressed_data, compressed_data_size, size_pixels, ...); +or: + ImFont* font = io.Fonts->AddFontFromMemoryCompressedBase85TTF(compressed_data_base85, size_pixels, ...); + + +--------------------------------------- + CREDITS/LICENSES FOR FONTS INCLUDED IN REPOSITORY +--------------------------------------- + +Some fonts are available in the misc/fonts/ folder: + +Roboto-Medium.ttf + + Apache License 2.0 + by Christian Robertson + https://fonts.google.com/specimen/Roboto + +Cousine-Regular.ttf + + by Steve Matteson + Digitized data copyright (c) 2010 Google Corporation. + Licensed under the SIL Open Font License, Version 1.1 + https://fonts.google.com/specimen/Cousine + +DroidSans.ttf + + Copyright (c) Steve Matteson + Apache License, version 2.0 + https://www.fontsquirrel.com/fonts/droid-sans + +ProggyClean.ttf + + Copyright (c) 2004, 2005 Tristan Grimmer + MIT License + recommended loading setting: Size = 13.0, DisplayOffset.Y = +1 + http://www.proggyfonts.net/ + +ProggyTiny.ttf + Copyright (c) 2004, 2005 Tristan Grimmer + MIT License + recommended loading setting: Size = 10.0, DisplayOffset.Y = +1 + http://www.proggyfonts.net/ + +Karla-Regular.ttf + Copyright (c) 2012, Jonathan Pinhorn + SIL OPEN FONT LICENSE Version 1.1 + + +--------------------------------------- + FONTS LINKS +--------------------------------------- + +ICON FONTS + + C/C++ header for icon fonts (#define with code points to use in source code string literals) + https://github.com/juliettef/IconFontCppHeaders + + FontAwesome + https://fortawesome.github.io/Font-Awesome + + OpenFontIcons + https://github.com/traverseda/OpenFontIcons + + Google Icon Fonts + https://design.google.com/icons/ + + Kenney Icon Font (Game Controller Icons) + https://github.com/nicodinh/kenney-icon-font + + IcoMoon - Custom Icon font builder + https://icomoon.io/app + +REGULAR FONTS + + Google Noto Fonts (worldwide languages) + https://www.google.com/get/noto/ + + Open Sans Fonts + https://fonts.google.com/specimen/Open+Sans + + (Japanese) M+ fonts by Coji Morishita are free + http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/index-en.html + +MONOSPACE FONTS (PIXEL PERFECT) + + Proggy Fonts, by Tristan Grimmer + http://www.proggyfonts.net or http://upperbounds.net + + Sweet16, Sweet16 Mono, by Martin Sedlak (Latin + Supplemental + Extended A) + https://github.com/kmar/Sweet16Font + Also include .inl file to use directly in dear imgui. + +MONOSPACE FONTS (REGULAR) + + Google Noto Mono Fonts + https://www.google.com/get/noto/ + + Typefaces for source code beautification + https://github.com/chrissimpkins/codeface + + Programmation fonts + http://s9w.github.io/font_compare/ + + 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/ + + + Or use Arial Unicode or other Unicode fonts provided with Windows for full characters coverage (not sure of their licensing). |
