📄 browsercanvas.java
字号:
new SettingsForm(this);
}
}
class RepeatTask extends TimerTask {
RepeatTask(int keyCode) {
this.keyCode = keyCode;
}
public void run() {
if (!busy) {
keyAction(keyCode);
}
}
int keyCode;
}
class BlinkTask extends TimerTask {
public void run() {
if (!busy) {
selectionColor ^= 0xffffff;
repaint();
}
}
}
public void pointerPressed(int x, int y) {
focusX = this.x + x*scale;
focusY = this.y + y*scale;
repaint();
}
public void pointerReleased(int x, int y) {
focusX = this.x + x*scale;
focusY = this.y + y*scale;
repaint();
}
public void pointerDragged(int x, int y) {
this.x = focusX - x*scale;
this.y = focusY - y*scale;
check();
repaint();
}
public void keyPressed(int keyCode) {
if (repeatTask != null) {
repeatTask.cancel();
}
if (!busy) {
repeatTask = new RepeatTask(keyCode);
repeatTimer.schedule(repeatTask, REPEAT_DELAY, REPEAT_PERIOD);
}
}
public void keyReleased(int keyCode) {
if (!busy) {
keyAction(keyCode);
}
if (repeatTask != null) {
repeatTask.cancel();
repeatTask = null;
}
}
private boolean pointInfo() {
if (selection != null && currSelection >= 0) {
Location loc = selection[currSelection];
new InfoForm(this, selectionIndex, selection[currSelection], this);
return true;
}
return false;
}
private boolean nextPoint() {
if (selection != null && selectionIndex.type == Index.POINT) {
for (int i = 0; i < selection.length; i++) {
if (++currSelection == selection.length) {
currSelection = 0;
}
Location loc = selection[currSelection];
if (loc.points[0] >= x && loc.points[0] - x < screenWidth*scale
&& loc.points[1] >= y && loc.points[1] - y < screenHeight*scale)
{
addCommand(MapBrowser.INFO_CMD);
return true;
}
}
currSelection = -1;
}
return false;
}
private void keyAction(int keyCode) {
int dx = 0, dy = 0;
switch (keyCode) {
case KEY_NUM0:
if (!pointInfo()) {
browser.error(Locale.current.getResource("No current point"), this);
}
return;
case KEY_NUM1:
dx = -1;
dy = -1;
break;
case KEY_NUM2:
dy = -1;
break;
case KEY_NUM3:
dx = 1;
dy = -1;
break;
case KEY_NUM4:
dx = -1;
break;
case KEY_NUM5:
if (!nextPoint()) {
browser.error(Locale.current.getResource("No points selected"), this);
}
repaint();
return;
case KEY_NUM6:
dx = 1;
break;
case KEY_NUM7:
dx = -1;
dy = 1;
break;
case KEY_NUM8:
dy = 1;
break;
case KEY_NUM9:
dx = 1;
dy = 1;
break;
case KEY_STAR:
if (zoomIn()) {
check();
}
return;
case KEY_POUND:
if (zoomOut()) {
check();
}
return;
default:
if ((browser.settings.flags & Settings.FAST_SCROLL) != 0) {
dx = stepX*scale;
dy = stepY*scale;
switch (getGameAction(keyCode)) {
case LEFT:
x -= dx;
break;
case RIGHT:
x += dx;
break;
case UP:
y -= dy;
break;
case DOWN:
y += dy;
break;
case FIRE:
if (!pointInfo()) {
browser.error(Locale.current.getResource("No current point"), this);
}
return;
case GAME_A:
if (zoomIn()) {
check();
}
return;
case GAME_B:
if (zoomOut()) {
check();
}
return;
default:
return;
}
check();
return;
} else {
switch (getGameAction(keyCode)) {
case UP:
dy = -1;
break;
case LEFT:
dx = -1;
break;
case FIRE:
if (!pointInfo()) {
browser.error(Locale.current.getResource("No current point"), this);
}
return;
case RIGHT:
dx = 1;
break;
case DOWN:
dy = 1;
break;
}
}
}
if (scale != 1) {
boolean redrawAll = false;
focusX += dx*focusWidth*scale/zoom;
focusY += dy*focusHeight*scale/zoom;
if (focusX < x) {
redrawAll = true;
x -= stepX*scale;
focusX += stepX*scale;
if (x < 0) {
focusX += x;
x = 0;
if (focusX < 0) {
focusX = 0;
}
}
}
if (focusX - x > (screenWidth - focusWidth)*scale) {
redrawAll = true;
x += stepX*scale;
focusX -= stepX*scale;
if (x + screenWidth*scale > browser.width) {
focusX += x + screenWidth*scale - browser.width;
x = browser.width - screenWidth*scale;
if (focusX + focusWidth*scale > browser.width) {
focusX = browser.width - focusWidth*scale;
}
}
}
if (focusY < y) {
redrawAll = true;
y -= stepY*scale;
focusY += stepY*scale;
if (y < 0) {
focusY += y;
y = 0;
if (focusY < 0) {
focusY = 0;
}
}
}
if ((focusY - y) > (screenHeight - focusHeight)*scale) {
redrawAll = true;
y += stepY*scale;
focusY -= stepY*scale;
if (y + screenHeight*scale > browser.height) {
focusY += y + screenHeight*scale - browser.height;
y = browser.height - screenHeight*scale;
if (focusY + focusHeight*scale > browser.height) {
focusY = browser.height - focusHeight*scale;
}
}
}
if (redrawAll) {
repaint();
} else {
repaint(((dx <= 0 ? focusX : focusX - focusWidth*scale/zoom) - x) / scale,
((dy <= 0 ? focusY : focusY - focusHeight*scale/zoom) - y) / scale,
focusWidth + focusWidth/zoom + 2,
focusHeight + focusHeight/zoom + 2);
}
} else {
x += dx*stepX;
y += dy*stepY;
check();
}
}
private void check() {
if (x + screenWidth*scale > browser.width) {
x = browser.width - screenWidth*scale;
}
if (x < 0) {
x = 0;
}
if (y + screenHeight*scale > browser.height) {
y = browser.height - screenHeight*scale;
}
if (y < 0) {
y = 0;
}
if (scale != 1) {
if (focusX < x || (focusX - x) > (screenWidth - focusWidth)*scale
|| focusY < y || (focusY - y) > (screenHeight - focusHeight)*scale)
{
focusX = x + focusX0;
focusY = y + focusY0;
}
if (focusX + focusWidth*scale > browser.width) {
focusX = browser.width - focusWidth*scale;
}
if (focusY + focusHeight*scale > browser.height) {
focusY = browser.height - focusHeight*scale;
}
}
repaint();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -