From 555a59080baba65d9d6bec8932c18393959128c5 Mon Sep 17 00:00:00 2001 From: Willem Date: Sun, 16 Oct 2022 15:55:25 +0200 Subject: [PATCH] death to unicode --- .../apps/DemoUnicodePlaneDeskApp.java | 40 ++-- .../gdxapp4d/app/notepad/NotepadDeskApp.java | 9 +- .../numberxd/unicode/UnicodePlane.java | 4 + .../unicode4d/draw/ImCharacter.java | 205 +++++++++++------- 4 files changed, 147 insertions(+), 111 deletions(-) diff --git a/gdxapp4d-app-glyphdemo/src/main/java/love/distributedrebirth/gdxapp4d/app/glyphdemo/apps/DemoUnicodePlaneDeskApp.java b/gdxapp4d-app-glyphdemo/src/main/java/love/distributedrebirth/gdxapp4d/app/glyphdemo/apps/DemoUnicodePlaneDeskApp.java index dcc978d2..9404ebf2 100644 --- a/gdxapp4d-app-glyphdemo/src/main/java/love/distributedrebirth/gdxapp4d/app/glyphdemo/apps/DemoUnicodePlaneDeskApp.java +++ b/gdxapp4d-app-glyphdemo/src/main/java/love/distributedrebirth/gdxapp4d/app/glyphdemo/apps/DemoUnicodePlaneDeskApp.java @@ -3,9 +3,7 @@ package love.distributedrebirth.gdxapp4d.app.glyphdemo.apps; import java.util.ResourceBundle; import imgui.ImGui; -import imgui.flag.ImGuiStyleVar; import imgui.flag.ImGuiTableFlags; -import imgui.flag.ImGuiWindowFlags; import imgui.type.ImBoolean; import love.distributedrebirth.bassboonyd.info.BãßBȍőnAuthor注; import love.distributedrebirth.gdxapp4d.vrgem4.service.VrGem4Unicode4DService; @@ -13,7 +11,6 @@ import love.distributedrebirth.gdxapp4d.vrgem4.service.deskapp.AbstractDeskApp; import love.distributedrebirth.gdxapp4d.vrgem4.service.deskapp.DeskAppContourSection; import love.distributedrebirth.gdxapp4d.vrgem4.service.deskapp.DeskAppRenderer; import love.distributedrebirth.numberxd.unicode.UnicodePlane; -import love.distributedrebirth.unicode4d.draw.DrawCharacter; import love.distributedrebirth.unicode4d.draw.ImCharacter; @BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天") @@ -46,37 +43,26 @@ public class DemoUnicodePlaneDeskApp extends AbstractDeskApp implements DeskAppR ImGui.tableSetupColumn(getTxt("colText")); ImGui.tableHeadersRow(); for (UnicodePlane plane:UnicodePlane.values()) { + if (!plane.isPlaneValid()) { + continue; + } + StringBuilder buf = new StringBuilder(); + int offset = 33; + for (int i=plane.getStart()+offset;i unicode4DService.getCharacterForUnicode(v)); } } ImGui.endTable(); diff --git a/gdxapp4d-app-notepad/src/main/java/love/distributedrebirth/gdxapp4d/app/notepad/NotepadDeskApp.java b/gdxapp4d-app-notepad/src/main/java/love/distributedrebirth/gdxapp4d/app/notepad/NotepadDeskApp.java index 705151f1..e50202f8 100644 --- a/gdxapp4d-app-notepad/src/main/java/love/distributedrebirth/gdxapp4d/app/notepad/NotepadDeskApp.java +++ b/gdxapp4d-app-notepad/src/main/java/love/distributedrebirth/gdxapp4d/app/notepad/NotepadDeskApp.java @@ -6,6 +6,7 @@ import imgui.ImDrawList; import imgui.ImGui; import imgui.ImVec2; import imgui.type.ImInt; +import love.distributedrebirth.bassboonyd.BãßBȍőnConstantsʸᴰ; import love.distributedrebirth.bassboonyd.info.BãßBȍőnAuthor注; import love.distributedrebirth.gdxapp4d.vrgem4.service.VrGem4Unicode4DService; import love.distributedrebirth.gdxapp4d.vrgem4.service.deskapp.AbstractDeskApp; @@ -62,8 +63,12 @@ public class NotepadDeskApp extends AbstractDeskApp implements DeskAppRenderer { @Override public void render() { - ImGui.sliderInt("RunSpeed", runSpeed.getData(), 0, 60); - ImGui.invisibleButton("matrix", ImGui.getWindowWidth(), ImGui.getWindowHeight()-(2*ImGui.getFontSize())); + ImGui.sliderInt(BãßBȍőnConstantsʸᴰ.STR_SPACE, runSpeed.getData(), 0, 60); // empty ID not allowed in ImGui, but whitespace is an ID :) + ImGui.sameLine(); + ImCharacter.render("speedId", "RunSpeed", 'ﷲ', v -> unicode4DService.getCharacterForUnicode(v)); + ImGui.text(BãßBȍőnConstantsʸᴰ.STR_SPACE); + + ImGui.invisibleButton("matrix", ImGui.getWindowWidth(), ImGui.getWindowHeight()-(3*ImGui.getFontSize())); ImVec2 p0 = ImGui.getItemRectMin(); ImVec2 p1 = ImGui.getItemRectMax(); ImDrawList drawList = ImGui.getWindowDrawList(); diff --git a/gdxapp4d-lib-numberxd/src/main/java/love/distributedrebirth/numberxd/unicode/UnicodePlane.java b/gdxapp4d-lib-numberxd/src/main/java/love/distributedrebirth/numberxd/unicode/UnicodePlane.java index 92deebde..30cedb02 100644 --- a/gdxapp4d-lib-numberxd/src/main/java/love/distributedrebirth/numberxd/unicode/UnicodePlane.java +++ b/gdxapp4d-lib-numberxd/src/main/java/love/distributedrebirth/numberxd/unicode/UnicodePlane.java @@ -395,6 +395,10 @@ public enum UnicodePlane { return getStart() < 0xFFFF; } + public boolean isPlaneValid() { + return this != UNKNOWN; + } + public static UnicodePlane valueOfUnicode(int unicode) { for (UnicodePlane value:values()) { if (unicode >= value.getStart() && unicode <= value.getStop()) { diff --git a/gdxapp4d-lib-unicodezd/src/main/java/love/distributedrebirth/unicode4d/draw/ImCharacter.java b/gdxapp4d-lib-unicodezd/src/main/java/love/distributedrebirth/unicode4d/draw/ImCharacter.java index 7ccec383..ae4f2207 100644 --- a/gdxapp4d-lib-unicodezd/src/main/java/love/distributedrebirth/unicode4d/draw/ImCharacter.java +++ b/gdxapp4d-lib-unicodezd/src/main/java/love/distributedrebirth/unicode4d/draw/ImCharacter.java @@ -1,82 +1,123 @@ -package love.distributedrebirth.unicode4d.draw; - -import imgui.ImColor; -import imgui.ImDrawList; -import imgui.ImGui; -import imgui.ImVec2; -import love.distributedrebirth.bassboonyd.info.BãßBȍőnAuthor注; -import love.distributedrebirth.unicode4d.draw.DrawGlyphPath.ImGlyphLineTo; -import love.distributedrebirth.unicode4d.draw.DrawGlyphPath.ImGlyphPathCommand; -import love.distributedrebirth.unicode4d.draw.DrawGlyphPath.ImGlyphQuadCurveTo; - -@BãßBȍőnAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天") -public class ImCharacter { - - public static final float HEIGHT = 26f; - public static final float WIDTH = 22f; - public static final float MARGIN_MENUBAR = 4f; - private static final ImVec2 SIZE = new ImVec2(WIDTH, HEIGHT); - private static final int DEFAULT_COLOR = ImColor.intToColor(255, 255, 255, 255); - - public static void render(DrawCharacter drawChar) { - ImGui.invisibleButton("canvas", SIZE.x, SIZE.y); - ImVec2 p0 = ImGui.getItemRectMin(); - ImVec2 p1 = ImGui.getItemRectMax(); // p1 = p0 + size - ImDrawList drawList = ImGui.getWindowDrawList(); - drawList.pushClipRect(p0.x, p0.y, p1.x, p1.y); - drawUnicode4D(drawChar, p0.x, p0.y, DEFAULT_COLOR, drawList); - drawList.popClipRect(); - } - - public static void drawUnicode4D(DrawCharacter drawChar, float posX, float posY, int color, ImDrawList drawList) { - float xOff = posX; - float yOff = posY + 19f; - float yFlip = -1f; - float scale = 0.0199f; - if (drawChar.getyMax() > 900) { - scale = 0.0100f; - } - ImGlyphPathCommand first = null; - ImGlyphPathCommand prev = null; - for (ImGlyphPathCommand cmd: drawChar.getGlyphPath().getPath()) { - if (cmd.isImGlyphMoveTo()) { - first = cmd; - prev = cmd; - continue; - } - if (cmd.isImGlyphLineTo()) { - ImGlyphLineTo lineTo = cmd.toImGlyphLineTo(); - drawList.addLine( - xOff+prev.getX()*scale, - yOff+prev.getY()*scale*yFlip, - xOff+lineTo.getX()*scale, - yOff+lineTo.getY()*scale*yFlip, - color); - prev = cmd; - continue; - } - if (cmd.isImGlyphQuadCurveTo()) { - ImGlyphQuadCurveTo quadCurveTo = cmd.toImGlyphQuadCurveTo(); - drawList.addBezierQuadratic( - xOff+prev.getX()*scale, - yOff+prev.getY()*scale*yFlip, - xOff+quadCurveTo.getX1()*scale, - yOff+quadCurveTo.getY1()*scale*yFlip, - xOff+quadCurveTo.getX()*scale, - yOff+quadCurveTo.getY()*scale*yFlip, - color, - 1); - prev = cmd; - continue; - } - if (cmd.isImGlyphClosePath()) { - drawList.addLine( - xOff+prev.getX()*scale, - yOff+prev.getY()*scale*yFlip, - xOff+first.getX()*scale, - yOff+first.getY()*scale*yFlip, - color); - } - } - } -} +/* 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 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 lengthBytes() 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 */ // 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 \ No newline at end of file