diff options
author | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-05-07 11:47:39 +0200 |
---|---|---|
committer | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-05-07 11:47:39 +0200 |
commit | 6f7141b14bbb08969255d96484ea8ee9b306503b (patch) | |
tree | e64a3d29d57b11914834ccca366541bb83ca486b /src/main/java/cc/polyfrost/oneconfig/lwjgl | |
parent | 95a2caffdddadb487c164a7cc498f54ed4a27955 (diff) | |
download | OneConfig-6f7141b14bbb08969255d96484ea8ee9b306503b.tar.gz OneConfig-6f7141b14bbb08969255d96484ea8ee9b306503b.tar.bz2 OneConfig-6f7141b14bbb08969255d96484ea8ee9b306503b.zip |
font changes
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/lwjgl')
3 files changed, 38 insertions, 14 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java b/src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java index 94a2650..4d5df83 100644 --- a/src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java +++ b/src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java @@ -1,6 +1,7 @@ package cc.polyfrost.oneconfig.lwjgl; import cc.polyfrost.oneconfig.config.OneConfigConfig; +import cc.polyfrost.oneconfig.lwjgl.font.Font; import cc.polyfrost.oneconfig.lwjgl.font.FontManager; import cc.polyfrost.oneconfig.lwjgl.font.Fonts; import cc.polyfrost.oneconfig.lwjgl.image.Image; @@ -14,8 +15,14 @@ import org.lwjgl.nanovg.NVGColor; import org.lwjgl.nanovg.NVGPaint; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.GL11; +import sun.font.Font2D; +import sun.font.FontManagerFactory; +import sun.font.StrikeMetrics; +import sun.font.TrueTypeFont; import java.awt.*; +import java.io.File; +import java.util.Arrays; import java.util.function.LongConsumer; import static org.lwjgl.nanovg.NanoVG.*; @@ -145,16 +152,15 @@ public final class RenderManager { nvgColor.free(); } - public static float fontSizeToNVGFontSize(float fontSize) { - int dpi = 72; - float pixelsPerFUnit = (fontSize * dpi) / (72f * 2816f); - return 2728f * pixelsPerFUnit - (-680 * pixelsPerFUnit); + public static float fontSizeToNVGFontSize(float fontSize, Font font) { + float pixelsPerFUnit = (fontSize * 72f) / (72f * font.getUnitsPerEm()); + return font.getAscender() * pixelsPerFUnit - (font.getDescender() * pixelsPerFUnit); } public static void drawString(long vg, String text, float x, float y, int color, float size, Fonts font) { nvgBeginPath(vg); - nvgFontSize(vg, fontSizeToNVGFontSize(size)); + nvgFontSize(vg, fontSizeToNVGFontSize(size, font.font)); nvgFontFace(vg, font.font.getName()); nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE); NVGColor nvgColor = color(vg, color); @@ -165,7 +171,7 @@ public final class RenderManager { public static void drawString(long vg, String text, float x, float y, int color, float size, int lineHeight, Fonts font) { nvgBeginPath(vg); - nvgFontSize(vg, fontSizeToNVGFontSize(size)); + nvgFontSize(vg, fontSizeToNVGFontSize(size, font.font)); nvgFontFace(vg, font.font.getName()); nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_TOP); nvgTextMetrics(vg, new float[]{10f}, new float[]{10f}, new float[]{lineHeight}); @@ -177,7 +183,7 @@ public final class RenderManager { public static void drawWrappedString(long vg, String text, float x, float y, float width, int color, float size, Fonts font) { nvgBeginPath(vg); - nvgFontSize(vg, fontSizeToNVGFontSize(size)); + nvgFontSize(vg, fontSizeToNVGFontSize(size, font.font)); nvgFontFace(vg, font.font.getName()); nvgTextAlign(vg, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE); NVGColor nvgColor = color(vg, color); @@ -224,7 +230,7 @@ public final class RenderManager { public static float getTextWidth(long vg, String text, float fontSize, Fonts font) { float[] bounds = new float[4]; - nvgFontSize(vg, fontSizeToNVGFontSize(fontSize)); + nvgFontSize(vg, fontSizeToNVGFontSize(fontSize, font.font)); nvgFontFace(vg, font.font.getName()); return nvgTextBounds(vg, 0, 0, text, bounds); } diff --git a/src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Font.java b/src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Font.java index 970c073..649252b 100644 --- a/src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Font.java +++ b/src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Font.java @@ -7,10 +7,16 @@ public class Font { private final String name; private boolean loaded = false; private ByteBuffer buffer = null; + private final int unitsPerEm; + private final int ascender; + private final int descender; - public Font(String name, String fileName) { + public Font(String name, String fileName, int unitsPerEm, int ascender, int descender) { this.name = name; this.fileName = fileName; + this.unitsPerEm = unitsPerEm; + this.ascender = ascender; + this.descender = descender; } public String getName() { @@ -36,4 +42,16 @@ public class Font { void setBuffer(ByteBuffer buffer) { this.buffer = buffer; } + + public int getUnitsPerEm() { + return unitsPerEm; + } + + public int getAscender() { + return ascender; + } + + public int getDescender() { + return descender; + } } diff --git a/src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Fonts.java b/src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Fonts.java index aef639c..d2b94f0 100644 --- a/src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Fonts.java +++ b/src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Fonts.java @@ -1,11 +1,11 @@ package cc.polyfrost.oneconfig.lwjgl.font; public enum Fonts { - INTER_BOLD(new Font("inter-bold", "/assets/oneconfig/font/Inter-Bold.otf")), - INTER_REGULAR(new Font("inter-regular", "/assets/oneconfig/font/Inter-Regular.otf")), - INTER_SEMIBOLD(new Font("inter-semibold", "/assets/oneconfig/font/Inter-SemiBold.otf")), - INTER_MEDIUM(new Font("inter-medium", "/assets/oneconfig/font/Inter-Medium.otf")), - MC_REGULAR(new Font("mc-regular", "/assets/oneconfig/font/Minecraft-Regular.otf")); + // https://opentype.js.org/font-inspector.html + BOLD(new Font("inter-bold", "/assets/oneconfig/font/Bold.otf", 2816, 2728, -680)), + SEMIBOLD(new Font("inter-semibold", "/assets/oneconfig/font/SemiBold.otf", 2816, 2728, -68)), + MEDIUM(new Font("inter-medium", "/assets/oneconfig/font/Medium.otf", 2816, 2728, -680)), + REGULAR(new Font("inter-regular", "/assets/oneconfig/font/Regular.otf", 2816, 2728, -680)); public final Font font; |