In the Java front end, don't try to guess the puzzle rectangle's

width and height by assuming mirror symmetry within the containing
applet area. Instead, use the proper width and height as given back
by the C sizing function.

(In particular, this fixes a bug where the non-blanked puzzle area
appeared too tall by the height of the menu bar, probably as a
result of confusing PuzzleApplet.getHeight() with
PuzzlePanel.getHeight(). But the mirroring approach was conceptually
wrong anyway.)

[originally from svn r9022]
This commit is contained in:
Simon Tatham
2010-11-06 18:14:41 +00:00
parent 4d41f0f717
commit 9cfc61c5f7
2 changed files with 17 additions and 8 deletions

View File

@ -297,16 +297,22 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
String text = runtime.cstring(arg2); String text = runtime.cstring(arg2);
if (text.equals("")) text = " "; if (text.equals("")) text = " ";
System.out.println("status '" + text + "'"); System.out.println("status '" + text + "'");
statusBar.setText(text); break; statusBar.setText(text);
break;
case 1: case 1:
gg = pp.backBuffer.createGraphics(); gg = pp.backBuffer.createGraphics();
if (arg2 != 0 || arg3 != 0) { 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(Color.black); gg.setColor(Color.black);
gg.fillRect(0, 0, arg2, getHeight()); gg.fillRect(0, 0, left, height);
gg.fillRect(0, 0, getWidth(), arg3); gg.fillRect(right, 0, width-right, height);
gg.fillRect(getWidth() - arg2, 0, arg2, getHeight()); gg.fillRect(0, 0, width, top);
gg.fillRect(0, getHeight() - arg3, getWidth(), arg3); gg.fillRect(0, bottom, width, height-bottom);
gg.setClip(arg2, arg3, getWidth()-2*arg2, getHeight()-2*arg3); gg.setClip(left, top, right-left, bottom-top);
} }
break; break;
case 2: gg.dispose(); pp.repaint(); break; case 2: gg.dispose(); pp.repaint(); break;

View File

@ -35,7 +35,7 @@ struct frontend {
struct timeval last_time; struct timeval last_time;
config_item *cfg; config_item *cfg;
int cfg_which, cfgret; int cfg_which, cfgret;
int ox, oy; int ox, oy, w, h;
}; };
static frontend *_fe; static frontend *_fe;
@ -61,6 +61,7 @@ void nestedvm_status_bar(void *handle, char *text)
void nestedvm_start_draw(void *handle) void nestedvm_start_draw(void *handle)
{ {
frontend *fe = (frontend *)handle; frontend *fe = (frontend *)handle;
_call_java(5, 0, fe->w, fe->h);
_call_java(4, 1, fe->ox, fe->oy); _call_java(4, 1, fe->ox, fe->oy);
} }
@ -218,6 +219,8 @@ int jcallback_resize(int width, int height)
midend_size(fe->me, &x, &y, TRUE); midend_size(fe->me, &x, &y, TRUE);
fe->ox = (width - x) / 2; fe->ox = (width - x) / 2;
fe->oy = (height - y) / 2; fe->oy = (height - y) / 2;
fe->w = x;
fe->h = y;
midend_force_redraw(fe->me); midend_force_redraw(fe->me);
return 0; return 0;
} }