Skip to content

Instantly share code, notes, and snippets.

@mattpodwysocki
Created October 27, 2016 21:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mattpodwysocki/f862373d7c932d91b838daee26b8e64f to your computer and use it in GitHub Desktop.
Save mattpodwysocki/f862373d7c932d91b838daee26b8e64f to your computer and use it in GitHub Desktop.
#include "csslayoutnode.h"
Nan::Persistent<v8::Function> CSSLayoutNode::constructor;
CSSLayoutNode::CSSLayoutNode(v8::Local<v8::Object> self) {
this->_node = CSSNodeNew();
CSSNodeInit(this->_node);
CSSNodeSetContext(this->_node, *self);
}
CSSLayoutNode::~CSSLayoutNode() {
}
void CSSLayoutNode::Init(v8::Local<v8::Object> exports) {
Nan::HandleScope scope;
v8::Local<v8::FunctionTemplate> tpl = Nan::New<v8::FunctionTemplate>(New);
tpl->SetClassName(Nan::New("CSSLayoutNode").ToLocalChecked());
tpl->InstanceTemplate()->SetInternalFieldCount(1);
Nan::SetPrototypeMethod(tpl, "free", Free);
Nan::SetPrototypeMethod(tpl, "freeRecursive", FreeRecursive);
Nan::SetPrototypeMethod(tpl, "markDirty", MarkDirty);
Nan::SetAccessor(tpl->InstanceTemplate(), Nan::New("isDirty").ToLocalChecked(), GetIsDirty);
CSSNODE_GETTER_SETTER(isTextNode, IsTextNode);
CSSNODE_GETTER_SETTER(hasNewLayout, HasNewLayout);
CSSNODE_GETTER_SETTER(direction, Direction);
CSSNODE_GETTER_SETTER(flexDirection, FlexDirection);
CSSNODE_GETTER_SETTER(justifyContent, JustifyContent);
CSSNODE_GETTER_SETTER(alignContent, AlignContent);
CSSNODE_GETTER_SETTER(alignItems, AlignItems);
Nan::SetMethod(tpl, "instanceCount", InstanceCount);
constructor.Reset(tpl->GetFunction());
exports->Set(Nan::New("CSSLayoutNode").ToLocalChecked(), tpl->GetFunction());
}
NAN_METHOD(CSSLayoutNode::New) {
if (!info.IsConstructCall()) {
Nan::ThrowReferenceError("CSSLayoutNode requires new to instantiate.");
}
v8::Local<v8::Object> self = info.This();
CSSLayoutNode* obj = new CSSLayoutNode(self);
obj->Wrap(self);
info.GetReturnValue().Set(self);
}
NAN_METHOD(CSSLayoutNode::Free) {
CSSNODE_ASSERT
CSSNodeFree(obj->_node);
obj->_node = nullptr;
}
NAN_METHOD(CSSLayoutNode::FreeRecursive) {
CSSNODE_ASSERT
CSSNodeFreeRecursive(obj->_node);
obj->_node = nullptr;
}
NAN_METHOD(CSSLayoutNode::ValueIsUndefined) {
float value = static_cast<float>(info[0]->NumberValue());
info.GetReturnValue().Set(Nan::New(CSSValueIsUndefined(value)));
}
NAN_GETTER(CSSLayoutNode::GetIsDirty) {
CSSNODE_ASSERT
info.GetReturnValue().Set(Nan::New(CSSNodeIsDirty(obj->_node)));
}
NAN_METHOD(CSSLayoutNode::MarkDirty) {
CSSNODE_ASSERT
CSSNodeMarkDirty(obj->_node);
}
NAN_METHOD(CSSLayoutNode::InstanceCount) {
int32_t count = CSSNodeGetInstanceCount();
info.GetReturnValue().Set(Nan::New(count));
}
NAN_GETTER(CSSLayoutNode::GetIsTextNode) {
CSSNODE_ASSERT
info.GetReturnValue().Set(Nan::New(CSSNodeGetIsTextnode(obj->_node)));
}
NAN_SETTER(CSSLayoutNode::SetIsTextNode) {
V8BOOLEAN_ASSERT
CSSNODE_ASSERT
bool bValue = value->BooleanValue();
CSSNodeSetIsTextnode(obj->_node, bValue);
}
NAN_GETTER(CSSLayoutNode::GetHasNewLayout) {
CSSNODE_ASSERT
info.GetReturnValue().Set(Nan::New(CSSNodeGetHasNewLayout(obj->_node)));
}
NAN_SETTER(CSSLayoutNode::SetHasNewLayout) {
V8BOOLEAN_ASSERT
CSSNODE_ASSERT
bool bValue = value->BooleanValue();
CSSNodeSetHasNewLayout(obj->_node, bValue);
}
NAN_GETTER(CSSLayoutNode::GetDirection) {
CSSNODE_ASSERT
info.GetReturnValue().Set(Nan::New((int32_t)CSSNodeStyleGetDirection(obj->_node)));
}
NAN_SETTER(CSSLayoutNode::SetDirection) {
V8INT32_ASSERT
CSSNODE_ASSERT
V8RANGE_ASSERT(0, 2)
CSSNodeStyleSetDirection(obj->_node, (CSSDirection)iValue);
}
NAN_GETTER(CSSLayoutNode::GetFlexDirection) {
CSSNODE_ASSERT
info.GetReturnValue().Set(Nan::New((int32_t)CSSNodeStyleGetFlexDirection(obj->_node)));
}
NAN_SETTER(CSSLayoutNode::SetFlexDirection) {
V8INT32_ASSERT
CSSNODE_ASSERT
V8RANGE_ASSERT(0, 4)
CSSNodeStyleSetFlexDirection(obj->_node, (CSSFlexDirection)iValue);
}
NAN_GETTER(CSSLayoutNode::GetJustifyContent) {
CSSNODE_ASSERT
info.GetReturnValue().Set(Nan::New((int32_t)CSSNodeStyleGetJustifyContent(obj->_node)));
}
NAN_SETTER(CSSLayoutNode::SetJustifyContent) {
V8INT32_ASSERT
CSSNODE_ASSERT
V8RANGE_ASSERT(0, 4)
CSSNodeStyleSetJustifyContent(obj->_node, (CSSJustify)iValue);
}
NAN_GETTER(CSSLayoutNode::GetAlignContent) {
CSSNODE_ASSERT
info.GetReturnValue().Set(Nan::New((int32_t)CSSNodeStyleGetAlignContent(obj->_node)));
}
NAN_SETTER(CSSLayoutNode::SetAlignContent) {
V8INT32_ASSERT
CSSNODE_ASSERT
V8RANGE_ASSERT(0, 4)
CSSNodeStyleSetAlignContent(obj->_node, (CSSAlign)iValue);
}
NAN_GETTER(CSSLayoutNode::GetAlignItems) {
CSSNODE_ASSERT
info.GetReturnValue().Set(Nan::New((int32_t)CSSNodeStyleGetAlignItems(obj->_node)));
}
NAN_SETTER(CSSLayoutNode::SetAlignItems) {
V8INT32_ASSERT
CSSNODE_ASSERT
V8RANGE_ASSERT(0, 4)
CSSNodeStyleSetAlignItems(obj->_node, (CSSAlign)iValue);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment