92 lines
2.9 KiB
C
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_NULL;
|
|
)
|
|
|
|
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_NULL;
|
|
)
|
|
|
|
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_NULL;
|
|
)
|
|
|
|
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_NULL;
|
|
)
|
|
|
|
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_NULL;
|
|
)
|
|
|
|
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_NULL;
|
|
)
|
|
|
|
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;
|
|
}
|