Skip to content

Commit 06d1c7e

Browse files
committed
More Image goodness
1 parent e6ba903 commit 06d1c7e

5 files changed

Lines changed: 58 additions & 2 deletions

File tree

index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('./lib/canvas');

lib/canvas.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
var canvas = require('../build/default/canvas')
1313
, Canvas = canvas.Canvas
14+
, Image = canvas.Image
1415
, cairoVersion = canvas.cairoVersion
1516
, Context2d = require('./context2d')
1617
, PNGStream = require('./pngstream')
@@ -40,6 +41,7 @@ exports.cairoVersion = cairoVersion;
4041

4142
exports.Context2d = Context2d;
4243
exports.PNGStream = PNGStream;
44+
exports.Image = Image;
4345

4446
/**
4547
* Context2d implementation.

src/Image.cc

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
// Copyright (c) 2010 LearnBoost <tj@learnboost.com>
66
//
77

8-
#include "canvas.h"
9-
#include "image.h"
8+
#include "Canvas.h"
9+
#include "Image.h"
1010

1111
/*
1212
* Initialize Image.
@@ -20,6 +20,7 @@ Image::Initialize(Handle<Object> target) {
2020
t->SetClassName(String::NewSymbol("Image"));
2121

2222
Local<ObjectTemplate> proto = t->PrototypeTemplate();
23+
NODE_SET_PROTOTYPE_METHOD(t, "inspect", Inspect);
2324
proto->SetAccessor(String::NewSymbol("src"), GetSrc, SetSrc);
2425
target->Set(String::NewSymbol("Image"), t->GetFunction());
2526
}
@@ -36,11 +37,52 @@ Image::New(const Arguments &args) {
3637
return args.This();
3738
}
3839

40+
/*
41+
* Custom inspect.
42+
*/
43+
44+
Handle<Value>
45+
Image::Inspect(const Arguments &args) {
46+
HandleScope scope;
47+
Image *img = ObjectWrap::Unwrap<Image>(args.This());
48+
Local<String> str = String::New("[Image");
49+
if (img->loaded()) {
50+
str = String::Concat(str, String::New(" "));
51+
str = String::Concat(str, String::New(img->filename()));
52+
}
53+
str = String::Concat(str, String::New("]"));
54+
return scope.Close(str);
55+
}
56+
57+
/*
58+
* Get src path.
59+
*/
60+
61+
Handle<Value>
62+
Image::GetSrc(Local<String>, const AccessorInfo &info) {
63+
Image *img = ObjectWrap::Unwrap<Image>(info.This());
64+
return String::New(img->filename());
65+
}
66+
67+
/*
68+
* Set src path.
69+
*/
70+
71+
void
72+
Image::SetSrc(Local<String>, Local<Value> val, const AccessorInfo &info) {
73+
if (val->IsString()) {
74+
String::AsciiValue src(val);
75+
Image *img = ObjectWrap::Unwrap<Image>(info.This());
76+
img->load(*src);
77+
}
78+
}
79+
3980
/*
4081
* Initialize a new Image.
4182
*/
4283

4384
Image::Image() {
85+
_filename = NULL;
4486
_surface = NULL;
4587
}
4688

@@ -50,4 +92,10 @@ Image::Image() {
5092

5193
Image::~Image() {
5294
cairo_surface_destroy(_surface);
95+
}
96+
97+
void
98+
Image::load(char *path) {
99+
_filename = path;
100+
// TODO: implement
53101
}

src/Image.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ class Image: public node::ObjectWrap {
1616
public:
1717
static void Initialize(Handle<Object> target);
1818
static Handle<Value> New(const Arguments &args);
19+
static Handle<Value> Inspect(const Arguments &args);
1920
static Handle<Value> GetSrc(Local<String> prop, const AccessorInfo &info);
2021
static void SetSrc(Local<String> prop, Local<Value> val, const AccessorInfo &info);
2122
inline cairo_surface_t *surface(){ return _surface; }
2223
inline char *filename(){ return _filename; }
24+
inline bool loaded(){ return _filename; }
25+
void load(char *path);
2326
Image();
2427

2528
private:

src/init.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
//
77

88
#include "Canvas.h"
9+
#include "Image.h"
910
#include "CanvasGradient.h"
1011
#include "CanvasRenderingContext2d.h"
1112

1213
extern "C" void
1314
init (Handle<Object> target) {
1415
HandleScope scope;
1516
Canvas::Initialize(target);
17+
Image::Initialize(target);
1618
Context2d::Initialize(target);
1719
Gradient::Initialize(target);
1820
target->Set(String::New("cairoVersion"), String::New(cairo_version_string()));

0 commit comments

Comments
 (0)