fix gc error

This commit is contained in:
2026-02-21 03:07:38 -06:00
parent 5975298ec4
commit 6bdd375dbb
10 changed files with 259 additions and 131 deletions

31
video.c
View File

@@ -749,7 +749,8 @@ JSValue js_window_state(JSContext *js, JSValue self, int argc, JSValue *argv)
// Title
const char *title = SDL_GetWindowTitle(w);
JS_SetPropertyStr(js, ret, "title", JS_NewString(js, title ? title : ""));
JSValue _title = JS_NewString(js, title ? title : "");
JS_SetPropertyStr(js, ret, "title", _title);
// Size
int width, height;
@@ -785,7 +786,8 @@ JSValue js_window_state(JSContext *js, JSValue self, int argc, JSValue *argv)
// Opacity
float opacity = SDL_GetWindowOpacity(w);
JS_SetPropertyStr(js, ret, "opacity", JS_NewFloat64(js, opacity));
JSValue _opacity = JS_NewFloat64(js, opacity);
JS_SetPropertyStr(js, ret, "opacity", _opacity);
// Grabs
JS_SetPropertyStr(js, ret, "mouseGrab", JS_NewBool(js, SDL_GetWindowMouseGrab(w)));
@@ -804,8 +806,10 @@ JSValue js_window_state(JSContext *js, JSValue self, int argc, JSValue *argv)
JS_SetPropertyStr(js, ret, "maximized", JS_NewBool(js, flags & SDL_WINDOW_MAXIMIZED));
// Display properties
JS_SetPropertyStr(js, ret, "displayScale", JS_NewFloat64(js, SDL_GetWindowDisplayScale(w)));
JS_SetPropertyStr(js, ret, "pixelDensity", JS_NewFloat64(js, SDL_GetWindowPixelDensity(w)));
JSValue _displayScale = JS_NewFloat64(js, SDL_GetWindowDisplayScale(w));
JS_SetPropertyStr(js, ret, "displayScale", _displayScale);
JSValue _pixelDensity = JS_NewFloat64(js, SDL_GetWindowPixelDensity(w));
JS_SetPropertyStr(js, ret, "pixelDensity", _pixelDensity);
// Size in pixels
int pixelW, pixelH;
@@ -816,15 +820,17 @@ JSValue js_window_state(JSContext *js, JSValue self, int argc, JSValue *argv)
JS_SetPropertyStr(js, ret, "sizeInPixels", pixelSizeObj);
// Flags
JS_SetPropertyStr(js, ret, "flags", JS_NewInt64(js, flags));
JSValue _flags = JS_NewInt64(js, flags);
JS_SetPropertyStr(js, ret, "flags", _flags);
JS_SetPropertyStr(js, ret, "id", JS_NewUint32(js, SDL_GetWindowID(w)));
// Parent
SDL_Window *parent = SDL_GetWindowParent(w);
if (parent)
JS_SetPropertyStr(js, ret, "parent", SDL_Window2js(js, parent));
else
if (parent) {
JSValue _parent = SDL_Window2js(js, parent);
JS_SetPropertyStr(js, ret, "parent", _parent);
} else
JS_SetPropertyStr(js, ret, "parent", JS_NULL);
JS_RETURN(ret);
@@ -880,13 +886,16 @@ CELL_USE_INIT(
JS_FRAME(js);
JS_LOCAL(ret, JS_NewObject(js));
JS_SetPropertyStr(js, ret, "window", QJSCLASSPREP_FUNCS_CTOR(SDL_Window, 1));
JSValue _window = QJSCLASSPREP_FUNCS_CTOR(SDL_Window, 1);
JS_SetPropertyStr(js, ret, "window", _window);
QJSCLASSPREP_NO_FUNCS(SDL_Cursor);
// Add cursor functions
JS_SetPropertyStr(js, ret, "createCursor", JS_NewCFunction(js, js_sdl_create_cursor, "createCursor", 2));
JS_SetPropertyStr(js, ret, "setCursor", JS_NewCFunction(js, js_sdl_set_cursor, "setCursor", 1));
JSValue _createCursor = JS_NewCFunction(js, js_sdl_create_cursor, "createCursor", 2);
JS_SetPropertyStr(js, ret, "createCursor", _createCursor);
JSValue _setCursor = JS_NewCFunction(js, js_sdl_set_cursor, "setCursor", 1);
JS_SetPropertyStr(js, ret, "setCursor", _setCursor);
JS_RETURN(ret);
)