Skip to content

Commit

Permalink
move the palette option to be part of the optional second argument to…
Browse files Browse the repository at this point in the history
… match the map.render() and grid.encode() interfaces - unbreaks tilelive-mapnik
  • Loading branch information
Dane Springmeyer committed Aug 31, 2011
1 parent 4fa76d3 commit 9fea7d0
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 39 deletions.
47 changes: 36 additions & 11 deletions src/mapnik_image.cpp
Expand Up @@ -196,16 +196,29 @@ Handle<Value> Image::encodeSync(const Arguments& args)
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("mapnik.Palette expected as second arg")));
String::New("optional second arg must be an options object")));

Local<Object> obj = args[1]->ToObject();
if (obj->IsNull() || obj->IsUndefined() || !Palette::constructor->HasInstance(obj))
return ThrowException(Exception::TypeError(String::New("mapnik.Palette expected as second arg")));
Local<Object> options = args[1]->ToObject();

palette = ObjectWrap::Unwrap<Palette>(obj)->palette();
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();
}
}

try {
Expand Down Expand Up @@ -257,16 +270,28 @@ Handle<Value> Image::encode(const Arguments& args)
String::New("first arg, 'format' must be a string")));
format = TOSTR(args[0]);
}
if (args.Length() > 2) {

// options hash
if (args.Length() >= 2) {
if (!args[1]->IsObject())
return ThrowException(Exception::TypeError(
String::New("mapnik.Palette expected as second arg")));
String::New("optional second arg must be an options object")));

Local<Object> obj = args[1]->ToObject();
if (obj->IsNull() || obj->IsUndefined() || !Palette::constructor->HasInstance(obj))
return ThrowException(Exception::TypeError(String::New("mapnik.Palette expected as second arg")));
Local<Object> options = args[1]->ToObject();

palette = ObjectWrap::Unwrap<Palette>(obj)->palette();
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
Expand Down
46 changes: 35 additions & 11 deletions src/mapnik_image_view.cpp
Expand Up @@ -116,16 +116,28 @@ Handle<Value> ImageView::encodeSync(const Arguments& args)
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("mapnik.Palette expected as second arg")));
String::New("optional second arg must be an options object")));

Local<Object> obj = args[1]->ToObject();
if (obj->IsNull() || obj->IsUndefined() || !Palette::constructor->HasInstance(obj))
return ThrowException(Exception::TypeError(String::New("mapnik.Palette expected as second arg")));
Local<Object> options = args[1]->ToObject();

palette = ObjectWrap::Unwrap<Palette>(obj)->palette();
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();
}
}

try {
Expand Down Expand Up @@ -178,16 +190,28 @@ Handle<Value> ImageView::encode(const Arguments& args)
String::New("first arg, 'format' must be a string")));
format = TOSTR(args[0]);
}
if (args.Length() > 2) {

// options hash
if (args.Length() >= 2) {
if (!args[1]->IsObject())
return ThrowException(Exception::TypeError(
String::New("mapnik.Palette expected as second arg")));
String::New("optional second arg must be an options object")));

Local<Object> obj = args[1]->ToObject();
if (obj->IsNull() || obj->IsUndefined() || !Palette::constructor->HasInstance(obj))
return ThrowException(Exception::TypeError(String::New("mapnik.Palette expected as second arg")));
Local<Object> options = args[1]->ToObject();

palette = ObjectWrap::Unwrap<Palette>(obj)->palette();
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
Expand Down
48 changes: 32 additions & 16 deletions src/mapnik_map.cpp
Expand Up @@ -1438,16 +1438,28 @@ Handle<Value> Map::renderSync(const Arguments& args)

std::string format = TOSTR(args[0]);
palette_ptr palette;

// options hash
if (args.Length() >= 2) {
if (!args[1]->IsObject())
return ThrowException(Exception::TypeError(
String::New("mapnik.Palette expected as second arg")));
String::New("optional second arg must be an options object")));

Local<Object> options = args[1]->ToObject();

Local<Object> obj = args[1]->ToObject();
if (obj->IsNull() || obj->IsUndefined() || !Palette::constructor->HasInstance(obj))
return ThrowException(Exception::TypeError(String::New("mapnik.Palette expected as second arg")));
if (options->Has(String::New("palette")))
{
Local<Value> bind_opt = options->Get(String::New("palette"));
if (!bind_opt->IsObject())
return ThrowException(Exception::TypeError(
String::New("mapnik.Palette expected as second arg")));

palette = ObjectWrap::Unwrap<Palette>(obj)->palette();
Local<Object> obj = bind_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();
}
}

Map* m = ObjectWrap::Unwrap<Map>(args.This());
Expand Down Expand Up @@ -1488,9 +1500,9 @@ Handle<Value> Map::renderFileSync(const Arguments& args)
return ThrowException(Exception::TypeError(
String::New("first argument must be a path to a file to save")));

if (args.Length() > 3)
if (args.Length() > 2)
return ThrowException(Exception::TypeError(
String::New("accepts three arguments, a required path to a file, an optional options object, eg. {format: 'pdf'}, and an optional Palette object")));
String::New("accepts two arguments, a required path to a file, an optional options object, eg. {format: 'pdf'}")));

std::string format = "png8";
palette_ptr palette;
Expand All @@ -1510,17 +1522,21 @@ Handle<Value> Map::renderFileSync(const Arguments& args)

format = TOSTR(format_opt);
}
}
if (args.Length() >= 3) {
if (!args[2]->IsObject())
return ThrowException(Exception::TypeError(
String::New("mapnik.Palette expected as second arg")));

Local<Object> obj = args[2]->ToObject();
if (obj->IsNull() || obj->IsUndefined() || !Palette::constructor->HasInstance(obj))
return ThrowException(Exception::TypeError(String::New("mapnik.Palette expected as second arg")));
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();
}

palette = ObjectWrap::Unwrap<Palette>(obj)->palette();
}

Map* m = ObjectWrap::Unwrap<Map>(args.This());
Expand Down
4 changes: 3 additions & 1 deletion tests/palette.test.js
Expand Up @@ -37,7 +37,9 @@ exports['test palette rendering'] = function(beforeExit) {

// Test rendering a blank image
var filename = helper.filename();
map.renderFileSync(filename, {}, pal);
var buffer = map.renderSync("png", {palette:pal});
assert.ok(buffer.length < 7000);
map.renderFileSync(filename, {palette:pal});
var stat = fs.statSync(filename);
assert.ok(stat.size < 7000);
};

1 comment on commit 9fea7d0

@kkaefer
Copy link
Member

@kkaefer kkaefer commented on 9fea7d0 Sep 5, 2011

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

D'oh, should've done this in the first place. Thanks for fixing.

Please sign in to comment.