mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-06 19:12:23 +00:00
Using MapMouseMoveHandler instead of the canvas to enable showing tool tip across overlays.
This commit is contained in:
1 parent
4aba5b1bbe
commit
2c5d82a2ae
4 files changed
+119
-15
No files matched your search
+4
-4
@@ -98,14 +98,14 @@ public class PathCanvasOverlay extends WindFieldCanvasOverlay {
|
||||
LatLng positionLatLng = LatLng.newInstance(position.latDeg, position.lngDeg);
|
||||
Point canvasPositionInPx = getMap().convertLatLngToDivPixel(positionLatLng);
|
||||
|
||||
int x1 = canvasPositionInPx.getX() - this.widgetPosLeft;
|
||||
int y1 = canvasPositionInPx.getY() - this.widgetPosTop;
|
||||
int x1 = canvasPositionInPx.getX() - this.getWidgetPosLeft();
|
||||
int y1 = canvasPositionInPx.getY() - this.getWidgetPosTop();
|
||||
|
||||
position = p2.position;
|
||||
positionLatLng = LatLng.newInstance(position.latDeg, position.lngDeg);
|
||||
canvasPositionInPx = getMap().convertLatLngToDivPixel(positionLatLng);
|
||||
int x2 = canvasPositionInPx.getX() - this.widgetPosLeft;
|
||||
int y2 = canvasPositionInPx.getY() - this.widgetPosTop;
|
||||
int x2 = canvasPositionInPx.getX() - this.getWidgetPosLeft();
|
||||
int y2 = canvasPositionInPx.getY() - this.getWidgetPosTop();
|
||||
|
||||
this.pointColor = pathColor;
|
||||
drawPoint(x1, y1);
|
||||
|
||||
+4
-4
@@ -85,7 +85,7 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay {
|
||||
}
|
||||
if (startPoint != null) {
|
||||
Point point = getMap().convertLatLngToDivPixel(startPoint);
|
||||
drawPointWithText(point.getX() - widgetPosLeft, point.getY() - widgetPosTop, "Start");
|
||||
drawPointWithText(point.getX() - getWidgetPosLeft(), point.getY() - getWidgetPosTop(), "Start");
|
||||
startMarker = new Marker(startPoint);
|
||||
map.addOverlay(startMarker);
|
||||
|
||||
@@ -99,7 +99,7 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay {
|
||||
}
|
||||
if (endPoint != null) {
|
||||
Point point = getMap().convertLatLngToDivPixel(endPoint);
|
||||
drawPointWithText(point.getX() - widgetPosLeft, point.getY() - widgetPosTop, "End");
|
||||
drawPointWithText(point.getX() - getWidgetPosLeft(), point.getY() - getWidgetPosTop(), "End");
|
||||
endMarker = new Marker(endPoint);
|
||||
map.addOverlay(endMarker);
|
||||
|
||||
@@ -175,8 +175,8 @@ public class RaceCourseCanvasOverlay extends FullCanvasOverlay {
|
||||
if (startPoint != null) {
|
||||
Point s = map.convertLatLngToDivPixel(startPoint);
|
||||
Point e = map.convertLatLngToDivPixel(currentPoint);
|
||||
drawLine(s.getX() - widgetPosLeft, s.getY() - widgetPosTop, e.getX() - widgetPosLeft, e.getY()
|
||||
- widgetPosTop, 1, color);
|
||||
drawLine(s.getX() - getWidgetPosLeft(), s.getY() - getWidgetPosTop(), e.getX() - getWidgetPosLeft(), e.getY()
|
||||
- getWidgetPosTop(), 1, color);
|
||||
double distanceInNmi = startPoint.distanceFrom(currentPoint)/Mile.METERS_PER_NAUTICAL_MILE;
|
||||
canvas.setTitle("Distance (nmi) " + NumberFormat.getFormat("0.00").format(distanceInNmi));
|
||||
}
|
||||
|
||||
+20
-7
@@ -6,6 +6,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.google.gwt.maps.client.MapWidget;
|
||||
import com.google.gwt.maps.client.geom.LatLng;
|
||||
import com.google.gwt.maps.client.geom.Point;
|
||||
import com.google.gwt.maps.client.overlay.Overlay;
|
||||
@@ -15,7 +16,7 @@ import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.racemap.FullCanvasOverlay;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.ToolTip;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.WindFieldMouseMoveHandler;
|
||||
import com.sap.sailing.gwt.ui.simulator.util.WindFieldMapMouseMoveHandler;
|
||||
|
||||
/**
|
||||
* A google map overlay based on a HTML5 canvas for drawing a wind field. The overlay covers the whole map and displays
|
||||
@@ -33,7 +34,7 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay {
|
||||
protected Map<ToolTip, WindDTO> windFieldPoints;
|
||||
protected String arrowColor = "Blue";
|
||||
protected String arrowHeadColor = "Blue";
|
||||
protected WindFieldMouseMoveHandler mmHandler;
|
||||
protected WindFieldMapMouseMoveHandler mmHandler;
|
||||
|
||||
private static Logger logger = Logger.getLogger("com.sap.sailing");
|
||||
|
||||
@@ -41,10 +42,11 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay {
|
||||
super();
|
||||
windFieldPoints = new HashMap<ToolTip, WindDTO>();
|
||||
|
||||
mmHandler = new WindFieldMouseMoveHandler(getCanvas());
|
||||
mmHandler = new WindFieldMapMouseMoveHandler(this);
|
||||
|
||||
mmHandler.setWindFieldPoints(windFieldPoints);
|
||||
getCanvas().addMouseMoveHandler(mmHandler);
|
||||
// getCanvas().addMouseMoveHandler(mmHandler);
|
||||
//getMap().addMapMouseMoveHandler(mmHandler);
|
||||
}
|
||||
|
||||
public void setWindField(WindFieldDTO wl) {
|
||||
@@ -56,7 +58,18 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay {
|
||||
this.arrowHeadColor = arrowHeadColor;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initialize(MapWidget map) {
|
||||
super.initialize(map);
|
||||
map.addMapMouseMoveHandler(mmHandler);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void remove() {
|
||||
getMap().removeMapMouseMoveHandler(mmHandler);
|
||||
super.remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Overlay copy() {
|
||||
return new WindFieldCanvasOverlay();
|
||||
@@ -75,7 +88,7 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay {
|
||||
}
|
||||
|
||||
private void clear() {
|
||||
canvas.getContext2d().clearRect(widgetPosLeft, widgetPosTop, canvas.getCoordinateSpaceWidth(),
|
||||
canvas.getContext2d().clearRect(getWidgetPosLeft(), getWidgetPosTop(), canvas.getCoordinateSpaceWidth(),
|
||||
canvas.getCoordinateSpaceHeight());
|
||||
windFieldPoints.clear();
|
||||
mmHandler.clear();
|
||||
@@ -111,8 +124,8 @@ public class WindFieldCanvasOverlay extends FullCanvasOverlay {
|
||||
LatLng positionLatLng = LatLng.newInstance(position.latDeg, position.lngDeg);
|
||||
Point canvasPositionInPx = getMap().convertLatLngToDivPixel(positionLatLng);
|
||||
|
||||
int x = canvasPositionInPx.getX() - this.widgetPosLeft;
|
||||
int y = canvasPositionInPx.getY() - this.widgetPosTop;
|
||||
int x = canvasPositionInPx.getX() - this.getWidgetPosLeft();
|
||||
int y = canvasPositionInPx.getY() - this.getWidgetPosTop();
|
||||
|
||||
windFieldPoints.put(new ToolTip(x, y), windDTO);
|
||||
|
||||
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package com.sap.sailing.gwt.ui.simulator.util;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.google.gwt.canvas.client.Canvas;
|
||||
import com.google.gwt.canvas.dom.client.Context2d;
|
||||
import com.google.gwt.canvas.dom.client.ImageData;
|
||||
import com.google.gwt.event.dom.client.MouseMoveEvent;
|
||||
import com.google.gwt.event.dom.client.MouseMoveHandler;
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.maps.client.event.MapMouseMoveHandler;
|
||||
import com.google.gwt.maps.client.geom.LatLng;
|
||||
import com.google.gwt.maps.client.geom.Point;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.racemap.FullCanvasOverlay;
|
||||
|
||||
/**
|
||||
* To handle MouseMoveEvent to display tool tips around WindDTO objects in a wind field
|
||||
*
|
||||
* @author Nidhi Sawhney(D054070)
|
||||
*
|
||||
*/
|
||||
public class WindFieldMapMouseMoveHandler implements MapMouseMoveHandler {
|
||||
|
||||
private FullCanvasOverlay canvasOverlay;
|
||||
private Map<ToolTip, WindDTO> windFieldPoints = null;
|
||||
private ImageData lastImageData = null;
|
||||
private double lastToolx;
|
||||
private double lastTooly;
|
||||
private static Logger logger = Logger.getLogger("com.sap.sailing");
|
||||
|
||||
|
||||
public WindFieldMapMouseMoveHandler(FullCanvasOverlay canvasOverlay) {
|
||||
super();
|
||||
this.canvasOverlay = canvasOverlay;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
lastImageData = null;
|
||||
}
|
||||
|
||||
public void setWindFieldPoints(Map<ToolTip, WindDTO> windFieldPoints) {
|
||||
this.windFieldPoints = windFieldPoints;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseMove(MapMouseMoveEvent event) {
|
||||
//logger.info("In MouseMove");
|
||||
|
||||
if (windFieldPoints == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
LatLng latLng = event.getLatLng();
|
||||
Point pointP = event.getSender().convertLatLngToDivPixel(latLng);
|
||||
double x = pointP.getX() - canvasOverlay.getWidgetPosLeft();
|
||||
double y = pointP.getY() - canvasOverlay.getWidgetPosTop();
|
||||
ToolTip point = new ToolTip(x, y);
|
||||
Context2d context2d = canvasOverlay.getCanvas().getContext2d();
|
||||
if (lastImageData != null) {
|
||||
context2d.putImageData(lastImageData, lastToolx, lastTooly);
|
||||
}
|
||||
|
||||
if (windFieldPoints.containsKey(point)) {
|
||||
//logger.info("Found Point");
|
||||
lastToolx = x;
|
||||
lastTooly = y;
|
||||
lastImageData = context2d.getImageData(x, y, ToolTip.toolRectW, ToolTip.toolRectH);
|
||||
|
||||
|
||||
WindDTO windDTO = windFieldPoints.get(point);
|
||||
context2d.setFillStyle("#4f4f4f");
|
||||
context2d.fillRect(x, y, ToolTip.toolRectW, ToolTip.toolRectH);
|
||||
|
||||
context2d.setFillStyle("#FFFFFF");
|
||||
context2d.fillRect(x + 3, y + 3, ToolTip.toolRectW - 6, ToolTip.toolRectH - 6);
|
||||
|
||||
context2d.setFillStyle("Blue");
|
||||
String speedStr = NumberFormat.getFormat("#.00").format(windDTO.trueWindSpeedInKnots);
|
||||
String bearingStr = NumberFormat.getFormat("#.00").format(windDTO.trueWindFromDeg);
|
||||
String ttMsg = speedStr + " kn " + bearingStr + "°";
|
||||
context2d.fillText(ttMsg, x+10,y+15,60);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user