Stop the analysis pass in Loopy's redraw routine from being
[sgt/puzzles] / PuzzleApplet.java
index 23eda81..0b0648c 100644 (file)
@@ -296,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);
                     }
@@ -373,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();
@@ -382,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;