void agg_renderer<T>::end_style_processing(feature_type_style const& st) { if (style_level_compositing_) { bool blend_from = false; if (st.image_filters().size() > 0) { blend_from = true; mapnik::filter::filter_visitor<image_32> visitor(*current_buffer_); BOOST_FOREACH(mapnik::filter::filter_type const& filter_tag, st.image_filters()) { boost::apply_visitor(visitor, filter_tag); } } if (st.comp_op()) { composite(pixmap_.data(),current_buffer_->data(), *st.comp_op(), st.get_opacity(), 0, 0, false); //compositeTexture(styleTexture_, mainTexture_, static_cast<composite_mode_e>(*st.comp_op())); } else if (blend_from || st.get_opacity() < 1) { composite(pixmap_.data(),current_buffer_->data(), src_over, st.get_opacity(), 0, 0, false); } // apply any 'direct' image filters mapnik::filter::filter_visitor<image_32> visitor(pixmap_); BOOST_FOREACH(mapnik::filter::filter_type const& filter_tag, st.direct_image_filters()) { boost::apply_visitor(visitor, filter_tag); } }
void cairo_renderer<T>::end_style_processing(feature_type_style const & st) { MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer:end style processing"; if (style_level_compositing_) { context_.pop_group(); composite_mode_e comp_op = st.comp_op() ? *st.comp_op() : src_over; context_.set_operator(comp_op); context_.paint(st.get_opacity()); } }
void agg_renderer<T>::start_style_processing(feature_type_style const& st) { MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Start processing style"; if (st.comp_op() || st.image_filters().size() > 0 || st.get_opacity() < 1) { style_level_compositing_ = true; } else { style_level_compositing_ = false; } if (style_level_compositing_) { if (!internal_buffer_) { internal_buffer_ = boost::make_shared<buffer_type>(pixmap_.width(),pixmap_.height()); } else { internal_buffer_->set_background(color(0,0,0,0)); // fill with transparent colour } current_buffer_ = internal_buffer_.get(); } else { current_buffer_ = &pixmap_; } }
void cairo_renderer<T>::start_style_processing(feature_type_style const & st) { MAPNIK_LOG_DEBUG(cairo_renderer) << "cairo_renderer:start style processing"; style_level_compositing_ = st.comp_op() || st.get_opacity() < 1; if (style_level_compositing_) { context_.push_group(); } }
void agg_renderer<T0,T1>::end_style_processing(feature_type_style const& st) { if (style_level_compositing_) { bool blend_from = false; if (st.image_filters().size() > 0) { blend_from = true; mapnik::filter::filter_visitor<image_32> visitor(*current_buffer_); for (mapnik::filter::filter_type const& filter_tag : st.image_filters()) { boost::apply_visitor(visitor, filter_tag); } } if (st.comp_op()) { composite(pixmap_.data(), current_buffer_->data(), *st.comp_op(), st.get_opacity(), -common_.t_.offset(), -common_.t_.offset(), false); } else if (blend_from || st.get_opacity() < 1.0) { composite(pixmap_.data(), current_buffer_->data(), src_over, st.get_opacity(), -common_.t_.offset(), -common_.t_.offset(), false); } } // apply any 'direct' image filters mapnik::filter::filter_visitor<image_32> visitor(pixmap_); for (mapnik::filter::filter_type const& filter_tag : st.direct_image_filters()) { boost::apply_visitor(visitor, filter_tag); } MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: End processing style"; }
void agg_renderer<T0,T1>::start_style_processing(feature_type_style const& st) { MAPNIK_LOG_DEBUG(agg_renderer) << "agg_renderer: Start processing style"; if (st.comp_op() || st.image_filters().size() > 0 || st.get_opacity() < 1) { style_level_compositing_ = true; } else { style_level_compositing_ = false; } if (style_level_compositing_) { if (st.image_filters_inflate()) { int radius = 0; mapnik::filter::filter_radius_visitor visitor(radius); for (mapnik::filter::filter_type const& filter_tag : st.image_filters()) { boost::apply_visitor(visitor, filter_tag); } if (radius > common_.t_.offset()) { common_.t_.set_offset(radius); } int offset = common_.t_.offset(); unsigned target_width = common_.width_ + (offset * 2); unsigned target_height = common_.height_ + (offset * 2); ras_ptr->clip_box(-int(offset*2),-int(offset*2),target_width,target_height); if (!internal_buffer_ || (internal_buffer_->width() < target_width || internal_buffer_->height() < target_height)) { internal_buffer_ = std::make_shared<buffer_type>(target_width,target_height); } else { internal_buffer_->set_background(color(0,0,0,0)); // fill with transparent colour } } else { if (!internal_buffer_) { internal_buffer_ = std::make_shared<buffer_type>(common_.width_,common_.height_); } else { internal_buffer_->set_background(color(0,0,0,0)); // fill with transparent colour } common_.t_.set_offset(0); ras_ptr->clip_box(0,0,common_.width_,common_.height_); } current_buffer_ = internal_buffer_.get(); } else { common_.t_.set_offset(0); ras_ptr->clip_box(0,0,common_.width_,common_.height_); current_buffer_ = &pixmap_; } }