Browse Source

Improve Image mode API

v1.x
c-spencer 13 years ago
parent
commit
03584c3307
  1. 58
      src/Image.cc
  2. 4
      src/Image.h

58
src/Image.cc

@ -53,6 +53,11 @@ Image::Initialize(Handle<Object> target) {
proto->SetAccessor(String::NewSymbol("height"), GetHeight);
proto->SetAccessor(String::NewSymbol("onload"), GetOnload, SetOnload);
proto->SetAccessor(String::NewSymbol("onerror"), GetOnerror, SetOnerror);
#if CAIRO_VERSION_MINOR >= 10
proto->SetAccessor(String::NewSymbol("dataMode"), GetDataMode, SetDataMode);
constructor->Set(String::NewSymbol("MODE_IMAGE"), Number::New(1));
constructor->Set(String::NewSymbol("MODE_MIME"), Number::New(2));
#endif
target->Set(String::NewSymbol("Image"), constructor->GetFunction());
}
@ -64,22 +69,7 @@ Handle<Value>
Image::New(const Arguments &args) {
HandleScope scope;
Image *img = new Image;
img->data_mode = DATA_IMAGE;
#if CAIRO_VERSION_MINOR >= 10
if (args[0]->IsString()) {
String::AsciiValue mode(args[0]->ToString());
if (0 == strcmp("mime_only", *mode)) {
img->data_mode = DATA_MIME;
} else if (0 == strcmp("image_only", *mode)) {
img->data_mode = DATA_IMAGE;
} else if (0 == strcmp("image_and_mime", *mode)) {
img->data_mode = DATA_IMAGE_AND_MIME;
}
}
#endif
img->Wrap(args.This());
return args.This();
}
@ -95,6 +85,44 @@ Image::GetComplete(Local<String>, const AccessorInfo &info) {
return scope.Close(Boolean::New(Image::COMPLETE == img->state));
}
#if CAIRO_VERSION_MINOR >= 10
/*
* Get dataMode.
*/
Handle<Value>
Image::GetDataMode(Local<String>, const AccessorInfo &info) {
HandleScope scope;
Image *img = ObjectWrap::Unwrap<Image>(info.This());
return scope.Close(Number::New(img->data_mode));
}
/*
* Set dataMode.
*/
void
Image::SetDataMode(Local<String>, Local<Value> val, const AccessorInfo &info) {
if (val->IsNumber()) {
Image *img = ObjectWrap::Unwrap<Image>(info.This());
int mode = val->Uint32Value();
switch (mode) {
case 1:
img->data_mode = DATA_IMAGE;
break;
case 2:
img->data_mode = DATA_MIME;
break;
case 3:
img->data_mode = DATA_IMAGE_AND_MIME;
break;
}
}
}
#endif
/*
* Get width.
*/

4
src/Image.h

@ -30,9 +30,11 @@ class Image: public node::ObjectWrap {
static Handle<Value> GetComplete(Local<String> prop, const AccessorInfo &info);
static Handle<Value> GetWidth(Local<String> prop, const AccessorInfo &info);
static Handle<Value> GetHeight(Local<String> prop, const AccessorInfo &info);
static Handle<Value> GetDataMode(Local<String> prop, const AccessorInfo &info);
static void SetSource(Local<String> prop, Local<Value> val, const AccessorInfo &info);
static void SetOnload(Local<String> prop, Local<Value> val, const AccessorInfo &info);
static void SetOnerror(Local<String> prop, Local<Value> val, const AccessorInfo &info);
static void SetDataMode(Local<String> prop, Local<Value> val, const AccessorInfo &info);
inline cairo_surface_t *surface(){ return _surface; }
inline uint8_t *data(){ return cairo_image_surface_get_data(_surface); }
inline int stride(){ return cairo_image_surface_get_stride(_surface); }
@ -71,7 +73,7 @@ class Image: public node::ObjectWrap {
} state;
enum {
DATA_IMAGE,
DATA_IMAGE = 1,
DATA_MIME,
DATA_IMAGE_AND_MIME
} data_mode;

Loading…
Cancel
Save