package com.github.pfichtner.jrunalyser.ui.map.wprenderer; import java.awt.BasicStroke; import java.awt.Font; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import org.jdesktop.swingx.JXMapViewer; import org.jdesktop.swingx.mapviewer.Waypoint; import org.jdesktop.swingx.mapviewer.WaypointRenderer; import com.github.pfichtner.jrunalyser.ui.map.theme.Theme; public abstract class AbstractSegmentBorderWaypointRenderer<T extends Waypoint> implements WaypointRenderer { protected final Theme theme; protected final Font font; private final BasicStroke stroke = new BasicStroke(1); public AbstractSegmentBorderWaypointRenderer(Theme theme, Font font) { this.theme = theme; this.font = font; } @Override public boolean paintWaypoint(Graphics2D g, JXMapViewer jxMapViewer, Waypoint waypoint) { int r = this.font.getSize() - 2; @SuppressWarnings("unchecked") T casted = (T) waypoint; drawCircleBackground(g, casted, r); drawCircleBorder(g, casted, r - 2); return false; } protected void drawCircleBackground(Graphics2D g, T waypoint, int r) { g.setColor(this.theme.getBgColor()); g.setStroke(this.stroke); g.fill(new Ellipse2D.Double(-r, -r, 2 * r + 1, 2 * r + 1)); } protected void drawCircleBorder(Graphics2D g, T waypoint, int r) { g.setColor(this.theme.getFgColor()); g.setStroke(this.stroke); g.draw(new Ellipse2D.Double(-r, -r, 2 * r + 1, 2 * r + 1)); } }