JSBool js_cocos2dx_CCControl_removeTargetWithActionForControlEvents(JSContext *cx, uint32_t argc, jsval *vp) { return JS_TRUE; if(argc == 3) { jsval *argv = JS_ARGV(cx, vp); JSObject *obj = JS_THIS_OBJECT(cx, vp); js_proxy_t *proxy; JS_GET_NATIVE_PROXY(proxy, obj); cocos2d::extension::CCControl* item = (cocos2d::extension::CCControl*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, item) JSObject* jsTargetObj = JSVAL_TO_OBJECT(argv[0]); JSObject* jsFuncObj = JSVAL_TO_OBJECT(argv[1]); int event = JSVAL_TO_INT(argv[2]); js_callback_proxy_t* found = NULL; if (is_target_function_exist(jsTargetObj, jsFuncObj, (void*)item, (void*)event, &found)) { item->removeTargetWithActionForControlEvents(found->nativeTargetObj, cccontrol_selector(JSCallbackTarget::onControlEventReceived), event); JS_CALLBACK_REMOVE_PROXY(found); CCLOG("In remove Target: target exists, remove it!"); return JS_TRUE; } else { JS_ReportError(cx, "In cc.Control.RemoveTargetWithActionForControlEvents, target and callback function aren't matched !"); return JS_FALSE; } } JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 3); return JS_FALSE; }
JSBool js_cocos2dx_CCControl_addTargetWithActionForControlEvents(JSContext *cx, uint32_t argc, jsval *vp) { return JS_TRUE; if(argc == 3) { jsval *argv = JS_ARGV(cx, vp); JSObject *obj = JS_THIS_OBJECT(cx, vp); js_proxy_t *proxy; JS_GET_NATIVE_PROXY(proxy, obj); cocos2d::extension::CCControl* item = (cocos2d::extension::CCControl*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, item) JSObject* jsTargetObj = JSVAL_TO_OBJECT(argv[0]); JSObject* jsFuncObj = JSVAL_TO_OBJECT(argv[1]); int event = JSVAL_TO_INT(argv[2]); js_callback_proxy_t* found = NULL; if (is_target_function_exist(jsTargetObj, jsFuncObj, (void*)item, (void*)event, &found)) { item->removeTargetWithActionForControlEvents(found->nativeTargetObj, cccontrol_selector(JSCallbackTarget::onControlEventReceived), event); JS_CALLBACK_REMOVE_PROXY(found); CCLOG("In add Target: target exists, remove it!"); } JSCallbackTarget* pTarget = new JSCallbackTarget(); item->addTargetWithActionForControlEvents(pTarget, cccontrol_selector(JSCallbackTarget::onControlEventReceived), event); js_callback_proxy_t* p; JS_CALLBACK_NEW_PROXY(p, pTarget, jsTargetObj, jsFuncObj, item, event); JS_AddNamedObjectRoot(cx, &jsTargetObj, "cccontrol target object"); JS_AddNamedObjectRoot(cx, &jsFuncObj, "cccontrol jsFuncObj object"); pTarget->setJSProxy(p); return JS_TRUE; } JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 3); return JS_FALSE; }
JSBool js_cocos2dx_CCMenu_create(JSContext *cx, uint32_t argc, jsval *vp) { jsval *argv = JS_ARGV(cx, vp); if (argc > 0) { cocos2d::CCArray* array = cocos2d::CCArray::create(); int i = 0; while (i < argc) { js_proxy_t *proxy; JSObject *tmpObj = JSVAL_TO_OBJECT(argv[i]); JS_GET_NATIVE_PROXY(proxy, tmpObj); cocos2d::CCObject *item = (cocos2d::CCObject*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, item) array->addObject(item); i++; } cocos2d::CCMenu* ret = cocos2d::CCMenu::createWithArray(array); jsval jsret; do { if (ret) { js_proxy_t *p; JS_GET_PROXY(p, ret); if (p) { jsret = OBJECT_TO_JSVAL(p->obj); } else { // create a new js obj of that class js_proxy_t *proxy = js_get_or_create_proxy<cocos2d::CCMenu>(cx, ret); jsret = OBJECT_TO_JSVAL(proxy->obj); } } else { jsret = JSVAL_NULL; } } while (0); JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } if (argc == 0) { cocos2d::CCMenu* ret = cocos2d::CCMenu::create(); jsval jsret; do { if (ret) { js_proxy_t *p; JS_GET_PROXY(p, ret); if (p) { jsret = OBJECT_TO_JSVAL(p->obj); } else { // create a new js obj of that class js_proxy_t *proxy = js_get_or_create_proxy<cocos2d::CCMenu>(cx, ret); jsret = OBJECT_TO_JSVAL(proxy->obj); } } else { jsret = JSVAL_NULL; } } while (0); JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } return JS_FALSE; }
JSBool js_cocos2dx_setCallback(JSContext *cx, uint32_t argc, jsval *vp) { if(argc == 2) { jsval *argv = JS_ARGV(cx, vp); JSObject *obj = JS_THIS_OBJECT(cx, vp); js_proxy_t *proxy; JS_GET_NATIVE_PROXY(proxy, obj); cocos2d::CCMenuItem* item = (cocos2d::CCMenuItem*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, item) bind_menu_item(cx, item, argv[1], argv[0]); return JS_TRUE; } return JS_FALSE; }
JSBool js_cocos2dx_CCMenuItemSprite_create(JSContext *cx, uint32_t argc, jsval *vp) { if (argc >= 2) { jsval *argv = JS_ARGV(cx, vp); js_proxy_t *proxy; JSObject *tmpObj; tmpObj = JSVAL_TO_OBJECT(argv[0]); JS_GET_NATIVE_PROXY(proxy, tmpObj); cocos2d::CCNode* arg0 = (cocos2d::CCNode*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, arg0); tmpObj = JSVAL_TO_OBJECT(argv[1]); JS_GET_NATIVE_PROXY(proxy, tmpObj); cocos2d::CCNode* arg1 = (cocos2d::CCNode*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, arg1); int last = 2; cocos2d::CCNode* arg2 = NULL; if (argc == 5 || argc == 3) { tmpObj = JSVAL_TO_OBJECT(argv[2]); JS_GET_NATIVE_PROXY(proxy, tmpObj); arg2 = (cocos2d::CCNode*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, arg2); last = 3; } cocos2d::CCMenuItemSprite* ret = cocos2d::CCMenuItemSprite::create(arg0, arg1, arg2); jsval thisObj = argv[last++]; jsval callback = argv[last]; JSObject *obj = bind_menu_item<cocos2d::CCMenuItemSprite>(cx, ret, callback, thisObj); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); return JS_TRUE; } return JS_FALSE; }
JSBool js_cocos2dx_CCMenuItemLabel_create(JSContext *cx, uint32_t argc, jsval *vp) { if (argc >= 1) { jsval *argv = JS_ARGV(cx, vp); js_proxy_t *proxy; JSObject *tmpObj = JSVAL_TO_OBJECT(argv[0]); JS_GET_NATIVE_PROXY(proxy, tmpObj); cocos2d::CCNode* arg0 = (cocos2d::CCNode*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, arg0) cocos2d::CCMenuItemLabel* ret = cocos2d::CCMenuItemLabel::create(arg0); JSObject *obj = bind_menu_item<cocos2d::CCMenuItemLabel>(cx, ret, (argc == 3 ? argv[2] : JSVAL_VOID), (argc >= 2 ? argv[1] : JSVAL_VOID)); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); return JS_TRUE; } return JS_FALSE; }
JSBool js_cocos2dx_CCMenuItemToggle_create(JSContext *cx, uint32_t argc, jsval *vp) { if (argc >= 1) { jsval *argv = JS_ARGV(cx, vp); cocos2d::CCMenuItemToggle* ret = cocos2d::CCMenuItemToggle::create(); JSObject *obj = bind_menu_item(cx, ret, (argc == 2 ? argv[1] : JSVAL_VOID), argv[0]); for (int i=1; i < argc; i++) { js_proxy_t *proxy; JSObject *tmpObj = JSVAL_TO_OBJECT(argv[i]); JS_GET_NATIVE_PROXY(proxy, tmpObj); cocos2d::CCMenuItem* item = (cocos2d::CCMenuItem*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, item) ret->addSubItem(item); } JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); return JS_TRUE; } return JS_FALSE; }
JSBool js_cocos2dx_CCNode_copy(JSContext *cx, uint32_t argc, jsval *vp) { if (argc == 0) { JSObject *obj = JS_THIS_OBJECT(cx, vp); js_proxy_t *proxy; JS_GET_NATIVE_PROXY(proxy, obj); cocos2d::CCNode *node = (cocos2d::CCNode *)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, node) JSClass *jsclass = JS_GetClass(obj); JSObject *proto = JS_GetPrototype(obj); JSObject *parent = JS_GetParent(obj); JSObject *jsret = JS_NewObject(cx, jsclass, proto, parent); cocos2d::CCObject *ret = node->copy(); if (ret && jsret) { JS_NEW_PROXY(proxy, ret, jsret); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsret)); return JS_TRUE; } } return JS_FALSE; }