// // Image.h // // Copyright (c) 2010 LearnBoost // #ifndef __NODE_IMAGE_H__ #define __NODE_IMAGE_H__ #include "Canvas.h" class Image: public node::ObjectWrap { public: char *filename; int width, height; Persistent onload; Persistent onerror; static Persistent constructor; static void Initialize(Handle target); static Handle New(const Arguments &args); static Handle GetSrc(Local prop, const AccessorInfo &info); static Handle GetOnload(Local prop, const AccessorInfo &info); static Handle GetOnerror(Local prop, const AccessorInfo &info); static Handle GetComplete(Local prop, const AccessorInfo &info); static Handle GetWidth(Local prop, const AccessorInfo &info); static Handle GetHeight(Local prop, const AccessorInfo &info); static void SetSrc(Local prop, Local val, const AccessorInfo &info); static void SetOnload(Local prop, Local val, const AccessorInfo &info); static void SetOnerror(Local prop, Local 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); } static int isPNG(uint8_t *data); static int isJPEG(uint8_t *data); static int isGIF(uint8_t *data); static cairo_status_t readPNG(void *closure, unsigned char *data, unsigned len); inline int isComplete(){ return COMPLETE == state; } cairo_status_t loadSurface(); cairo_status_t loadFromBuffer(uint8_t *buf, unsigned len); cairo_status_t loadPNGFromBuffer(uint8_t *buf); cairo_status_t loadPNG(); #ifdef HAVE_JPEG cairo_status_t loadJPEGFromBuffer(uint8_t *buf, unsigned len); cairo_status_t loadJPEG(); #endif void error(Local error); void loaded(); cairo_status_t load(); Image(); enum { DEFAULT , LOADING , COMPLETE } state; typedef enum { UNKNOWN , JPEG , PNG } type; static type extension(const char *filename); private: cairo_surface_t *_surface; ~Image(); }; #endif