Handle<Value> ImageView::encode(const Arguments& args) { HandleScope scope; ImageView* im = ObjectWrap::Unwrap<ImageView>(args.This()); std::string format = "png"; palette_ptr palette; // accept custom format if (args.Length() > 1){ if (!args[0]->IsString()) return ThrowException(Exception::TypeError( String::New("first arg, 'format' must be a string"))); format = TOSTR(args[0]); } // options hash if (args.Length() >= 2) { if (!args[1]->IsObject()) return ThrowException(Exception::TypeError( String::New("optional second arg must be an options object"))); Local<Object> options = args[1]->ToObject(); if (options->Has(String::New("palette"))) { Local<Value> format_opt = options->Get(String::New("palette")); if (!format_opt->IsObject()) return ThrowException(Exception::TypeError( String::New("'palette' must be an object"))); Local<Object> obj = format_opt->ToObject(); if (obj->IsNull() || obj->IsUndefined() || !Palette::constructor->HasInstance(obj)) return ThrowException(Exception::TypeError(String::New("mapnik.Palette expected as second arg"))); palette = ObjectWrap::Unwrap<Palette>(obj)->palette(); } } // ensure callback is a function Local<Value> callback = args[args.Length()-1]; if (!args[args.Length()-1]->IsFunction()) return ThrowException(Exception::TypeError( String::New("last argument must be a callback function"))); encode_image_baton_t *closure = new encode_image_baton_t(); closure->request.data = closure; closure->im = im; closure->image = im->this_; closure->format = format; closure->palette = palette; closure->error = false; closure->cb = Persistent<Function>::New(Handle<Function>::Cast(callback)); uv_queue_work(uv_default_loop(), &closure->request, EIO_Encode, EIO_AfterEncode); //uv_ref(uv_default_loop()); im->Ref(); return Undefined(); }
Handle<Value> ImageView::isSolid(const Arguments& args) { HandleScope scope; ImageView* im = node::ObjectWrap::Unwrap<ImageView>(args.This()); if (args.Length() == 0) { return isSolidSync(args); } // ensure callback is a function Local<Value> callback = args[args.Length()-1]; if (!args[args.Length()-1]->IsFunction()) return ThrowException(Exception::TypeError( String::New("last argument must be a callback function"))); is_solid_image_view_baton_t *closure = new is_solid_image_view_baton_t(); closure->request.data = closure; closure->im = im; closure->result = true; closure->pixel = 0; closure->error = false; closure->cb = Persistent<Function>::New(Handle<Function>::Cast(callback)); uv_queue_work(uv_default_loop(), &closure->request, EIO_IsSolid, (uv_after_work_cb)EIO_AfterIsSolid); im->Ref(); return Undefined(); }