X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/2c9308077cfcf702a04a37b7d633e912f05e3aee..HEAD:/PuzzleApplet.java diff --git a/PuzzleApplet.java b/PuzzleApplet.java index 4c9928d..0b0648c 100644 --- a/PuzzleApplet.java +++ b/PuzzleApplet.java @@ -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(); } }); @@ -282,24 +296,29 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB { case 0: String text = runtime.cstring(arg2); if (text.equals("")) text = " "; - System.out.println("status '" + text + "'"); - statusBar.setText(text); break; + statusBar.setText(text); + break; case 1: gg = pp.backBuffer.createGraphics(); - if (arg2 != 0 || arg3 != 0) { - gg.setColor(Color.black); - gg.fillRect(0, 0, arg2, getHeight()); - gg.fillRect(0, 0, getWidth(), arg3); - gg.fillRect(getWidth() - arg2, 0, arg2, getHeight()); - gg.fillRect(0, getHeight() - arg3, getWidth(), arg3); - gg.setClip(arg2, arg3, getWidth()-2*arg2, getHeight()-2*arg3); + if (arg2 != 0 || arg3 != 0 || + arg2 + xarg2 != getWidth() || + arg3 + xarg3 != getHeight()) { + int left = arg2, right = arg2 + xarg2; + int top = arg3, bottom = arg3 + xarg3; + int width = getWidth(), height = getHeight(); + gg.setColor(colors != null ? colors[0] : Color.black); + gg.fillRect(0, 0, left, height); + gg.fillRect(right, 0, width-right, height); + gg.fillRect(0, 0, width, top); + gg.fillRect(0, bottom, width, height-bottom); + gg.setClip(left, top, right-left, bottom-top); } break; case 2: gg.dispose(); pp.repaint(); break; case 3: gg.setClip(arg2, arg3, xarg1, xarg2); break; case 4: if (arg2 == 0 && arg3 == 0) { - gg.fillRect(0, 0, getWidth(), getHeight()); + gg.setClip(0, 0, getWidth(), getHeight()); } else { gg.setClip(arg2, arg3, getWidth()-2*arg2, getHeight()-2*arg3); } @@ -359,7 +378,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 +387,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 +493,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 +607,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; } }