add basic cairo support

This commit is contained in:
artemp 2015-02-19 12:03:15 +01:00
parent 5678e55abf
commit fec1d75e8e
5 changed files with 25 additions and 5 deletions

View File

@ -534,7 +534,7 @@ void render_grid(mapnik::Map const& map, double scaling_factor, QPixmap & pix)
void render_cairo(mapnik::Map const& map, double scaling_factor, QPixmap & pix)
{
// FIXME
#if 0 //def HAVE_CAIRO
#ifdef HAVE_CAIRO
mapnik::cairo_surface_ptr image_surface(cairo_image_surface_create(CAIRO_FORMAT_ARGB32,map.width(),map.height()),
mapnik::cairo_surface_closer());
mapnik::cairo_ptr cairo = mapnik::create_context(image_surface);

View File

@ -80,6 +80,8 @@ void cairo_renderer<T>::process(debug_symbolizer const& sym,
}
else if (mode == DEBUG_SYM_MODE_VERTEX)
{
// FIXME
#if 0
for (auto const& geom : feature.paths())
{
double x;
@ -100,6 +102,7 @@ void cairo_renderer<T>::process(debug_symbolizer const& sym,
context_.stroke();
}
}
#endif
}
}

View File

@ -118,6 +118,8 @@ void cairo_renderer<T>::process(line_pattern_symbolizer const& sym,
if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
// FIXME
#if 0
for (auto const& geom : feature.paths())
{
@ -127,6 +129,7 @@ void cairo_renderer<T>::process(line_pattern_symbolizer const& sym,
converter.apply(va);
}
}
#endif
}
template void cairo_renderer<cairo_ptr>::process(line_pattern_symbolizer const&,

View File

@ -95,14 +95,23 @@ void cairo_renderer<T>::process(line_symbolizer const& sym,
if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
for (geometry_type const& geom : feature.paths())
mapnik::new_geometry::geometry const& geometry = feature.get_geometry();
if (geometry.is<mapnik::new_geometry::line_string>())
{
if (geom.size() > 1)
auto const& line = mapnik::util::get<mapnik::new_geometry::line_string>(geometry);
mapnik::new_geometry::line_string_vertex_adapter va(line);
converter.apply(va);
}
else if (geometry.is<mapnik::new_geometry::multi_line_string>())
{
auto const& multi_line = mapnik::util::get<mapnik::new_geometry::multi_line_string>(geometry);
for (auto const& line : multi_line)
{
vertex_adapter va(geom);
mapnik::new_geometry::line_string_vertex_adapter va(line);
converter.apply(va);
}
}
// stroke
context_.set_fill_rule(CAIRO_FILL_RULE_WINDING);
context_.stroke();

View File

@ -66,7 +66,8 @@ void cairo_renderer<T>::process(polygon_pattern_symbolizer const& sym,
{
double x0 = 0.0;
double y0 = 0.0;
// FIXME
#if 0
if (feature.num_geometries() > 0)
{
using clipped_geometry_type = agg::conv_clip_polygon<vertex_adapter>;
@ -80,6 +81,7 @@ void cairo_renderer<T>::process(polygon_pattern_symbolizer const& sym,
}
offset_x = std::abs(clip_box.width() - x0);
offset_y = std::abs(clip_box.height() - y0);
#endif
}
if ((*marker)->is_bitmap())
@ -112,6 +114,8 @@ void cairo_renderer<T>::process(polygon_pattern_symbolizer const& sym,
if (simplify_tolerance > 0.0) converter.set<simplify_tag>(); // optional simplify converter
if (smooth > 0.0) converter.set<smooth_tag>(); // optional smooth converter
// FIXME
#if 0
for ( geometry_type const& geom : feature.paths())
{
if (geom.size() > 2)
@ -120,6 +124,7 @@ void cairo_renderer<T>::process(polygon_pattern_symbolizer const& sym,
converter.apply(va);
}
}
#endif
// fill polygon
context_.set_fill_rule(CAIRO_FILL_RULE_EVEN_ODD);
context_.fill();