From d1f9a4e8f69816e355bbbef9784aa66e1a4fd55f Mon Sep 17 00:00:00 2001 From: Gustl22 Date: Thu, 12 Apr 2018 11:09:56 +0200 Subject: [PATCH] Fix blank tiles on large windows and tilt (#522) --- .../src/org/oscim/android/MapView.java | 39 +++++++++++++++++-- vtm-gdx/src/org/oscim/gdx/GdxMap.java | 11 ++++++ .../theme/comparator/vtm/MapAdapter.java | 10 +++++ .../org/oscim/layers/tile/TileManager.java | 5 ++- vtm/src/org/oscim/map/Map.java | 17 ++++++-- vtm/src/org/oscim/map/Viewport.java | 2 + 6 files changed, 76 insertions(+), 8 deletions(-) diff --git a/vtm-android/src/org/oscim/android/MapView.java b/vtm-android/src/org/oscim/android/MapView.java index 4ced50a3..fa8a7b05 100644 --- a/vtm-android/src/org/oscim/android/MapView.java +++ b/vtm-android/src/org/oscim/android/MapView.java @@ -1,6 +1,7 @@ /* * Copyright 2012 Hannes Janetzek - * Copyright 2016-2017 devemux86 + * Copyright 2016-2018 devemux86 + * Copyright 2018 Gustl22 * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -18,11 +19,16 @@ package org.oscim.android; import android.annotation.SuppressLint; +import android.annotation.TargetApi; import android.content.Context; +import android.graphics.Point; import android.opengl.GLSurfaceView; +import android.os.Build; import android.util.AttributeSet; import android.util.DisplayMetrics; +import android.view.Display; import android.view.GestureDetector; +import android.view.WindowManager; import org.oscim.android.canvas.AndroidGraphics; import org.oscim.android.gl.AndroidGL; @@ -45,7 +51,7 @@ import javax.microedition.khronos.opengles.GL10; *

* add it your App, have a map! *

- * Dont forget to call onPause / onResume! + * Don't forget to call onPause / onResume! */ public class MapView extends GLSurfaceView { @@ -160,14 +166,18 @@ public class MapView extends GLSurfaceView { static class AndroidMap extends Map { private final MapView mMapView; + private final WindowManager mWindowManager; private boolean mRenderRequest; private boolean mRenderWait; private boolean mPausing; + private final Point mScreenSize = new Point(); + public AndroidMap(MapView mapView) { super(); mMapView = mapView; + mWindowManager = (WindowManager) mMapView.getContext().getSystemService(Context.WINDOW_SERVICE); } @Override @@ -180,6 +190,29 @@ public class MapView extends GLSurfaceView { return mMapView.getHeight(); } + @Override + public int getScreenWidth() { + return getScreenSize().x; + } + + @Override + public int getScreenHeight() { + return getScreenSize().y; + } + + @SuppressWarnings("deprecation") + @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) + private Point getScreenSize() { + Display display = mWindowManager.getDefaultDisplay(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) + display.getSize(mScreenSize); + else { + mScreenSize.x = display.getWidth(); + mScreenSize.y = display.getHeight(); + } + return mScreenSize; + } + private final Runnable mRedrawCb = new Runnable() { @Override public void run() { @@ -208,7 +241,7 @@ public class MapView extends GLSurfaceView { if (mPausing) return; - /** TODO should not need to call prepareFrame in mRedrawCb */ + /* TODO should not need to call prepareFrame in mRedrawCb */ updateMap(false); } diff --git a/vtm-gdx/src/org/oscim/gdx/GdxMap.java b/vtm-gdx/src/org/oscim/gdx/GdxMap.java index 4fd5dc4d..3d1e289f 100644 --- a/vtm-gdx/src/org/oscim/gdx/GdxMap.java +++ b/vtm-gdx/src/org/oscim/gdx/GdxMap.java @@ -1,6 +1,7 @@ /* * Copyright 2013 Hannes Janetzek * Copyright 2016-2018 devemux86 + * Copyright 2018 Gustl22 * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -149,6 +150,16 @@ public abstract class GdxMap implements ApplicationListener { return Gdx.graphics.getHeight(); } + @Override + public int getScreenWidth() { + return Gdx.graphics.getDisplayMode().width; + } + + @Override + public int getScreenHeight() { + return Gdx.graphics.getDisplayMode().height; + } + private final Runnable mRedrawCb = new Runnable() { @Override public void run() { diff --git a/vtm-theme-comparator/src/org/oscim/theme/comparator/vtm/MapAdapter.java b/vtm-theme-comparator/src/org/oscim/theme/comparator/vtm/MapAdapter.java index 7aa874f4..a5d20521 100644 --- a/vtm-theme-comparator/src/org/oscim/theme/comparator/vtm/MapAdapter.java +++ b/vtm-theme-comparator/src/org/oscim/theme/comparator/vtm/MapAdapter.java @@ -51,6 +51,16 @@ public class MapAdapter extends Map implements Map.UpdateListener { return height; } + @Override + public int getScreenWidth() { + return Gdx.graphics.getDisplayMode().width; + } + + @Override + public int getScreenHeight() { + return Gdx.graphics.getDisplayMode().height; + } + private final Runnable mRedrawCb = new Runnable() { @Override public void run() { diff --git a/vtm/src/org/oscim/layers/tile/TileManager.java b/vtm/src/org/oscim/layers/tile/TileManager.java index 36d4e2fd..a57a945d 100644 --- a/vtm/src/org/oscim/layers/tile/TileManager.java +++ b/vtm/src/org/oscim/layers/tile/TileManager.java @@ -217,8 +217,9 @@ public class TileManager { mTilesEnd = 0; mTilesCount = 0; - /* set up TileSet large enough to hold current tiles */ - int num = Math.max(mMap.getWidth(), mMap.getHeight()); + /* Set up TileSet large enough to hold current tiles. + * Use screen size as workaround for blank tiles in #520. */ + int num = Math.max(mMap.getScreenWidth(), mMap.getScreenHeight()); int size = Tile.SIZE >> 1; int numTiles = (num * num) / (size * size) * 4; diff --git a/vtm/src/org/oscim/map/Map.java b/vtm/src/org/oscim/map/Map.java index 9ad3e330..609192c6 100644 --- a/vtm/src/org/oscim/map/Map.java +++ b/vtm/src/org/oscim/map/Map.java @@ -2,8 +2,9 @@ * Copyright 2013 Hannes Janetzek * Copyright 2016 Andrey Novikov * Copyright 2016 Stephan Leuschner - * Copyright 2016-2017 devemux86 + * Copyright 2016-2018 devemux86 * Copyright 2016 Longri + * Copyright 2018 Gustl22 * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -272,15 +273,25 @@ public abstract class Map implements TaskQueue { } /** - * Return screen width in pixel. + * Return view width in pixel. */ public abstract int getWidth(); /** - * Return screen height in pixel. + * Return view height in pixel. */ public abstract int getHeight(); + /** + * Return screen width in pixel. + */ + public abstract int getScreenWidth(); + + /** + * Return screen height in pixel. + */ + public abstract int getScreenHeight(); + /** * Request to clear all layers before rendering next frame */ diff --git a/vtm/src/org/oscim/map/Viewport.java b/vtm/src/org/oscim/map/Viewport.java index 02d5d191..5b9694df 100644 --- a/vtm/src/org/oscim/map/Viewport.java +++ b/vtm/src/org/oscim/map/Viewport.java @@ -42,6 +42,8 @@ public class Viewport { public final static int MAX_ZOOM_LEVEL = 20; public final static int MIN_ZOOM_LEVEL = 2; public final static float MIN_TILT = 0; + + /* Note: limited by numTiles in TileManager to ~80° */ public final static float MAX_TILT = 65; protected double mMaxScale = (1 << MAX_ZOOM_LEVEL);