From 6dd4f80bdd6d7e462422002427ea3ae997c6ade9 Mon Sep 17 00:00:00 2001
From: Longri <www.longri.de@googlemail.com>
Date: Fri, 24 Jan 2014 09:29:12 +0100
Subject: [PATCH] draw symbols with scaling

---
 .../src/main/java/org/mapsforge/core/graphics/Bitmap.java     |  5 +++++
 .../org/mapsforge/map/android/graphics/AndroidBitmap.java     | 11 ++++++++++-
 .../org/mapsforge/map/android/graphics/AndroidSvgBitmap.java  |  5 +++++
 .../src/main/java/org/mapsforge/map/awt/AwtBitmap.java        | 10 +++++++++-
 .../java/org/mapsforge/map/layer/renderer/CanvasRasterer.java |  9 ++++++++-
 .../org/mapsforge/map/layer/renderer/DatabaseRenderer.java    |  6 +++---
 .../org/mapsforge/map/layer/renderer/TileRendererLayer.java   |  4 ++--
 7 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/mapsforge-core/src/main/java/org/mapsforge/core/graphics/Bitmap.java b/mapsforge-core/src/main/java/org/mapsforge/core/graphics/Bitmap.java
index 00ee8d1..6105753 100644
--- a/mapsforge-core/src/main/java/org/mapsforge/core/graphics/Bitmap.java
+++ b/mapsforge-core/src/main/java/org/mapsforge/core/graphics/Bitmap.java
@@ -37,4 +37,9 @@ public interface Bitmap {
 	void scaleTo(int width, int height);
 
 	void setBackgroundColor(int color);
+	
+	/**
+	 * @return true, if this bitmap not scaled.
+	 */
+	boolean mustScale();
 }
diff --git a/mapsforge-map-android/src/main/java/org/mapsforge/map/android/graphics/AndroidBitmap.java b/mapsforge-map-android/src/main/java/org/mapsforge/map/android/graphics/AndroidBitmap.java
index 619aa3f..824bd3f 100644
--- a/mapsforge-map-android/src/main/java/org/mapsforge/map/android/graphics/AndroidBitmap.java
+++ b/mapsforge-map-android/src/main/java/org/mapsforge/map/android/graphics/AndroidBitmap.java
@@ -61,7 +61,8 @@ public class AndroidBitmap implements Bitmap {
 	}
 
     protected android.graphics.Bitmap bitmap;
-
+    protected boolean isScaled = false;
+    
     protected AndroidBitmap() {
         if (AndroidGraphicFactory.DEBUG_BITMAPS) {
             instances.incrementAndGet();
@@ -157,6 +158,7 @@ public class AndroidBitmap implements Bitmap {
                     height, true);
             destroy();
             this.bitmap = scaledBitmap;
+            isScaled = true;
         }
     }
 
@@ -217,4 +219,11 @@ public class AndroidBitmap implements Bitmap {
 		return false;
 	}
 
+	@Override
+	public boolean mustScale() {
+		
+		if(isScaled)return false;
+			return true;
+	}
+
 }
diff --git a/mapsforge-map-android/src/main/java/org/mapsforge/map/android/graphics/AndroidSvgBitmap.java b/mapsforge-map-android/src/main/java/org/mapsforge/map/android/graphics/AndroidSvgBitmap.java
index 4a9fb0c..f70feb7 100644
--- a/mapsforge-map-android/src/main/java/org/mapsforge/map/android/graphics/AndroidSvgBitmap.java
+++ b/mapsforge-map-android/src/main/java/org/mapsforge/map/android/graphics/AndroidSvgBitmap.java
@@ -67,4 +67,9 @@ class AndroidSvgBitmap extends AndroidResourceBitmap {
  		this.bitmap = getResourceBitmap(inputStream, hash, scaleFactor);
 	}
 
+	@Override
+	public boolean mustScale() {
+		
+		return false;
+	}
 }
