Java tutorial
/* * Minecraft GUI mod * Copyright (C) 2015 Samuel Marchildon-Lavoie * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package io.github.minecraftgui.models.fonts; import io.github.minecraftgui.controllers.Screen; import org.lwjgl.opengl.GL11; import org.newdawn.slick.SlickException; import org.newdawn.slick.font.effects.ColorEffect; import java.awt.*; import java.util.HashMap; /** * Created by Samuel on 2015-11-04. */ public class UnicodeFont extends Font { private final Screen screen; private final java.awt.Font font; private final HashMap<String, org.newdawn.slick.UnicodeFont[]> fonts; public UnicodeFont(Screen screen, java.awt.Font font) { this.screen = screen; this.font = font; this.fonts = new HashMap<>(); } @Override public double getStringWidth(String text, int size, Color color) { org.newdawn.slick.UnicodeFont unicodeFonts[] = fonts.get(size + "-" + color.getRGB()); if (unicodeFonts != null) return (double) unicodeFonts[screen.getScaleFactor()].getWidth(text) / (double) screen.getScaleFactor(); else return 0; } @Override public double getStringHeight(int size, Color color) { org.newdawn.slick.UnicodeFont unicodeFonts[] = fonts.get(size + "-" + color.getRGB()); if (unicodeFonts != null) return (double) unicodeFonts[screen.getScaleFactor()].getLineHeight() / (double) screen.getScaleFactor(); else return 0; } @Override public void drawString(String text, double y, double x, int size, Color color) { org.newdawn.slick.UnicodeFont unicodeFonts[] = fonts.get(size + "-" + color.getRGB()); if (unicodeFonts != null) { GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glScaled(1f / screen.getScaleFactor(), 1f / screen.getScaleFactor(), 1); unicodeFonts[screen.getScaleFactor()].drawString((float) (x * screen.getScaleFactor()), (float) (y * screen.getScaleFactor()), text); GL11.glScaled(1f * screen.getScaleFactor(), 1f * screen.getScaleFactor(), 1); } } public void generate(int size, Color color) { if (fonts.get(size + "-" + color.getRGB()) == null) { org.newdawn.slick.UnicodeFont unicodeFonts[] = new org.newdawn.slick.UnicodeFont[5]; for (int i = 1; i < 5; i++) { org.newdawn.slick.UnicodeFont unicodeFont = new org.newdawn.slick.UnicodeFont(font, size * i, false, false); unicodeFont.addAsciiGlyphs(); unicodeFont.getEffects().add(new ColorEffect(color)); unicodeFont.addGlyphs(200, 400); try { unicodeFont.loadGlyphs(); } catch (SlickException e) { e.printStackTrace(); } unicodeFonts[i] = unicodeFont; } fonts.put(size + "-" + color.getRGB(), unicodeFonts); } } }