1 package org.simantics.maps.sg;
3 import java.awt.AlphaComposite;
4 import java.awt.BasicStroke;
7 import java.awt.FontMetrics;
8 import java.awt.Graphics2D;
9 import java.awt.geom.AffineTransform;
10 import java.awt.geom.Rectangle2D;
12 import org.simantics.scenegraph.g2d.G2DNode;
13 import org.simantics.scenegraph.utils.DPIUtil;
15 public class MapAttributionNode extends G2DNode {
17 private static final long serialVersionUID = 7994492218791569147L;
19 private static final Color GRAY = new Color(100, 100, 100);
21 protected boolean enabled = true;
24 public void render(Graphics2D g2d) {
28 AffineTransform ot = g2d.getTransform();
29 Color originalColor = g2d.getColor();
30 g2d.transform(transform);
32 AffineTransform tr = g2d.getTransform();
34 g2d.setTransform(new AffineTransform());
35 // do the rendering magic
37 Font rulerFont = new Font("Tahoma", Font.PLAIN, DPIUtil.upscale(9));
39 //g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
40 g2d.setStroke(new BasicStroke(1));
41 g2d.setColor(new Color(0.9f, 0.9f, 0.9f, 0.75f));
43 Rectangle2D bounds = g2d.getClipBounds();
47 String str = "Map data \u00A9 OpenStreetMap contributors";
49 g2d.setFont(rulerFont);
50 FontMetrics fm = g2d.getFontMetrics();
51 Rectangle2D r = fm.getStringBounds(str, g2d);
53 double pixels = r.getWidth();
54 double scaleRight = bounds.getMaxX();
55 double newScaleLeft = scaleRight - pixels;
56 double y = bounds.getMaxY();
57 g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
60 Rectangle2D vertical = new Rectangle2D.Double(newScaleLeft - 10, y - 15, pixels + 10, 15);
64 g2d.setFont(rulerFont);
67 g2d.setColor(Color.BLACK);
68 g2d.drawString(str, (int)newScaleLeft - 5, (int)y - 5);
70 g2d.setColor(originalColor);
75 public Rectangle2D getBoundsInLocal() {
79 public boolean isEnabled() {
83 public void setEnabled(boolean enabled) {
84 this.enabled = enabled;