Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

add binding support for Light #9013

Merged
merged 1 commit into from May 26, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -15,6 +15,7 @@ task checkstyle(type: Checkstyle) {
exclude '**/style/layers/Property.java'
exclude '**/style/layers/PropertyFactory.java'
exclude '**/style/layers/*Layer.java'
exclude '**/style/light/Light.java'
classpath = files()
ignoreFailures = false
}
Expand Up @@ -41,6 +41,7 @@
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;
Expand Down Expand Up @@ -567,6 +568,20 @@ public Projection getProjection() {
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
//
Expand Down
Expand Up @@ -26,6 +26,7 @@
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;
Expand Down Expand Up @@ -885,6 +886,13 @@ public void setApiBaseUrl(String baseUrl) {
fileSource.setApiBaseUrl(baseUrl);
}

public Light getLight() {
if (isDestroyedOn("getLight")) {
return null;
}
return nativeGetLight();
}

public float getPixelRatio() {
return pixelRatio;
}
Expand Down Expand Up @@ -1120,6 +1128,8 @@ private native Feature[] nativeQueryRenderedFeaturesForBox(float left, float top
String[] layerIds,
Object[] filter);

private native Light nativeGetLight();

int getWidth() {
if (isDestroyedOn("")) {
return 0;
Expand Down
Expand Up @@ -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() {
}
Expand Down
@@ -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);
}
@@ -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
+ '}';
}
}