Skip to content

Commit

Permalink
Fix compilation errors on Node.js 13
Browse files Browse the repository at this point in the history
  • Loading branch information
lehni committed Feb 4, 2020
1 parent 50abc0a commit 067c232
Showing 1 changed file with 87 additions and 86 deletions.
173 changes: 87 additions & 86 deletions src/ledmatrix.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ using namespace node;
using namespace rgb_matrix;
using rgb_matrix::GPIO;

Nan::Persistent<v8::Function> LedMatrix::constructor;
Nan::Persistent<Function> LedMatrix::constructor;
std::map<std::string, rgb_matrix::Font> LedMatrix::fontMap;

LedMatrix::LedMatrix (int rows, int cols , int parallel_displays, int chained_displays, int brightness, const char* mapping, const char* rgbseq, std::vector<std::string> flags)
LedMatrix::LedMatrix (int rows, int cols, int parallel_displays, int chained_displays, int brightness, const char* mapping, const char* rgbseq, std::vector<std::string> flags)
{

//dump out flags into a vector of char* <CRRINNGGEEEEEE>
Expand Down Expand Up @@ -74,11 +74,11 @@ LedMatrix::~LedMatrix (void)
delete matrix;
}

void LedMatrix::Init (v8::Local<v8::Object> exports)
void LedMatrix::Init (Local<Object> exports)
{
Nan::HandleScope scope;

v8::Local<v8::FunctionTemplate> tpl = Nan::New<v8::FunctionTemplate>(New);
Local<FunctionTemplate> tpl = Nan::New<FunctionTemplate>(New);

tpl->SetClassName(Nan::New("LedMatrix").ToLocalChecked());
tpl->InstanceTemplate()->SetInternalFieldCount(1);
Expand All @@ -97,9 +97,12 @@ void LedMatrix::Init (v8::Local<v8::Object> exports)
Nan::SetPrototypeMethod(tpl, "drawLine", DrawLine);
Nan::SetPrototypeMethod(tpl, "brightness", Brightness);

constructor.Reset(tpl->GetFunction());

exports->Set(Nan::New("LedMatrix").ToLocalChecked(), tpl->GetFunction());
constructor.Reset(Nan::GetFunction(tpl).ToLocalChecked());
Nan::Set(
exports,
Nan::New("LedMatrix").ToLocalChecked(),
Nan::GetFunction(tpl).ToLocalChecked()
);
}

int LedMatrix::GetWidth (void)
Expand Down Expand Up @@ -220,39 +223,39 @@ void LedMatrix :: DrawText (const Nan::FunctionCallbackInfo<Value>& args)

if(args.Length() > 0 && args[0]->IsNumber())
{
x = args[0]->ToInteger()->Value();
x = Nan::To<int>(args[0]).FromJust();
}

if(args.Length() > 1 && args[1]->IsNumber())
{
y = args[1]->ToInteger()->Value();
y = Nan::To<int>(args[1]).FromJust();
}

if(args.Length() > 2 && args[2]->IsString())
{
v8::String::Utf8Value str(args[2]->ToString());
Nan::Utf8String str(args[2]->ToString(Nan::GetCurrentContext()).FromMaybe(Local<String>()));
text = std::string(*str);
}

if(args.Length() > 3 && args[3]->IsString())
{
v8::String::Utf8Value str(args[3]->ToString());
Nan::Utf8String str(args[3]->ToString(Nan::GetCurrentContext()).FromMaybe(Local<String>()));
font = std::string(*str);
}

if(args.Length() > 4 && args[4]->IsNumber())
{
r = args[4]->ToInteger()->Value();
r = Nan::To<int>(args[4]).FromJust();
}

if(args.Length() > 5 && args[5]->IsNumber())
{
g = args[5]->ToInteger()->Value();
g = Nan::To<int>(args[5]).FromJust();
}

if(args.Length() > 6 && args[6]->IsNumber())
{
b = args[6]->ToInteger()->Value();
b = Nan::To<int>(args[6]).FromJust();
}

return matrix->DrawText(x, y, std::make_tuple(r,g,b), text.c_str(), font.c_str());
Expand All @@ -278,32 +281,32 @@ void LedMatrix :: DrawCircle (const Nan::FunctionCallbackInfo<Value>& args)

if(args.Length() > 0 && args[0]->IsNumber())
{
x = args[0]->ToInteger()->Value();
x = Nan::To<int>(args[0]).FromJust();
}

if(args.Length() > 1 && args[1]->IsNumber())
{
y = args[1]->ToInteger()->Value();
y = Nan::To<int>(args[1]).FromJust();
}

