// // Pattern.cc // // Copyright (c) 2010 LearnBoost // #include "Canvas.h" #include "Image.h" #include "CanvasPattern.h" Persistent Pattern::constructor; /* * Initialize CanvasPattern. */ void Pattern::Initialize(Handle target) { NanScope(); // Constructor Local ctor = FunctionTemplate::New(Pattern::New); NanAssignPersistent(FunctionTemplate, constructor, ctor); ctor->InstanceTemplate()->SetInternalFieldCount(1); ctor->SetClassName(NanSymbol("CanvasPattern")); ctor->InstanceTemplate()->SetInternalFieldCount(1); ctor->SetClassName(NanSymbol("CanvasPattern")); // Prototype target->Set(NanSymbol("CanvasPattern"), ctor->GetFunction()); } /* * Initialize a new CanvasPattern. */ NAN_METHOD(Pattern::New) { NanScope(); int w = 0 , h = 0; cairo_surface_t *surface; Local obj = args[0]->ToObject(); // Image if (NanHasInstance(Image::constructor, obj)) { Image *img = ObjectWrap::Unwrap(obj); if (!img->isComplete()) { return NanThrowError("Image given has not completed loading"); } w = img->width; h = img->height; surface = img->surface(); // Canvas } else if (NanHasInstance(Canvas::constructor, obj)) { Canvas *canvas = ObjectWrap::Unwrap(obj); w = canvas->width; h = canvas->height; surface = canvas->surface(); // Invalid } else { return NanThrowTypeError("Image or Canvas expected"); } Pattern *pattern = new Pattern(surface,w,h); pattern->Wrap(args.This()); NanReturnValue(args.This()); } /* * Initialize linear gradient. */ Pattern::Pattern(cairo_surface_t *surface, int w, int h): _width(w), _height(h) { _pattern = cairo_pattern_create_for_surface(surface); } /* * Destroy the pattern. */ Pattern::~Pattern() { cairo_pattern_destroy(_pattern); }