-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxframes-wrapper.cpp
161 lines (113 loc) · 5.68 KB
/
xframes-wrapper.cpp
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <string>
#include <jni.h>
#include "callbacks-handler.h"
#include "xframes-wrapper.h"
#include "xframes-runner.h"
#ifdef __cplusplus
extern "C" {
#endif
JavaVM* g_jvm = nullptr;
jobject g_wrapper = nullptr;
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* jvm, void* reserved) {
g_jvm = jvm; // Save the JVM instance
return JNI_VERSION_1_6; // Return JNI version
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_resizeWindow(JNIEnv *env, jobject obj, jint width, jint height) {
Runner* pRunner = Runner::getInstance();
pRunner->ResizeWindow(width, height);
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_setElement(JNIEnv *env, jobject obj, jstring elementJsonJString) {
Runner* pRunner = Runner::getInstance();
const char* elementJsonCStr = env->GetStringUTFChars(elementJsonJString, nullptr);
std::string elementJson(elementJsonCStr);
pRunner->SetElement(elementJson);
env->ReleaseStringUTFChars(elementJsonJString, elementJsonCStr);
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_patchElement(JNIEnv *env, jobject obj, jint id, jstring elementJsonJString) {
Runner* pRunner = Runner::getInstance();
const char* elementJsonCStr = env->GetStringUTFChars(elementJsonJString, nullptr);
std::string elementJson(elementJsonCStr);
pRunner->PatchElement(id, elementJson);
env->ReleaseStringUTFChars(elementJsonJString, elementJsonCStr);
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_elementInternalOp(JNIEnv *env, jobject obj, jint id, jstring elementJsonJString) {
Runner* pRunner = Runner::getInstance();
const char* elementJsonCStr = env->GetStringUTFChars(elementJsonJString, nullptr);
std::string elementJson(elementJsonCStr);
pRunner->ElementInternalOp(id, elementJson);
env->ReleaseStringUTFChars(elementJsonJString, elementJsonCStr);
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_setChildren(JNIEnv *env, jobject obj, jint id, jstring childrenIdsJString) {
Runner* pRunner = Runner::getInstance();
const char* childrenIdsCStr = env->GetStringUTFChars(childrenIdsJString, nullptr);
std::string childrenIds(childrenIdsCStr);
// todo: use array of numbers instead of parsing JSON
pRunner->SetChildren((int)id, JsonToVector<int>(childrenIds));
env->ReleaseStringUTFChars(childrenIdsJString, childrenIdsCStr);
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_appendChild(JNIEnv *env, jobject obj, jint parentId, jint childId) {
Runner* pRunner = Runner::getInstance();
pRunner->AppendChild(parentId, childId);
}
JNIEXPORT jstring JNICALL Java_dev_xframes_XFramesWrapper_getChildren(JNIEnv* env, jobject obj, jint id) {
Runner* pRunner = Runner::getInstance();
// Convert the result of GetChildren(id) to a JSON string
std::string jsonString = IntVectorToJson(pRunner->GetChildren(id)).dump();
// Convert std::string to a jstring and return it
return env->NewStringUTF(jsonString.c_str());
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_appendTextToClippedMultiLineTextRenderer(JNIEnv *env, jobject obj, jint id, jstring dataJString) {
Runner* pRunner = Runner::getInstance();
const char* dataCStr = env->GetStringUTFChars(dataJString, nullptr);
std::string data(dataCStr);
pRunner->AppendTextToClippedMultiLineTextRenderer(id, data);
env->ReleaseStringUTFChars(dataJString, dataCStr);
}
JNIEXPORT jstring JNICALL Java_dev_xframes_XFramesWrapper_getStyle(JNIEnv* env, jobject obj) {
Runner* pRunner = Runner::getInstance();
// Get the style as a std::string (assuming GetStyle returns a std::string)
std::string styleString = pRunner->GetStyle();
// Convert the std::string to a jstring and return it
return env->NewStringUTF(styleString.c_str());
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_patchStyle(JNIEnv *env, jobject obj, jstring styleDefJString) {
Runner* pRunner = Runner::getInstance();
const char* styleDefCStr = env->GetStringUTFChars(styleDefJString, nullptr);
std::string styleDef(styleDefCStr);
pRunner->PatchStyle(styleDef);
env->ReleaseStringUTFChars(styleDefJString, styleDefCStr);
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_setDebug(JNIEnv *env, jobject obj, jboolean debug) {
Runner* pRunner = Runner::getInstance();
pRunner->SetDebug(debug);
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_showDebugWindow(JNIEnv *env, jobject obj) {
Runner* pRunner = Runner::getInstance();
pRunner->ShowDebugWindow();
}
JNIEXPORT void JNICALL Java_dev_xframes_XFramesWrapper_init(JNIEnv *env, jobject obj,
jstring assetsBasePath,
jstring rawFontDefinitions,
jstring rawStyleOverrideDefinitions,
jobject allCallbacks
) {
Runner* pRunner = Runner::getInstance();
// Convert the Java strings to C strings
const char* assetsBasePathStr = env->GetStringUTFChars(assetsBasePath, nullptr);
const char* rawFontDefinitionsStr = env->GetStringUTFChars(rawFontDefinitions, nullptr);
const char* rawStyleOverrideDefinitionsStr = env->GetStringUTFChars(rawStyleOverrideDefinitions, nullptr);
pRunner->SetAssetsBasePath(assetsBasePathStr);
pRunner->SetRawFontDefs(rawFontDefinitionsStr);
pRunner->SetRawStyleOverridesDefs(rawStyleOverrideDefinitionsStr);
CallbackHandler handler(g_jvm, env, obj, allCallbacks);
// Pass the handler to SetHandlers
pRunner->SetHandlers(handler);
pRunner->Init();
pRunner->StartThread();
env->ReleaseStringUTFChars(assetsBasePath, assetsBasePathStr);
env->ReleaseStringUTFChars(rawFontDefinitions, rawFontDefinitionsStr);
env->ReleaseStringUTFChars(rawStyleOverrideDefinitions, rawStyleOverrideDefinitionsStr);
}
#ifdef __cplusplus
}
#endif