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; import org.simantics.scenegraph.utils.DPIUtil; 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); g2d.setTransform(new AffineTransform()); // do the rendering magic Font rulerFont = new Font("Tahoma", Font.PLAIN, DPIUtil.upscale(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 \u00A9 OpenStreetMap contributors"; g2d.setFont(rulerFont); 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; } }