private void viewChanged() {
    if (pageInfo == null) return;
    int w = canvas.getCoordinateSpaceWidth(), h = canvas.getCoordinateSpaceHeight();
    int pw = (int) (pageInfo.width * zoom), ph = (int) (pageInfo.height * zoom);
    if (pw < w) {
      centerX = pw / 2;
    } else {
      centerX = Math.max(centerX, w / 2 - pageMargin);
      centerX = Math.min(centerX, pw - w / 2 + pageMargin);
    }

    if (ph < h) {
      centerY = ph / 2;
    } else {
      centerY = Math.max(centerY, h / 2 - pageMargin);
      centerY = Math.min(centerY, ph - h / 2 + pageMargin);
    }

    double pw2 = pw + 2 * pageMargin, ph2 = ph + 2 * pageMargin;
    app.getHorizontalScrollbar().setThumb((centerX + pageMargin) / pw2, w / pw2);
    app.getVerticalScrollbar().setThumb((centerY + pageMargin) / ph2, h / ph2);
    if (app.getTextLayer() != null)
      app.getTextLayer().setViewPosition(page, w / 2 - centerX, h / 2 - centerY, zoom);
  }