summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNicolas Dufour <nicoduf@yahoo.fr>2011-08-05 13:57:22 +0000
committerJazzyNico <nicoduf@yahoo.fr>2011-08-05 13:57:22 +0000
commite13a15e651a5fe1216cfab3eaa647b47fc1edc71 (patch)
tree93d979ef3c4ef2f9d5d0fdf5caf2cad1c0b98279 /src
parentemf import. re-evaluate scaling formulas (Bug 341847, comment 7) (diff)
downloadinkscape-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-xsrc/extension/internal/filter/abc.h59
-rw-r--r--src/extension/internal/filter/blurs.h179
-rw-r--r--src/extension/internal/filter/bumps.h6
-rwxr-xr-xsrc/extension/internal/filter/filter-all.cpp3
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();