X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fnodes%2FDistrictNetworkHoverInfoNode.java;h=7a75ad5f2e4382390f798ebc0ea38ea7c7614da5;hb=27f0f6dd22d6826ae85ea89b1916d17ca9f83c41;hp=4fc1bebae4ec12f3e013ff1f42ad187c11589447;hpb=2f414faa80051f046a020840105847099c655195;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkHoverInfoNode.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkHoverInfoNode.java index 4fc1beba..7a75ad5f 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkHoverInfoNode.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DistrictNetworkHoverInfoNode.java @@ -11,13 +11,17 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; +import org.simantics.district.network.ui.styles.DistrictNetworkHoverInfoStyle; import org.simantics.maps.MapScalingTransform; +import org.simantics.scenegraph.ParentNode; import org.simantics.scenegraph.g2d.G2DNode; +import org.simantics.scenegraph.g2d.nodes.spatial.RTreeNode; import org.simantics.scenegraph.utils.DPIUtil; +import org.simantics.scenegraph.utils.NodeUtil; import org.simantics.scl.runtime.Lists; import org.simantics.scl.runtime.tuple.Tuple3; -public class DistrictNetworkHoverInfoNode extends G2DNode implements HoverSensitiveNode { +public class DistrictNetworkHoverInfoNode extends G2DNode implements HoverSensitiveNode, DeferredNode { private static final Font FONT = new Font("Tahoma", Font.PLAIN, (int)(DPIUtil.upscale(9) * MapScalingTransform.getScaleY() + 0.5)); @@ -31,9 +35,12 @@ public class DistrictNetworkHoverInfoNode extends G2DNode implements HoverSensit private List labels; + @SuppressWarnings("unused") private Point2D origin; private boolean hover = false; + + private Point2D mousePosition; private static AtomicReference activeNode = new AtomicReference<>(); @@ -42,6 +49,16 @@ public class DistrictNetworkHoverInfoNode extends G2DNode implements HoverSensit if (!hover || activeNode.get() != this) return; + ParentNode root = (ParentNode) NodeUtil.getNearestParentOfType(this, RTreeNode.class); + DeferredRenderingNode deferred = root != null ? (DeferredRenderingNode) root.getNode(DistrictNetworkHoverInfoStyle.HOVER_INFO_DEFERRED) : null; + if (deferred != null) + deferred.deferNode(g.getTransform(), this); + else + renderDeferred(g); + } + + @Override + public void renderDeferred(Graphics2D g) { AffineTransform ot = g.getTransform(); Font of = g.getFont(); doRender(g); @@ -50,7 +67,9 @@ public class DistrictNetworkHoverInfoNode extends G2DNode implements HoverSensit } private void doRender(Graphics2D g) { - g.translate(origin.getX(), origin.getY()); + g.transform(MapScalingTransform.INVERSE); + g.translate(mousePosition.getX(), mousePosition.getY()); + //g.translate(origin.getX(), origin.getY()); double scale = 1.5 / g.getTransform().getScaleX(); g.scale(scale, scale); @@ -112,6 +131,11 @@ public class DistrictNetworkHoverInfoNode extends G2DNode implements HoverSensit return changed; } + @Override + public void setMousePosition(Point2D p) { + mousePosition = p; + } + @Override public void delete() { super.delete();