diff --git a/src/core/ohos/SDL_ohos.c b/src/core/ohos/SDL_ohos.c index d3cab42914..e7fc71d358 100644 --- a/src/core/ohos/SDL_ohos.c +++ b/src/core/ohos/SDL_ohos.c @@ -15,13 +15,12 @@ #include "SDL3/SDL_mutex.h" #include "../../video/ohos/SDL_ohoskeyboard.h" -OHNativeWindow *nativeWindow; +OHNativeWindow *g_ohosNativeWindow; SDL_Mutex *g_ohosPageMutex = NULL; static OH_NativeXComponent_Callback callback; static OH_NativeXComponent_MouseEvent_Callback mouseCallback; SDL_WindowData windowData; -SDL_VideoData videoData; -struct +static struct { napi_env env; napi_threadsafe_function func; @@ -103,7 +102,7 @@ static napi_value sdlCallbackInit(napi_env env, napi_callback_info info) static void OnSurfaceCreatedCB(OH_NativeXComponent *component, void *window) { - nativeWindow = (OHNativeWindow *)window; + g_ohosNativeWindow = (OHNativeWindow *)window; uint64_t width; uint64_t height; @@ -112,10 +111,8 @@ static void OnSurfaceCreatedCB(OH_NativeXComponent *component, void *window) OH_NativeXComponent_GetXComponentSize(component, window, &width, &height); OH_NativeXComponent_GetXComponentOffset(component, window, &offsetX, &offsetY); - SDL_Log("Native Window: %p", nativeWindow); - SDL_LockMutex(g_ohosPageMutex); - windowData.native_window = nativeWindow; + windowData.native_window = g_ohosNativeWindow; windowData.width = width; windowData.height = height; windowData.x = offsetX; @@ -124,7 +121,7 @@ static void OnSurfaceCreatedCB(OH_NativeXComponent *component, void *window) } static void OnSurfaceChangedCB(OH_NativeXComponent *component, void *window) { - nativeWindow = (OHNativeWindow *)window; + g_ohosNativeWindow = (OHNativeWindow *)window; uint64_t width; uint64_t height; @@ -133,10 +130,8 @@ static void OnSurfaceChangedCB(OH_NativeXComponent *component, void *window) OH_NativeXComponent_GetXComponentSize(component, window, &width, &height); OH_NativeXComponent_GetXComponentOffset(component, window, &offsetX, &offsetY); - SDL_Log("Native Window: %p", nativeWindow); - SDL_LockMutex(g_ohosPageMutex); - windowData.native_window = nativeWindow; + windowData.native_window = g_ohosNativeWindow; windowData.width = width; windowData.height = height; windowData.x = offsetX; @@ -184,12 +179,14 @@ static void onKeyEvent(OH_NativeXComponent *component, void *window) } } } + +// TODO static void onNativeTouch(OH_NativeXComponent *component, void *window) {} static void onNativeMouse(OH_NativeXComponent *component, void *window) {} static void OnDispatchTouchEventCB(OH_NativeXComponent *component, void *window) {} -void OnHoverEvent(OH_NativeXComponent *component, bool isHover) {} -void OnFocusEvent(OH_NativeXComponent *component, void *window) {} -void OnBlurEvent(OH_NativeXComponent *component, void *window) {} +static void OnHoverEvent(OH_NativeXComponent *component, bool isHover) {} +static void OnFocusEvent(OH_NativeXComponent *component, void *window) {} +static void OnBlurEvent(OH_NativeXComponent *component, void *window) {} static napi_value SDL_OHOS_NAPI_Init(napi_env env, napi_value exports) { diff --git a/src/core/ohos/SDL_ohos.h b/src/core/ohos/SDL_ohos.h index 0df3a0bee0..5c7e633697 100644 --- a/src/core/ohos/SDL_ohos.h +++ b/src/core/ohos/SDL_ohos.h @@ -6,9 +6,8 @@ #include extern SDL_Mutex *g_ohosPageMutex; -extern OHNativeWindow *nativeWindow; +extern OHNativeWindow *g_ohosNativeWindow; extern SDL_WindowData windowData; -extern SDL_VideoData videoData; typedef struct SDL_VideoData { SDL_Rect textRect; diff --git a/src/video/ohos/SDL_ohosvideo.c b/src/video/ohos/SDL_ohosvideo.c index 222247c9f8..766d58d411 100644 --- a/src/video/ohos/SDL_ohosvideo.c +++ b/src/video/ohos/SDL_ohosvideo.c @@ -21,13 +21,19 @@ void OHOS_DeviceFree(SDL_VideoDevice *device) static SDL_VideoDevice *OHOS_CreateDevice(void) { SDL_VideoDevice *device; + SDL_VideoData *data; device = (SDL_VideoDevice *)SDL_calloc(1, sizeof(SDL_VideoDevice)); if (!device) { return NULL; } - device->internal = &videoData; + data = (SDL_VideoData *)SDL_calloc(1, sizeof(SDL_VideoData)); + if (!data) { + return NULL; + } + + device->internal = data; device->free = OHOS_DeviceFree; device->VideoInit = OHOS_VideoInit; diff --git a/src/video/ohos/SDL_ohosvulkan.c b/src/video/ohos/SDL_ohosvulkan.c index 6742189dbb..9721181d9a 100644 --- a/src/video/ohos/SDL_ohosvulkan.c +++ b/src/video/ohos/SDL_ohosvulkan.c @@ -111,7 +111,7 @@ bool OHOS_Vulkan_CreateSurface(SDL_VideoDevice *_this, createInfo.sType = VK_STRUCTURE_TYPE_SURFACE_CREATE_INFO_OHOS; createInfo.pNext = NULL; createInfo.flags = 0; - createInfo.window = nativeWindow; + createInfo.window = g_ohosNativeWindow; result = vkCreateSurfaceOHOS(instance, &createInfo, NULL, surface); if (result != VK_SUCCESS) { SDL_SetError("vkCreateSurfaceOHOS failed: %d", result);