aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/cc/polyfrost/oneconfig/lwjgl
diff options
context:
space:
mode:
authorDeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com>2022-05-07 11:47:39 +0200
committerDeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com>2022-05-07 11:47:39 +0200
commit6f7141b14bbb08969255d96484ea8ee9b306503b (patch)
treee64a3d29d57b11914834ccca366541bb83ca486b /src/main/java/cc/polyfrost/oneconfig/lwjgl
parent95a2caffdddadb487c164a7cc498f54ed4a27955 (diff)
downloadOneConfig-6f7141b14bbb08969255d96484ea8ee9b306503b.tar.gz
OneConfig-6f7141b14bbb08969255d96484ea8ee9b306503b.tar.bz2
OneConfig-6f7141b14bbb08969255d96484ea8ee9b306503b.zip
font changes
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/lwjgl')
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/lwjgl/RenderManager.java22
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Font.java20
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/lwjgl/font/Fonts.java10
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;