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.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/platform/android/src/style/formatted.cpp b/platform/android/src/style/formatted.cpp
new file mode 100644
index 0000000000..ecbc7be1c8
--- /dev/null
+++ b/platform/android/src/style/formatted.cpp
@@ -0,0 +1,43 @@
+#include "formatted.hpp"
+#include "formatted_section.hpp"
+
+namespace mbgl {
+namespace android {
+
+void Formatted::registerNative(jni::JNIEnv& env) {
+ jni::Class<Formatted>::Singleton(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);
+
+ 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);
+
+ double fontScale = 1.0;
+ if (section.fontScale) {
+ fontScale = section.fontScale.value();
+ }
+
+ 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, double, jni::Array<jni::String>>(env);
+ sections.Set(env, i, formattedSection.New(env, formattedSectionConstructor, text, fontScale, fontStack));
+ } else {
+ static auto formattedSectionConstructor = formattedSection.GetConstructor<jni::String, double>(env);
+ sections.Set(env, i, formattedSection.New(env, formattedSectionConstructor, text, fontScale));
+ }
+ }
+
+ return formatted.New(env, formattedConstructor, sections);
+}
+
+} // namespace android
+} // namespace mbgl \ No newline at end of file