Files
LayaNative2.0/Conch/source/webglPlus/jsc/JSKeyframeNode.cpp
T
2020-11-11 16:17:13 +08:00

407 lines
18 KiB
C++

/**
@file JSKeyframeNode.cpp
@brief
@author James
@version 1.0
@date 2018_7_12
*/
#include "JSKeyframeNode.h"
#define NDEBUG
#include <assert.h>
#include "JSCUtil.h"
namespace laya
{
std::string JCKeyframeNode::s_sTempString = "";//TODO
//ADDJSCLSINFO(JSKeyframeNode, JSObjNode);
//------------------------------------------------------------------------------
JSKeyframeNode::JSKeyframeNode()
{
if (JSObjNode::s_pListJSObj)
{
JSObjNode::s_pListJSObj->push_back(this);
}
/*m_nIndexInList = 0;
m_nType = 0;
m_nDataType = 0;
m_pDataFloat = 0;
AdjustAmountOfExternalAllocatedMemory(4096);
JCMemorySurvey::GetInstance()->newClass("JSKeyframeNode", 4096, this);*/
}
//------------------------------------------------------------------------------
JSKeyframeNode::~JSKeyframeNode()
{
if (JSObjNode::s_pListJSObj)
{
JSObjNode::s_pListJSObj->delNode(this);
}
/* m_vOwnerPath.clear();
m_vPropertys.clear();
m_vKeyFrames.clear();
JCMemorySurvey::GetInstance()->releaseClass("JSKeyframeNode", this); */
}
static JSValueRef SetFloat32ArrayData(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
if (argumentCount < 1)
{
return JSValueMakeUndefined(ctx);
}
char* pArrayBuffer = NULL;
int nABLen = 0;
bool bIsArrayBuffer = JSCUtil::extractJSAB(ctx, arguments[0], pArrayBuffer, nABLen);
if (bIsArrayBuffer)
{
self->m_pDataFloatArray.data = pArrayBuffer;
self->m_pDataFloatArray.byteSize = nABLen;
}
return JSValueMakeUndefined(ctx);
}
static JSValueRef SetOwnerPathCount(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 1)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
assert(JSValueIsNumber(ctx, arguments[0]));
int index = JSValueToNumber(ctx, arguments[0], 0);
self->_setOwnerPathCount(index);
return JSValueMakeUndefined(ctx);
}
static JSValueRef SetOwnerPathByIndex(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 2)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
assert(JSValueIsNumber(ctx, arguments[0]));
int index = JSValueToNumber(ctx, arguments[0], 0);
self->_setOwnerPathByIndex(index, JSCUtil::toCString(ctx, arguments[1]));
return JSValueMakeUndefined(ctx);
}
static JSValueRef JoinOwnerPath(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 1)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
const char* v = self->_joinOwnerPath(JSCUtil::toCString(ctx, arguments[0]));
JSStringRef pStr = JSStringCreateWithUTF8CString(v);
JSValueRef pRet = JSValueMakeString(ctx, pStr);
JSStringRelease(pStr);
return pRet;
}
static JSValueRef SetPropertyCount(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 1)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
assert(JSValueIsNumber(ctx, arguments[0]));
int index = JSValueToNumber(ctx, arguments[0], 0);
self->_setPropertyCount(index);
return JSValueMakeUndefined(ctx);
}
static JSValueRef SetPropertyByIndex(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 2)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
assert(JSValueIsNumber(ctx, arguments[0]));
int index = JSValueToNumber(ctx, arguments[0], 0);
self->_setPropertyByIndex(index, JSCUtil::toCString(ctx, arguments[1]));
return JSValueMakeUndefined(ctx);
}
static JSValueRef JoinProperty(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 1)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
const char* v = self->_joinProperty(JSCUtil::toCString(ctx, arguments[0]));
JSStringRef pStr = JSStringCreateWithUTF8CString(v);
JSValueRef pRet = JSValueMakeString(ctx, pStr);
JSStringRelease(pStr);
return pRet;
}
static JSValueRef SetKeyframeByIndex0(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 2)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
assert(JSValueIsNumber(ctx, arguments[0]));
int index = JSValueToNumber(ctx, arguments[0], 0);
JSValueRef keyframe = arguments[1];
if (JSValueIsObject(ctx, keyframe))
{
JSFloatKeyframe* pNode = (JSFloatKeyframe*)JSObjectGetPrivate(JSValueToObject(ctx, keyframe, NULL));
if (pNode)
{
self->m_vKeyFrames[index] = pNode;
}
}
return JSValueMakeUndefined(ctx);
}
static JSValueRef SetKeyframeByIndex1(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 2)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
assert(JSValueIsNumber(ctx, arguments[0]));
int index = JSValueToNumber(ctx, arguments[0], 0);
JSValueRef keyframe = arguments[1];
if (JSValueIsObject(ctx, keyframe))
{
JSFloatArrayKeyframe* pNode = (JSFloatArrayKeyframe*)JSObjectGetPrivate(JSValueToObject(ctx, keyframe, NULL));
if (pNode)
{
self->m_vKeyFrames[index] = pNode;
}
}
return JSValueMakeUndefined(ctx);
}
static JSValueRef SetKeyframeCount(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 1)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
assert(JSValueIsNumber(ctx, arguments[0]));
int value = JSValueToNumber(ctx, arguments[0], 0);
self->_setKeyframeCount(value);
return JSValueMakeUndefined(ctx);
}
static JSValueRef GetOwnerPathByIndex(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 1)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
assert(JSValueIsNumber(ctx, arguments[0]));
int index = JSValueToNumber(ctx, arguments[0], 0);
const char* v = self->getOwnerPathByIndex(index);
JSStringRef pStr = JSStringCreateWithUTF8CString(v);
JSValueRef pRet = JSValueMakeString(ctx, pStr);
JSStringRelease(pStr);
return pRet;
}
static JSValueRef GetPropertyByIndex(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
if (argumentCount < 1)
{
return JSValueMakeUndefined(ctx);
}
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
assert(JSValueIsNumber(ctx, arguments[0]));
int index = JSValueToNumber(ctx, arguments[0], 0);
const char* v = self->getPropertyByIndex(index);
JSStringRef pStr = JSStringCreateWithUTF8CString(v);
JSValueRef pRet = JSValueMakeString(ctx, pStr);
JSStringRelease(pStr);
return pRet;
}
static JSValueRef GetKeyframeByIndex(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
return JSValueMakeNull(ctx);
}
static JSValueRef GetFloatData(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
JSKeyframeNode *pObj = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
float v = pObj->getFloatData();
return JSValueMakeNumber(ctx, v);
}
static JSValueRef GetDataType(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
JSKeyframeNode *pObj = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
int v = pObj->getDataType();
return JSValueMakeNumber(ctx, v);
}
static JSValueRef GetKeyFramesCount(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
int v = self->getKeyFramesCount();
return JSValueMakeNumber(ctx, v);
}
static JSValueRef GetOwnerPathCount(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
int v = self->getOwnerPathCount();
return JSValueMakeNumber(ctx, v);
}
static JSValueRef GetPropertyCount(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
{
laya::JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(thisObject);
int v = self->getPropertyCount();
return JSValueMakeNumber(ctx, v);
}
static JSValueRef _GetIndexInList(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
int v = self->getIndexInList();
return JSValueMakeNumber(ctx, v);
}
static bool _SetIndexInList(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
assert(JSValueIsNumber(ctx, value));
int v = JSValueToNumber(ctx, value, 0);
self->setIndexInList(v);
return true;
}
static JSValueRef _GetType(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
int v = self->getType();
return JSValueMakeNumber(ctx, v);
}
static bool _SetType(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
assert(JSValueIsNumber(ctx, value));
int v = JSValueToNumber(ctx, value, 0);
self->setType(v);
return true;
}
static JSValueRef _GetOwnerPathCount(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
int v = self->getOwnerPathCount();
return JSValueMakeNumber(ctx, v);
}
static bool _SetOwnerPathCount(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
assert(JSValueIsNumber(ctx, value));
int v = JSValueToNumber(ctx, value, 0);
self->_setOwnerPathCount(v);
return true;
}
static JSValueRef _GetKeyFramesCount(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
int v = self->getKeyFramesCount();
return JSValueMakeNumber(ctx, v);
}
static bool _SetKeyframeCount(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
assert(JSValueIsNumber(ctx, value));
int v = JSValueToNumber(ctx, value, 0);
self->_setKeyframeCount(v);
return true;
}
static JSValueRef _GetPropertyCount(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
int v = self->getPropertyCount();
return JSValueMakeNumber(ctx, v);
}
static bool _SetPropertyCount(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
assert(JSValueIsNumber(ctx, value));
int v = JSValueToNumber(ctx, value, 0);
self->_setPropertyCount(v);
return true;
}
static JSValueRef _GetPropertyOwner(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
const char* v = self->getPropertyOwner();
JSStringRef pStr = JSStringCreateWithUTF8CString(v);
JSValueRef pRet = JSValueMakeString(ctx, pStr);
JSStringRelease(pStr);
return pRet;
}
static bool _SetPropertyOwner(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
self->setPropertyOwner(JSCUtil::toCString(ctx, value));
return true;
}
static JSValueRef _GetFullPath(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
const char* v = self->getFullPath();
JSStringRef pStr = JSStringCreateWithUTF8CString(v);
JSValueRef pRet = JSValueMakeString(ctx, pStr);
JSStringRelease(pStr);
return pRet;
}
static bool _SetFullPath(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception)
{
JSKeyframeNode* self = (JSKeyframeNode*)JSObjectGetPrivate(object);
self->setFullPath(JSCUtil::toCString(ctx, value));
return true;
}
void JSKeyframeNode::exportJS(JSContextRef ctx, JSObjectRef object)
{
JSCBinder<JSKeyframeNode>* binder = JSCBinder<JSKeyframeNode>::GetInstance();
binder->begin(ctx);
binder->addProperty("_indexInList", _GetIndexInList, _SetIndexInList);
binder->addProperty("type", _GetType, _SetType);
binder->addProperty("fullPath", _GetFullPath, _SetFullPath);
binder->addProperty("propertyOwner", _GetPropertyOwner, _SetPropertyOwner);
binder->addProperty("ownerPathCount", _GetOwnerPathCount, _SetOwnerPathCount);
binder->addProperty("keyFramesCount", _GetKeyFramesCount, _SetKeyframeCount);
binder->addProperty("propertyCount", _GetPropertyCount, _SetPropertyCount);
binder->addMethod("getOwnerPathCount", GetOwnerPathCount);
binder->addMethod("getPropertyCount", GetPropertyCount);
binder->addMethod("getKeyFramesCount", GetKeyFramesCount);
binder->addMethod("_setOwnerPathCount", SetOwnerPathCount);
binder->addMethod("_setOwnerPathByIndex", SetOwnerPathByIndex);
binder->addMethod("_joinOwnerPath", JoinOwnerPath);
binder->addMethod("_setPropertyCount", SetPropertyCount);
binder->addMethod("_setPropertyByIndex", SetPropertyByIndex);
binder->addMethod("_joinProperty", JoinProperty);
binder->addMethod("_setKeyframeCount", SetKeyframeCount);
binder->addMethod("_setKeyframeByIndex0", SetKeyframeByIndex0);
binder->addMethod("_setKeyframeByIndex1", SetKeyframeByIndex1);
binder->addMethod("getOwnerPathByIndex", GetOwnerPathByIndex);
binder->addMethod("getPropertyByIndex", GetPropertyByIndex);
binder->addMethod("getKeyframeByIndex", GetKeyframeByIndex);
binder->addMethod("getDataType", GetDataType);
binder->addMethod("getFloatData", GetFloatData);
binder->addMethod("setFloat32ArrayData", SetFloat32ArrayData);
binder->end(object, "_conchKeyframeNode");
}
}
//------------------------------------------------------------------------------
//-----------------------------END FILE--------------------------------