diff --git a/src/Image.cc b/src/Image.cc index 2412d08..58d23d7 100644 --- a/src/Image.cc +++ b/src/Image.cc @@ -50,7 +50,7 @@ Image::New(const Arguments &args) { Handle Image::GetComplete(Local, const AccessorInfo &info) { Image *img = ObjectWrap::Unwrap(info.This()); - return Boolean::New(img->complete); + return Boolean::New(Image::COMPLETE == img->state); } /* @@ -146,10 +146,10 @@ Image::SetOnerror(Local, Local val, const AccessorInfo &info) { */ Image::Image() { - complete = false; filename = (char *) ""; _surface = NULL; width = height = 0; + state = DEFAULT; } /* @@ -198,7 +198,7 @@ EIO_AfterLoad(eio_req *req) { void Image::load() { Ref(); - complete = false; + state = LOADING; eio_custom(EIO_Load, EIO_PRI_DEFAULT, EIO_AfterLoad, this); ev_ref(EV_DEFAULT_UC); } @@ -210,7 +210,7 @@ Image::load() { void Image::loaded() { HandleScope scope; - complete = true; + state = COMPLETE; if (!onload.IsEmpty()) { TryCatch try_catch; diff --git a/src/Image.h b/src/Image.h index f20dd49..654a467 100644 --- a/src/Image.h +++ b/src/Image.h @@ -14,7 +14,6 @@ using namespace v8; class Image: public node::ObjectWrap { public: - bool complete; char *filename; int width, height; Persistent onload; @@ -38,6 +37,12 @@ class Image: public node::ObjectWrap { void loaded(); void load(); Image(); + + enum { + DEFAULT + , LOADING + , COMPLETE + } state; private: cairo_surface_t *_surface;