scroller.setCoordinates(gc.getCursor());
  protected void keyPressed(int keyCode) {    //#ifdef DEBUG    long actionTime = System.currentTimeMillis();    //#endif    scroll(keyCode);    Rectangle refreshNeeded = null;    if (splashInfo != null) {      splashInfo = null;      refreshNeeded = getBoardPainter().getDrawArea();    }    char playMode = gc.getPlayMode();    boolean review = playMode == GameController.REVIEW_MODE || playMode == GameController.JOSEKI_MODE || playMode == GameController.OBSERVE_MODE;    if (!review && keyCode == KEY_NEXTCORNER) {      gc.nextCorner();    } else if (!review && keyCode == KEY_PREVCORNER) {      gc.prevCorner();    } else      switch (getGameAction(keyCode)) {      case ACTION_UP:      case ACTION_DOWN:      case ACTION_LEFT:      case ACTION_RIGHT:        if (gc.isCountMode()) {          refreshNeeded = Rectangle.union(refreshNeeded, gc.doMoveCursor(keyCode));        } else {          if (review)            refreshNeeded = Rectangle.union(refreshNeeded, gc.doReviewMove(keyCode));          else            refreshNeeded = Rectangle.union(refreshNeeded, gc.doMoveCursor(keyCode));        }        scroller.setCoordinates(gc.getCursor());        break;      default:        if (review) {          refreshNeeded = Rectangle.union(refreshNeeded, Rectangle.union(gc.doAction(keyCode), gc.doReviewAction(keyCode)));        } else {          refreshNeeded = Rectangle.union(refreshNeeded, gc.doAction(keyCode));        }      }    if (refreshNeeded != null) {      refresh(refreshNeeded);    }    //#ifdef DEBUG    log.debug("->" + (System.currentTimeMillis() - actionTime));    //#endif  }