diff --git a/src/cairo_io.cpp b/src/cairo_io.cpp index d0ea38a42..a1c3e8cf1 100644 --- a/src/cairo_io.cpp +++ b/src/cairo_io.cpp @@ -82,6 +82,7 @@ void save_to_cairo_file(mapnik::Map const& map, else if (type == "svg") { surface = cairo_surface_ptr(cairo_svg_surface_create(filename.c_str(),width,height),cairo_surface_closer()); + cairo_svg_surface_restrict_to_version(surface.get(), CAIRO_SVG_VERSION_1_2); } #endif #ifdef CAIRO_HAS_PS_SURFACE diff --git a/test/unit/renderer/cairo_io.cpp b/test/unit/renderer/cairo_io.cpp new file mode 100644 index 000000000..ef5beb780 --- /dev/null +++ b/test/unit/renderer/cairo_io.cpp @@ -0,0 +1,34 @@ +#include "catch.hpp" + +#include +#include + +#pragma GCC diagnostic push +#include +#include +#pragma GCC diagnostic pop + +#include + +#if defined(HAVE_CAIRO) +TEST_CASE("cairo_io") { + +SECTION("save_to_cairo_file - SVG") { + std::string directory_name("/tmp/mapnik-tests/"); + boost::filesystem::create_directories(directory_name); + REQUIRE(mapnik::util::exists(directory_name)); + + std::string output_file(directory_name + "test_save_to_cairo_file.svg"); + + mapnik::Map map(256, 256); + mapnik::save_to_cairo_file(map, output_file); + + std::ifstream stream(output_file, std::ios_base::in | std::ios_base::binary); + std::string actual_output(std::istreambuf_iterator(stream.rdbuf()), std::istreambuf_iterator()); + + // Check the Cairo SVG surface is using SVG 1.2 + CHECK(actual_output.find("version=\"1.2\"") != std::string::npos); +} + +} +#endif diff --git a/test/visual/renderer.hpp b/test/visual/renderer.hpp index 40f56cec7..c832a5ec7 100644 --- a/test/visual/renderer.hpp +++ b/test/visual/renderer.hpp @@ -180,7 +180,17 @@ struct cairo_vector_renderer : vector_renderer_base }; #ifdef CAIRO_HAS_SVG_SURFACE -struct cairo_svg_renderer : cairo_vector_renderer +inline cairo_surface_t *create_svg_1_2(cairo_write_func_t write_func, + void *closure, + double width, + double height) +{ + cairo_surface_t * surface = cairo_svg_surface_create_for_stream(write_func, closure, width, height); + cairo_svg_surface_restrict_to_version(surface, CAIRO_SVG_VERSION_1_2); + return surface; +} + +struct cairo_svg_renderer : cairo_vector_renderer { static constexpr const char * name = "cairo-svg"; static constexpr const char * ext = ".svg";