if(args.Length() > 2 && args[2]->IsNumber())
{
radius = args[2]->ToInteger()->Value();
radius = Nan::To<int>(args[2]).FromJust();
}

if(args.Length() > 3 && args[3]->IsNumber())
{
r = args[3]->ToInteger()->Value();
r = Nan::To<int>(args[3]).FromJust();
}

if(args.Length() > 4 && args[4]->IsNumber())
{
g = args[4]->ToInteger()->Value();
g = Nan::To<int>(args[4]).FromJust();
}

if(args.Length() > 5 && args[5]->IsNumber())
{
b = args[5]->ToInteger()->Value();
b = Nan::To<int>(args[5]).FromJust();
}

return matrix->DrawCircle( x, y, radius, std::make_tuple(r, g, b));
Expand All @@ -329,38 +332,38 @@ void LedMatrix :: DrawLine (const Nan::FunctionCallbackInfo<Value>& args)

if (args.Length() > 0 && args[0]->IsNumber())
{
x0 = args[0]->ToInteger()->Value();
x0 = Nan::To<int>(args[0]).FromJust();
}

if (args.Length() > 1 && args[1]->IsNumber())
{
y0 = args[1]->ToInteger()->Value();
y0 = Nan::To<int>(args[1]).FromJust();
}

if (args.Length() > 2 && args[2]->IsNumber())
{
x1 = args[2]->ToInteger()->Value();
x1 = Nan::To<int>(args[2]).FromJust();
}

if (args.Length() > 3 && args[3]->IsNumber())
{
y1 = args[3]->ToInteger()->Value();
y1 = Nan::To<int>(args[3]).FromJust();
}

if (args.Length() > 4 && args[4]->IsNumber())
{
r = args[4]->ToInteger()->Value();
r = Nan::To<int>(args[4]).FromJust();
}

if (args.Length() > 5 && args[5]->IsNumber())
{
g = args[5]->ToInteger()->Value();
g = Nan::To<int>(args[5]).FromJust();
}


if (args.Length() > 6 && args[6]->IsNumber())
{
b = args[6]->ToInteger()->Value();
b = Nan::To<int>(args[6]).FromJust();
}

return matrix->DrawLine( x0, y0, x1, y1, std::make_tuple(r, g, b));
Expand All @@ -376,7 +379,7 @@ void LedMatrix :: Brightness (const Nan::FunctionCallbackInfo<Value>& args)
LedMatrix* matrix = ObjectWrap::Unwrap<LedMatrix>(args.Holder());
int b = 100;

b = args[0]->ToInteger()->Value();
b = Nan::To<int>(args[0]).FromJust();

return matrix->Brightness(b);
}
Expand All @@ -402,52 +405,44 @@ void LedMatrix::New(const Nan::FunctionCallbackInfo<Value>& args)
std::string mapping = "regular";
std::string rgbSeq = "RGB";


Local<Context> context = Nan::GetCurrentContext();

if(args.Length() > 0 && args[0]->IsNumber()) {
rows = args[0]->ToInteger()->Value();
rows = Nan::To<int>(args[0]).FromJust();
}
if(args.Length() > 1 && args[1]->IsNumber()) {
cols = args[1]->ToInteger()->Value();
cols = Nan::To<int>(args[1]).FromJust();
}

if(args.Length() > 2 && args[2]->IsNumber()) {
chained = args[2]->ToInteger()->Value();
chained = Nan::To<int>(args[2]).FromJust();
}
if(args.Length() > 3 && args[3]->IsNumber()) {
parallel = args[3]->ToInteger()->Value();
parallel = Nan::To<int>(args[3]).FromJust();
}

if(args.Length() > 4 && args[4]->IsNumber()) {
brightness = args[4]->ToInteger()->Value();
brightness = Nan::To<int>(args[4]).FromJust();
}


if(args.Length() > 5 && args[5]->IsString()) {

v8::String::Utf8Value str(args[5]->ToString());
Nan::Utf8String str(args[5]->ToString(context).ToLocalChecked());
mapping = std::string(*str);
}

if(args.Length() > 6 && args[6]->IsString()) {

v8::String::Utf8Value str(args[6]->ToString());
Nan::Utf8String str(args[6]->ToString(context).ToLocalChecked());
rgbSeq = std::string(*str);
}

std::vector<std::string> strings;

Handle<Value> val;
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::HandleScope handle_scope(isolate);

