--- old/modules/graphics/src/main/java/com/sun/javafx/scene/layout/RegionHelper.java 2016-06-03 11:04:16.509423448 -0700 +++ new/modules/graphics/src/main/java/com/sun/javafx/scene/layout/RegionHelper.java 2016-06-03 11:04:16.369423449 -0700 @@ -25,9 +25,14 @@ package com.sun.javafx.scene.layout; +import com.sun.javafx.geom.BaseBounds; +import com.sun.javafx.geom.PickRay; +import com.sun.javafx.geom.transform.BaseTransform; import com.sun.javafx.scene.ParentHelper; +import com.sun.javafx.scene.input.PickResultChooser; import com.sun.javafx.sg.prism.NGNode; import com.sun.javafx.util.Utils; +import javafx.geometry.Bounds; import javafx.scene.Node; import javafx.scene.layout.Region; @@ -63,6 +68,36 @@ regionAccessor.doUpdatePeer(node); } + @Override + protected Bounds computeLayoutBoundsImpl(Node node) { + return regionAccessor.doComputeLayoutBounds(node); + } + + @Override + protected BaseBounds computeGeomBoundsImpl(Node node, BaseBounds bounds, + BaseTransform tx) { + regionAccessor.doComputeGeomBounds(node, bounds, tx); + // NOTE: Okay to call computeGeomBoundsImpl with tx even in the 3D case + // since Parent's computeGeomBoundsImpl does handle 3D correctly. + BaseBounds cb = super.computeGeomBoundsImpl(node, bounds, tx); + return regionAccessor.doComputeGeomBounds2(cb, node, bounds, tx); + } + + @Override + protected boolean computeContainsImpl(Node node, double localX, double localY) { + return regionAccessor.doComputeContains(node, localX, localY); + } + + @Override + protected void notifyLayoutBoundsChangedImpl(Node node) { + regionAccessor.doNotifyLayoutBoundsChanged(node); + } + @Override + protected void pickNodeLocalImpl(Node node, PickRay localPickRay, + PickResultChooser result) { + regionAccessor.doPickNodeLocal(node, localPickRay, result); + } + public static void setRegionAccessor(final RegionAccessor newAccessor) { if (regionAccessor != null) { throw new IllegalStateException(); @@ -74,6 +109,13 @@ public interface RegionAccessor { void doUpdatePeer(Node node); NGNode doCreatePeer(Node node); + Bounds doComputeLayoutBounds(Node node); + BaseBounds doComputeGeomBounds(Node node, BaseBounds bounds, BaseTransform tx); + BaseBounds doComputeGeomBounds2(BaseBounds cb, Node node, BaseBounds bounds, BaseTransform tx); + boolean doComputeContains(Node node, double localX, double localY); + void doNotifyLayoutBoundsChanged(Node node); + void doPickNodeLocal(Node node, PickRay localPickRay, + PickResultChooser result); } }