From cbc809ddf592d9b8534b5cdf7e68069dc293afbf Mon Sep 17 00:00:00 2001 From: artemp Date: Wed, 27 Feb 2013 14:43:23 -0500 Subject: [PATCH] + image-filters: add colorize-alpha filter --- include/mapnik/image_filter_grammar.hpp | 8 ++++++-- include/mapnik/image_filter_types.hpp | 15 +++++++++++++-- src/image_filter_grammar.cpp | 13 +++++++++++-- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/include/mapnik/image_filter_grammar.hpp b/include/mapnik/image_filter_grammar.hpp index f65db5f43..ef78b4e34 100644 --- a/include/mapnik/image_filter_grammar.hpp +++ b/include/mapnik/image_filter_grammar.hpp @@ -25,10 +25,12 @@ // boost #include - +// mapnik +#include // stl #include + namespace mapnik { namespace qi = boost::spirit::qi; @@ -42,9 +44,11 @@ struct image_filter_grammar : qi::rule filter; qi::rule, void(ContType&), qi::ascii::space_type> agg_blur_filter; qi::rule, void(ContType&), qi::ascii::space_type> hsla_filter; - qi::rule string_arg; + qi::rule, void(ContType&), qi::ascii::space_type> colorize_alpha_filter; + qi::rule string_arg; qi::rule no_args; qi::uint_parser< unsigned, 10, 1, 3 > radius_; + css_color_grammar css_color_; }; } diff --git a/include/mapnik/image_filter_types.hpp b/include/mapnik/image_filter_types.hpp index a7d71dac8..276caac2a 100644 --- a/include/mapnik/image_filter_types.hpp +++ b/include/mapnik/image_filter_types.hpp @@ -25,7 +25,7 @@ // mapnik #include - +#include // boost #include @@ -61,6 +61,16 @@ struct hsla std::string tinter; }; + + +struct colorize_alpha +{ + colorize_alpha(mapnik::color const& c0, mapnik::color const& c1) + { + //do work + } +}; + typedef boost::variant filter_type; + filter::hsla, + filter::colorize_alpha> filter_type; inline std::ostream& operator<< (std::ostream& os, blur) { diff --git a/src/image_filter_grammar.cpp b/src/image_filter_grammar.cpp index a7aa6d4ec..fba6f213f 100644 --- a/src/image_filter_grammar.cpp +++ b/src/image_filter_grammar.cpp @@ -83,6 +83,8 @@ image_filter_grammar::image_filter_grammar() agg_blur_filter(_val) | hsla_filter(_val) + | + colorize_alpha_filter(_val) ; agg_blur_filter = lit("agg-stack-blur")[_a = 1, _b = 1] @@ -92,11 +94,18 @@ image_filter_grammar::image_filter_grammar() [push_back(_r1,construct(_a,_b))] ; - hsla_filter = (lit("hsla") >> lit('(') >> string_arg[_a = _1] >> lit(')')) + hsla_filter = lit("hsla") >> lit('(') >> string_arg(')')[_a = _1] >> lit(')') [push_back(_r1,construct(_a))] ; - string_arg = +~char_(')'); + colorize_alpha_filter = lit("colorize-alpha") + >> lit('(') + >> css_color_[_a = _1] >> lit(',') + >> css_color_[_b = _1] >> lit(')') + [push_back(_r1,construct(_a,_b))] + ; + + string_arg = + (char_ - lit(_r1)); no_args = -(lit('(') >> lit(')')); }