Skip to content

Commit

Permalink
Mapsforge themes compatibility (#388) opensciencemap#100
Browse files Browse the repository at this point in the history
  • Loading branch information
Longri authored and devemux86 committed Sep 3, 2017
1 parent f6d2db4 commit b695d43
Show file tree
Hide file tree
Showing 18 changed files with 1,565 additions and 20 deletions.
3 changes: 3 additions & 0 deletions vtm-android-example/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@
<activity
android:name=".MapsforgeMapActivity$MapFilePicker"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".MapsforgeMapActivity$ThemeFilePicker"
android:configChanges="keyboardHidden|orientation|screenSize" />
<activity
android:name=".MapsforgeStyleActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />
Expand Down
3 changes: 3 additions & 0 deletions vtm-android-example/res/menu/theme_menu.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
<item
android:id="@+id/theme_newtron"
android:title="@string/theme_newtron" />
<item
android:id="@+id/theme_load"
android:title="@string/theme_load" />
</group>

<item
Expand Down
1 change: 1 addition & 0 deletions vtm-android-example/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@
<string name="style_1">Show nature</string>
<string name="style_2">Hide nature</string>
<string name="menu_gridlayer">Grid</string>
<string name="theme_load">load theme extern</string>

</resources>
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*
* Copyright 2010, 2011, 2012 mapsforge.org
* Copyright 2016 devemux86
* Copyright 2017 Longri
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
Expand All @@ -17,12 +18,16 @@

import org.oscim.theme.ExternalRenderTheme;
import org.oscim.theme.ThemeFile;
import org.oscim.theme.ThemeUtils;
import org.oscim.theme.XmlMapsforgeThemeBuilder;
import org.oscim.theme.XmlThemeBuilder;
import org.oscim.tiling.TileSource.OpenResult;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import java.io.File;
import java.io.FileInputStream;

import javax.xml.parsers.SAXParserFactory;

Expand All @@ -34,9 +39,15 @@ public final class ValidRenderTheme implements ValidFileFilter {

@Override
public boolean accept(File file) {

try {
ThemeFile theme = new ExternalRenderTheme(file.getAbsolutePath());
XmlThemeBuilder renderThemeHandler = new XmlThemeBuilder(theme);
DefaultHandler renderThemeHandler;
if(ThemeUtils.isMapsforgeTheme(new FileInputStream(file))) {
renderThemeHandler = new XmlMapsforgeThemeBuilder(theme);
}else{
renderThemeHandler = new XmlThemeBuilder(theme);
}
XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
xmlReader.setContentHandler(renderThemeHandler);
xmlReader.parse(new InputSource(theme.getRenderThemeAsStream()));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/*
* Copyright 2014 Hannes Janetzek
* Copyright 2016-2017 devemux86
* Copyright 2017 Longri
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
Expand All @@ -25,6 +26,7 @@
import org.oscim.android.filepicker.FilePicker;
import org.oscim.android.filepicker.FilterByFileExtension;
import org.oscim.android.filepicker.ValidMapFile;
import org.oscim.android.filepicker.ValidRenderTheme;
import org.oscim.core.MapPosition;
import org.oscim.core.Tile;
import org.oscim.layers.TileGridLayer;
Expand All @@ -38,12 +40,14 @@
import org.oscim.scalebar.MapScaleBar;
import org.oscim.scalebar.MapScaleBarLayer;
import org.oscim.scalebar.MetricUnitAdapter;
import org.oscim.theme.ExternalRenderTheme;
import org.oscim.theme.VtmThemes;
import org.oscim.tiling.source.mapfile.MapFileTileSource;
import org.oscim.tiling.source.mapfile.MapInfo;

public class MapsforgeMapActivity extends MapActivity {
private static final int SELECT_MAP_FILE = 0;
private static final int SELECT_THEME_FILE = 1;

private TileGridLayer mGridLayer;
private DefaultMapScaleBar mMapScaleBar;
Expand Down Expand Up @@ -71,6 +75,13 @@ public MapFilePicker() {
}
}

public static class ThemeFilePicker extends FilePicker {
public ThemeFilePicker() {
setFileDisplayFilter(new FilterByFileExtension(".xml"));
setFileSelectFilter(new ValidRenderTheme());
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.theme_menu, menu);
Expand Down Expand Up @@ -106,6 +117,11 @@ public boolean onOptionsItemSelected(MenuItem item) {
item.setChecked(true);
return true;

case R.id.theme_load:
startActivityForResult(new Intent(MapsforgeMapActivity.this, ThemeFilePicker.class),
SELECT_THEME_FILE);
return true;

case R.id.gridlayer:
if (item.isChecked()) {
item.setChecked(false);
Expand Down Expand Up @@ -163,6 +179,20 @@ protected void onActivityResult(int requestCode, int resultCode, Intent intent)

mPrefs.clear();
}
} else if (requestCode == SELECT_THEME_FILE) {
if (resultCode != RESULT_OK || intent == null || intent.getStringExtra(FilePicker.SELECTED_FILE) == null) {
finish();
return;
}

String themePath = intent.getStringExtra(FilePicker.SELECTED_FILE);

ExternalRenderTheme externalRenderTheme = new ExternalRenderTheme(themePath);
try {
mMap.setTheme(externalRenderTheme, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}

Expand Down
9 changes: 9 additions & 0 deletions vtm-android/src/org/oscim/android/canvas/AndroidCanvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.RectF;

import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Canvas;
Expand Down Expand Up @@ -96,4 +97,12 @@ public int getHeight() {
public int getWidth() {
return canvas.getWidth();
}

@Override
public void fillRectangle(int x, int y, int width, int height, int color) {
RectF rec = new RectF(x, y, x + width, y + height);
android.graphics.Paint paint = new android.graphics.Paint();
paint.setColor(color);
canvas.drawRect(rec, paint);
}
}
17 changes: 11 additions & 6 deletions vtm-desktop/src/org/oscim/awt/AwtCanvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,7 @@ public void drawLine(float x1, float y1, float x2, float y2, Paint paint) {

@Override
public void fillColor(int color) {
java.awt.Color awtColor = color == Color.TRANSPARENT ? TRANSPARENT : new java.awt.Color(color);
Composite originalComposite = this.canvas.getComposite();
this.canvas.setComposite(AlphaComposite.getInstance(color == Color.TRANSPARENT ? AlphaComposite.CLEAR : AlphaComposite.SRC_OVER));
this.canvas.setColor(awtColor);
this.canvas.fillRect(0, 0, getWidth(), getHeight());
this.canvas.setComposite(originalComposite);
fillRectangle(0, 0, getWidth(), getHeight(), color);
}

@Override
Expand All @@ -200,4 +195,14 @@ public int getHeight() {
public int getWidth() {
return this.bitmap != null ? this.bitmap.getWidth() : 0;
}

@Override
public void fillRectangle(int x, int y, int width, int height, int color) {
java.awt.Color awtColor = color == Color.TRANSPARENT ? TRANSPARENT : new java.awt.Color(color);
Composite originalComposite = this.canvas.getComposite();
this.canvas.setComposite(AlphaComposite.getInstance(color == Color.TRANSPARENT ? AlphaComposite.CLEAR : AlphaComposite.SRC_OVER));
this.canvas.setColor(awtColor);
this.canvas.fillRect(x, y, width, height);
this.canvas.setComposite(originalComposite);
}
}
8 changes: 8 additions & 0 deletions vtm-ios/src/org/oscim/ios/backend/IosCanvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,12 @@ public int getHeight() {
public int getWidth() {
return this.cgBitmapContext != null ? (int) this.cgBitmapContext.getWidth() : 0;
}

@Override
public void fillRectangle(int x, int y, int width, int height, int color) {
CGRect rect = new CGRect(x, y, width, height);
setFillColor(this.cgBitmapContext, (color));
this.cgBitmapContext.setBlendMode(CGBlendMode.Normal);
this.cgBitmapContext.fillRect(rect);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,18 @@ public abstract class BaseAppender extends AppenderBase<ILoggingEvent> {
}

@Override
protected void append(ILoggingEvent eventObject) {
if (eventObject != null && canLogClass(eventObject.getLoggerName())) {
stringBuilder.append(doLayout(eventObject));
String areaText = stringBuilder.toString();
this.textArea.setText(areaText);
this.textArea.setCaretPosition(areaText.length());
}
protected void append(final ILoggingEvent eventObject) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
if (eventObject != null && canLogClass(eventObject.getLoggerName())) {
textArea.append(doLayout(eventObject));
textArea.setCaretPosition(textArea.getDocument().getLength());
}
}
});
thread.start();

//TODO set Highlight for LogLevel [WARN], [ERROR]
}

Expand Down
6 changes: 6 additions & 0 deletions vtm-web/src/org/oscim/gdx/client/GwtCanvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
* Copyright 2013 Hannes Janetzek
* Copyright 2016-2017 devemux86
* Copyright 2017 nebular
* Copyright 2017 Longri
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
*
Expand Down Expand Up @@ -124,4 +125,9 @@ public int getHeight() {
public int getWidth() {
return this.bitmap != null ? this.bitmap.getWidth() : 0;
}

@Override
public void fillRectangle(int x, int y, int width, int height, int color) {
// TODO
}
}
11 changes: 8 additions & 3 deletions vtm/resources/assets/shaders/linetex_layer_tex.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,15 @@ uniform sampler2D tex;
uniform float u_mode;
void
main(){
if (u_mode == 1.0) {
vec4 c=texture2D(tex,vec2(abs(mod(v_st.s+1.0,2.0)),(v_st.t+1.0)*0.5));
if (u_mode >= 1.0) {

float step= 2.0;
if (u_mode == 3.0){// dashed texture
step =1.0;
}
vec4 c=texture2D(tex,vec2(abs(mod(v_st.s+1.0,step)),(v_st.t+1.0)*0.5));
float fuzz=fwidth(c.a);
gl_FragColor=(c * u_color) *smoothstep(0.5-fuzz,0.5+fuzz,c.a);
gl_FragColor=(c * u_color) * smoothstep(0.5-fuzz,0.5+fuzz,c.a);
}
else {
/* distance on perpendicular to the line */
Expand Down
2 changes: 2 additions & 0 deletions vtm/src/org/oscim/backend/canvas/Canvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,6 @@ public interface Canvas {
int getHeight();

int getWidth();

void fillRectangle(int x, int y, int width, int height, int color);
}
2 changes: 1 addition & 1 deletion vtm/src/org/oscim/renderer/bucket/LineTexBucket.java
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ public static RenderBucket draw(RenderBucket b, GLViewport v,
LineTexBucket lb = (LineTexBucket) b;
LineStyle line = lb.line.current();

gl.uniform1f(shader.uMode, line.texture != null ? 1 : 0);
gl.uniform1f(shader.uMode, line.dashTexture? 3 : line.texture != null ? 1 : 0);

if (line.texture != null)
line.texture.bind();
Expand Down
25 changes: 24 additions & 1 deletion vtm/src/org/oscim/theme/ThemeLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,21 @@
*/
package org.oscim.theme;


import org.oscim.backend.CanvasAdapter;
import org.oscim.theme.IRenderTheme.ThemeException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

public class ThemeLoader {

private static final Logger log = LoggerFactory.getLogger(ThemeLoader.class);

public static boolean USE_ATLAS;
public static boolean POT_TEXTURES;

Expand All @@ -46,8 +56,21 @@ public static IRenderTheme load(ThemeFile theme) throws ThemeException {
return load(theme, null);
}



public static IRenderTheme load(ThemeFile theme, ThemeCallback themeCallback) throws ThemeException {
IRenderTheme t = USE_ATLAS ? XmlAtlasThemeBuilder.read(theme, themeCallback) : XmlThemeBuilder.read(theme, themeCallback);
IRenderTheme t = null;

try {
if(ThemeUtils.isMapsforgeTheme(theme.getRenderThemeAsStream())){
t = USE_ATLAS ? XmlMapsforgeAtlasThemeBuilder.read(theme, themeCallback) : XmlMapsforgeThemeBuilder.read(theme, themeCallback);
}else{
t = USE_ATLAS ? XmlAtlasThemeBuilder.read(theme, themeCallback) : XmlThemeBuilder.read(theme, themeCallback);
}
} catch (IOException | ParserConfigurationException | SAXException e) {
e.printStackTrace();
}

if (t != null)
t.scaleTextSize(CanvasAdapter.textScale + (CanvasAdapter.dpi / CanvasAdapter.DEFAULT_DPI - 1));
return t;
Expand Down
Loading

0 comments on commit b695d43

Please sign in to comment.