@@ -42,6 +42,7 @@ typedef enum
42
42
typedef struct
43
43
{
44
44
napiArgType type ;
45
+ bool enabled ;
45
46
union
46
47
{
47
48
int i ;
@@ -59,16 +60,21 @@ typedef struct
59
60
napiCallbackArg ret ;
60
61
} napiCallbackData ;
61
62
62
- void OHOS_windowDataFill (SDL_Window * w )
63
+ void OHOS_windowUpdateAttributes (SDL_Window * w )
63
64
{
64
- w -> internal = SDL_calloc (1 , sizeof (SDL_WindowData ));
65
65
w -> x = x ;
66
66
w -> y = y ;
67
67
w -> w = wid ;
68
68
w -> h = hei ;
69
- w -> internal -> native_window = g_ohosNativeWindow ;
70
69
71
70
SDL_SetWindowSize (w , wid , hei );
71
+ }
72
+
73
+ void OHOS_windowDataFill (SDL_Window * w )
74
+ {
75
+ w -> internal = SDL_calloc (1 , sizeof (SDL_WindowData ));
76
+ OHOS_windowUpdateAttributes (w );
77
+ w -> internal -> native_window = g_ohosNativeWindow ;
72
78
73
79
SDL_VideoDevice * _this = SDL_GetVideoDevice ();
74
80
@@ -153,7 +159,11 @@ static void sdlJSCallback(napi_env env, napi_value jsCb, void *content, void *da
153
159
napi_get_named_property (env , callb , ar -> func , & jsMethod );
154
160
155
161
napi_value args [16 ];
162
+ SDL_Log ("[SDL] calling js function %s with %d args" , ar -> func , ar -> argCount );
156
163
for (int i = 0 ; i < ar -> argCount ; i ++ ) {
164
+ if (!ar -> arg [i ].enabled ) {
165
+ continue ;
166
+ }
157
167
switch (ar -> arg [i ].type ) {
158
168
case Int :
159
169
{
@@ -172,7 +182,12 @@ static void sdlJSCallback(napi_env env, napi_value jsCb, void *content, void *da
172
182
}
173
183
case String :
174
184
{
175
- napi_create_string_utf8 (env , ar -> arg [i ].data .str , SDL_strlen (ar -> arg [i ].data .str ), args + i );
185
+ const char * p = ar -> arg [i ].data .str ; int l = 0 ;
186
+ while (* p ) {
187
+ l ++ ;
188
+ p ++ ;
189
+ }
190
+ napi_create_string_utf8 (env , ar -> arg [i ].data .str , l , args + i );
176
191
break ;
177
192
}
178
193
}
@@ -208,6 +223,22 @@ static void sdlJSCallback(napi_env env, napi_value jsCb, void *content, void *da
208
223
}
209
224
}
210
225
226
+ void OHOS_MessageBox (const char * title , const char * message )
227
+ {
228
+ napiCallbackData * data = SDL_malloc (sizeof (napiCallbackData ));
229
+ SDL_memset (data , 0 , sizeof (napiCallbackData ));
230
+ data -> func = "showDialog" ;
231
+ data -> argCount = 2 ;
232
+ data -> arg [0 ].type = String ;
233
+ data -> arg [0 ].enabled = true;
234
+ data -> arg [0 ].data .str = title ;
235
+ data -> arg [1 ].type = String ;
236
+ data -> arg [1 ].enabled = true;
237
+ data -> arg [1 ].data .str = message ;
238
+
239
+ napi_call_threadsafe_function (napiEnv .func , data , napi_tsfn_nonblocking );
240
+ }
241
+
211
242
static napi_value sdlCallbackInit (napi_env env , napi_callback_info info )
212
243
{
213
244
napiEnv .env = env ;
@@ -222,14 +253,6 @@ static napi_value sdlCallbackInit(napi_env env, napi_callback_info info)
222
253
napi_create_string_utf8 (env , "SDLThreadSafe" , NAPI_AUTO_LENGTH , & resName );
223
254
napi_create_threadsafe_function (env , args [0 ], NULL , resName , 0 , 1 , NULL , NULL , NULL , sdlJSCallback , & napiEnv .func );
224
255
225
- napiCallbackData * data = SDL_malloc (sizeof (napiCallbackData ));
226
- data -> func = "test" ;
227
- data -> argCount = 0 ;
228
-
229
- napi_call_threadsafe_function (napiEnv .func , data , napi_tsfn_nonblocking );
230
-
231
- // SDL_free(data);
232
-
233
256
napi_value result ;
234
257
napi_create_int32 (env , 0 , & result );
235
258
return result ;
@@ -255,6 +278,8 @@ static int sdlLaunchMainInternal(void* reserved)
255
278
return d ;
256
279
}
257
280
281
+ static SDL_Thread * mainThread ;
282
+
258
283
static napi_value sdlLaunchMain (napi_env env , napi_callback_info info )
259
284
{
260
285
size_t argc = 2 ;
@@ -274,7 +299,7 @@ static napi_value sdlLaunchMain(napi_env env, napi_callback_info info)
274
299
entrypoint_info * entry = (entrypoint_info * )SDL_malloc (sizeof (entrypoint_info ));
275
300
entry -> func = fname ;
276
301
entry -> libname = libname ;
277
- SDL_Thread * m = SDL_CreateThread (sdlLaunchMainInternal , "SDL App Thread" , entry );
302
+ mainThread = SDL_CreateThread (sdlLaunchMainInternal , "SDL App Thread" , entry );
278
303
SDL_SetMainReady ();
279
304
280
305
napi_value result ;
@@ -326,10 +351,9 @@ static void OnSurfaceChangedCB(OH_NativeXComponent *component, void *window)
326
351
SDL_UnlockMutex (g_ohosPageMutex );
327
352
328
353
SDL_VideoDevice * _this = SDL_GetVideoDevice ();
329
- SDL_Window * win = _this -> windows ;
330
- while (win != NULL ) {
331
- OHOS_windowDataFill (win );
332
- win = win -> next ;
354
+ if (_this && _this -> windows ) {
355
+ SDL_Window * win = _this -> windows ;
356
+ OHOS_windowUpdateAttributes (win );
333
357
}
334
358
}
335
359
static void OnSurfaceDestroyedCB (OH_NativeXComponent * component , void * window )
0 commit comments