--- /dev/null
+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;
+ }
+}