123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
-
- //
- // Pattern.cc
- //
- // Copyright (c) 2010 LearnBoost <tj@learnboost.com>
- //
-
- #include "Canvas.h"
- #include "Image.h"
- #include "CanvasPattern.h"
-
- Nan::Persistent<FunctionTemplate> Pattern::constructor;
-
- /*
- * Initialize CanvasPattern.
- */
-
- void
- Pattern::Initialize(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE target) {
- Nan::HandleScope scope;
-
- // Constructor
- Local<FunctionTemplate> ctor = Nan::New<FunctionTemplate>(Pattern::New);
- constructor.Reset(ctor);
- ctor->InstanceTemplate()->SetInternalFieldCount(1);
- ctor->SetClassName(Nan::New("CanvasPattern").ToLocalChecked());
-
- ctor->InstanceTemplate()->SetInternalFieldCount(1);
- ctor->SetClassName(Nan::New("CanvasPattern").ToLocalChecked());
-
- // Prototype
- Nan::Set(target, Nan::New("CanvasPattern").ToLocalChecked(), ctor->GetFunction());
- }
-
- /*
- * Initialize a new CanvasPattern.
- */
-
- NAN_METHOD(Pattern::New) {
- if (!info.IsConstructCall()) {
- return Nan::ThrowTypeError("Class constructors cannot be invoked without 'new'");
- }
-
- cairo_surface_t *surface;
-
- Local<Object> obj = info[0]->ToObject();
-
- // Image
- if (Nan::New(Image::constructor)->HasInstance(obj)) {
- Image *img = Nan::ObjectWrap::Unwrap<Image>(obj);
- if (!img->isComplete()) {
- return Nan::ThrowError("Image given has not completed loading");
- }
- surface = img->surface();
-
- // Canvas
- } else if (Nan::New(Canvas::constructor)->HasInstance(obj)) {
- Canvas *canvas = Nan::ObjectWrap::Unwrap<Canvas>(obj);
- surface = canvas->surface();
-
- // Invalid
- } else {
- return Nan::ThrowTypeError("Image or Canvas expected");
- }
-
- Pattern *pattern = new Pattern(surface);
- pattern->Wrap(info.This());
- info.GetReturnValue().Set(info.This());
- }
-
-
- /*
- * Initialize linear gradient.
- */
-
- Pattern::Pattern(cairo_surface_t *surface) {
- _pattern = cairo_pattern_create_for_surface(surface);
- }
-
- /*
- * Destroy the pattern.
- */
-
- Pattern::~Pattern() {
- cairo_pattern_destroy(_pattern);
- }
|