finish #1512 and adjust tests to use new parameter

This commit is contained in:
Dane Springmeyer 2012-10-01 17:09:28 -07:00
parent abf8102021
commit 798b101f0c
5 changed files with 17 additions and 4 deletions

View file

@ -30,6 +30,7 @@
// boost
#include <boost/shared_ptr.hpp>
#include <boost/optional.hpp>
namespace mapnik
{

View file

@ -98,9 +98,20 @@ void agg_renderer<T>::process(raster_symbolizer const& sym,
filter_radius);
}
}
// handle whether to premultiply the source
// data before compositing
// first, default to what the data reports
bool premultiply_source = !source->premultiplied_alpha_;
// the, allow the user to override
boost::optional<bool> is_premultiplied = sym.premultiplied();
if (is_premultiplied)
{
if (*is_premultiplied) premultiply_source = false;
else premultiply_source = true;
}
composite(current_buffer_->data(), target.data_,
sym.comp_op(), sym.get_opacity(),
start_x, start_y, !source->premultiplied_alpha_);
start_x, start_y, premultiply_source);
}
}
}

View file

@ -55,7 +55,8 @@ raster_symbolizer::raster_symbolizer(raster_symbolizer const& rhs)
opacity_(rhs.opacity_),
colorizer_(rhs.colorizer_),
filter_factor_(rhs.filter_factor_),
mesh_size_(rhs.mesh_size_) {}
mesh_size_(rhs.mesh_size_),
premultiplied_(rhs.premultiplied_) {}
std::string const& raster_symbolizer::get_mode() const
{

View file

@ -4,7 +4,7 @@
<Style name="white">
<Rule>
<RasterSymbolizer opacity="1" scaling="bilinear" comp-op="src-over"/>
<RasterSymbolizer />
</Rule>
</Style>
<Layer name="white"

View file

@ -4,7 +4,7 @@
<Style name="white">
<Rule>
<RasterSymbolizer opacity="1" scaling="bilinear" comp-op="src-over"/>
<RasterSymbolizer premultiplied="false"/>
</Rule>
</Style>
<Layer name="white"