diff --git a/binding.gyp b/binding.gyp index d32d874..dd37c53 100755 --- a/binding.gyp +++ b/binding.gyp @@ -10,6 +10,7 @@ , "src/Point.cc" , "src/VideoCaptureWrap.cc" , "src/CamShift.cc" + , "src/HighGUI.cc" ] , 'libraries': [ ' NamedWindow::constructor; + +void +NamedWindow::Init(Handle target) { + HandleScope scope; + + // Constructor + constructor = Persistent::New(FunctionTemplate::New(NamedWindow::New)); + constructor->InstanceTemplate()->SetInternalFieldCount(1); + constructor->SetClassName(String::NewSymbol("NamedWindow")); + + // Prototype + //Local proto = constructor->PrototypeTemplate(); + + NODE_SET_PROTOTYPE_METHOD(constructor, "show", Show); + NODE_SET_PROTOTYPE_METHOD(constructor, "destroy", Destroy); + target->Set(String::NewSymbol("NamedWindow"), constructor->GetFunction()); +}; + + +Handle +NamedWindow::New(const Arguments &args) { + HandleScope scope; + + if (args.This()->InternalFieldCount() == 0){ + JSTHROW_TYPE("Cannot Instantiate without new") + } + + NamedWindow* win; + if (args.Length() == 1){ + win = new NamedWindow(std::string(*v8::String::AsciiValue(args[0]->ToString())), 0); + } else if (args.Length() == 2){ + win = new NamedWindow(std::string(*v8::String::AsciiValue(args[0]->ToString())), 0); + } + + win->Wrap(args.Holder()); + return scope.Close(args.Holder()); +} + + +NamedWindow::NamedWindow(const std::string& name, int f){ + winname = std::string(name); + flags = f; + cv::namedWindow(winname, flags); +} + + +Handle +NamedWindow::Show(const v8::Arguments& args){ + SETUP_FUNCTION(NamedWindow) + Matrix *im = ObjectWrap::Unwrap(args[0]->ToObject()); + cv::imshow(self->winname, im->mat); + + return scope.Close(args.Holder()); +} + +Handle +NamedWindow::Destroy(const v8::Arguments& args){ + SETUP_FUNCTION(NamedWindow) + cv::destroyWindow(self->winname); + return scope.Close(args.Holder()); +} diff --git a/src/HighGUI.h b/src/HighGUI.h new file mode 100644 index 0000000..fa26bd3 --- /dev/null +++ b/src/HighGUI.h @@ -0,0 +1,19 @@ +#include "OpenCV.h" + + +class NamedWindow: public node::ObjectWrap { + public: + std::string winname; + int flags; + + + static Persistent constructor; + static void Init(Handle target); + static Handle New(const Arguments &args); + + NamedWindow(const std::string& winname, int flags); + + JSFUNC(Show); + JSFUNC(Destroy); + +}; diff --git a/src/init.cc b/src/init.cc index 9e4494a..063d984 100755 --- a/src/init.cc +++ b/src/init.cc @@ -5,6 +5,7 @@ #include "VideoCaptureWrap.h" #include "Contours.h" #include "CamShift.h" +#include "HighGUI.h" extern "C" void @@ -17,6 +18,8 @@ init(Handle target) { VideoCaptureWrap::Init(target); Contour::Init(target); TrackedObject::Init(target); + + NamedWindow::Init(target); }; NODE_MODULE(opencv, init)