#include #include "light.hpp" #include "conversion/transition_options.hpp" #include "conversion/position.hpp" namespace mbgl { namespace android { Light::Light(mbgl::Map& coreMap, mbgl::style::Light& coreLight) : light(coreLight) , map(&coreMap) { } static Light* initializeLightPeer(mbgl::Map& map, mbgl::style::Light& coreLight) { return new Light(map, coreLight); } jni::Local> Light::createJavaLightPeer(jni::JNIEnv& env, Map& map, mbgl::style::Light& coreLight) { std::unique_ptr peerLight = std::unique_ptr(initializeLightPeer(map, coreLight)); auto result = peerLight->createJavaPeer(env); peerLight.release(); return result; } jni::Local> Light::createJavaPeer(jni::JNIEnv& env) { static auto& javaClass = jni::Class::Singleton(env); static auto constructor = javaClass.GetConstructor(env); return javaClass.New(env, constructor, reinterpret_cast(this)); } void Light::setAnchor(jni::JNIEnv& env, const jni::String& property) { std::string anchorStr = jni::Make(env, property); if (anchorStr.compare("map") == 0) { light.setAnchor(LightAnchorType::Map); } else if (anchorStr.compare("viewport") == 0) { light.setAnchor(LightAnchorType::Viewport); } } jni::Local Light::getAnchor(jni::JNIEnv& env) { auto anchorType = light.getAnchor(); if (anchorType == LightAnchorType::Map) { return jni::Make(env, "map"); } else { return jni::Make(env, "viewport"); } } void Light::setPosition(jni::JNIEnv& env, const jni::Object& jposition) { using namespace mbgl::android::conversion; auto position = *convert(env, jposition); light.setPosition(position); } jni::Local> Light::getPosition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::Position position = light.getPosition().asConstant(); return std::move(*convert>>(env, position)); } jni::Local> Light::getPositionTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = light.getPositionTransition(); return std::move(*convert>>(env, options)); } void Light::setPositionTransition(jni::JNIEnv&, jlong duration, jlong delay) { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); light.setPositionTransition(options); } void Light::setColor(jni::JNIEnv& env, const jni::String& property) { auto color = Color::parse(jni::Make(env, property)); if (color) { light.setColor(color.value()); } } jni::Local Light::getColor(jni::JNIEnv &env) { auto color = light.getColor().asConstant(); return jni::Make(env, color.stringify()); } jni::Local> Light::getColorTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = light.getColorTransition(); return std::move(*convert>>(env, options)); } void Light::setColorTransition(jni::JNIEnv&, jlong duration, jlong delay) { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); light.setColorTransition(options); } void Light::setIntensity(jni::JNIEnv&, jni::jfloat property) { light.setIntensity(property); } jni::jfloat Light::getIntensity(jni::JNIEnv&) { return light.getIntensity().asConstant(); } jni::Local> Light::getIntensityTransition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = light.getIntensityTransition(); return std::move(*convert>>(env, options)); } void Light::setIntensityTransition(jni::JNIEnv&, jlong duration, jlong delay) { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); light.setIntensityTransition(options); } void Light::registerNative(jni::JNIEnv& env) { // Lookup the class static auto& javaClass = jni::Class::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) // Register the peer jni::RegisterNativePeer(env, javaClass, "nativePtr", METHOD(&Light::getAnchor, "nativeGetAnchor"), METHOD(&Light::setAnchor, "nativeSetAnchor"), METHOD(&Light::getPositionTransition, "nativeGetPositionTransition"), METHOD(&Light::setPositionTransition, "nativeSetPositionTransition"), METHOD(&Light::getPosition, "nativeGetPosition"), METHOD(&Light::setPosition, "nativeSetPosition"), METHOD(&Light::getColorTransition, "nativeGetColorTransition"), METHOD(&Light::setColorTransition, "nativeSetColorTransition"), METHOD(&Light::getColor, "nativeGetColor"), METHOD(&Light::setColor, "nativeSetColor"), METHOD(&Light::getIntensityTransition, "nativeGetIntensityTransition"), METHOD(&Light::setIntensityTransition, "nativeSetIntensityTransition"), METHOD(&Light::getIntensity, "nativeGetIntensity"), METHOD(&Light::setIntensity, "nativeSetIntensity")); } } // namespace android } // namespace mb