X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Ftranslators%2FFreetype.java;h=3079606ac6f097b762d8461eaeca22f3c260d375;hb=0b0673bbc7f06c5d5418d5ab7ad5961a464e2de0;hp=0726fda42009f22fdba9059b8e72ff00c423d449;hpb=7f5df8070a5551fe66abd11a589677e285ca62f8;p=org.ibex.core.git diff --git a/src/org/xwt/translators/Freetype.java b/src/org/xwt/translators/Freetype.java index 0726fda..3079606 100644 --- a/src/org/xwt/translators/Freetype.java +++ b/src/org/xwt/translators/Freetype.java @@ -13,8 +13,8 @@ public class Freetype { public Freetype() { } private static byte[] image = null; - private static final int FONT_RESERVED = 256*1024; + private int mem_allocated = 0; private org.xwt.mips.Interpreter vm = null; private Res loadedStream = null; @@ -27,7 +27,7 @@ public class Freetype { byte[] fontstream = InputStreamToByteArray.convert(is); if (image == null) image = InputStreamToByteArray.convert(Main.builtin.getInputStream("freetype.mips")); vm = new org.xwt.mips.Interpreter(image); - int baseAddr = vm.sbrk(FONT_RESERVED); + int baseAddr = vm.sbrk(fontstream.length); vm.copyout(fontstream, baseAddr, fontstream.length); vm.setUserInfo(0, baseAddr); vm.setUserInfo(1, fontstream.length); @@ -42,35 +42,8 @@ public class Freetype { int width = 0; int height = 0; byte[] data = null; - File cacheFile = null; - /* + try { - String key = glyph.font.res.getCacheKey() + ":" + glyph.c; - key = new String(Base64.encode(key.getBytes())); - cacheFile = new java.io.File(System.getProperty("user.home") + - java.io.File.separatorChar + ".xwt" + - java.io.File.separatorChar + "caches" + - java.io.File.separatorChar + "glyphs" + - java.io.File.separatorChar + - key); - new java.io.File(cacheFile.getParent()).mkdirs(); - } catch (Res.NotCacheableException e) { - Log.log(Freetype.class, "note: glyph not cacheable"); - } - */ - if (cacheFile != null && cacheFile.exists()) { - DataInputStream dis = new DataInputStream(new FileInputStream(cacheFile)); - width = dis.readInt(); - height = dis.readInt(); - glyph.font.max_ascent = dis.readInt(); - glyph.font.max_descent = dis.readInt(); - glyph.baseline = dis.readInt(); - glyph.advance = dis.readInt(); - data = new byte[width * height]; - if (width != 0 && height != 0) dis.readFully(data); - - } else try { - //System.out.println("cache miss!"); if (loadedStream != glyph.font.res) loadFontByteStream(glyph.font.res); vm.setUserInfo(2, (int)glyph.c); vm.setUserInfo(3, (int)glyph.c); @@ -84,29 +57,15 @@ public class Freetype { width = vm.getUserInfo(6); height = vm.getUserInfo(7); - + data = new byte[width * height]; int addr = vm.getUserInfo(5); vm.copyin(addr,data,width*height); - if (cacheFile != null) { - File tmp = new File(cacheFile.getCanonicalPath() + ".tmp"); - DataOutputStream dis = new DataOutputStream(new FileOutputStream(tmp)); - dis.writeInt(width); - dis.writeInt(height); - dis.writeInt(glyph.font.max_ascent); - dis.writeInt(glyph.font.max_descent); - dis.writeInt(glyph.baseline); - dis.writeInt(glyph.advance); - if (width != 0 && height != 0) dis.write(data, 0, data.length); - dis.close(); - tmp.renameTo(cacheFile); - } - + + if (width == 0 || height == 0) Log.log(Freetype.class, "warning glyph has zero width/height"); + glyph.p = Platform.createAlphaOnlyPicture(data, width, height); } catch (Exception e) { Log.log(this, e); } - - if (width == 0 || height == 0) Log.log(Freetype.class, "warning glyph has zero width/height"); - glyph.p = Platform.createAlphaOnlyPicture(data, width, height); } }