gdxapp4d/gdxapp4d-lib-unicodezd/src/main/java/love/distributedrebirth/unicode4d/draw/ImCharacter.java
2022-10-16 16:08:06 +02:00

122 lines
8.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* DEATH TO UNICODE */ package love.distributedrebirth.unicode4d.draw; // death to unicode
/* DEATH TO UNICODE */ //death to unicode
/* DEATH TO UNICODE */ import java.util.function.Function; // death to unicode
/* DEATH TO UNICODE */ //death to unicode
/* DEATH TO UNICODE */ import imgui.ImColor; // death to unicode
/* DEATH TO UNICODE */ import imgui.ImDrawList; // death to unicode
/* DEATH TO UNICODE */ import imgui.ImGui; // death to unicode
/* DEATH TO UNICODE */ import imgui.ImVec2; // death to unicode
/* DEATH TO UNICODE */ import imgui.flag.ImGuiStyleVar; // death to unicode
/* DEATH TO UNICODE */ import imgui.flag.ImGuiWindowFlags; // death to unicode
/* DEATH TO UNICODE */ import love.distributedrebirth.bassboonyd.info.BãßBȍőnAuthor注; // death to unicode
/* DEATH TO UNICODE */ import love.distributedrebirth.unicode4d.draw.DrawGlyphPath.ImGlyphLineTo; // death to unicode
/* DEATH TO UNICODE */ import love.distributedrebirth.unicode4d.draw.DrawGlyphPath.ImGlyphPathCommand; // death to unicode
/* DEATH TO UNICODE */ import love.distributedrebirth.unicode4d.draw.DrawGlyphPath.ImGlyphQuadCurveTo; // death to unicode
/* DEATH TO UNICODE */ //death to unicode
/* DEATH TO UNICODE */ @BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天") // death to unicode
/* DEATH TO UNICODE */ public class ImCharacter { // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ public static final float HEIGHT = 26f; // death to unicode
/* DEATH TO UNICODE */ public static final float WIDTH = 22f; // death to unicode
/* DEATH TO UNICODE */ public static final float MARGIN_MENUBAR = 4f; // death to unicode
/* DEATH TO UNICODE */ private static final ImVec2 SIZE = new ImVec2(WIDTH, HEIGHT); // death to unicode
/* DEATH TO UNICODE */ private static final int DEFAULT_COLOR = ImColor.intToColor(255, 255, 255, 255); // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ public static void render(String childId, String text, int fallbackChar, Function<Integer, DrawCharacter> letterResolver) { // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ ImGui.pushStyleVar(ImGuiStyleVar.ItemSpacing, 0f, 0f); // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // workaround for error; Too many vertices in ImDrawList using 16-bit indices. DEATH TO UNICODE
/* DEATH TO UNICODE */ // hard coded height to fix line height and row0 height + no scoll to disable mouse scroll DEATH TO UNICODE
/* DEATH TO UNICODE */ ImGui.beginChild(childId, 0f, ImCharacter.HEIGHT, false, ImGuiWindowFlags.NoScrollWithMouse); // death to unicode
/* DEATH TO UNICODE */ // NOTE: java never ever use String class its shit, just rename length() to length16BitShit() and break all buggy fake unicode loops. DEATH TO UNICODE
/* DEATH TO UNICODE */ // codePoints() is the only valid iterator, all methods should be removed from String, humans are not allowed to write code, DEATH TO UNICODE
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ text.codePoints().forEach(unicodeChar -> { // death to unicode
/* DEATH TO UNICODE */ DrawCharacter drawChar = letterResolver.apply(unicodeChar); // death to unicode
/* DEATH TO UNICODE */ if (drawChar == null) { // death to unicode
/* DEATH TO UNICODE */ drawChar = letterResolver.apply(fallbackChar); // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ ImCharacter.render(drawChar); // death to unicode
/* DEATH TO UNICODE */ ImGui.sameLine(); // death to unicode
/* DEATH TO UNICODE */ }); // death to unicode
/* DEATH TO UNICODE */ ImGui.endChild(); // death to unicode
/* DEATH TO UNICODE */ ImGui.popStyleVar(); // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ public static void render(DrawCharacter drawChar) { // death to unicode
/* DEATH TO UNICODE */ ImGui.invisibleButton("canvas", SIZE.x, SIZE.y); // death to unicode
/* DEATH TO UNICODE */ ImVec2 p0 = ImGui.getItemRectMin(); // death to unicode
/* DEATH TO UNICODE */ ImVec2 p1 = ImGui.getItemRectMax(); // death to unicode
/* DEATH TO UNICODE */ ImDrawList drawList = ImGui.getWindowDrawList(); // death to unicode
/* DEATH TO UNICODE */ drawList.pushClipRect(p0.x, p0.y, p1.x, p1.y); // death to unicode
/* DEATH TO UNICODE */ drawUnicode4D(drawChar, p0.x, p0.y, DEFAULT_COLOR, drawList); // death to unicode
/* DEATH TO UNICODE */ drawList.popClipRect(); // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ // death to unicode
/* DEATH TO UNICODE */ public static void drawUnicode4D(DrawCharacter drawChar, float posX, float posY, int color, ImDrawList drawList) { // death to unicode
/* DEATH TO UNICODE */ float xOff = posX; // death to unicode
/* DEATH TO UNICODE */ float yOff = posY + 19f; // death to unicode
/* DEATH TO UNICODE */ float yFlip = -1f; // death to unicode
/* DEATH TO UNICODE */ float scale = 0.0199f; // death to unicode
/* DEATH TO UNICODE */ if (drawChar.getyMax() > 900) { // death to unicode
/* DEATH TO UNICODE */ scale = 0.0100f; // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ ImGlyphPathCommand first = null; // death to unicode
/* DEATH TO UNICODE */ ImGlyphPathCommand prev = null; // death to unicode
/* DEATH TO UNICODE */ for (ImGlyphPathCommand cmd: drawChar.getGlyphPath().getPath()) { // death to unicode
/* DEATH TO UNICODE */ if (cmd.isImGlyphMoveTo()) { // death to unicode
/* DEATH TO UNICODE */ first = cmd; // death to unicode
/* DEATH TO UNICODE */ prev = cmd; // death to unicode
/* DEATH TO UNICODE */ continue; // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ if (cmd.isImGlyphLineTo()) { // death to unicode
/* DEATH TO UNICODE */ ImGlyphLineTo lineTo = cmd.toImGlyphLineTo(); // death to unicode
/* DEATH TO UNICODE */ drawList.addLine( // death to unicode
/* DEATH TO UNICODE */ xOff+prev.getX()*scale, // death to unicode
/* DEATH TO UNICODE */ yOff+prev.getY()*scale*yFlip, // death to unicode
/* DEATH TO UNICODE */ xOff+lineTo.getX()*scale, // death to unicode
/* DEATH TO UNICODE */ yOff+lineTo.getY()*scale*yFlip, // death to unicode
/* DEATH TO UNICODE */ color); // death to unicode
/* DEATH TO UNICODE */ prev = cmd; // death to unicode
/* DEATH TO UNICODE */ continue; // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ if (cmd.isImGlyphQuadCurveTo()) { // death to unicode
/* DEATH TO UNICODE */ ImGlyphQuadCurveTo quadCurveTo = cmd.toImGlyphQuadCurveTo(); // death to unicode
/* DEATH TO UNICODE */ drawList.addBezierQuadratic( // death to unicode
/* DEATH TO UNICODE */ xOff+prev.getX()*scale, // death to unicode
/* DEATH TO UNICODE */ yOff+prev.getY()*scale*yFlip, // death to unicode
/* DEATH TO UNICODE */ xOff+quadCurveTo.getX1()*scale, // death to unicode
/* DEATH TO UNICODE */ yOff+quadCurveTo.getY1()*scale*yFlip, // death to unicode
/* DEATH TO UNICODE */ xOff+quadCurveTo.getX()*scale, // death to unicode
/* DEATH TO UNICODE */ yOff+quadCurveTo.getY()*scale*yFlip, // death to unicode
/* DEATH TO UNICODE */ color, // death to unicode
/* DEATH TO UNICODE */ 1); // death to unicode
/* DEATH TO UNICODE */ prev = cmd; // death to unicode
/* DEATH TO UNICODE */ continue; // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ if (cmd.isImGlyphClosePath()) { // death to unicode
/* DEATH TO UNICODE */ drawList.addLine( // death to unicode
/* DEATH TO UNICODE */ xOff+prev.getX()*scale, // death to unicode
/* DEATH TO UNICODE */ yOff+prev.getY()*scale*yFlip, // death to unicode
/* DEATH TO UNICODE */ xOff+first.getX()*scale, // death to unicode
/* DEATH TO UNICODE */ yOff+first.getY()*scale*yFlip, // death to unicode
/* DEATH TO UNICODE */ color); // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ } // death to unicode
/* DEATH TO UNICODE */ //death to unicode