Skip to content

Commit 96227ed

Browse files
committed
Harmony port: napi callback shell
1 parent 694c8d0 commit 96227ed

File tree

1 file changed

+60
-1
lines changed

1 file changed

+60
-1
lines changed

src/core/ohos/SDL_ohos.c

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#include "SDL_internal.h"
22
#include <EGL/egl.h>
33
#include <EGL/eglplatform.h>
4+
#include <js_native_api.h>
5+
#include <js_native_api_types.h>
6+
#include <node_api.h>
7+
#include <node_api_types.h>
48

59
#ifdef SDL_PLATFORM_OHOS
610

@@ -17,6 +21,36 @@ static OH_NativeXComponent_Callback callback;
1721
static OH_NativeXComponent_MouseEvent_Callback mouseCallback;
1822
SDL_WindowData windowData;
1923
SDL_VideoData videoData;
24+
struct
25+
{
26+
napi_env env;
27+
napi_threadsafe_function func;
28+
napi_ref interface;
29+
} napiEnv;
30+
31+
typedef union
32+
{
33+
int i;
34+
short s;
35+
char c;
36+
long long l;
37+
float f;
38+
double d;
39+
const char* str;
40+
bool b;
41+
} napiCallbackArg;
42+
typedef struct
43+
{
44+
const char* func;
45+
napiCallbackArg arg1;
46+
napiCallbackArg arg2;
47+
napiCallbackArg arg3;
48+
napiCallbackArg arg4;
49+
napiCallbackArg arg5;
50+
napiCallbackArg arg6;
51+
napiCallbackArg arg7;
52+
napiCallbackArg arg8;
53+
} napiCallbackData;
2054

2155
static napi_value minus(napi_env env, napi_callback_info info)
2256
{
@@ -43,6 +77,30 @@ static napi_value minus(napi_env env, napi_callback_info info)
4377
return sum;
4478
}
4579

80+
static void sdlJSCallback(napi_env env, napi_value jsCb, void* content, void* data)
81+
{
82+
83+
}
84+
85+
static napi_value sdlCallbackInit(napi_env env, napi_callback_info info)
86+
{
87+
napiEnv.env = env;
88+
size_t argc = 1;
89+
napi_value args[1] = { NULL };
90+
91+
napi_get_cb_info(env, info, &argc, args, NULL, NULL);
92+
93+
napi_create_reference(env, args[0], 1, &napiEnv.interface);
94+
95+
napi_value resName = NULL;
96+
napi_create_string_utf8(env, "SDLThreadSafe", NAPI_AUTO_LENGTH, &resName);
97+
napi_create_threadsafe_function(env, args[0], NULL, resName, 0, 1, NULL, NULL, NULL, sdlJSCallback, &napiEnv.func);
98+
99+
napi_value result;
100+
napi_create_int32(env, 0, &result);
101+
return result;
102+
}
103+
46104
static void OnSurfaceCreatedCB(OH_NativeXComponent *component, void *window)
47105
{
48106
nativeWindow = (OHNativeWindow *)window;
@@ -136,7 +194,8 @@ void OnBlurEvent(OH_NativeXComponent *component, void *window) {}
136194
static napi_value SDL_OHOS_NAPI_Init(napi_env env, napi_value exports)
137195
{
138196
napi_property_descriptor desc[] = {
139-
{ "minus", NULL, minus, NULL, NULL, NULL, napi_default, NULL }
197+
{ "minus", NULL, minus, NULL, NULL, NULL, napi_default, NULL },
198+
{ "sdlCallbackInit", NULL, sdlCallbackInit, NULL, NULL, NULL, napi_default, NULL }
140199
};
141200
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
142201

0 commit comments

Comments
 (0)