From 8ecb36e44d4932a27265cabfc46aacfc9fbde8a1 Mon Sep 17 00:00:00 2001 From: Martin Steiger Date: Sun, 19 Dec 2021 12:45:14 +0100 Subject: [PATCH] Fix offset error with Graphics2D translate --- .../sample4_fancy/FancyWaypointRenderer.java | 17 +++++++++++++++-- .../viewer/DefaultWaypointRenderer.java | 13 ++++++++----- .../org/jxmapviewer/viewer/WaypointPainter.java | 7 ------- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/examples/src/sample4_fancy/FancyWaypointRenderer.java b/examples/src/sample4_fancy/FancyWaypointRenderer.java index f0b99d8..5cfb94f 100644 --- a/examples/src/sample4_fancy/FancyWaypointRenderer.java +++ b/examples/src/sample4_fancy/FancyWaypointRenderer.java @@ -12,6 +12,7 @@ import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics2D; +import java.awt.Rectangle; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import java.net.URL; @@ -98,7 +99,12 @@ public void paintWaypoint(Graphics2D g, JXMapViewer viewer, MyWaypoint w) int x = (int)point.getX(); int y = (int)point.getY(); - g.drawImage(myImg, x -myImg.getWidth() / 2, y -myImg.getHeight(), null); + Rectangle viewportBounds = viewer.getViewportBounds(); + + int dx = (int) -viewportBounds.getX(); + int dy = (int) -viewportBounds.getY(); + + g.drawImage(myImg, x -myImg.getWidth() / 2 + dx, y -myImg.getHeight() + dy, null); String label = w.getLabel(); @@ -109,7 +115,14 @@ public void paintWaypoint(Graphics2D g, JXMapViewer viewer, MyWaypoint w) int th = 1 + metrics.getAscent(); // g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g.drawString(label, x - tw / 2, y + th - myImg.getHeight()); + g.drawString(label, x - tw / 2 + dx, y + th - myImg.getHeight() + dy); + + + // paints a blue circle with an internal white circle + g.setColor(Color.BLUE); + g.fillOval(x-7+dx, y-7+dy, 14, 14); + g.setColor(Color.WHITE); + g.fillOval(x-4+dx, y-4+dy, 8, 8); g.dispose(); } diff --git a/jxmapviewer2/src/main/java/org/jxmapviewer/viewer/DefaultWaypointRenderer.java b/jxmapviewer2/src/main/java/org/jxmapviewer/viewer/DefaultWaypointRenderer.java index 505c0f4..f11df2a 100644 --- a/jxmapviewer2/src/main/java/org/jxmapviewer/viewer/DefaultWaypointRenderer.java +++ b/jxmapviewer2/src/main/java/org/jxmapviewer/viewer/DefaultWaypointRenderer.java @@ -10,6 +10,7 @@ package org.jxmapviewer.viewer; import java.awt.Graphics2D; +import java.awt.Rectangle; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; @@ -26,7 +27,7 @@ public class DefaultWaypointRenderer implements WaypointRenderer { private static final Log log = LogFactory.getLog(DefaultWaypointRenderer.class); - + private BufferedImage img = null; /** @@ -51,10 +52,12 @@ public void paintWaypoint(Graphics2D g, JXMapViewer map, Waypoint w) return; Point2D point = map.getTileFactory().geoToPixel(w.getPosition(), map.getZoom()); - - int x = (int)point.getX() -img.getWidth() / 2; - int y = (int)point.getY() -img.getHeight(); - + + Rectangle viewportBounds = map.getViewportBounds(); + + int x = (int)(point.getX() -img.getWidth() / 2 -viewportBounds.getX()); + int y = (int)(point.getY() -img.getHeight() -viewportBounds.getY()); + g.drawImage(img, x, y, null); } } diff --git a/jxmapviewer2/src/main/java/org/jxmapviewer/viewer/WaypointPainter.java b/jxmapviewer2/src/main/java/org/jxmapviewer/viewer/WaypointPainter.java index 9034160..8623d92 100644 --- a/jxmapviewer2/src/main/java/org/jxmapviewer/viewer/WaypointPainter.java +++ b/jxmapviewer2/src/main/java/org/jxmapviewer/viewer/WaypointPainter.java @@ -74,17 +74,10 @@ protected void doPaint(Graphics2D g, JXMapViewer map, int width, int height) return; } - Rectangle viewportBounds = map.getViewportBounds(); - - g.translate(-viewportBounds.getX(), -viewportBounds.getY()); - for (W w : getWaypoints()) { renderer.paintWaypoint(g, map, w); } - - g.translate(viewportBounds.getX(), viewportBounds.getY()); - } }