summaryrefslogtreecommitdiff
path: root/platform/android/src/style/light.cpp
blob: 71f1cb076e1fc94e1dc7ee65e76104106124ba09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`.

#include <mbgl/map/map.hpp>
#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::jobject* Light::createJavaLightPeer(jni::JNIEnv& env, Map& map, mbgl::style::Light& coreLight) {
    std::unique_ptr<Light> peerLight = std::unique_ptr<Light>(initializeLightPeer(map, coreLight));
    jni::jobject* result = peerLight->createJavaPeer(env);
    peerLight.release();
    return result;
}

jni::Class<Light> Light::javaClass;

jni::jobject* Light::createJavaPeer(jni::JNIEnv& env) {
    static auto constructor = Light::javaClass.template GetConstructor<jni::jlong>(env);
    return Light::javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this));
}

void Light::setAnchor(jni::JNIEnv& env, jni::String property) {
    std::string anchorStr = jni::Make<std::string>(env, property);
    if (anchorStr.compare("map") == 0) {
        light.setAnchor(LightAnchorType::Map);
    } else if (anchorStr.compare("viewport") == 0) {
        light.setAnchor(LightAnchorType::Viewport);
    }
}

jni::String Light::getAnchor(jni::JNIEnv& env) {
    auto anchorType = light.getAnchor();
    if (anchorType == LightAnchorType::Map) {
        return jni::Make<jni::String>(env, "map");
    } else {
        return jni::Make<jni::String>(env, "viewport");
    }
}

void Light::setPosition(jni::JNIEnv& env, jni::Object<Position> jposition) {
    using namespace mbgl::android::conversion;
    auto position = *convert<mbgl::style::Position>(env, jposition);
    light.setPosition(position);
}

jni::Object<Position> Light::getPosition(jni::JNIEnv& env) {
    using namespace mbgl::android::conversion;
    mbgl::style::Position position = light.getPosition().asConstant();
    return *convert<jni::Object<Position>>(env, position);
}

jni::Object<TransitionOptions> Light::getPositionTransition(jni::JNIEnv& env) {
   using namespace mbgl::android::conversion;
   mbgl::style::TransitionOptions options = light.getPositionTransition();
   return *convert<jni::Object<TransitionOptions>>(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, jni::String property) {
    auto color = Color::parse(jni::Make<std::string>(env, property));
    if (color) {
        light.setColor(color.value());
    }
}

jni::String Light::getColor(jni::JNIEnv &env) {
    auto color = light.getColor().asConstant();
    return jni::Make<jni::String>(env, color.stringify());
}

jni::Object<TransitionOptions> Light::getColorTransition(jni::JNIEnv& env) {
   using namespace mbgl::android::conversion;
   mbgl::style::TransitionOptions options = light.getColorTransition();
   return *convert<jni::Object<TransitionOptions>>(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::Object<TransitionOptions> Light::getIntensityTransition(jni::JNIEnv& env) {
   using namespace mbgl::android::conversion;
   mbgl::style::TransitionOptions options = light.getIntensityTransition();
   return *convert<jni::Object<TransitionOptions>>(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
    Light::javaClass = *jni::Class<Light>::Find(env).NewGlobalRef(env).release();

#define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name)
    // Register the peer
    jni::RegisterNativePeer<Light>(env, Light::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