package bluej.editor.stride;

import javafx.beans.binding.Bindings;
import javafx.beans.value.ObservableDoubleValue;
import javafx.beans.value.ObservableValue;
import javafx.scene.Node;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Region;


| A WindowOverlayPane is as big as the editor window (well, the scrollpane part), | and sits on top of the window contents. It is useful if you have an overlay | which should have its position fixed with respect to the window, for example | the pinned method header mechanism. If you want an overlay fixed with respect to | an item inside the scroll pane (e.g. a tooltip or autocomplete beneath a slot), | use CodeOverlayPane instead. | public class WindowOverlayPane { private final Pane pane = new Pane(); public WindowOverlayPane() { pane.pickOnBoundsProperty().set(false); } public void addOverlay(Node node, ObservableDoubleValue x, ObservableDoubleValue y) { addOverlay(node, x, y, false); } public void addOverlay(Node node, ObservableDoubleValue x, ObservableDoubleValue y, boolean moveLeftIfNeeded) { pane.getChildren().add(node); if (moveLeftIfNeeded) { node.layoutXProperty().bind(Bindings.min(x, pane.widthProperty().subtract(((Region)node).widthProperty()))); } else { node.layoutXProperty().bind(x); } node.layoutYProperty().bind(y); } public void removeOverlay(Node node) { pane.getChildren().remove(node); } public double sceneXToWindowOverlayX(double sceneX) { return pane.sceneToLocal(sceneX, 0).getX(); } public double sceneYToWindowOverlayY(double sceneY) { return pane.sceneToLocal(0, sceneY).getY(); } public Node getNode() { return pane; } public boolean contains(Node node) { return pane.getChildren().contains(node); } }
top, use, map, class WindowOverlayPane

.   WindowOverlayPane
.   addOverlay
.   addOverlay
.   removeOverlay
.   sceneXToWindowOverlayX
.   sceneYToWindowOverlayY
.   getNode
.   contains




75 neLoCode + 6 LoComm