package org.simantics.maps.sg; import java.awt.Color; import java.awt.Composite; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; public class MapAttributionNode extends MapInfoNode { private static final long serialVersionUID = 7994492218791569147L; @Override public void render(Graphics2D g2d) { if (!enabled) return; AffineTransform ot = g2d.getTransform(); g2d.setTransform(new AffineTransform()); Rectangle2D controlBounds = g2d.getClipBounds(); if (controlBounds == null) return; // FIXME g2d.setFont(MapInfoConstants.getInfoFont()); FontMetrics fm = g2d.getFontMetrics(); Rectangle2D r = fm.getStringBounds(MapInfoConstants.ATTRIBUTION, g2d); double yOffsetFromBottom = getMapInfoNextY(g2d); double frameMaxX = controlBounds.getMaxX(); double frameMaxY = controlBounds.getMaxY() - yOffsetFromBottom; int frameWidth = (int) Math.ceil(r.getWidth()) + MapInfoConstants.TEXT_HORIZONTAL_MARGIN * 2; int frameHeight = (int) Math.ceil(r.getHeight()) + MapInfoConstants.TEXT_VERTICAL_MARGIN * 2; Composite oc = g2d.getComposite(); g2d.setComposite(MapInfoConstants.INFO_COMPOSITE); g2d.setStroke(MapInfoConstants.INFO_STROKE); g2d.setColor(MapInfoConstants.TEXT_BG_COLOR); rect.setFrameFromDiagonal(frameMaxX - frameWidth, frameMaxY - frameHeight, frameMaxX, frameMaxY); g2d.fill(rect); g2d.setColor(Color.BLACK); g2d.drawString(MapInfoConstants.ATTRIBUTION, (int) rect.getMinX() + MapInfoConstants.TEXT_HORIZONTAL_MARGIN, (int) frameMaxY - fm.getMaxDescent() - MapInfoConstants.TEXT_VERTICAL_MARGIN); g2d.setComposite(oc); g2d.setTransform(ot); setMapInfoNextY(g2d, yOffsetFromBottom + rect.getHeight() + MapInfoConstants.INFO_ROW_SPACING); } }