]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.district.maps/src/org/simantics/maps/sg/MapAttributionNode.java
d97d22ebd5eec6dff9388cfefe38b8c02db04160
[simantics/district.git] / org.simantics.district.maps / src / org / simantics / maps / sg / MapAttributionNode.java
1 package org.simantics.maps.sg;
2
3 import java.awt.AlphaComposite;
4 import java.awt.BasicStroke;
5 import java.awt.Color;
6 import java.awt.Font;
7 import java.awt.FontMetrics;
8 import java.awt.Graphics2D;
9 import java.awt.geom.AffineTransform;
10 import java.awt.geom.Rectangle2D;
11
12 import org.simantics.scenegraph.g2d.G2DNode;
13 import org.simantics.scenegraph.utils.DPIUtil;
14
15 public class MapAttributionNode extends G2DNode {
16
17     private static final long serialVersionUID = 7994492218791569147L;
18
19     private static final Color GRAY              = new Color(100, 100, 100);
20
21     protected boolean enabled = true;
22
23     @Override
24     public void render(Graphics2D g2d) {
25         if (!enabled)
26             return;
27         
28         AffineTransform ot = g2d.getTransform();
29         Color originalColor = g2d.getColor();
30         g2d.transform(transform);
31         
32         AffineTransform tr = g2d.getTransform();
33         
34         g2d.setTransform(new AffineTransform());
35         // do the rendering magic
36         
37         Font rulerFont = new Font("Tahoma", Font.PLAIN, DPIUtil.upscale(9));
38         
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));
42         
43         Rectangle2D bounds = g2d.getClipBounds();
44         if (bounds == null)
45             return; // FIXME
46
47         String str = "Map data \u00A9 OpenStreetMap contributors";
48         
49         g2d.setFont(rulerFont);
50         FontMetrics fm = g2d.getFontMetrics();
51         Rectangle2D r = fm.getStringBounds(str, g2d);
52
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));
58         
59         
60         Rectangle2D vertical = new Rectangle2D.Double(newScaleLeft - 10, y - 15, pixels + 10, 15);
61         g2d.fill(vertical);
62         
63         g2d.setColor(GRAY);
64         g2d.setFont(rulerFont);
65         
66         
67         g2d.setColor(Color.BLACK);
68         g2d.drawString(str, (int)newScaleLeft - 5, (int)y - 5);
69         
70         g2d.setColor(originalColor);
71         g2d.setTransform(ot);
72     }
73
74     @Override
75     public Rectangle2D getBoundsInLocal() {
76         return null;
77     }
78
79     public boolean isEnabled() {
80         return enabled;
81     }
82
83     public void setEnabled(boolean enabled) {
84         this.enabled = enabled;
85     }
86 }