]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.maps/src/org/simantics/maps/sg/MapAttributionNode.java
Add location & zoom node for network diagram - also OSM attribution
[simantics/district.git] / org.simantics.district.maps / src / org / simantics / maps / sg / MapAttributionNode.java
diff --git a/org.simantics.district.maps/src/org/simantics/maps/sg/MapAttributionNode.java b/org.simantics.district.maps/src/org/simantics/maps/sg/MapAttributionNode.java
new file mode 100644 (file)
index 0000000..66543aa
--- /dev/null
@@ -0,0 +1,83 @@
+package org.simantics.maps.sg;
+
+import java.awt.AlphaComposite;
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+
+import org.simantics.scenegraph.g2d.G2DNode;
+
+public class MapAttributionNode extends G2DNode {
+
+    private static final long serialVersionUID = 7994492218791569147L;
+
+    private static final Color GRAY              = new Color(100, 100, 100);
+
+    protected boolean enabled = true;
+
+    @Override
+    public void render(Graphics2D g2d) {
+        if (!enabled)
+            return;
+        
+        AffineTransform ot = g2d.getTransform();
+        Color originalColor = g2d.getColor();
+        g2d.transform(transform);
+        
+        AffineTransform tr = g2d.getTransform();
+        
+        g2d.setTransform(new AffineTransform());
+        // do the rendering magic
+        
+        Font rulerFont = new Font("Tahoma", Font.PLAIN, 9);
+        
+        //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g2d.setStroke(new BasicStroke(1));
+        g2d.setColor(new Color(0.9f, 0.9f, 0.9f, 0.75f));
+        
+        Rectangle2D bounds = g2d.getClipBounds();
+        if (bounds == null)
+            return; // FIXME
+
+        String str = "Map data © OpenStreetMap contributors";
+        FontMetrics fm = g2d.getFontMetrics();
+        Rectangle2D r = fm.getStringBounds(str, g2d);
+
+        double pixels = r.getWidth();
+        double scaleRight = bounds.getMaxX();
+        double newScaleLeft = scaleRight - pixels;
+        double y = bounds.getMaxY();
+        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
+        
+        
+        Rectangle2D vertical = new Rectangle2D.Double(newScaleLeft - 10, y - 15, pixels + 10, 15);
+        g2d.fill(vertical);
+        
+        g2d.setColor(GRAY);
+        g2d.setFont(rulerFont);
+        
+        
+        g2d.setColor(Color.BLACK);
+        g2d.drawString(str, (int)newScaleLeft - 5, (int)y - 5);
+        
+        g2d.setColor(originalColor);
+        g2d.setTransform(ot);
+    }
+
+    @Override
+    public Rectangle2D getBoundsInLocal() {
+        return null;
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+}