summaryrefslogtreecommitdiff
path: root/platform/android/src/style/formatted.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/style/formatted.cpp')
-rw-r--r--platform/android/src/style/formatted.cpp40
1 files changed, 22 insertions, 18 deletions
diff --git a/platform/android/src/style/formatted.cpp b/platform/android/src/style/formatted.cpp
index 8659e6961e..8876d39c55 100644
--- a/platform/android/src/style/formatted.cpp
+++ b/platform/android/src/style/formatted.cpp
@@ -1,5 +1,7 @@
#include "formatted.hpp"
#include "formatted_section.hpp"
+#include "../conversion/conversion.hpp"
+#include "../conversion/constant.hpp"
namespace mbgl {
namespace android {
@@ -11,36 +13,38 @@ void Formatted::registerNative(jni::JNIEnv& env) {
jni::Local<jni::Object<Formatted>> Formatted::New(jni::JNIEnv& env, const style::expression::Formatted& value) {
static auto& formatted = jni::Class<Formatted>::Singleton(env);
static auto formattedConstructor = formatted.GetConstructor<jni::Array<jni::Object<FormattedSection>>>(env);
- static auto& formattedSection = jni::Class<FormattedSection>::Singleton(env);
+ static auto& formattedSectionClass = jni::Class<FormattedSection>::Singleton(env);
auto sections = jni::Array<jni::Object<FormattedSection>>::New(env, value.sections.size());
for (std::size_t i = 0; i < value.sections.size(); i++) {
auto section = value.sections.at(i);
auto text = jni::Make<jni::String>(env, section.text);
+ static auto formattedSectionConstructor = formattedSectionClass.GetConstructor<jni::String>(env);
+ auto formattedSection = formattedSectionClass.New(env, formattedSectionConstructor, text);
- if (section.fontStack && section.fontScale) {
+ if (section.fontScale) {
double fontScale = section.fontScale.value();
+ static auto method = formattedSectionClass.GetMethod<void (jni::jdouble)>(env, "setFontScale");
+ formattedSection.Call(env, method, fontScale);
+ }
+
+ if (section.fontStack) {
auto fontStack = jni::Array<jni::String>::New(env, section.fontStack.value().size());
for (std::size_t j = 0; j < section.fontStack.value().size(); j++) {
fontStack.Set(env, j, jni::Make<jni::String>(env, section.fontStack.value().at(j)));
}
- static auto formattedSectionConstructor = formattedSection.GetConstructor<jni::String, jni::Number, jni::Array<jni::String>>(env);
- sections.Set(env, i, formattedSection.New(env, formattedSectionConstructor, text, jni::Box(env, fontScale), fontStack));
- } else if (section.fontScale) {
- double fontScale = section.fontScale.value();
- static auto formattedSectionConstructor = formattedSection.GetConstructor<jni::String, jni::Number>(env);
- sections.Set(env, i, formattedSection.New(env, formattedSectionConstructor, text, jni::Box(env, fontScale)));
- } else if (section.fontStack) {
- auto fontStack = jni::Array<jni::String>::New(env, section.fontStack.value().size());
- for (std::size_t j = 0; j < section.fontStack.value().size(); j++) {
- fontStack.Set(env, j, jni::Make<jni::String>(env, section.fontStack.value().at(j)));
- }
- static auto formattedSectionConstructor = formattedSection.GetConstructor<jni::String, jni::Array<jni::String>>(env);
- sections.Set(env, i, formattedSection.New(env, formattedSectionConstructor, text, fontStack));
- } else {
- static auto formattedSectionConstructor = formattedSection.GetConstructor<jni::String>(env);
- sections.Set(env, i, formattedSection.New(env, formattedSectionConstructor, text));
+ static auto method = formattedSectionClass.GetMethod<void (jni::Array<jni::String>)>(env, "setFontStack");
+ formattedSection.Call(env, method, fontStack);
}
+
+ if (section.textColor) {
+ using namespace mbgl::android::conversion;
+ auto textColor = std::move(*convert<jni::Local<jni::Object<>>>(env, *section.textColor));
+ static auto method = formattedSectionClass.GetMethod<void (jni::Object<>)>(env, "setTextColor");
+ formattedSection.Call(env, method, textColor);
+ }
+
+ sections.Set(env, i, formattedSection);
}
return formatted.New(env, formattedConstructor, sections);