diff --git a/modules/javafx.controls/src/main/java/javafx/scene/control/skin/ScrollPaneSkin.java b/modules/javafx.controls/src/main/java/javafx/scene/control/skin/ScrollPaneSkin.java index b2a0c3557a4..7de91821887 100644 --- a/modules/javafx.controls/src/main/java/javafx/scene/control/skin/ScrollPaneSkin.java +++ b/modules/javafx.controls/src/main/java/javafx/scene/control/skin/ScrollPaneSkin.java @@ -1171,7 +1171,10 @@ private double updatePosX() { final ScrollPane sp = getSkinnable(); double x = isReverseNodeOrientation() ? (hsb.getMax() - (posX - hsb.getMin())) : posX; double hsbRange = hsb.getMax() - hsb.getMin(); - double minX = hsbRange > 0 ? Math.min(-x / hsbRange * (nodeWidth - contentWidth), 0) : 0; + double minX = hsbRange > 0 ? -x / hsbRange * (nodeWidth - contentWidth) : 0; + if (!Properties.IS_TOUCH_SUPPORTED) { + minX = Math.min(minX, 0); + } viewContent.setLayoutX(snapPositionX(minX)); if (!sp.hvalueProperty().isBound()) sp.setHvalue(Utils.clamp(sp.getHmin(), posX, sp.getHmax())); return posX; @@ -1180,7 +1183,10 @@ private double updatePosX() { private double updatePosY() { final ScrollPane sp = getSkinnable(); double vsbRange = vsb.getMax() - vsb.getMin(); - double minY = vsbRange > 0 ? Math.min(-posY / vsbRange * (nodeHeight - contentHeight), 0) : 0; + double minY = vsbRange > 0 ? -posY / vsbRange * (nodeHeight - contentHeight) : 0; + if (!Properties.IS_TOUCH_SUPPORTED) { + minY = Math.min(minY, 0); + } viewContent.setLayoutY(snapPositionY(minY)); if (!sp.vvalueProperty().isBound()) sp.setVvalue(Utils.clamp(sp.getVmin(), posY, sp.getVmax())); return posY;