From ecf8c209380fb0b9b29fc7080c6ab45dcb40edc9 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 23 Oct 2013 18:09:22 -0700 Subject: [PATCH] completely fix (across various g++ versions) clipping regression - closes #2049 --- src/agg/agg_renderer.cpp | 10 ++++++++-- src/agg/process_markers_symbolizer.cpp | 7 ++++--- src/agg/process_polygon_symbolizer.cpp | 4 ++-- src/agg/process_shield_symbolizer.cpp | 4 ++-- src/agg/process_text_symbolizer.cpp | 4 ++-- 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/agg/agg_renderer.cpp b/src/agg/agg_renderer.cpp index 533d6cb5c..991d68206 100644 --- a/src/agg/agg_renderer.cpp +++ b/src/agg/agg_renderer.cpp @@ -335,7 +335,10 @@ void agg_renderer::render_marker(pixel_position const& pos, gamma_ = 1.0; } agg::scanline_u8 sl; - agg::rendering_buffer buf(current_buffer_->raw_data(), width_, height_, width_ * 4); + agg::rendering_buffer buf(current_buffer_->raw_data(), + current_buffer_->width(), + current_buffer_->height(), + current_buffer_->width() * 4); pixfmt_comp_type pixf(buf); pixf.comp_op(static_cast(comp_op)); renderer_base renb(pixf); @@ -441,7 +444,10 @@ template void agg_renderer::debug_draw_box(box2d const& box, double x, double y, double angle) { - agg::rendering_buffer buf(pixmap_.raw_data(), width_, height_, width_ * 4); + agg::rendering_buffer buf(current_buffer_->raw_data(), + current_buffer_->width(), + current_buffer_->height(), + current_buffer_->width() * 4); debug_draw_box(buf, box, x, y, angle); } diff --git a/src/agg/process_markers_symbolizer.cpp b/src/agg/process_markers_symbolizer.cpp index 912593320..9f3f6db65 100644 --- a/src/agg/process_markers_symbolizer.cpp +++ b/src/agg/process_markers_symbolizer.cpp @@ -92,6 +92,7 @@ void agg_renderer::process(markers_symbolizer const& sym, agg::trans_affine geom_tr; evaluate_transform(geom_tr, feature, sym.get_transform()); agg::trans_affine tr = agg::trans_affine_scaling(scale_factor_); + box2d clip_box = clipping_extent(); if ((*mark)->is_vector()) { @@ -139,7 +140,7 @@ void agg_renderer::process(markers_symbolizer const& sym, snap_pixels); vertex_converter, dispatch_type, markers_symbolizer, CoordTransform, proj_transform, agg::trans_affine, conv_types> - converter(clipping_extent(), rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_); + converter(clip_box, rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_); if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true) { geometry_type::types type = feature.paths()[0].type(); @@ -179,7 +180,7 @@ void agg_renderer::process(markers_symbolizer const& sym, snap_pixels); vertex_converter, dispatch_type, markers_symbolizer, CoordTransform, proj_transform, agg::trans_affine, conv_types> - converter(clipping_extent(), rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_); + converter(clip_box, rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_); if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true) { geometry_type::types type = feature.paths()[0].type(); @@ -216,7 +217,7 @@ void agg_renderer::process(markers_symbolizer const& sym, true /*snap rasters no matter what*/); vertex_converter, dispatch_type, markers_symbolizer, CoordTransform, proj_transform, agg::trans_affine, conv_types> - converter(clipping_extent(), rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_); + converter(clip_box, rasterizer_dispatch, sym,t_,prj_trans,tr,scale_factor_); if (sym.clip() && feature.paths().size() > 0) // optional clip (default: true) { diff --git a/src/agg/process_polygon_symbolizer.cpp b/src/agg/process_polygon_symbolizer.cpp index c083d03d6..2691b70c1 100644 --- a/src/agg/process_polygon_symbolizer.cpp +++ b/src/agg/process_polygon_symbolizer.cpp @@ -58,11 +58,11 @@ void agg_renderer::process(polygon_symbolizer const& sym, } agg::trans_affine tr; evaluate_transform(tr, feature, sym.get_transform()); - + box2d clip_box = clipping_extent(); typedef boost::mpl::vector conv_types; vertex_converter, rasterizer, polygon_symbolizer, CoordTransform, proj_transform, agg::trans_affine, conv_types> - converter(clipping_extent(),*ras_ptr,sym,t_,prj_trans,tr,scale_factor_); + converter(clip_box,*ras_ptr,sym,t_,prj_trans,tr,scale_factor_); if (prj_trans.equal() && sym.clip()) converter.set(); //optional clip (default: true) converter.set(); //always transform diff --git a/src/agg/process_shield_symbolizer.cpp b/src/agg/process_shield_symbolizer.cpp index b57a5c686..c6c7b66f8 100644 --- a/src/agg/process_shield_symbolizer.cpp +++ b/src/agg/process_shield_symbolizer.cpp @@ -38,14 +38,14 @@ void agg_renderer::process(shield_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans) { - box2d bb = clipping_extent(); + box2d clip_box = clipping_extent(); shield_symbolizer_helper, label_collision_detector4> helper( sym, feature, prj_trans, width_, height_, scale_factor_, t_, font_manager_, *detector_, - bb); + clip_box); text_renderer ren(*current_buffer_, font_manager_, diff --git a/src/agg/process_text_symbolizer.cpp b/src/agg/process_text_symbolizer.cpp index 64a772f97..b9e9a53ce 100644 --- a/src/agg/process_text_symbolizer.cpp +++ b/src/agg/process_text_symbolizer.cpp @@ -35,14 +35,14 @@ void agg_renderer::process(text_symbolizer const& sym, mapnik::feature_impl & feature, proj_transform const& prj_trans) { - box2d bb = clipping_extent(); + box2d clip_box = clipping_extent(); text_symbolizer_helper, label_collision_detector4> helper( sym, feature, prj_trans, width_,height_, scale_factor_, t_, font_manager_, *detector_, - bb); + clip_box); text_renderer ren(*current_buffer_, font_manager_,