From 067c23237fefc19808e2d477c5bfe1c8fcf1c542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Lehni?= Date: Tue, 4 Feb 2020 17:58:09 +0100 Subject: [PATCH] Fix compilation errors on Node.js 13 --- src/ledmatrix.cc | 173 ++++++++++++++++++++++++----------------------- 1 file changed, 87 insertions(+), 86 deletions(-) diff --git a/src/ledmatrix.cc b/src/ledmatrix.cc index b3afdb9..e3a2f1c 100755 --- a/src/ledmatrix.cc +++ b/src/ledmatrix.cc @@ -25,10 +25,10 @@ using namespace node; using namespace rgb_matrix; using rgb_matrix::GPIO; -Nan::Persistent LedMatrix::constructor; +Nan::Persistent LedMatrix::constructor; std::map LedMatrix::fontMap; -LedMatrix::LedMatrix (int rows, int cols , int parallel_displays, int chained_displays, int brightness, const char* mapping, const char* rgbseq, std::vector flags) +LedMatrix::LedMatrix (int rows, int cols, int parallel_displays, int chained_displays, int brightness, const char* mapping, const char* rgbseq, std::vector flags) { //dump out flags into a vector of char* @@ -74,11 +74,11 @@ LedMatrix::~LedMatrix (void) delete matrix; } -void LedMatrix::Init (v8::Local exports) +void LedMatrix::Init (Local exports) { Nan::HandleScope scope; - v8::Local tpl = Nan::New(New); + Local tpl = Nan::New(New); tpl->SetClassName(Nan::New("LedMatrix").ToLocalChecked()); tpl->InstanceTemplate()->SetInternalFieldCount(1); @@ -97,9 +97,12 @@ void LedMatrix::Init (v8::Local 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) @@ -220,39 +223,39 @@ void LedMatrix :: DrawText (const Nan::FunctionCallbackInfo& args) if(args.Length() > 0 && args[0]->IsNumber()) { - x = args[0]->ToInteger()->Value(); + x = Nan::To(args[0]).FromJust(); } if(args.Length() > 1 && args[1]->IsNumber()) { - y = args[1]->ToInteger()->Value(); + y = Nan::To(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())); 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())); font = std::string(*str); } if(args.Length() > 4 && args[4]->IsNumber()) { - r = args[4]->ToInteger()->Value(); + r = Nan::To(args[4]).FromJust(); } if(args.Length() > 5 && args[5]->IsNumber()) { - g = args[5]->ToInteger()->Value(); + g = Nan::To(args[5]).FromJust(); } if(args.Length() > 6 && args[6]->IsNumber()) { - b = args[6]->ToInteger()->Value(); + b = Nan::To(args[6]).FromJust(); } return matrix->DrawText(x, y, std::make_tuple(r,g,b), text.c_str(), font.c_str()); @@ -278,32 +281,32 @@ void LedMatrix :: DrawCircle (const Nan::FunctionCallbackInfo& args) if(args.Length() > 0 && args[0]->IsNumber()) { - x = args[0]->ToInteger()->Value(); + x = Nan::To(args[0]).FromJust(); } if(args.Length() > 1 && args[1]->IsNumber()) { - y = args[1]->ToInteger()->Value(); + y = Nan::To(args[1]).FromJust(); } if(args.Length() > 2 && args[2]->IsNumber()) { - radius = args[2]->ToInteger()->Value(); + radius = Nan::To(args[2]).FromJust(); } if(args.Length() > 3 && args[3]->IsNumber()) { - r = args[3]->ToInteger()->Value(); + r = Nan::To(args[3]).FromJust(); } if(args.Length() > 4 && args[4]->IsNumber()) { - g = args[4]->ToInteger()->Value(); + g = Nan::To(args[4]).FromJust(); } if(args.Length() > 5 && args[5]->IsNumber()) { - b = args[5]->ToInteger()->Value(); + b = Nan::To(args[5]).FromJust(); } return matrix->DrawCircle( x, y, radius, std::make_tuple(r, g, b)); @@ -329,38 +332,38 @@ void LedMatrix :: DrawLine (const Nan::FunctionCallbackInfo& args) if (args.Length() > 0 && args[0]->IsNumber()) { - x0 = args[0]->ToInteger()->Value(); + x0 = Nan::To(args[0]).FromJust(); } if (args.Length() > 1 && args[1]->IsNumber()) { - y0 = args[1]->ToInteger()->Value(); + y0 = Nan::To(args[1]).FromJust(); } if (args.Length() > 2 && args[2]->IsNumber()) { - x1 = args[2]->ToInteger()->Value(); + x1 = Nan::To(args[2]).FromJust(); } if (args.Length() > 3 && args[3]->IsNumber()) { - y1 = args[3]->ToInteger()->Value(); + y1 = Nan::To(args[3]).FromJust(); } if (args.Length() > 4 && args[4]->IsNumber()) { - r = args[4]->ToInteger()->Value(); + r = Nan::To(args[4]).FromJust(); } if (args.Length() > 5 && args[5]->IsNumber()) { - g = args[5]->ToInteger()->Value(); + g = Nan::To(args[5]).FromJust(); } if (args.Length() > 6 && args[6]->IsNumber()) { - b = args[6]->ToInteger()->Value(); + b = Nan::To(args[6]).FromJust(); } return matrix->DrawLine( x0, y0, x1, y1, std::make_tuple(r, g, b)); @@ -376,7 +379,7 @@ void LedMatrix :: Brightness (const Nan::FunctionCallbackInfo& args) LedMatrix* matrix = ObjectWrap::Unwrap(args.Holder()); int b = 100; - b = args[0]->ToInteger()->Value(); + b = Nan::To(args[0]).FromJust(); return matrix->Brightness(b); } @@ -402,52 +405,44 @@ void LedMatrix::New(const Nan::FunctionCallbackInfo& args) std::string mapping = "regular"; std::string rgbSeq = "RGB"; - + Local context = Nan::GetCurrentContext(); if(args.Length() > 0 && args[0]->IsNumber()) { - rows = args[0]->ToInteger()->Value(); + rows = Nan::To(args[0]).FromJust(); } if(args.Length() > 1 && args[1]->IsNumber()) { - cols = args[1]->ToInteger()->Value(); + cols = Nan::To(args[1]).FromJust(); } if(args.Length() > 2 && args[2]->IsNumber()) { - chained = args[2]->ToInteger()->Value(); + chained = Nan::To(args[2]).FromJust(); } if(args.Length() > 3 && args[3]->IsNumber()) { - parallel = args[3]->ToInteger()->Value(); + parallel = Nan::To(args[3]).FromJust(); } if(args.Length() > 4 && args[4]->IsNumber()) { - brightness = args[4]->ToInteger()->Value(); + brightness = Nan::To(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 strings; - Handle val; - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - v8::HandleScope handle_scope(isolate); - - if(args.Length() > 7 && args[7]->IsArray()) - { - Handle jsArray = Handle::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 = Local::Cast(args[7]); + for(unsigned int i = 0; i < array->Length(); i++) { + Local val = array->Get(context, i).ToLocalChecked(); + Nan::Utf8String str(val->ToString(context).FromMaybe(Local())); + strings.push_back(std::string(*str)); } } @@ -480,11 +475,11 @@ void LedMatrix::SetPixel (const Nan::FunctionCallbackInfo& 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(args[0]).FromJust(); + int y = Nan::To(args[1]).FromJust(); + int r = Nan::To(args[2]).FromJust(); + int g = Nan::To(args[3]).FromJust(); + int b = Nan::To(args[4]).FromJust(); matrix->SetPixel(x, y, r, g, b); } @@ -494,10 +489,10 @@ void LedMatrix::Clear (const Nan::FunctionCallbackInfo& args) LedMatrix* matrix = ObjectWrap::Unwrap(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(args[0]).FromJust(); + int y = Nan::To(args[1]).FromJust(); + int w = Nan::To(args[2]).FromJust(); + int h = Nan::To(args[3]).FromJust(); matrix->Clear(x, y, w, h); } else { matrix->Clear(); @@ -512,9 +507,9 @@ void LedMatrix::Fill (const Nan::FunctionCallbackInfo& 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(args[0]).FromJust(); + int g = Nan::To(args[1]).FromJust(); + int b = Nan::To(args[2]).FromJust(); matrix->Fill(r, g, b); } @@ -526,10 +521,11 @@ void LedMatrix::SetImageBuffer (const Nan::FunctionCallbackInfo& args LedMatrix* matrix = ObjectWrap::Unwrap(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 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(args[1]).FromJust(); + int height = Nan::To(args[2]).FromJust(); assert((int)bufl == width*height*3); @@ -558,8 +554,8 @@ void LedMatrix::Draw (const Nan::FunctionCallbackInfo& 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(args[0]).FromJust(); + if(args.Length() > 1 && args[1]->IsNumber()) starty = Nan::To(args[1]).FromJust(); int width = matrix->GetWidth() - startx; int height = matrix->GetHeight() - starty; @@ -568,12 +564,12 @@ void LedMatrix::Draw (const Nan::FunctionCallbackInfo& 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(args[2]).FromJust(); + if(args.Length() > 3 && args[3]->IsNumber()) height = Nan::To(args[3]).FromJust(); + if(args.Length() > 4 && args[4]->IsNumber()) imgx = Nan::To(args[4]).FromJust(); + if(args.Length() > 5 && args[5]->IsNumber()) imgy = Nan::To(args[5]).FromJust(); + if(args.Length() > 6 && args[6]->IsBoolean()) looph = Nan::To(args[6]).FromJust(); + if(args.Length() > 7 && args[7]->IsBoolean()) loopv = Nan::To(args[7]).FromJust(); matrix->Draw(startx, starty, width, height, imgx, imgy, looph, loopv); @@ -589,8 +585,8 @@ void LedMatrix::Scroll (const Nan::FunctionCallbackInfo& 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(args[1]).FromJust(); + if(args.Length() > 2 && args[2]->IsNumber()) starty = Nan::To(args[2]).FromJust(); int width = matrix->GetWidth() - startx; int height = matrix->GetHeight() - starty; @@ -598,20 +594,24 @@ void LedMatrix::Scroll (const Nan::FunctionCallbackInfo& args) 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(args[3]).FromJust(); + if(args.Length() > 4 && args[4]->IsNumber()) height = Nan::To(args[4]).FromJust(); + if(args.Length() > 5 && args[5]->IsNumber()) scroll = Nan::To(args[5]).FromJust(); + if(args.Length() > 6 && args[6]->IsNumber()) speed = Nan::To(args[6]).FromJust(); + if(args.Length() > 7 && args[7]->IsNumber()) loop = Nan::To(args[7]).FromJust(); // convert to ms speed = speed * 1000; uvscroll* uv = new uvscroll(); - uv->matrix = matrix; uv->callback = new Nan::Callback(Local::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::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(); @@ -717,7 +717,8 @@ void LedMatrix::UV_AfterScroll (uv_work_t* work, int status) { uvscroll* uv = static_cast(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; }