Move listener class outside of MainWindow.

This commit is contained in:
Holt59
2018-02-24 14:12:21 +01:00
parent c624fd9dfd
commit 164a9d4494
6 changed files with 218 additions and 163 deletions

View File

@@ -1,8 +1,6 @@
package org.insa.graphics.drawing;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseWheelEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
@@ -17,10 +15,9 @@ import org.insa.graph.Graph;
import org.insa.graph.Path;
import org.insa.graph.Point;
import org.insa.graphics.drawing.utils.MarkerUtils;
import org.insa.graphics.drawing.utils.PolylineAutoScaling;
import org.mapsforge.core.graphics.Bitmap;
import org.mapsforge.core.graphics.GraphicFactory;
import org.mapsforge.core.graphics.Paint;
import org.mapsforge.core.graphics.Style;
import org.mapsforge.core.model.BoundingBox;
import org.mapsforge.core.model.LatLong;
import org.mapsforge.core.model.MapPosition;
@@ -60,80 +57,14 @@ public class MapViewDrawing extends MapView implements Drawing {
// List of listeners.
private ArrayList<DrawingClickListener> drawingClickListeners = new ArrayList<>();
// Tile size.
int tileSize;
// Extra layers...
private static class FixedStrokeWidthLayer {
public Paint paint;
public int width;
public FixedStrokeWidthLayer(Paint paint, int width) {
this.paint = paint;
this.width = width;
}
};
ArrayList<FixedStrokeWidthLayer> extraLayers = new ArrayList<>();
// Tile size
private int tileSize;
public MapViewDrawing() {
getMapScaleBar().setVisible(true);
this.tileSize = DEFAULT_TILE_SIZE;
DisplayModel model = getModel().displayModel;
model.setFixedTileSize(tileSize);
addMouseWheelListener(new MouseAdapter() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
for (FixedStrokeWidthLayer f: extraLayers) {
f.paint.setStrokeWidth(getStrokeWidth(f.width));
}
}
});
}
/**
* @param color
* @return
*/
protected int convertColor(Color color) {
return GRAPHIC_FACTORY.createColor(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue());
}
/**
* @param width
* @return
*/
private int getStrokeWidth(int width) {
byte zoomLevel = getModel().mapViewPosition.getZoomLevel();
int mul = 2;
if (zoomLevel < 8) {
mul = 1;
}
else {
mul += 2 * (zoomLevel - 8) / 3;
}
return width * mul;
}
/**
* @param width
* @param color
* @return
*/
private Paint createPaintStroke(int width, Color color) {
Paint paintStroke = AwtGraphicFactory.INSTANCE.createPaint();
paintStroke.setStyle(Style.STROKE);
if (width != 0) {
paintStroke.setStrokeWidth(getStrokeWidth(width));
}
if (color != null) {
paintStroke.setColor(convertColor(color));
}
return paintStroke;
this.tileSize = DEFAULT_TILE_SIZE;
model.setFixedTileSize(this.tileSize);
}
/**
@@ -207,7 +138,6 @@ public class MapViewDrawing extends MapView implements Drawing {
@Override
public void clear() {
getLayerManager().getLayers().clear();
extraLayers.clear();
repaint();
}
@@ -223,8 +153,7 @@ public class MapViewDrawing extends MapView implements Drawing {
@Override
public void drawLine(Point from, Point to, int width, Color color) {
Paint paintStroke = createPaintStroke(width, color);
Polyline line = new Polyline(paintStroke, AwtGraphicFactory.INSTANCE);
Polyline line = new PolylineAutoScaling(width, color);
line.getLatLongs().add(convertPoint(from));
line.getLatLongs().add(convertPoint(to));
getLayerManager().getLayers().add(line);
@@ -281,16 +210,11 @@ public class MapViewDrawing extends MapView implements Drawing {
@Override
public void drawPath(Path path, Color color, boolean markers) {
Paint paintStroke = createPaintStroke(1, DEFAULT_PATH_COLOR);
Polyline line = new Polyline(paintStroke, AwtGraphicFactory.INSTANCE);
PolylineAutoScaling line = new PolylineAutoScaling(1, DEFAULT_PATH_COLOR);
for (Arc arc: path.getArcs()) {
ArrayList<Point> points = arc.getPoints();
for (int i = 0; i < points.size(); ++i) {
line.getLatLongs().add(new LatLong(points.get(i).getLatitude(), points.get(i).getLongitude()));
}
line.add(arc.getPoints());
}
getLayerManager().getLayers().add(line);
extraLayers.add(new FixedStrokeWidthLayer(paintStroke, 1));
if (markers) {
drawMarker(path.getOrigin().getPoint(), DEFAULT_PATH_COLOR);
drawMarker(path.getDestination().getPoint(), DEFAULT_PATH_COLOR);

View File

@@ -0,0 +1,35 @@
package org.insa.graphics.drawing.utils;
import java.awt.Color;
import org.mapsforge.core.graphics.GraphicFactory;
import org.mapsforge.map.awt.graphics.AwtGraphicFactory;
public class PaintUtils {
// Graphic factory.
private static final GraphicFactory GRAPHIC_FACTORY = AwtGraphicFactory.INSTANCE;
/**
* @param color
* @return
*/
public static int convertColor(Color color) {
return GRAPHIC_FACTORY.createColor(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue());
}
/**
* @param width
* @return
*/
public static int getStrokeWidth(int width, byte zoomLevel) {
int mul = 2;
if (zoomLevel < 8) {
mul = 1;
}
else {
mul += 2 * (zoomLevel - 8) / 3;
}
return width * mul;
}
}

View File

@@ -0,0 +1,58 @@
package org.insa.graphics.drawing.utils;
import java.awt.Color;
import java.util.ArrayList;
import org.insa.graph.Point;
import org.mapsforge.core.graphics.Canvas;
import org.mapsforge.core.graphics.GraphicFactory;
import org.mapsforge.core.model.BoundingBox;
import org.mapsforge.core.model.LatLong;
import org.mapsforge.map.awt.graphics.AwtGraphicFactory;
import org.mapsforge.map.layer.overlay.Polyline;
public class PolylineAutoScaling extends Polyline {
// Graphic factory.
private static final GraphicFactory GRAPHIC_FACTORY = AwtGraphicFactory.INSTANCE;
// Original width of the polyline.
private final int width;
/**
* @param width
* @param color
*/
public PolylineAutoScaling(int width, Color color) {
super(GRAPHIC_FACTORY.createPaint(), GRAPHIC_FACTORY);
getPaintStroke().setColor(PaintUtils.convertColor(color));
this.width = width;
}
/**
* @param point
*/
public void add(Point point) {
getLatLongs().add(new LatLong(point.getLatitude(), point.getLongitude()));
}
/**
* @param points
*/
public void add(ArrayList<Point> points) {
for (Point point: points) {
add(point);
}
}
@Override
public synchronized void draw(BoundingBox boundingBox, byte zoomLevel, Canvas canvas,
org.mapsforge.core.model.Point topLeftPoint) {
// Update paint stroke with width for level
this.getPaintStroke().setStrokeWidth(PaintUtils.getStrokeWidth(width, zoomLevel));
super.draw(boundingBox, zoomLevel, canvas, topLeftPoint);
}
}