[android] - add binding support for Light (#9013)

This commit is contained in:
Tobrun
2017-05-26 16:04:09 +02:00
committed by GitHub
parent c392c678ab
commit 5716bd3aec
30 changed files with 1557 additions and 22 deletions

View File

@@ -41,6 +41,7 @@ import com.mapbox.mapboxsdk.location.LocationSource;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings;
import com.mapbox.mapboxsdk.style.layers.Filter;
import com.mapbox.mapboxsdk.style.layers.Layer;
import com.mapbox.mapboxsdk.style.light.Light;
import com.mapbox.mapboxsdk.style.sources.Source;
import com.mapbox.services.android.telemetry.location.LocationEngine;
import com.mapbox.services.commons.geojson.Feature;
@@ -567,6 +568,20 @@ public final class MapboxMap {
return projection;
}
//
//
//
/**
* Get the global light source used to change lighting conditions on extruded fill layers.
*
* @return the global light source
*/
@Nullable
public Light getLight() {
return nativeMapView.getLight();
}
//
// Camera API
//

View File

@@ -26,6 +26,7 @@ import com.mapbox.mapboxsdk.storage.FileSource;
import com.mapbox.mapboxsdk.style.layers.CannotAddLayerException;
import com.mapbox.mapboxsdk.style.layers.Filter;
import com.mapbox.mapboxsdk.style.layers.Layer;
import com.mapbox.mapboxsdk.style.light.Light;
import com.mapbox.mapboxsdk.style.sources.CannotAddSourceException;
import com.mapbox.mapboxsdk.style.sources.Source;
import com.mapbox.services.commons.geojson.Feature;
@@ -885,6 +886,13 @@ final class NativeMapView {
fileSource.setApiBaseUrl(baseUrl);
}
public Light getLight() {
if (isDestroyedOn("getLight")) {
return null;
}
return nativeGetLight();
}
public float getPixelRatio() {
return pixelRatio;
}
@@ -1120,6 +1128,8 @@ final class NativeMapView {
String[] layerIds,
Object[] filter);
private native Light nativeGetLight();
int getWidth() {
if (isDestroyedOn("")) {
return 0;

View File

@@ -467,6 +467,27 @@ public final class Property {
@Retention(RetentionPolicy.SOURCE)
public @interface FILL_EXTRUSION_TRANSLATE_ANCHOR {}
// ANCHOR: Whether extruded geometries are lit relative to the map or viewport.
/**
* The position of the light source is aligned to the rotation of the map.
*/
public static final String ANCHOR_MAP = "map";
/**
* The position of the light source is aligned to the rotation of the viewport.
*/
public static final String ANCHOR_VIEWPORT = "viewport";
/**
* Whether extruded geometries are lit relative to the map or viewport.
*/
@StringDef({
ANCHOR_MAP,
ANCHOR_VIEWPORT,
})
@Retention(RetentionPolicy.SOURCE)
public @interface ANCHOR {}
private Property() {
}

View File

@@ -0,0 +1,181 @@
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.light;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import com.mapbox.mapboxsdk.style.layers.Property;
import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
/**
* The global light source.
*
* @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#light>">The online documentation</a>
*/
@UiThread
public class Light {
private long nativePtr;
/**
* Creates a Light.
*
* @param nativePtr pointer used by core
*/
public Light(long nativePtr) {
this.nativePtr = nativePtr;
}
/**
* Set the Anchor property. Whether extruded geometries are lit relative to the map or viewport.
*
* @param anchor as String
*/
public void setAnchor(@Property.ANCHOR String anchor) {
nativeSetAnchor(anchor);
}
/**
* Get the Anchor property. Whether extruded geometries are lit relative to the map or viewport.
*
* @return anchor as String
*/
@Property.ANCHOR public String getAnchor() {
return nativeGetAnchor();
}
/**
* Set the Position property. Position of the light source relative to lit (extruded) geometries, in [r radial coordinate, a azimuthal angle, p polar angle] where r indicates the distance from the center of the base of an object to its light, a indicates the position of the light relative to 0° (0° when `light.anchor` is set to `viewport` corresponds to the top of the viewport, or 0° when `light.anchor` is set to `map` corresponds to due north, and degrees proceed clockwise), and p indicates the height of the light (from 0°, directly above, to 180°, directly below).
*
* @param position of the light
*/
public void setPosition(@NonNull Position position) {
nativeSetPosition(position);
}
/**
* Get the Position property. Position of the light source relative to lit (extruded) geometries, in [r radial coordinate, a azimuthal angle, p polar angle] where r indicates the distance from the center of the base of an object to its light, a indicates the position of the light relative to 0° (0° when `light.anchor` is set to `viewport` corresponds to the top of the viewport, or 0° when `light.anchor` is set to `map` corresponds to due north, and degrees proceed clockwise), and p indicates the height of the light (from 0°, directly above, to 180°, directly below).
*
* @return position as Position
*/
public Position getPosition() {
return nativeGetPosition();
}
/**
* Get the Position property transition options.
*
* @return transition options for position
*/
public TransitionOptions getPositionTransition() {
return nativeGetPositionTransition();
}
/**
* Set the Position property transition options.
*
* @param options transition options for position
*/
public void setPositionTransition(TransitionOptions options) {
nativeSetPositionTransition(options.getDuration(), options.getDelay());
}
/**
* Set the Color property. Color tint for lighting extruded geometries.
*
* @param color as int
*/
public void setColor(@ColorInt int color) {
nativeSetColor(PropertyFactory.colorToRgbaString(color));
}
/**
* Set the Color property. Color tint for lighting extruded geometries.
*
* @param color as String
*/
public void setColor(String color) {
nativeSetColor(color);
}
/**
* Get the Color property. Color tint for lighting extruded geometries.
*
* @return color as String
*/
public String getColor() {
return nativeGetColor();
}
/**
* Get the Color property transition options.
*
* @return transition options for color
*/
public TransitionOptions getColorTransition() {
return nativeGetColorTransition();
}
/**
* Set the Color property transition options.
*
* @param options transition options for color
*/
public void setColorTransition(TransitionOptions options) {
nativeSetColorTransition(options.getDuration(), options.getDelay());
}
/**
* Set the Intensity property. Intensity of lighting (on a scale from 0 to 1). Higher numbers will present as more extreme contrast.
*
* @param intensity as Float
*/
public void setIntensity(float intensity) {
nativeSetIntensity(intensity);
}
/**
* Get the Intensity property. Intensity of lighting (on a scale from 0 to 1). Higher numbers will present as more extreme contrast.
*
* @return intensity as Float
*/
public float getIntensity() {
return nativeGetIntensity();
}
/**
* Get the Intensity property transition options.
*
* @return transition options for intensity
*/
public TransitionOptions getIntensityTransition() {
return nativeGetIntensityTransition();
}
/**
* Set the Intensity property transition options.
*
* @param options transition options for intensity
*/
public void setIntensityTransition(TransitionOptions options) {
nativeSetIntensityTransition(options.getDuration(), options.getDelay());
}
private native void nativeSetAnchor(String anchor);
private native String nativeGetAnchor();
private native void nativeSetPosition(Position position);
private native Position nativeGetPosition();
private native TransitionOptions nativeGetPositionTransition();
private native void nativeSetPositionTransition(long duration, long delay);
private native void nativeSetColor(String color);
private native String nativeGetColor();
private native TransitionOptions nativeGetColorTransition();
private native void nativeSetColorTransition(long duration, long delay);
private native void nativeSetIntensity(float intensity);
private native float nativeGetIntensity();
private native TransitionOptions nativeGetIntensityTransition();
private native void nativeSetIntensityTransition(long duration, long delay);
}

View File

@@ -0,0 +1,81 @@
package com.mapbox.mapboxsdk.style.light;
/**
* Position of the light source relative to lit (extruded) geometries.
* <p>
* The position is constructed out of a radial coordinate, an azimuthal angle and a polar angle.
* where the radial coordinate indicates the distance from the center of the base of an object to its light, the
* azimuthal angle indicates the position of the light relative to 0° (0° when
* {@link com.mapbox.mapboxsdk.style.layers.Property.ANCHOR} is set to viewport corresponds to the top of the
* viewport, or 0° when {@link com.mapbox.mapboxsdk.style.layers.Property.ANCHOR} is set to map corresponds to due
* north, and degrees proceed clockwise), and polar indicates the height of the light
* (from 0°, directly above, to 180°, directly below).
*/
public class Position {
private float radialCoordinate;
private float azimuthalAngle;
private float polarAngle;
/**
* Creates a Position from a radial coordinate, an azimuthal angle & a polar angle.
*
* @param radialCoordinate the distance from the center of the base of an object to its light
* @param azimuthalAngle the position of the light relative to 0°
* @param polarAngle the height of the light
*/
public Position(float radialCoordinate, float azimuthalAngle, float polarAngle) {
this.radialCoordinate = radialCoordinate;
this.azimuthalAngle = azimuthalAngle;
this.polarAngle = polarAngle;
}
/**
* Returns a Position from a radial coordinate, an azimuthal angle & a polar angle
*
* @param radialCoordinate the radial coordinate
* @param azimuthalAngle the azimuthal angle
* @param polarAngle the polar angle
* @return the created Position object
*/
public static Position fromPosition(float radialCoordinate, float azimuthalAngle, float polarAngle) {
return new Position(radialCoordinate, azimuthalAngle, polarAngle);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Position position = (Position) o;
if (Float.compare(position.radialCoordinate, radialCoordinate) != 0) {
return false;
}
if (Float.compare(position.azimuthalAngle, azimuthalAngle) != 0) {
return false;
}
return Float.compare(position.polarAngle, polarAngle) == 0;
}
@Override
public int hashCode() {
int result = (radialCoordinate != +0.0f ? Float.floatToIntBits(radialCoordinate) : 0);
result = 31 * result + (azimuthalAngle != +0.0f ? Float.floatToIntBits(azimuthalAngle) : 0);
result = 31 * result + (polarAngle != +0.0f ? Float.floatToIntBits(polarAngle) : 0);
return result;
}
@Override
public String toString() {
return "Position{"
+ "radialCoordinate=" + radialCoordinate
+ ", azimuthalAngle=" + azimuthalAngle
+ ", polarAngle=" + polarAngle
+ '}';
}
}

View File

@@ -0,0 +1,121 @@
<%
const properties = locals.properties;
const doc = locals.doc;
-%>
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.
package com.mapbox.mapboxsdk.style.light;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.UiThread;
import com.mapbox.mapboxsdk.style.layers.Property;
import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
/**
* The global light source.
*
* @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#light>">The online documentation</a>
*/
@UiThread
public class Light {
private long nativePtr;
/**
* Creates a Light.
*
* @param nativePtr pointer used by core
*/
public Light(long nativePtr) {
this.nativePtr = nativePtr;
}
<% for (const property of properties) { -%>
<% if (property.name == "position") {-%>
/**
* Set the <%- camelize(property.name) %> property. <%- property.doc %>
*
* @param position of the light
*/
public void set<%- camelize(property.name) %>(@NonNull Position position) {
nativeSet<%- camelize(property.name) %>(position);
}
/**
* Get the <%- camelize(property.name) %> property. <%- property.doc %>
*
* @return <%- property.name %> as Position
*/
public Position get<%- camelize(property.name) %>() {
return nativeGet<%- camelize(property.name) %>();
}
<% } else { -%>
<% if (property.name == "color") {-%>
/**
* Set the <%- camelize(property.name) %> property. <%- property.doc %>
*
* @param <%- property.name %> as int
*/
public void set<%- camelize(property.name) %>(@ColorInt int <%- property.name %>) {
nativeSet<%- camelize(property.name) %>(PropertyFactory.colorToRgbaString(<%- property.name %>));
}
<% } -%>
/**
* Set the <%- camelize(property.name) %> property. <%- property.doc %>
*
* @param <%- property.name %> as <%- propertyType(property) %>
*/
public void set<%- camelize(property.name) %>(<%- propertyTypeAnnotation(property) %><%- iff(() => propertyTypeAnnotation(property), " ") %><%- propertyJavaType(property) %> <%- property.name %>) {
nativeSet<%- camelize(property.name) %>(<%- property.name %>);
}
/**
* Get the <%- camelize(property.name) %> property. <%- property.doc %>
*
* @return <%- property.name %> as <%- propertyType(property) %>
*/
<%- propertyTypeAnnotation(property) %> public <%- propertyJavaType(property) %> get<%- camelize(property.name) %>() {
return nativeGet<%- camelize(property.name) %>();
}
<% } -%>
<% if (property.transition) { -%>
/**
* Get the <%- camelize(property.name) %> property transition options.
*
* @return transition options for <%- property.name %>
*/
public TransitionOptions get<%- camelize(property.name) %>Transition() {
return nativeGet<%- camelize(property.name) %>Transition();
}
/**
* Set the <%- camelize(property.name) %> property transition options.
*
* @param options transition options for <%- property.name %>
*/
public void set<%- camelize(property.name) %>Transition(TransitionOptions options) {
nativeSet<%- camelize(property.name) %>Transition(options.getDuration(), options.getDelay());
}
<% } -%>
<% } -%>
<% for (const property of properties) { -%>
<% if (property.name == "position") {-%>
private native void nativeSet<%- camelize(property.name) %>(Position position);
private native Position nativeGet<%- camelize(property.name) %>();
<% } else { -%>
private native void nativeSet<%- camelize(property.name) %>(<%- propertyJavaType(property) -%> <%- property.name %>);
private native <%- propertyJavaType(property) -%> nativeGet<%- camelize(property.name) %>();
<% } -%>
<% if (property.transition) { -%>
private native TransitionOptions nativeGet<%- camelize(property.name) %>Transition();
private native void nativeSet<%- camelize(property.name) %>Transition(long duration, long delay);
<% } -%>
<% } -%>
}