Files
cell/playdate/display_playdate.c
2025-12-10 15:01:20 -06:00

92 lines
2.9 KiB
C

// display_playdate.c - Cell integration for Playdate Display API
// Wraps pd_api_display.h functions for JavaScript access
#include "cell.h"
#include "common.h"
// --- Display API Wrappers ---
JSC_CCALL(display_getWidth,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
return JS_NewInt32(js, pd_display->getWidth());
)
JSC_CCALL(display_getHeight,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
return JS_NewInt32(js, pd_display->getHeight());
)
JSC_CCALL(display_setRefreshRate,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
float rate = (float)js2number(js, argv[0]);
pd_display->setRefreshRate(rate);
return JS_UNDEFINED;
)
JSC_CCALL(display_getRefreshRate,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
return JS_NewFloat64(js, pd_display->getRefreshRate());
)
JSC_CCALL(display_getFPS,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
return JS_NewFloat64(js, pd_display->getFPS());
)
JSC_CCALL(display_setInverted,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
int flag = JS_ToBool(js, argv[0]);
pd_display->setInverted(flag);
return JS_UNDEFINED;
)
JSC_CCALL(display_setScale,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
unsigned int scale = (unsigned int)js2number(js, argv[0]);
pd_display->setScale(scale);
return JS_UNDEFINED;
)
JSC_CCALL(display_setMosaic,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
unsigned int x = (unsigned int)js2number(js, argv[0]);
unsigned int y = (unsigned int)js2number(js, argv[1]);
pd_display->setMosaic(x, y);
return JS_UNDEFINED;
)
JSC_CCALL(display_setFlipped,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
int x = JS_ToBool(js, argv[0]);
int y = JS_ToBool(js, argv[1]);
pd_display->setFlipped(x, y);
return JS_UNDEFINED;
)
JSC_CCALL(display_setOffset,
if (!pd_display) return JS_ThrowInternalError(js, "display not initialized");
int x = (int)js2number(js, argv[0]);
int y = (int)js2number(js, argv[1]);
pd_display->setOffset(x, y);
return JS_UNDEFINED;
)
static const JSCFunctionListEntry js_display_funcs[] = {
MIST_FUNC_DEF(display, getWidth, 0),
MIST_FUNC_DEF(display, getHeight, 0),
MIST_FUNC_DEF(display, setRefreshRate, 1),
MIST_FUNC_DEF(display, getRefreshRate, 0),
MIST_FUNC_DEF(display, getFPS, 0),
MIST_FUNC_DEF(display, setInverted, 1),
MIST_FUNC_DEF(display, setScale, 1),
MIST_FUNC_DEF(display, setMosaic, 2),
MIST_FUNC_DEF(display, setFlipped, 2),
MIST_FUNC_DEF(display, setOffset, 2),
};
JSValue js_display_use(JSContext *js) {
JSValue mod = JS_NewObject(js);
JS_SetPropertyFunctionList(js, mod, js_display_funcs, countof(js_display_funcs));
return mod;
}