docs: public EventHandler<MouseEvent> getDefaultOnMouseDraggedEventHandler() {
  		return e -> {
  			// for mobile-touch we allow drag, even if not pannable
  			if (this.dragDetected || IS_TOUCH_SUPPORTED) {
  				if (!this.dragDetected) {
  					this.dragDetected = true;
  					if (this.savedCursor == null) {
  						final ZoomableCanvas<T> canvas0 = getDocumentCanvas();
  						this.savedCursor = canvas0.getCursor();
  						if (this.savedCursor == null) {
  							this.savedCursor = Cursor.DEFAULT;
  						}
  						canvas0.setCursor(Cursor.MOVE);
  						requestLayout();
  					}
  				}
  				final double sensitivity = getPanSensitivity(e.isShiftDown(), e.isControlDown());
  				// we only drag if not all of the content is visible.
  				if (this.hbar.getVisibleAmount() > 0. && this.hbar.getVisibleAmount() < this.hbar.getMax()) {
  					double deltaX = this.pressX - e.getX();
  					if (isInvertedAxisX()) {
  						deltaX = -deltaX;
  					}
  					if (Math.abs(deltaX) > PAN_THRESHOLD) {
  						final double delta = getDocumentCanvas().getDocumentGraphicsContext2D().fx2docSize(deltaX) * sensitivity;
  						double newHVal = this.hbarValue + delta;
  						newHVal = Utils.clamp(this.hbar.getMin(), newHVal, this.hbar.getMax());
  						this.hbar.setValue(newHVal);
  					}
  				}
  				// we only drag if not all of the content is visible.
  				if (this.vbar.getVisibleAmount() > 0. && this.vbar.getVisibleAmount() < this.vbar.getMax()) {
  					double deltaY = this.pressY - e.getY();
  					if (isInvertedAxisY()) {
  						deltaY = -deltaY;
  					}
  					if (Math.abs(deltaY) >= PAN_THRESHOLD) {
  						final double delta = getDocumentCanvas().getDocumentGraphicsContext2D().fx2docSize(deltaY) * sensitivity;
  						double newVVal = this.vbarValue + delta;
  						newVVal = Utils.clamp(this.vbar.getMin(), newVVal, this.vbar.getMax());
  						this.vbar.setValue(newVVal);
  					}
  				}
  				// we need to consume drag events, as we don't want the view pane itself to be dragged on every mouse click
  				e.consume();
  			}
  		};
  	}