2003/09/19 05:01:37
[org.ibex.core.git] / src / org / xwt / Glyph.java
diff --git a/src/org/xwt/Glyph.java b/src/org/xwt/Glyph.java
new file mode 100644 (file)
index 0000000..0a75b0b
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL]
+package org.xwt;
+import org.xwt.translators.*;
+
+public class Glyph {
+    char c;
+    int line_height;    // same value for every glyph in font; the max height of all chars
+    int baseline;       // within the picture, this is the y-coordinate of the baseline
+    int advance;        // amount to increment the x-coordinate
+    Picture p;
+
+    // k1=font.res k2=(c << 16 | pointsize)
+    private static Cache glyphCache = new Cache();
+
+    public static Glyph getGlyph(Res res, int pointsize, char c) {
+        Glyph ret = (Glyph)glyphCache.get(res, new Integer((((int)c) << 16) | pointsize));
+        if (ret != null) return ret;
+
+        // FEATURE: be smarter here
+        if (c < 256)
+            org.xwt.translators.Font.renderGlyphs(res, pointsize, 0, 255, glyphCache);
+        else
+            org.xwt.translators.Font.renderGlyphs(res, pointsize, (int)c, (int)c, glyphCache);
+
+        ret = (Glyph)glyphCache.get(res, new Integer((((int)c) << 16) | pointsize));
+        if (ret != null) return ret;
+        throw new RuntimeException("renderGlyphs didn't create the glyph we wanted");
+    }
+}