# HG changeset patch # Parent 36f4864a04e88a41b9fe148fbae34217f7ee5db4 RT-37408: [ScrollPane] incorrect preferred size when viewport pref size is specified and bar is present diff -r 36f4864a04e8 -r c2d025c17c1c modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ScrollPaneSkin.java --- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ScrollPaneSkin.java Thu Jun 05 16:30:45 2014 -0400 +++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/ScrollPaneSkin.java Thu Jun 05 17:30:03 2014 -0400 @@ -710,7 +710,11 @@ @Override protected double computePrefWidth(double height, double topInset, double rightInset, double bottomInset, double leftInset) { final ScrollPane sp = getSkinnable(); - double vsbWidth = sp.getVbarPolicy() == ScrollBarPolicy.ALWAYS ? vsb.prefWidth(ScrollBar.USE_COMPUTED_SIZE) : 0; + double vsbWidth = + ((sp.getVbarPolicy() == ScrollBarPolicy.ALWAYS) || + (sp.getVbarPolicy() == ScrollBarPolicy.AS_NEEDED && sp.getPrefViewportWidth() > 0)) + ? vsb.prefWidth(ScrollBar.USE_COMPUTED_SIZE) + : 0; double minWidth = vsbWidth + snappedLeftInset() + snappedRightInset(); if (sp.getPrefViewportWidth() > 0) { @@ -727,7 +731,11 @@ @Override protected double computePrefHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) { final ScrollPane sp = getSkinnable(); - double hsbHeight = sp.getHbarPolicy() == ScrollBarPolicy.ALWAYS ? hsb.prefHeight(ScrollBar.USE_COMPUTED_SIZE) : 0; + double hsbHeight = + ((sp.getHbarPolicy() == ScrollBarPolicy.ALWAYS) || + (sp.getHbarPolicy() == ScrollBarPolicy.AS_NEEDED && sp.getPrefViewportHeight() > 0)) + ? hsb.prefHeight(ScrollBar.USE_COMPUTED_SIZE) + : 0; double minHeight = hsbHeight + snappedTopInset() + snappedBottomInset(); if (sp.getPrefViewportHeight() > 0) {