if(args.Length() > 7 && args[7]->IsArray())
{
Handle<Array> jsArray = Handle<Array>::Cast(args[7]);
for(unsigned int i = 0; i < jsArray->Length(); i++)
{
val = jsArray->Get(v8::Integer::New(isolate, i));
strings.push_back(std::string( *String::Utf8Value(val)));
if(args.Length() > 7 && args[7]->IsArray()) {
Local<Array> array = Local<Array>::Cast(args[7]);
for(unsigned int i = 0; i < array->Length(); i++) {
Local<Value> val = array->Get(context, i).ToLocalChecked();
Nan::Utf8String str(val->ToString(context).FromMaybe(Local<String>()));
strings.push_back(std::string(*str));
}
}

Expand Down Expand Up @@ -480,11 +475,11 @@ void LedMatrix::SetPixel (const Nan::FunctionCallbackInfo<v8::Value>& args)
Nan::ThrowTypeError("Wrong parameters! Expects 5 numbers");
}

int x = args[0]->ToInteger()->Value();
int y = args[1]->ToInteger()->Value();
int r = args[2]->ToInteger()->Value();
int g = args[3]->ToInteger()->Value();
int b = args[4]->ToInteger()->Value();
int x = Nan::To<int>(args[0]).FromJust();
int y = Nan::To<int>(args[1]).FromJust();
int r = Nan::To<int>(args[2]).FromJust();
int g = Nan::To<int>(args[3]).FromJust();
int b = Nan::To<int>(args[4]).FromJust();

matrix->SetPixel(x, y, r, g, b);
}
Expand All @@ -494,10 +489,10 @@ void LedMatrix::Clear (const Nan::FunctionCallbackInfo<v8::Value>& args)
LedMatrix* matrix = ObjectWrap::Unwrap<LedMatrix>(args.Holder());

if(args.Length() == 4 && args[0]->IsNumber() && args[1]->IsNumber() && args[2]->IsNumber() && args[3]->IsNumber()) {
int x = args[0]->ToInteger()->Value();
int y = args[1]->ToInteger()->Value();
int w = args[2]->ToInteger()->Value();
int h = args[3]->ToInteger()->Value();
int x = Nan::To<int>(args[0]).FromJust();
int y = Nan::To<int>(args[1]).FromJust();
int w = Nan::To<int>(args[2]).FromJust();
int h = Nan::To<int>(args[3]).FromJust();
matrix->Clear(x, y, w, h);
} else {
matrix->Clear();
Expand All @@ -512,9 +507,9 @@ void LedMatrix::Fill (const Nan::FunctionCallbackInfo<v8::Value>& args)
Nan::ThrowTypeError("Wrong parameters! Expects 3 numbers");
}

int r = args[0]->ToInteger()->Value();
int g = args[1]->ToInteger()->Value();
int b = args[2]->ToInteger()->Value();
int r = Nan::To<int>(args[0]).FromJust();
int g = Nan::To<int>(args[1]).FromJust();
int b = Nan::To<int>(args[2]).FromJust();
matrix->Fill(r, g, b);
}

