package com.github.pfichtner.jrunalyser.ui.map.painter;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.text.DateFormat;
import java.util.Date;
import org.jdesktop.swingx.JXMapViewer;
import org.jdesktop.swingx.painter.Painter;
import com.github.pfichtner.jrunalyser.base.data.stat.Statistics;
import com.github.pfichtner.jrunalyser.base.data.track.Track;
import com.github.pfichtner.jrunalyser.ui.base.Settings;
import com.github.pfichtner.jrunalyser.ui.base.StaticSettings;
import com.github.pfichtner.jrunalyser.ui.format.DistanceFormatter;
import com.github.pfichtner.jrunalyser.ui.format.DurationFormatter;
import com.github.pfichtner.jrunalyser.ui.format.DurationFormatter.Type;
import com.github.pfichtner.jrunalyser.ui.map.theme.Theme;
import com.google.common.collect.Iterables;
public class InfoBoxPainter implements Painter<JXMapViewer> {
private static int add = 5;
private final Track track;
private final Font font;
private final Theme theme;
public InfoBoxPainter(Track track, Theme theme, Font font) {
this.track = track;
this.theme = theme;
this.font = font;
}
public void paint(Graphics2D g, JXMapViewer jxMapViewer, int w, int h) {
Settings settings = StaticSettings.INSTANCE;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
Statistics stats = this.track.getStatistics();
String text = DateFormat.getDateInstance()
.format(new Date(Iterables.get(this.track.getTrackpoints(), 0)
.getTime().longValue()))
+ ": " + new DistanceFormatter( //$NON-NLS-1$
com.github.pfichtner.jrunalyser.ui.format.DistanceFormatter.Type.SHORT)
.format(stats.getDistance().convertTo(
settings.getDistanceUnit()))
+ " " //$NON-NLS-1$
+ new DurationFormatter(Type.SHORT).format(stats.getDuration()
.convertTo(settings.getTimeUnit()));
drawTextBox(g, text, this.font, this.theme.getBgColor(),
this.theme.getFgColor(), 10, 20);
}
private static void drawTextBox(Graphics2D g, String text, Font font,
Color rectColor, Color textColor, int locX, int locY) {
FontRenderContext frc = g.getFontRenderContext();
TextLayout layout = new TextLayout(text, font, frc);
Rectangle2D bounds = layout.getBounds();
g.setColor(rectColor);
drawRect(g, bounds, add, locX, locY);
g.setColor(textColor);
layout.draw(g, locX, locY);
}
private static void drawRect(Graphics2D g, Rectangle2D bounds, int add,
float locX, double locY) {
g.fill(new RoundRectangle2D.Float((float) (bounds.getX()) + locX - add,
(float) (bounds.getY() + locY - add), (float) (bounds
.getWidth()) + 2 * add, (float) (bounds.getHeight())
+ 2 * add, 10, 10));
}
}