diff options
author | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2015-07-05 15:00:40 +0000 |
---|---|---|
committer | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2015-07-05 15:00:40 +0000 |
commit | 8f5e64c2bfe8fab54b09cbb2c6af40f00b8deab8 (patch) | |
tree | f816b1e55fccd1770e725a00ede27cbf3b9a007a /navit | |
parent | 435c0a8d02ad4adc96394e444ba6322ac7ce95b4 (diff) | |
download | navit-8f5e64c2bfe8fab54b09cbb2c6af40f00b8deab8.tar.gz |
Add:port_android:Support raster maps on Android as described in #1285.|Thank you jandegr
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@6126 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit')
-rw-r--r-- | navit/android/src/org/navitproject/navit/NavitGraphics.java | 43 | ||||
-rw-r--r-- | navit/graphics/android/graphics_android.c | 31 |
2 files changed, 72 insertions, 2 deletions
diff --git a/navit/android/src/org/navitproject/navit/NavitGraphics.java b/navit/android/src/org/navitproject/navit/NavitGraphics.java index ef73a5449..fc4944240 100644 --- a/navit/android/src/org/navitproject/navit/NavitGraphics.java +++ b/navit/android/src/org/navitproject/navit/NavitGraphics.java @@ -27,6 +27,7 @@ import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PointF; @@ -931,6 +932,48 @@ public class NavitGraphics draw_canvas.drawBitmap(bitmap, x, y, paint); } + /* takes an image and draws it on the screen as a prerendered maptile + * + * + * + * @param paint Paint object used to draw the image + * @param count the number of points specified + * @param p0x and p0y specifying the top left point + * @param p1x and p1y specifying the top right point + * @param p2x and p2y specifying the bottom left point, not yet used but kept + * for compatibility with the linux port + * @param bitmap Bitmap object holding the image to draw + * + * TODO make it work with 4 points specified to make it work for 3D mapview, so it can be used + * for small but very detailed maps as well as for large maps with very little detail but large + * coverage. + * TODO make it work with rectangular tiles as well ? + */ + protected void draw_image_warp(Paint paint, int count, int p0x, int p0y, int p1x, int p1y, int p2x, int p2y, Bitmap bitmap) + { + + float width; + float scale; + float deltaY; + float deltaX; + float angle; + Matrix matrix; + + if (count == 3) + { + matrix = new Matrix(); + deltaX = p1x - p0x; + deltaY = p1y - p0y; + width = (float) (Math.sqrt((deltaX * deltaX) + (deltaY * deltaY))); + angle = (float) (Math.atan2(deltaY, deltaX) * 180d / Math.PI); + scale = width / bitmap.getWidth(); + matrix.preScale(scale, scale); + matrix.postTranslate(p0x, p0y); + matrix.postRotate(angle, p0x, p0y); + draw_canvas.drawBitmap(bitmap, matrix, paint); + } + } + /* These constants must be synchronized with enum draw_mode_num in graphics.h. */ public static final int draw_mode_begin = 0; public static final int draw_mode_end = 1; diff --git a/navit/graphics/android/graphics_android.c b/navit/graphics/android/graphics_android.c index 01532695d..362e3d9d0 100644 --- a/navit/graphics/android/graphics_android.c +++ b/navit/graphics/android/graphics_android.c @@ -36,7 +36,10 @@ int dummy; struct graphics_priv { jclass NavitGraphicsClass; - jmethodID NavitGraphics_draw_polyline, NavitGraphics_draw_polygon, NavitGraphics_draw_rectangle, NavitGraphics_draw_circle, NavitGraphics_draw_text, NavitGraphics_draw_image, NavitGraphics_draw_mode, NavitGraphics_draw_drag, NavitGraphics_overlay_disable, NavitGraphics_overlay_resize, NavitGraphics_SetCamera; + jmethodID NavitGraphics_draw_polyline, NavitGraphics_draw_polygon, NavitGraphics_draw_rectangle, + NavitGraphics_draw_circle, NavitGraphics_draw_text, NavitGraphics_draw_image, + NavitGraphics_draw_image_warp, NavitGraphics_draw_mode, NavitGraphics_draw_drag, + NavitGraphics_overlay_disable, NavitGraphics_overlay_resize, NavitGraphics_SetCamera; jclass PaintClass; jmethodID Paint_init,Paint_setStrokeWidth,Paint_setARGB; @@ -373,6 +376,28 @@ draw_image(struct graphics_priv *gra, struct graphics_gc_priv *fg, struct point } +static void +draw_image_warp (struct graphics_priv *gr, struct graphics_gc_priv *fg, struct point *p, int count, struct graphics_image_priv *img) +{ + + /* + * + * + * if coord count==3 then top.left top.right bottom.left + * + */ + + if (count==3) + { + initPaint(gr, fg); + (*jnienv)->CallVoidMethod(jnienv, gr->NavitGraphics, gr->NavitGraphics_draw_image_warp, fg->gra->Paint, + count, p[0].x, p[0].y,p[1].x, p[1].y, p[2].x, p[2].y, img->Bitmap); + } else + dbg(lvl_debug,"draw_image_warp is called with unsupported count parameter value %d\n", count); +} + + + static void draw_drag(struct graphics_priv *gra, struct point *p) { (*jnienv)->CallVoidMethod(jnienv, gra->NavitGraphics, gra->NavitGraphics_draw_drag, p ? p->x : 0, p ? p->y : 0); @@ -452,7 +477,7 @@ static struct graphics_methods graphics_methods = { draw_circle, draw_text, draw_image, - NULL, + draw_image_warp, draw_drag, font_new, gc_new, @@ -642,6 +667,8 @@ graphics_android_init(struct graphics_priv *ret, struct graphics_priv *parent, s return 0; if (!find_method(ret->NavitGraphicsClass, "draw_image", "(Landroid/graphics/Paint;IILandroid/graphics/Bitmap;)V", &ret->NavitGraphics_draw_image)) return 0; + if (!find_method(ret->NavitGraphicsClass, "draw_image_warp", "(Landroid/graphics/Paint;IIIIIIILandroid/graphics/Bitmap;)V", &ret->NavitGraphics_draw_image_warp)) + return 0; if (!find_method(ret->NavitGraphicsClass, "draw_mode", "(I)V", &ret->NavitGraphics_draw_mode)) return 0; if (!find_method(ret->NavitGraphicsClass, "draw_drag", "(II)V", &ret->NavitGraphics_draw_drag)) |