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