Expand All @@ -526,10 +521,11 @@ void LedMatrix::SetImageBuffer (const Nan::FunctionCallbackInfo<v8::Value>& args

LedMatrix* matrix = ObjectWrap::Unwrap<LedMatrix>(args.Holder());

char* buf = Buffer::Data(args[0]->ToObject());
size_t bufl = Buffer::Length(args[0]->ToObject());
int width = args[1]->ToInteger()->Value();
int height = args[2]->ToInteger()->Value();
v8::Local<v8::Context> context = Nan::GetCurrentContext();
char* buf = Buffer::Data(args[0]->ToObject(context).ToLocalChecked());
size_t bufl = Buffer::Length(args[0]->ToObject(context).ToLocalChecked());
int width = Nan::To<int>(args[1]).FromJust();
int height = Nan::To<int>(args[2]).FromJust();

assert((int)bufl == width*height*3);

Expand Down Expand Up @@ -558,8 +554,8 @@ void LedMatrix::Draw (const Nan::FunctionCallbackInfo<v8::Value>& args)

int startx = 0;
int starty = 0;
if(args.Length() > 0 && args[0]->IsNumber()) startx = args[0]->ToInteger()->Value();
if(args.Length() > 1 && args[1]->IsNumber()) starty = args[1]->ToInteger()->Value();
if(args.Length() > 0 && args[0]->IsNumber()) startx = Nan::To<int>(args[0]).FromJust();
if(args.Length() > 1 && args[1]->IsNumber()) starty = Nan::To<int>(args[1]).FromJust();

int width = matrix->GetWidth() - startx;
int height = matrix->GetHeight() - starty;
Expand All @@ -568,12 +564,12 @@ void LedMatrix::Draw (const Nan::FunctionCallbackInfo<v8::Value>& args)
bool looph = false;
bool loopv = false;

if(args.Length() > 2 && args[2]->IsNumber()) width = args[2]->ToInteger()->Value();
if(args.Length() > 3 && args[3]->IsNumber()) height = args[3]->ToInteger()->Value();
if(args.Length() > 4 && args[4]->IsNumber()) imgx = args[4]->ToInteger()->Value();
if(args.Length() > 5 && args[5]->IsNumber()) imgy = args[5]->ToInteger()->Value();
if(args.Length() > 6 && args[6]->IsBoolean()) looph = args[6]->ToBoolean()->Value();
if(args.Length() > 7 && args[7]->IsBoolean()) loopv = args[7]->ToBoolean()->Value();
if(args.Length() > 2 && args[2]->IsNumber()) width = Nan::To<int>(args[2]).FromJust();
if(args.Length() > 3 && args[3]->IsNumber()) height = Nan::To<int>(args[3]).FromJust();
if(args.Length() > 4 && args[4]->IsNumber()) imgx = Nan::To<int>(args[4]).FromJust();
if(args.Length() > 5 && args[5]->IsNumber()) imgy = Nan::To<int>(args[5]).FromJust();
if(args.Length() > 6 && args[6]->IsBoolean()) looph = Nan::To<bool>(args[6]).FromJust();
if(args.Length() > 7 && args[7]->IsBoolean()) loopv = Nan::To<bool>(args[7]).FromJust();


matrix->Draw(startx, starty, width, height, imgx, imgy, looph, loopv);
Expand All @@ -589,29 +585,33 @@ void LedMatrix::Scroll (const Nan::FunctionCallbackInfo<v8::Value>& args)

int startx = 0;
int starty = 0;
if(args.Length() > 1 && args[1]->IsNumber()) startx = args[1]->ToInteger()->Value();
if(args.Length() > 2 && args[2]->IsNumber()) starty = args[2]->ToInteger()->Value();
if(args.Length() > 1 && args[1]->IsNumber()) startx = Nan::To<int>(args[1]).FromJust();
if(args.Length() > 2 && args[2]->IsNumber()) starty = Nan::To<int>(args[2]).FromJust();

int width = matrix->GetWidth() - startx;
int height = matrix->GetHeight() - starty;
int scroll = SCROLL_TO_LEFT;
int speed = 1;
int loop = 0;

if(args.Length() > 3 && args[3]->IsNumber()) width = args[3]->ToInteger()->Value();
if(args.Length() > 4 && args[4]->IsNumber()) height = args[4]->ToInteger()->Value();
if(args.Length() > 5 && args[5]->IsNumber()) scroll = args[5]->ToInteger()->Value();
if(args.Length() > 6 && args[6]->IsNumber()) speed = args[6]->ToInteger()->Value();
if(args.Length() > 7 && args[7]->IsNumber()) loop = args[7]->ToInteger()->Value();
if(args.Length() > 3 && args[3]->IsNumber()) width = Nan::To<int>(args[3]).FromJust();
if(args.Length() > 4 && args[4]->IsNumber()) height = Nan::To<int>(args[4]).FromJust();
if(args.Length() > 5 && args[5]->IsNumber()) scroll = Nan::To<int>(args[5]).FromJust();
if(args.Length() > 6 && args[6]->IsNumber()) speed = Nan::To<int>(args[6]).FromJust();
if(args.Length() > 7 && args[7]->IsNumber()) loop = Nan::To<int>(args[7]).FromJust();

// convert to ms
speed = speed * 1000;

uvscroll* uv = new uvscroll();
uv->matrix = matrix; uv->callback = new Nan::Callback(Local<Function>::Cast(args[0]));
uv->startx = startx; uv->starty = starty;
uv->width = width; uv->height = height;
uv->scroll = scroll; uv->loop = loop;
uv->matrix = matrix;
uv->callback = new Nan::Callback(Local<Function>::Cast(args[0]));
uv->startx = startx;
uv->starty = starty;
uv->width = width;
uv->height = height;
uv->scroll = scroll;
uv->loop = loop;
uv->speed = speed;

matrix->Ref();
Expand Down Expand Up @@ -717,7 +717,8 @@ void LedMatrix::UV_AfterScroll (uv_work_t* work, int status)
{
uvscroll* uv = static_cast<uvscroll*>(work->data);
uv->matrix->Unref();
uv->callback->Call(0, 0);
Nan::AsyncResource resource("LedMatrix::UV_AfterScroll");
uv->callback->Call(0, 0, &resource);
delete uv;
delete work;
}

0 comments on commit 067c232

Please sign in to comment.