From e13a15e651a5fe1216cfab3eaa647b47fc1edc71 Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Fri, 5 Aug 2011 15:57:22 +0200 Subject: Filters. Adding opacity support in Bump filter. Filters. New Image blur CPF. Filters. Blurs and ABC groups reorganization. (bzr r10527) --- src/extension/internal/filter/abc.h | 59 --------- src/extension/internal/filter/blurs.h | 179 +++++++++++++++++++++++++++ src/extension/internal/filter/bumps.h | 6 +- src/extension/internal/filter/filter-all.cpp | 3 +- 4 files changed, 185 insertions(+), 62 deletions(-) (limited to 'src') diff --git a/src/extension/internal/filter/abc.h b/src/extension/internal/filter/abc.h index 530fd105a..832fb90c2 100755 --- a/src/extension/internal/filter/abc.h +++ b/src/extension/internal/filter/abc.h @@ -8,7 +8,6 @@ * Nicolas Dufour (UI) * * Basic filters - * Blur * Clean edges * Color shift * Diffuse light @@ -35,64 +34,6 @@ namespace Extension { namespace Internal { namespace Filter { -/** - \brief Custom predefined Blur filter. - - Simple horizontal and vertical blur - - Filter's parameters: - * Horizontal blur (0.01->100., default 2) -> blur (stdDeviation) - * Vertical blur (0.01->100., default 2) -> blur (stdDeviation) -*/ - -class Blur : public Inkscape::Extension::Internal::Filter::Filter { -protected: - virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext); - -public: - Blur ( ) : Filter() { }; - virtual ~Blur ( ) { if (_filter != NULL) g_free((void *)_filter); return; } - - static void init (void) { - Inkscape::Extension::build_from_mem( - "\n" - "" N_("Blur, custom (ABCs)") "\n" - "org.inkscape.effect.filter.Blur\n" - "2\n" - "2\n" - "\n" - "all\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "" N_("Simple vertical and horizontal blur effect") "\n" - "\n" - "\n", new Blur()); - }; - -}; - -gchar const * -Blur::get_filter_text (Inkscape::Extension::Extension * ext) -{ - if (_filter != NULL) g_free((void *)_filter); - - std::ostringstream hblur; - std::ostringstream vblur; - - hblur << ext->get_param_float("hblur"); - vblur << ext->get_param_float("vblur"); - - _filter = g_strdup_printf( - "\n" - "\n" - "\n", hblur.str().c_str(), vblur.str().c_str()); - - return _filter; -}; /* Blur filter */ - /** \brief Custom predefined Clean edges filter. diff --git a/src/extension/internal/filter/blurs.h b/src/extension/internal/filter/blurs.h index 5cad23ba3..0fa15dfe6 100644 --- a/src/extension/internal/filter/blurs.h +++ b/src/extension/internal/filter/blurs.h @@ -8,7 +8,9 @@ * Nicolas Dufour (UI) * * Blur filters + * Blur * Cross blur + * Image blur * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -25,6 +27,65 @@ namespace Extension { namespace Internal { namespace Filter { +/** + \brief Custom predefined Blur filter. + + Simple horizontal and vertical blur + + Filter's parameters: + * Horizontal blur (0.01->100., default 2) -> blur (stdDeviation) + * Vertical blur (0.01->100., default 2) -> blur (stdDeviation) +*/ + +class Blur : public Inkscape::Extension::Internal::Filter::Filter { +protected: + virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext); + +public: + Blur ( ) : Filter() { }; + virtual ~Blur ( ) { if (_filter != NULL) g_free((void *)_filter); return; } + + static void init (void) { + Inkscape::Extension::build_from_mem( + "\n" + "" N_("Blur, custom (Blurs)") "\n" + "org.inkscape.effect.filter.Blur\n" + "2\n" + "2\n" + "\n" + "all\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "" N_("Simple vertical and horizontal blur effect") "\n" + "\n" + "\n", new Blur()); + }; + +}; + +gchar const * +Blur::get_filter_text (Inkscape::Extension::Extension * ext) +{ + if (_filter != NULL) g_free((void *)_filter); + + std::ostringstream hblur; + std::ostringstream vblur; + + hblur << ext->get_param_float("hblur"); + vblur << ext->get_param_float("vblur"); + + _filter = g_strdup_printf( + "\n" + "\n" + "\n", hblur.str().c_str(), vblur.str().c_str()); + + return _filter; +}; /* Blur filter */ + + /** \brief Custom predefined Cross blur filter. @@ -105,6 +166,124 @@ CrossBlur::get_filter_text (Inkscape::Extension::Extension * ext) }; /* Cross blur filter */ +/** + \brief Custom predefined Image blur filter. + + Blur eroded by white or transparency + + Filter's parameters: + * Horizontal blur (0.01->10., default 3) -> blur (stdDeviation) + * Vertical blur (0.01->10., default 3) -> blur (stdDeviation) + * Dilatation (n-1th value, 0.->100., default 6) -> colormatrix2 (matrix) + * Erosion (nth value, 0.->100., default 2) -> colormatrix2 (matrix) + * Opacity (0.->1., default 1.) -> composite1 (k2) + * Background color (guint, default -1) -> flood (flood-opacity, flood-color) + * Blend type (enum, default normal) -> blend (mode) + * Blend to background (boolean, default false) -> blend (false: in2="flood", true: in2="BackgroundImage") + +*/ + +class ImageBlur : public Inkscape::Extension::Internal::Filter::Filter { +protected: + virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext); + +public: + ImageBlur ( ) : Filter() { }; + virtual ~ImageBlur ( ) { if (_filter != NULL) g_free((void *)_filter); return; } + + static void init (void) { + Inkscape::Extension::build_from_mem( + "\n" + "" N_("Image blur, custom (Blurs)") "\n" + "org.inkscape.effect.filter.ImageBlur\n" + "\n" + "\n" + "3\n" + "3\n" + "6\n" + "2\n" + "1\n" + "\n" + "\n" + "-1\n" + "\n" + "<_item value=\"normal\">" N_("Normal") "\n" + "<_item value=\"darken\">" N_("Darken") "\n" + "<_item value=\"screen\">" N_("Screen") "\n" + "<_item value=\"multiply\">" N_("Multiply") "\n" + "<_item value=\"lighten\">" N_("Lighten") "\n" + "\n" + "false\n" + "\n" + "\n" + "\n" + "all\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "" N_("Blur eroded by white or transparency") "\n" + "\n" + "\n", new ImageBlur()); + }; + +}; + +gchar const * +ImageBlur::get_filter_text (Inkscape::Extension::Extension * ext) +{ + if (_filter != NULL) g_free((void *)_filter); + + std::ostringstream hblur; + std::ostringstream vblur; + std::ostringstream dilat; + std::ostringstream erosion; + std::ostringstream opacity; + std::ostringstream r; + std::ostringstream g; + std::ostringstream b; + std::ostringstream a; + std::ostringstream blend; + std::ostringstream background; + + hblur << ext->get_param_float("hblur"); + vblur << ext->get_param_float("vblur"); + dilat << ext->get_param_float("dilat"); + erosion << -ext->get_param_float("erosion"); + opacity << ext->get_param_float("opacity"); + + guint32 color = ext->get_param_color("color"); + r << ((color >> 24) & 0xff); + g << ((color >> 16) & 0xff); + b << ((color >> 8) & 0xff); + a << (color & 0xff) / 255.0F; + blend << ext->get_param_enum("blend"); + + if (ext->get_param_bool("background")) { + background << "BackgroundImage" ; + } else { + background << "flood" ; + } + + _filter = g_strdup_printf( + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n", a.str().c_str(), r.str().c_str(), g.str().c_str(), b.str().c_str(), + hblur.str().c_str(), vblur.str().c_str(), dilat.str().c_str(), erosion.str().c_str(), + background.str().c_str(), blend.str().c_str(), opacity.str().c_str()); + + return _filter; +}; /* Image blur filter */ + + + }; /* namespace Filter */ }; /* namespace Internal */ }; /* namespace Extension */ diff --git a/src/extension/internal/filter/bumps.h b/src/extension/internal/filter/bumps.h index 3105dbca1..3591377be 100644 --- a/src/extension/internal/filter/bumps.h +++ b/src/extension/internal/filter/bumps.h @@ -172,6 +172,7 @@ Bump::get_filter_text (Inkscape::Extension::Extension * ext) std::ostringstream floodRed; std::ostringstream floodGreen; std::ostringstream floodBlue; + std::ostringstream floodAlpha; std::ostringstream colorize; @@ -231,6 +232,7 @@ Bump::get_filter_text (Inkscape::Extension::Extension * ext) floodRed << ((imageColor >> 24) & 0xff); floodGreen << ((imageColor >> 16) & 0xff); floodBlue << ((imageColor >> 8) & 0xff); + floodAlpha << (imageColor & 0xff) / 255.0F; if (ext->get_param_bool("colorize")) { colorize << "flood" ; @@ -248,14 +250,14 @@ Bump::get_filter_text (Inkscape::Extension::Extension * ext) "%s\n" "%s\n" "%s\n" - "\n" + "\n" "\n" "\n" "\n" "\n", simplifyImage.str().c_str(), bumpSource.str().c_str(), red.str().c_str(), green.str().c_str(), blue.str().c_str(), crop.str().c_str(), simplifyBump.str().c_str(), lightStart.str().c_str(), lightOptions.str().c_str(), lightEnd.str().c_str(), - floodRed.str().c_str(), floodGreen.str().c_str(), floodBlue.str().c_str(), + floodRed.str().c_str(), floodGreen.str().c_str(), floodBlue.str().c_str(), floodAlpha.str().c_str(), colorize.str().c_str(), blend.str().c_str()); return _filter; diff --git a/src/extension/internal/filter/filter-all.cpp b/src/extension/internal/filter/filter-all.cpp index 210d1d87a..b451ac619 100755 --- a/src/extension/internal/filter/filter-all.cpp +++ b/src/extension/internal/filter/filter-all.cpp @@ -37,7 +37,6 @@ Filter::filters_all (void ) /* Experimental custom predefined filters */ // ABC - Blur::init(); CleanEdges::init(); ColorShift::init(); DiffuseLight::init(); @@ -50,7 +49,9 @@ Filter::filters_all (void ) SpecularLight::init(); // Blurs + Blur::init(); CrossBlur::init(); + ImageBlur::init(); // Bumps Bump::init(); -- cgit v1.2.3