Memory leak fix from James H.
[sgt/puzzles] / PuzzleApplet.java
index 4c9928d..b796aa4 100644 (file)
@@ -33,6 +33,7 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
     private JLabel statusBar;
     private PuzzlePanel pp;
     private Runtime runtime;
+    private String[] puzzle_args;
     private Graphics2D  gg;
     private Timer timer;
     private int xarg1, xarg2, xarg3;
@@ -172,9 +173,22 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
                     runtimeCall("jcallback_timer_func", new int[0]);
                 }
             });
+           String gameid;
+           try {
+               gameid = getParameter("game_id");
+           } catch (java.lang.NullPointerException ex) {
+               gameid = null;
+           }
+           if (gameid == null) {
+               puzzle_args = null;
+           } else {
+               puzzle_args = new String[2];
+               puzzle_args[0] = "puzzle";
+               puzzle_args[1] = gameid;
+           }
             SwingUtilities.invokeLater(new Runnable() {
                 public void run() {
-                    runtime.start();
+                    runtime.start(puzzle_args);
                     runtime.execute();
                 }
             });
@@ -359,7 +373,7 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
             case 7: // string
                 gg.setColor(colors[arg2]);
                 {
-                    String text = runtime.cstring(arg3);
+                    String text = runtime.utfstring(arg3);
                     Font ft = new Font((xarg3 & 0x10) != 0 ? "Monospaced" : "Dialog",
                             Font.PLAIN, 100);
                     int height100 = this.getFontMetrics(ft).getHeight();
@@ -368,8 +382,6 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
                     int asc = fm.getAscent(), desc = fm.getDescent();
                     if ((xarg3 & ALIGN_VCENTRE) != 0)
                         xarg2 += asc - (asc+desc)/2;
-                    else
-                        xarg2 += asc;
                     int wid = fm.stringWidth(text);
                     if ((xarg3 & ALIGN_HCENTRE) != 0)
                         xarg1 -= wid / 2;
@@ -476,11 +488,13 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
         }
 
         public void createBackBuffer(int w, int h, Color bg) {
-            backBuffer = new BufferedImage(w,h, BufferedImage.TYPE_3BYTE_BGR);
-            Graphics g = backBuffer.createGraphics();
-            g.setColor(bg);
-            g.fillRect(0, 0, w, h);
-            g.dispose();
+           if (w > 0 && h > 0) {
+               backBuffer = new BufferedImage(w,h, BufferedImage.TYPE_3BYTE_BGR);
+               Graphics g = backBuffer.createGraphics();
+               g.setColor(bg);
+               g.fillRect(0, 0, w, h);
+               g.dispose();
+           }
         }
 
         protected void paintComponent(Graphics g) {
@@ -588,7 +602,7 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
                     break;
                 case C_CHOICES:
                     JComboBox jcm = (JComboBox)cc.component;
-                    runtimeCall("jcallback_config_set_boolean", new int[] {cc.configItemPointer, jcm.getSelectedIndex()});
+                    runtimeCall("jcallback_config_set_choice", new int[] {cc.configItemPointer, jcm.getSelectedIndex()});
                     break;
                 }
             }