bool push_explicit_style(Attr const& src, Attr & dst, markers_symbolizer const& sym) { boost::optional<stroke> const& strk = sym.get_stroke(); boost::optional<color> const& fill = sym.get_fill(); boost::optional<float> const& fill_opacity = sym.get_fill_opacity(); if (strk || fill || fill_opacity) { bool success = false; for(unsigned i = 0; i < src.size(); ++i) { success = true; dst.push_back(src[i]); mapnik::svg::path_attributes & attr = dst.last(); if (attr.stroke_flag) { // TODO - stroke attributes need to be boost::optional // for this to work properly if (strk) { attr.stroke_width = strk->get_width(); color const& s_color = strk->get_color(); attr.stroke_color = agg::rgba(s_color.red()/255.0, s_color.green()/255.0, s_color.blue()/255.0, s_color.alpha()/255.0); attr.stroke_opacity = strk->get_opacity(); } } if (attr.fill_flag) { if (fill) { color const& f_color = *fill; attr.fill_color = agg::rgba(f_color.red()/255.0, f_color.green()/255.0, f_color.blue()/255.0, f_color.alpha()/255.0); } if (fill_opacity) { attr.fill_opacity = *fill_opacity; } } } return success; } return false; }
bool push_explicit_style(Attr const& src, Attr & dst, markers_symbolizer const& sym, feature_impl & feature, attributes const& vars) { auto fill_color = get_optional<color>(sym, keys::fill, feature, vars); auto fill_opacity = get_optional<double>(sym, keys::fill_opacity, feature, vars); auto stroke_color = get_optional<color>(sym, keys::stroke, feature, vars); auto stroke_width = get_optional<double>(sym, keys::stroke_width, feature, vars); auto stroke_opacity = get_optional<double>(sym, keys::stroke_opacity, feature, vars); if (fill_color || fill_opacity || stroke_color || stroke_width || stroke_opacity) { bool success = false; for(unsigned i = 0; i < src.size(); ++i) { success = true; dst.push_back(src[i]); mapnik::svg::path_attributes & attr = dst.last(); if (attr.stroke_flag) { if (stroke_width) { attr.stroke_width = *stroke_width; } if (stroke_color) { color const& s_color = *stroke_color; attr.stroke_color = agg::rgba(s_color.red()/255.0, s_color.green()/255.0, s_color.blue()/255.0, s_color.alpha()/255.0); } if (stroke_opacity) { attr.stroke_opacity = *stroke_opacity; } } if (attr.fill_flag) { if (fill_color) { color const& f_color = *fill_color; attr.fill_color = agg::rgba(f_color.red()/255.0, f_color.green()/255.0, f_color.blue()/255.0, f_color.alpha()/255.0); } if (fill_opacity) { attr.fill_opacity = *fill_opacity; } } } return success; } return false; }