X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=src%2Ftests%2FFreeTypeDemo.java;fp=src%2Ftests%2FFreeTypeDemo.java;h=0ac84cd95313f47413d30f277b9875acd5bae764;hp=0000000000000000000000000000000000000000;hb=3eb15f58ca0911489d7d9bdc0ac2c575d27a68d8;hpb=a6ee28ca37621098ed040e6d1c4ae103934c3e97 diff --git a/src/tests/FreeTypeDemo.java b/src/tests/FreeTypeDemo.java new file mode 100644 index 0000000..0ac84cd --- /dev/null +++ b/src/tests/FreeTypeDemo.java @@ -0,0 +1,170 @@ +package tests; + +import org.xwt.mips.Runtime; +import org.xwt.mips.Interpreter; + +import javax.swing.*; +import java.awt.*; +import java.awt.image.*; +import java.awt.event.*; +import java.io.*; + +public class FreeTypeDemo { + private JFrame frame; + private static final int OURWIDTH=640; + private static final int OURHEIGHT=256; + private static final int BASELINE=160; + private byte[] render = new byte[OURWIDTH*OURHEIGHT]; + private int size = 72; + private StringBuffer sb = new StringBuffer(); + private View view; + private Image image; + + private Runnable renderThread; + private String theText; + private boolean renderNeeded; + + private String name; + private Runtime rt; + + int renderAddr; + int stringAddr; + int stringSize; + + public static void main(String[] argv) throws Exception { + new FreeTypeDemo(argv); + } + + public FreeTypeDemo(String[] argv) throws Exception { + if(argv.length >= 2 && argv[1].startsWith("int")) { + name = "Interpreter"; + rt = new Interpreter("build/FreeTypeDemoHelper.mips"); + } else { + rt = new FreeTypeDemoHelper(); + name = "Compiler"; + } + + rt.start(new String[]{ "freetype.mips"}); + if(rt.execute()) throw new Error("freetype.mips exited"); + + byte[] font = InputStreamToByteArray.convert(new FileInputStream(argv[0])); + int fontAddr = rt.malloc(font.length); + if(fontAddr == 0) throw new Error("malloc() failed"); + rt.copyout(font,fontAddr,font.length); + + rt.setUserInfo(0,fontAddr); + rt.setUserInfo(1,font.length); + + renderAddr = rt.malloc(OURWIDTH*OURHEIGHT); + if(renderAddr == 0) throw new Error("malloc() failed"); + + if(rt.execute()) throw new Error("freetype.mips exited (" + rt.getUserInfo(1) +")"); + + createImage(); + + frame = new JFrame("FreeTypeDemo - " + name); + frame.setSize(OURWIDTH,OURHEIGHT); + view = new View(); + frame.getContentPane().add(view,BorderLayout.CENTER); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.show(); + view.requestFocus(); + renderThread = new Runnable() { + public void run() { + try { + for(;;) { + synchronized(this) { while(!renderNeeded) wait(); renderNeeded = false; } + renderText(theText==null ? "" : theText); + } + } catch(Exception e) { throw new Error(e); } + } + }; + new Thread(renderThread).start(); + keyPress('\n'); + } + + private static ColorModel cmodel = new DirectColorModel(8, 0xff,0xff,0xff); + private void createImage() { + for(int i=0;i