diff options
| author | Nicolas Dufour <nicoduf@yahoo.fr> | 2011-08-05 13:57:22 +0000 |
|---|---|---|
| committer | JazzyNico <nicoduf@yahoo.fr> | 2011-08-05 13:57:22 +0000 |
| commit | e13a15e651a5fe1216cfab3eaa647b47fc1edc71 (patch) | |
| tree | 93d979ef3c4ef2f9d5d0fdf5caf2cad1c0b98279 /src | |
| parent | emf import. re-evaluate scaling formulas (Bug 341847, comment 7) (diff) | |
| download | inkscape-e13a15e651a5fe1216cfab3eaa647b47fc1edc71.tar.gz inkscape-e13a15e651a5fe1216cfab3eaa647b47fc1edc71.zip | |
Filters. Adding opacity support in Bump filter.
Filters. New Image blur CPF.
Filters. Blurs and ABC groups reorganization.
(bzr r10527)
Diffstat (limited to 'src')
| -rwxr-xr-x | src/extension/internal/filter/abc.h | 59 | ||||
| -rw-r--r-- | src/extension/internal/filter/blurs.h | 179 | ||||
| -rw-r--r-- | src/extension/internal/filter/bumps.h | 6 | ||||
| -rwxr-xr-x | src/extension/internal/filter/filter-all.cpp | 3 |
4 files changed, 185 insertions, 62 deletions
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) <nicoduf@yahoo.fr> * * Basic filters - * Blur * Clean edges * Color shift * Diffuse light @@ -36,64 +35,6 @@ 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( - "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n" - "<name>" N_("Blur, custom (ABCs)") "</name>\n" - "<id>org.inkscape.effect.filter.Blur</id>\n" - "<param name=\"hblur\" gui-text=\"" N_("Horizontal blur:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0.01\" max=\"100.00\">2</param>\n" - "<param name=\"vblur\" gui-text=\"" N_("Vertical blur:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0.01\" max=\"100.00\">2</param>\n" - "<effect>\n" - "<object-type>all</object-type>\n" - "<effects-menu>\n" - "<submenu name=\"" N_("Filters") "\">\n" - "<submenu name=\"" N_("Experimental") "\"/>\n" - "</submenu>\n" - "</effects-menu>\n" - "<menu-tip>" N_("Simple vertical and horizontal blur effect") "</menu-tip>\n" - "</effect>\n" - "</inkscape-extension>\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( - "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" inkscape:label=\"Blur, custom\">\n" - "<feGaussianBlur stdDeviation=\"%s %s\" result=\"blur\" />\n" - "</filter>\n", hblur.str().c_str(), vblur.str().c_str()); - - return _filter; -}; /* Blur filter */ - -/** \brief Custom predefined Clean edges filter. Removes or decreases glows and jaggeries around objects edges after applying some filters 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) <nicoduf@yahoo.fr> * * Blur filters + * Blur * Cross blur + * Image blur * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -26,6 +28,65 @@ 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( + "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n" + "<name>" N_("Blur, custom (Blurs)") "</name>\n" + "<id>org.inkscape.effect.filter.Blur</id>\n" + "<param name=\"hblur\" gui-text=\"" N_("Horizontal blur:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0.01\" max=\"100.00\">2</param>\n" + "<param name=\"vblur\" gui-text=\"" N_("Vertical blur:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0.01\" max=\"100.00\">2</param>\n" + "<effect>\n" + "<object-type>all</object-type>\n" + "<effects-menu>\n" + "<submenu name=\"" N_("Filters") "\">\n" + "<submenu name=\"" N_("Experimental") "\"/>\n" + "</submenu>\n" + "</effects-menu>\n" + "<menu-tip>" N_("Simple vertical and horizontal blur effect") "</menu-tip>\n" + "</effect>\n" + "</inkscape-extension>\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( + "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" inkscape:label=\"Blur, custom\">\n" + "<feGaussianBlur stdDeviation=\"%s %s\" result=\"blur\" />\n" + "</filter>\n", hblur.str().c_str(), vblur.str().c_str()); + + return _filter; +}; /* Blur filter */ + + +/** \brief Custom predefined Cross blur filter. Combine vertical and horizontal blur @@ -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( + "<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n" + "<name>" N_("Image blur, custom (Blurs)") "</name>\n" + "<id>org.inkscape.effect.filter.ImageBlur</id>\n" + "<param name=\"tab\" type=\"notebook\">\n" + "<page name=\"optionstab\" _gui-text=\"Options\">\n" + "<param name=\"hblur\" gui-text=\"" N_("Horizontal blur:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0.01\" max=\"50.00\">3</param>\n" + "<param name=\"vblur\" gui-text=\"" N_("Vertical blur:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0.01\" max=\"50.00\">3</param>\n" + "<param name=\"dilat\" gui-text=\"" N_("Dilatation:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0\" max=\"100\">6</param>\n" + "<param name=\"erosion\" gui-text=\"" N_("Erosion:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0\" max=\"100\">2</param>\n" + "<param name=\"opacity\" gui-text=\"" N_("Opacity:") "\" type=\"float\" appearance=\"full\" precision=\"2\" min=\"0\" max=\"1\">1</param>\n" + "</page>\n" + "<page name=\"backgroundtab\" _gui-text=\"Background\">\n" + "<param name=\"color\" gui-text=\"" N_("Background color") "\" type=\"color\">-1</param>\n" + "<param name=\"blend\" gui-text=\"" N_("Blend type:") "\" type=\"enum\">\n" + "<_item value=\"normal\">" N_("Normal") "</_item>\n" + "<_item value=\"darken\">" N_("Darken") "</_item>\n" + "<_item value=\"screen\">" N_("Screen") "</_item>\n" + "<_item value=\"multiply\">" N_("Multiply") "</_item>\n" + "<_item value=\"lighten\">" N_("Lighten") "</_item>\n" + "</param>\n" + "<param name=\"background\" gui-text=\"" N_("Blend to background") "\" type=\"boolean\" >false</param>\n" + "</page>\n" + "</param>\n" + "<effect>\n" + "<object-type>all</object-type>\n" + "<effects-menu>\n" + "<submenu name=\"" N_("Filters") "\">\n" + "<submenu name=\"" N_("Experimental") "\"/>\n" + "</submenu>\n" + "</effects-menu>\n" + "<menu-tip>" N_("Blur eroded by white or transparency") "</menu-tip>\n" + "</effect>\n" + "</inkscape-extension>\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( + "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" inkscape:label=\"Image blur, custom\">\n" + "<feFlood flood-opacity=\"%s\" flood-color=\"rgb(%s,%s,%s)\" result=\"flood\" />\n" + "<feColorMatrix in=\"SourceGraphic\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 -0.2125 -0.7154 -0.0721 1 0 \" result=\"colormatrix1\" />\n" + "<feGaussianBlur in=\"colormatrix1\" stdDeviation=\"%s %s\" result=\"blur\" />\n" + "<feColorMatrix in=\"blur\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 %s %s \" result=\"colormatrix2\" />\n" + "<feBlend in=\"colormatrix2\" in2=\"%s\" blend=\"normal\" mode=\"%s\" result=\"blend\" />\n" + "<feComposite in=\"blend\" in2=\"blend\" operator=\"arithmetic\" k2=\"%s\" result=\"composite1\" />\n" + "<feComposite in2=\"SourceGraphic\" operator=\"in\" />\n" + "</filter>\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" - "<feFlood flood-color=\"rgb(%s,%s,%s)\" result=\"flood\" />\n" + "<feFlood flood-color=\"rgb(%s,%s,%s)\" flood-opacity=\"%s\" result=\"flood\" />\n" "<feComposite in=\"lighting\" in2=\"%s\" operator=\"arithmetic\" k3=\"1\" k2=\"1\" result=\"composite2\" />\n" "<feBlend in2=\"SourceGraphic\" mode=\"%s\" result=\"blend\" />\n" "<feComposite in=\"blend\" in2=\"SourceGraphic\" operator=\"in\" k2=\"1\" result=\"composite3\" />\n" "</filter>\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(); |