diff --git a/mapsforge-map-awt/src/main/java/org/mapsforge/map/awt/AwtBitmap.java b/mapsforge-map-awt/src/main/java/org/mapsforge/map/awt/AwtBitmap.java
index a3b0597..5e1c4f3 100644
--- a/mapsforge-map-awt/src/main/java/org/mapsforge/map/awt/AwtBitmap.java
+++ b/mapsforge-map-awt/src/main/java/org/mapsforge/map/awt/AwtBitmap.java
@@ -25,7 +25,8 @@ import org.mapsforge.core.graphics.Bitmap;
 
 class AwtBitmap implements Bitmap {
 	final BufferedImage bufferedImage;
-
+    protected boolean isScaled = false;
+	
 	AwtBitmap(InputStream inputStream) throws IOException {
 		this.bufferedImage = ImageIO.read(inputStream);
 	}
@@ -62,6 +63,7 @@ class AwtBitmap implements Bitmap {
 	@Override
 	public void scaleTo(int width, int height) {
 		// TODO implement
+		isScaled = true;
 	}
 
 	@Override
@@ -69,4 +71,10 @@ class AwtBitmap implements Bitmap {
 		// TODO implement
 	}
 
+	@Override
+	public boolean mustScale() {
+		
+		if(isScaled)return false;
+			return true;
+	}
 }
diff --git a/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/CanvasRasterer.java b/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/CanvasRasterer.java
index bc87c96..48177d3 100644
--- a/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/CanvasRasterer.java
+++ b/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/CanvasRasterer.java
@@ -24,16 +24,19 @@ import org.mapsforge.core.graphics.GraphicUtils;
 import org.mapsforge.core.graphics.Matrix;
 import org.mapsforge.core.graphics.Path;
 import org.mapsforge.core.model.Point;
+import org.mapsforge.map.model.DisplayModel;
 
 class CanvasRasterer {
 	private final Canvas canvas;
 	private final Path path;
 	private final Matrix symbolMatrix;
+	private final DisplayModel displayModel;
 
-	CanvasRasterer(GraphicFactory graphicFactory) {
+	CanvasRasterer(GraphicFactory graphicFactory, DisplayModel displayModel) {
 		this.canvas = graphicFactory.createCanvas();
 		this.symbolMatrix = graphicFactory.createMatrix();
 		this.path = graphicFactory.createPath();
+		this.displayModel = displayModel;
 	}
 
 	void destroy() {
@@ -75,6 +78,10 @@ class CanvasRasterer {
 				this.symbolMatrix.rotate(symbolContainer.theta);
 			}
 
+			if(symbolContainer.symbol.mustScale()){
+				this.symbolMatrix.scale(displayModel.getScaleFactor(), displayModel.getScaleFactor());
+			}
+			
 			this.canvas.drawBitmap(symbolContainer.symbol, this.symbolMatrix);
 		}
 	}
diff --git a/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/DatabaseRenderer.java b/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/DatabaseRenderer.java
index 13ace43..32f7007 100644
--- a/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/DatabaseRenderer.java
+++ b/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/DatabaseRenderer.java
@@ -82,7 +82,7 @@ public class DatabaseRenderer implements RenderCallback {
 	private RendererJob currentRendererJob;
 	private List<List<ShapePaintContainer>> drawingLayers;
 	private final GraphicFactory graphicFactory;
-
+	
 	private final LabelPlacement labelPlacement;
 	private final MapDatabase mapDatabase;
 	private List<PointTextContainer> nodes;
@@ -103,11 +103,11 @@ public class DatabaseRenderer implements RenderCallback {
 	 * @param mapDatabase
 	 *            the MapDatabase from which the map data will be read.
 	 */
-	public DatabaseRenderer(MapDatabase mapDatabase, GraphicFactory graphicFactory) {
+	public DatabaseRenderer(MapDatabase mapDatabase, GraphicFactory graphicFactory, DisplayModel displayModel) {
 		this.mapDatabase = mapDatabase;
 		this.graphicFactory = graphicFactory;
 
-		this.canvasRasterer = new CanvasRasterer(graphicFactory);
+		this.canvasRasterer = new CanvasRasterer(graphicFactory, displayModel);
 		this.labelPlacement = new LabelPlacement();
 
 		this.ways = new ArrayList<List<List<ShapePaintContainer>>>(LAYERS);
diff --git a/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/TileRendererLayer.java b/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/TileRendererLayer.java
index 32d124d..feb478b 100644
--- a/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/TileRendererLayer.java
+++ b/mapsforge-map/src/main/java/org/mapsforge/map/layer/renderer/TileRendererLayer.java
@@ -39,11 +39,11 @@ public class TileRendererLayer extends TileLayer<RendererJob> {
 	private float textScale;
 	private XmlRenderTheme xmlRenderTheme;
 
-	public TileRendererLayer(TileCache tileCache, MapViewPosition mapViewPosition, boolean isTransparent, GraphicFactory graphicFactory) {
+	public TileRendererLayer(TileCache tileCache, MapViewPosition mapViewPosition, boolean isTransparent, GraphicFactory graphicFactory, DisplayModel displayModel) {
 		super(tileCache, mapViewPosition, graphicFactory.createMatrix(), isTransparent);
 
 		this.mapDatabase = new MapDatabase();
-		this.databaseRenderer = new DatabaseRenderer(this.mapDatabase, graphicFactory);
+		this.databaseRenderer = new DatabaseRenderer(this.mapDatabase, graphicFactory, displayModel);
 
 		this.textScale = 1;
 	}
-- 
1.8.3.msysgit.0

