From b23861d1b6c926aa90151a0fc6a0e07e3a5a15d3 Mon Sep 17 00:00:00 2001 From: Tj Holowaychuk Date: Mon, 1 Nov 2010 12:46:35 -0700 Subject: [PATCH] Added Canvas getter/setters --- src/canvas.cc | 48 +++++++++++++++++++++++++++++++++++++++++++++++- src/canvas.h | 8 ++++---- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/canvas.cc b/src/canvas.cc index 844ec23..c13ad17 100644 --- a/src/canvas.cc +++ b/src/canvas.cc @@ -31,8 +31,11 @@ Canvas::Initialize(Handle target) { t->InstanceTemplate()->SetInternalFieldCount(1); t->SetClassName(String::NewSymbol("Canvas")); + Local proto = t->PrototypeTemplate(); NODE_SET_PROTOTYPE_METHOD(t, "streamPNGSync", StreamPNGSync); NODE_SET_PROTOTYPE_METHOD(t, "savePNG", SavePNG); + proto->SetAccessor(String::NewSymbol("width"), GetWidth, SetWidth); + proto->SetAccessor(String::NewSymbol("height"), GetHeight, SetHeight); target->Set(String::NewSymbol("Canvas"), t->GetFunction()); } @@ -48,12 +51,55 @@ Canvas::New(const Arguments &args) { if (args[0]->IsNumber()) width = args[0]->Uint32Value(); if (args[1]->IsNumber()) height = args[1]->Uint32Value(); - Canvas *canvas = new Canvas(width, height); canvas->Wrap(args.This()); return args.This(); } +/* + * Get width. + */ + +Handle +Canvas::GetWidth(Local prop, const AccessorInfo &info) { + Canvas *canvas = ObjectWrap::Unwrap(info.This()); + return Number::New(canvas->width); +} + +/* + * Set width. + */ + +void +Canvas::SetWidth(Local prop, Local val, const AccessorInfo &info) { + if (val->IsNumber()) { + Canvas *canvas = ObjectWrap::Unwrap(info.This()); + canvas->width = val->Uint32Value(); + } +} + +/* + * Get height. + */ + +Handle +Canvas::GetHeight(Local prop, const AccessorInfo &info) { + Canvas *canvas = ObjectWrap::Unwrap(info.This()); + return Number::New(canvas->height); +} + +/* + * Set height. + */ + +void +Canvas::SetHeight(Local prop, Local val, const AccessorInfo &info) { + if (val->IsNumber()) { + Canvas *canvas = ObjectWrap::Unwrap(info.This()); + canvas->height = val->Uint32Value(); + } +} + /* * Canvas::StreamPNG callback. */ diff --git a/src/canvas.h b/src/canvas.h index 30dc890..3f3a082 100644 --- a/src/canvas.h +++ b/src/canvas.h @@ -52,10 +52,10 @@ class Canvas: public node::ObjectWrap { int height; static void Initialize(Handle target); static Handle New(const Arguments &args); - static Handle SetHeight(const Arguments &args); - static Handle GetHeight(const Arguments &args); - static Handle SetWidth(const Arguments &args); - static Handle GetWidth(const Arguments &args); + static Handle GetWidth(Local prop, const AccessorInfo &info); + static Handle GetHeight(Local prop, const AccessorInfo &info); + static void SetWidth(Local prop, Local val, const AccessorInfo &info); + static void SetHeight(Local prop, Local val, const AccessorInfo &info); static Handle SavePNG(const Arguments &args); static Handle StreamPNGSync(const Arguments &args); static Handle Error(cairo_status_t status);