[API] ImFontGlyphRangesBuilder and fonts example

This commit is contained in:
Dubrovsky Danil authored and GitHub committed 2021-04-29 08:43:02 +03:00
1 parent 87fa05d3c1
commit 36e59c4cba
7 files changed
+1157 -4

No files matched your search

+44 -4
View File
@@ -1,5 +1,4 @@
import imgui.ImGui;
import imgui.ImGuiIO;
import imgui.*;
import imgui.app.Application;
import imgui.app.Configuration;
import imgui.extension.imnodes.ImNodes;
@@ -7,6 +6,11 @@ import imgui.flag.ImGuiConfigFlags;
import imgui.flag.ImGuiInputTextFlags;
import imgui.type.ImString;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Main extends Application {
private final ImString str = new ImString(5);
private final float[] flt = new float[1];
@@ -29,6 +33,34 @@ public class Main extends Application {
io.setConfigViewportsNoTaskBarIcon(true);
ImNodes.createContext();
// Example of fonts configuration
// For more information read: https://github.com/ocornut/imgui/blob/33cdbe97b8fd233c6c12ca216e76398c2e89b0d8/docs/FONTS.md
io.getFonts().addFontDefault(); // Add default font for latin glyphs
// 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 (using addText) and only build the characters the game needs.
// Here we are using it just to combine all required glyphs in one place
final ImFontGlyphRangesBuilder rangesBuilder = new ImFontGlyphRangesBuilder(); // Glyphs ranges provide
rangesBuilder.addRanges(io.getFonts().getGlyphRangesDefault());
rangesBuilder.addRanges(io.getFonts().getGlyphRangesCyrillic());
rangesBuilder.addRanges(io.getFonts().getGlyphRangesJapanese());
rangesBuilder.addRanges(FontAwesomeIcons._IconRange);
// Font config for additional fonts
// This is a natively allocated struct so don't forget to call destroy after atlas is built
final ImFontConfig fontConfig = new ImFontConfig();
fontConfig.setMergeMode(true); // Enable merge mode to merge cyrillic, japanese and icons with default font
final short[] glyphRanges = rangesBuilder.buildRanges();
io.getFonts().addFontFromMemoryTTF(loadFromResources("Tahoma.ttf"), 14, fontConfig, glyphRanges); // cyrillic glyphs
io.getFonts().addFontFromMemoryTTF(loadFromResources("NotoSansCJKjp-Medium.otf"), 14, fontConfig, glyphRanges); // japanese glyphs
io.getFonts().addFontFromMemoryTTF(loadFromResources("fa-regular-400.ttf"), 14, fontConfig, glyphRanges); // font awesome
io.getFonts().addFontFromMemoryTTF(loadFromResources("fa-solid-900.ttf"), 14, fontConfig, glyphRanges); // font awesome
io.getFonts().build();
fontConfig.destroy();
}
@Override
@@ -39,8 +71,8 @@ public class Main extends Application {
@Override
public void process() {
ImGui.text("Hello, World!");
if (ImGui.button("Save")) {
ImGui.text("Hello, World! " + FontAwesomeIcons.Smile);
if (ImGui.button(FontAwesomeIcons.Save + " Save")) {
count++;
}
ImGui.sameLine();
@@ -53,6 +85,14 @@ public class Main extends Application {
Extra.show(this);
}
private static byte[] loadFromResources(String name) {
try {
return Files.readAllBytes(Paths.get(Main.class.getResource(name).toURI()));
} catch (IOException | URISyntaxException e) {
throw new RuntimeException(e);
}
}
public static void main(final String[] args) {
launch(new Main());
}