Tj Holowaychuk
14 years ago
3 changed files with 128 additions and 2 deletions
@ -0,0 +1,94 @@ |
|||
|
|||
//
|
|||
// PixelArray.cc
|
|||
//
|
|||
// Copyright (c) 2010 LearnBoost <tj@learnboost.com>
|
|||
//
|
|||
|
|||
#include "PixelArray.h" |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
|
|||
/*
|
|||
* Initialize PixelArray. |
|||
*/ |
|||
|
|||
void |
|||
PixelArray::Initialize(Handle<Object> target) { |
|||
HandleScope scope; |
|||
Local<FunctionTemplate> t = FunctionTemplate::New(PixelArray::New); |
|||
t->InstanceTemplate()->SetInternalFieldCount(1); |
|||
t->SetClassName(String::NewSymbol("CanvasPixelArray")); |
|||
|
|||
Local<ObjectTemplate> proto = t->InstanceTemplate(); |
|||
proto->SetAccessor(String::NewSymbol("length"), GetLength); |
|||
target->Set(String::NewSymbol("CanvasPixelArray"), t->GetFunction()); |
|||
} |
|||
|
|||
/*
|
|||
* Initialize a new PixelArray. |
|||
*/ |
|||
|
|||
Handle<Value> |
|||
PixelArray::New(const Arguments &args) { |
|||
HandleScope scope; |
|||
PixelArray *arr; |
|||
// TODO: arg handling
|
|||
|
|||
switch (args.Length()) { |
|||
// width, height
|
|||
case 2: |
|||
arr = new PixelArray( |
|||
args[0]->Int32Value() |
|||
, args[1]->Int32Value()); |
|||
break; |
|||
// canvas, x, y, width, height
|
|||
case 5: { |
|||
Canvas *canvas = ObjectWrap::Unwrap<Canvas>(args[0]->ToObject()); |
|||
arr = new PixelArray( |
|||
canvas |
|||
, args[1]->Int32Value() |
|||
, args[2]->Int32Value() |
|||
, args[3]->Int32Value() |
|||
, args[4]->Int32Value()); |
|||
} |
|||
break; |
|||
default: |
|||
return ThrowException(Exception::TypeError(String::New("invalid arguments"))); |
|||
} |
|||
|
|||
// Let v8 handle accessors (and clamping)
|
|||
args.This()->SetIndexedPropertiesToPixelData( |
|||
arr->data() |
|||
, arr->length()); |
|||
|
|||
arr->Wrap(args.This()); |
|||
return args.This(); |
|||
} |
|||
|
|||
/*
|
|||
* Get length. |
|||
*/ |
|||
|
|||
Handle<Value> |
|||
PixelArray::GetLength(Local<String> prop, const AccessorInfo &info) { |
|||
return Number::New(info.This()->GetIndexedPropertiesPixelDataLength()); |
|||
} |
|||
|
|||
/*
|
|||
* Initialize a new PixelArray. |
|||
*/ |
|||
|
|||
PixelArray::PixelArray(Canvas *canvas, int src_x, int src_y, int width, int height): |
|||
_width(width), _height(height) { |
|||
} |
|||
|
|||
PixelArray::PixelArray(int width, int height): |
|||
_width(width), _height(height) { |
|||
// TODO: error handling
|
|||
// TODO: implement
|
|||
} |
|||
|
|||
PixelArray::~PixelArray() { |
|||
|
|||
} |
@ -0,0 +1,32 @@ |
|||
|
|||
//
|
|||
// PixelArray.h
|
|||
//
|
|||
// Copyright (c) 2010 LearnBoost <tj@learnboost.com>
|
|||
//
|
|||
|
|||
#ifndef __NODE_PIXEL_ARRAY_H__ |
|||
#define __NODE_PIXEL_ARRAY_H__ |
|||
|
|||
#include "Canvas.h" |
|||
|
|||
class PixelArray: public node::ObjectWrap { |
|||
public: |
|||
static void Initialize(Handle<Object> target); |
|||
static Handle<Value> New(const Arguments &args); |
|||
static Handle<Value> GetLength(Local<String> prop, const AccessorInfo &info); |
|||
inline int length(){ return _width * _height * 4; } |
|||
inline int width(){ return _width; } |
|||
inline int height(){ return _height; } |
|||
inline int stride(){ return _stride; } |
|||
inline uint8_t *data(){ return _data; } |
|||
PixelArray(Canvas *canvas, int x, int y, int width, int height); |
|||
PixelArray(int width, int height); |
|||
~PixelArray(); |
|||
private: |
|||
int _stride; |
|||
uint8_t *_data; |
|||
int _width, _height; |
|||
}; |
|||
|
|||
#endif |
Loading…
Reference in new issue