summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/extension/internal/filter/color.h229
-rwxr-xr-xsrc/extension/internal/filter/experimental.h62
-rwxr-xr-xsrc/extension/internal/filter/filter-all.cpp3
3 files changed, 263 insertions, 31 deletions
diff --git a/src/extension/internal/filter/color.h b/src/extension/internal/filter/color.h
index fcae5f8c3..cdf8ffe90 100755
--- a/src/extension/internal/filter/color.h
+++ b/src/extension/internal/filter/color.h
@@ -8,9 +8,12 @@
* Nicolas Dufour (UI) <nicoduf@yahoo.fr>
*
* Color filters
+ * Brightness
* Colorize
* Duochrome
* Electrize
+ * Greyscale
+ * Lightness
* Quadritone
* Solarize
* Tritone
@@ -31,6 +34,75 @@ namespace Internal {
namespace Filter {
/**
+ \brief Custom predefined Brightness filter.
+
+ Brightness filter.
+
+ Filter's parameters:
+ * Strength (-10.->10., default 10) -> colorMatrix (RVB entries [/10])
+ * Vibration (-10.->10., default 0.) -> colorMatrix (6 other entries [/10])
+ * Lightness (-10.->10., default 0.) -> colorMatrix (last column [/10])
+
+ Matrix:
+ St Vi Vi 0 Li
+ Vi St Vi 0 Li
+ Vi Vi St 0 Li
+ 0 0 0 1 0
+*/
+class Brightness : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Brightness ( ) : Filter() { };
+ virtual ~Brightness ( ) { 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_("Brightness, custom (Color)") "</name>\n"
+ "<id>org.inkscape.effect.filter.Brightness</id>\n"
+ "<param name=\"strength\" gui-text=\"" N_("Strength:") "\" type=\"float\" min=\"-100.0\" max=\"100.0\">10</param>\n"
+ "<param name=\"vibration\" gui-text=\"" N_("Vibration:") "\" type=\"float\" min=\"-100.0\" max=\"100.0\">0</param>\n"
+ "<param name=\"lightness\" gui-text=\"" N_("Lightness:") "\" type=\"float\" min=\"-100.0\" max=\"100.0\">0</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_("Brightness filter") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Brightness());
+ };
+};
+
+gchar const *
+Brightness::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream strength;
+ std::ostringstream vibration;
+ std::ostringstream lightness;
+
+ strength << (ext->get_param_float("strength") / 10);
+ vibration << (ext->get_param_float("vibration") / 10);
+ lightness << (ext->get_param_float("lightness") / 10);
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Brightness, custom\">\n"
+ "<feColorMatrix values=\"%s %s %s 0 %s %s %s %s 0 %s %s %s %s 0 %s 0 0 0 1 0 \" />\n"
+ "</filter>\n", strength.str().c_str(), vibration.str().c_str(), vibration.str().c_str(),
+ lightness.str().c_str(), vibration.str().c_str(), strength.str().c_str(),
+ vibration.str().c_str(), lightness.str().c_str(), vibration.str().c_str(),
+ vibration.str().c_str(), strength.str().c_str(), lightness.str().c_str());
+
+ return _filter;
+}; /* Brightness filter */
+
+/**
\brief Custom predefined Colorize filter.
Blend image or object with a flood color.
@@ -350,6 +422,163 @@ Electrize::get_filter_text (Inkscape::Extension::Extension * ext)
}; /* Electrize filter */
/**
+ \brief Custom predefined Greyscale filter.
+
+ Customize greyscale components.
+
+ Filter's parameters:
+ * Red (-100.->100., default 2.1) -> colorMatrix (values [/10])
+ * Green (-100.->100., default 7.2) -> colorMatrix (values [/10])
+ * Blue (-100.->100., default 0.72) -> colorMatrix (values [/10])
+ * Lightness (-100.->100., default 0.) -> colorMatrix (values [/10])
+ * Transparent (boolean, default false) -> matrix structure
+
+ Matrix:
+ normal transparency
+ R G B St 0 0 0 0 0 0
+ R G B St 0 0 0 0 0 0
+ R G B St 0 0 0 0 0 0
+ 0 0 0 1 0 R G B 1-St 0
+*/
+class Greyscale : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Greyscale ( ) : Filter() { };
+ virtual ~Greyscale ( ) { 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_("Greyscale, custom (Color)") "</name>\n"
+ "<id>org.inkscape.effect.filter.Greyscale</id>\n"
+ "<param name=\"red\" gui-text=\"" N_("Red:") "\" type=\"float\" min=\"-100.0\" max=\"100.0\">2.1</param>\n"
+ "<param name=\"green\" gui-text=\"" N_("Green:") "\" type=\"float\" min=\"-100.0\" max=\"100.0\">7.2</param>\n"
+ "<param name=\"blue\" gui-text=\"" N_("Blue:") "\" type=\"float\" min=\"-100.\" max=\"100.0\">0.72</param>\n"
+ "<param name=\"strength\" gui-text=\"" N_("Lightness:") "\" type=\"float\" min=\"-100.\" max=\"100.0\">0</param>\n"
+ "<param name=\"transparent\" gui-text=\"" N_("Transparent") "\" type=\"boolean\" >false</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_("Customize greyscale components") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Greyscale());
+ };
+};
+
+gchar const *
+Greyscale::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream red;
+ std::ostringstream green;
+ std::ostringstream blue;
+ std::ostringstream strength;
+ std::ostringstream redt;
+ std::ostringstream greent;
+ std::ostringstream bluet;
+ std::ostringstream strengtht;
+ std::ostringstream transparency;
+ std::ostringstream line;
+
+ red << (ext->get_param_float("red") / 10);
+ green << (ext->get_param_float("green") / 10);
+ blue << (ext->get_param_float("blue") / 10);
+ strength << (ext->get_param_float("strength") / 10);
+
+ redt << - (ext->get_param_float("red") / 10);
+ greent << - (ext->get_param_float("green") / 10);
+ bluet << - (ext->get_param_float("blue") / 10);
+ strengtht << 1 - (ext->get_param_float("strength") / 10);
+
+ if (ext->get_param_bool("transparent")) {
+ line << "0 0 0 0";
+ transparency << redt.str().c_str() << " " << greent.str().c_str() << " " << bluet.str().c_str() << " " << strengtht.str().c_str();
+ } else {
+ line << red.str().c_str() << " " << green.str().c_str() << " " << blue.str().c_str() << " " << strength.str().c_str();
+ transparency << "0 0 0 1";
+ }
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Greyscale, custom\">\n"
+ "<feColorMatrix values=\"%s 0 %s 0 %s 0 %s 0 \" />\n"
+ "</filter>\n", line.str().c_str(), line.str().c_str(), line.str().c_str(), transparency.str().c_str());
+ return _filter;
+}; /* Greyscale filter */
+
+/**
+ \brief Custom predefined Lightness filter.
+
+ Modify lights and shadows separately.
+
+ Filter's parameters:
+ * Lightness (0.->200., default 10.) -> component (amplitude [/10])
+ * Shadow (0.->200., default 10.) -> component (exponent [/10])
+ * Offset (-10.->10., default 0.) -> component (offset [/10])
+*/
+class Lightness : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Lightness ( ) : Filter() { };
+ virtual ~Lightness ( ) { 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_("Lightness, custom (Color)") "</name>\n"
+ "<id>org.inkscape.effect.filter.Lightness</id>\n"
+ "<param name=\"amplitude\" gui-text=\"" N_("Lights:") "\" type=\"float\" min=\"0.0\" max=\"200.0\">10.0</param>\n"
+ "<param name=\"exponent\" gui-text=\"" N_("Shadows:") "\" type=\"float\" min=\"0.0\" max=\"200.0\">10.0</param>\n"
+ "<param name=\"offset\" gui-text=\"" N_("Offset:") "\" type=\"float\" min=\"-10.\" max=\"10.0\">0.0</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_("Modify lights and shadows separately") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Lightness());
+ };
+};
+
+gchar const *
+Lightness::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream amplitude;
+ std::ostringstream exponent;
+ std::ostringstream offset;
+
+ amplitude << (ext->get_param_float("amplitude") / 10);
+ exponent << (ext->get_param_float("exponent") / 10);
+ offset << (ext->get_param_float("offset") / 10);
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Lightness, custom\">\n"
+ "<feComponentTransfer in=\"blur\" stdDeviation=\"2\" result=\"component\" >\n"
+ "<feFuncR type=\"gamma\" amplitude=\"%s\" exponent=\"%s\" offset=\"%s\" />\n"
+ "<feFuncG type=\"gamma\" amplitude=\"%s\" exponent=\"%s\" offset=\"%s\" />\n"
+ "<feFuncB type=\"gamma\" amplitude=\"%s\" exponent=\"%s\" offset=\"%s\" />\n"
+ "</feComponentTransfer>\n"
+ "</filter>\n", amplitude.str().c_str(), exponent.str().c_str(), offset.str().c_str(),
+ amplitude.str().c_str(), exponent.str().c_str(), offset.str().c_str(),
+ amplitude.str().c_str(), exponent.str().c_str(), offset.str().c_str());
+
+ return _filter;
+}; /* Lightness filter */
+
+/**
\brief Custom predefined Quadritone filter.
Replace hue by two colors.
diff --git a/src/extension/internal/filter/experimental.h b/src/extension/internal/filter/experimental.h
index 1646771f4..9dd188bd3 100755
--- a/src/extension/internal/filter/experimental.h
+++ b/src/extension/internal/filter/experimental.h
@@ -72,11 +72,11 @@ public:
"<page name=\"optionstab\" _gui-text=\"Options\">\n"
"<param name=\"drawing\" gui-text=\"" N_("Drawing mode") "\" type=\"boolean\" >true</param>\n"
"<param name=\"dblend\" gui-text=\"" N_("Drawing blend:") "\" type=\"enum\">\n"
- "<_item value=\"darken\">" N_("Darken") "</_item>\n"
- "<_item value=\"normal\">" N_("Normal") "</_item>\n"
- "<_item value=\"multiply\">" N_("Multiply") "</_item>\n"
- "<_item value=\"screen\">" N_("Screen") "</_item>\n"
- "<_item value=\"lighten\">" N_("Lighten") "</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"screen\">Screen</_item>\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
"</param>\n"
"<param name=\"transparent\" gui-text=\"" N_("Transparent") "\" type=\"boolean\" >false</param>\n"
"<param name=\"dented\" gui-text=\"" N_("Dented") "\" type=\"boolean\" >false</param>\n"
@@ -96,11 +96,11 @@ public:
"<param name=\"grainero\" gui-text=\"" N_("Erosion:") "\" type=\"float\" min=\"0\" max=\"40\">0</param>\n"
"<param name=\"graincol\" gui-text=\"" N_("Color") "\" type=\"boolean\" >true</param>\n"
"<param name=\"gblend\" gui-text=\"" N_("Grain blend:") "\" type=\"enum\">\n"
- "<_item value=\"normal\">" N_("Normal") "</_item>\n"
- "<_item value=\"multiply\">" N_("Multiply") "</_item>\n"
- "<_item value=\"screen\">" N_("Screen") "</_item>\n"
- "<_item value=\"lighten\">" N_("Lighten") "</_item>\n"
- "<_item value=\"darken\">" N_("Darken") "</_item>\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"screen\">Screen</_item>\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
"</param>\n"
"</page>\n"
"</param>\n"
@@ -300,12 +300,12 @@ CrossEngraving::get_filter_text (Inkscape::Extension::Extension * ext)
* Erase (0.->6., default 0) -> composite1 (k4)
* Smoothness strength (0.01->20, default 0.6) -> blur2 (stdDeviation)
* Dilatation (1.->50., default 6) -> color2 (n-1th value)
- * Erosion (0.->50., default 3) -> color2 (nth value 0->-50)
+ * Erosion (0.->50., default 2) -> color2 (nth value 0->-50)
* Transluscent (boolean, default false) -> composite 8 (in, true->merge1, false->composite7)
* Blur strength (0.01->20., default 1.) -> blur3 (stdDeviation)
* Blur dilatation (1.->50., default 6) -> color4 (n-1th value)
- * Blur erosion (0.->50., default 3) -> color4 (nth value 0->-50)
+ * Blur erosion (0.->50., default 2) -> color4 (nth value 0->-50)
* Stroke color (guint, default 64,64,64,255) -> flood2 (flood-color), composite3 (k2)
* Image on stroke (boolean, default false) -> composite2 (in="flood2" true-> in="SourceGraphic")
@@ -331,19 +331,19 @@ public:
"<id>org.inkscape.effect.filter.Drawing</id>\n"
"<param name=\"tab\" type=\"notebook\">\n"
"<page name=\"optionstab\" _gui-text=\"Options\">\n"
- "<param name=\"simplifyheader\" type=\"groupheader\">" N_("Simplify") "</param>\n"
+ "<_param name=\"simplifyheader\" type=\"groupheader\">Simplify</_param>\n"
"<param name=\"simply\" gui-text=\"" N_("Strength:") "\" type=\"float\" min=\"0.01\" max=\"20\">0.6</param>\n"
"<param name=\"clean\" gui-text=\"" N_("Clean-up:") "\" type=\"int\" min=\"1\" max=\"500\">10</param>\n"
"<param name=\"erase\" gui-text=\"" N_("Erase:") "\" type=\"float\" min=\"0\" max=\"60\">0</param>\n"
"<param name=\"transluscent\" gui-text=\"" N_("Transluscent") "\" type=\"boolean\" >false</param>\n"
- "<param name=\"smoothheader\" type=\"groupheader\">" N_("Smoothness") "</param>\n"
+ "<_param name=\"smoothheader\" type=\"groupheader\">Smoothness</_param>\n"
"<param name=\"smooth\" gui-text=\"" N_("Strength:") "\" type=\"float\" min=\"0.01\" max=\"20\">0.6</param>\n"
"<param name=\"dilat\" gui-text=\"" N_("Dilatation:") "\" type=\"float\" min=\"1\" max=\"50\">6</param>\n"
- "<param name=\"erosion\" gui-text=\"" N_("Erosion:") "\" type=\"float\" min=\"0\" max=\"50\">3</param>\n"
- "<param name=\"meltheader\" type=\"groupheader\">" N_("Melt") "</param>\n"
+ "<param name=\"erosion\" gui-text=\"" N_("Erosion:") "\" type=\"float\" min=\"0\" max=\"50\">2</param>\n"
+ "<_param name=\"meltheader\" type=\"groupheader\">Melt</_param>\n"
"<param name=\"blur\" gui-text=\"" N_("Level:") "\" type=\"float\" min=\"0.01\" max=\"20\">1</param>\n"
"<param name=\"bdilat\" gui-text=\"" N_("Dilatation:") "\" type=\"float\" min=\"1\" max=\"50\">6</param>\n"
- "<param name=\"berosion\" gui-text=\"" N_("Erosion:") "\" type=\"float\" min=\"0\" max=\"50\">3</param>\n"
+ "<param name=\"berosion\" gui-text=\"" N_("Erosion:") "\" type=\"float\" min=\"0\" max=\"50\">2</param>\n"
"</page>\n"
"<page name=\"co11tab\" _gui-text=\"Fill color\">\n"
"<param name=\"fcolor\" gui-text=\"" N_("Fill color") "\" type=\"color\">-1515870721</param>\n"
@@ -480,7 +480,7 @@ Drawing::get_filter_text (Inkscape::Extension::Extension * ext)
hard = component1 (type="discrete"), component2 (type="discrete"), composite1 (in2="component1")
* Simplify (0.01->20., default 1.5) -> blur1 (stdDeviation)
* Line width (0.01->20., default 1.5) -> blur2 (stdDeviation)
- * Lightness (0.->10., default 5) -> composite1 (k3)
+ * Lightness (0.->10., default 0.5) -> composite1 (k3)
* Blend (enum [normal, multiply, screen], default normal) -> blend (mode)
* Dark mode (boolean, default false) -> composite1 (true: in2="component2")
*/
@@ -498,16 +498,16 @@ public:
"<name>" N_("Neon draw, custom") "</name>\n"
"<id>org.inkscape.effect.filter.NeonDraw</id>\n"
"<param name=\"type\" gui-text=\"" N_("Line type:") "\" type=\"enum\">\n"
- "<_item value=\"table\">" N_("Smoothed") "</_item>\n"
- "<_item value=\"discrete\">" N_("Contrasted") "</_item>\n"
+ "<_item value=\"table\">Smoothed</_item>\n"
+ "<_item value=\"discrete\">Contrasted</_item>\n"
"</param>\n"
"<param name=\"simply\" gui-text=\"" N_("Simplify:") "\" type=\"float\" min=\"0.01\" max=\"20.0\">1.5</param>\n"
"<param name=\"width\" gui-text=\"" N_("Line width:") "\" type=\"float\" min=\"0.01\" max=\"20.0\">1.5</param>\n"
- "<param name=\"lightness\" gui-text=\"" N_("Lightness:") "\" type=\"float\" min=\"0.\" max=\"10.0\">5</param>\n"
+ "<param name=\"lightness\" gui-text=\"" N_("Lightness:") "\" type=\"float\" min=\"0.\" max=\"10.0\">0.5</param>\n"
"<param name=\"blend\" gui-text=\"" N_("Blend mode:") "\" type=\"enum\">\n"
- "<_item value=\"normal\">" N_("Normal") "</_item>\n"
- "<_item value=\"multiply\">" N_("Multiply") "</_item>\n"
- "<_item value=\"screen\">" N_("Screen") "</_item>\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"screen\">Screen</_item>\n"
"</param>\n"
"<param name=\"dark\" gui-text=\"" N_("Dark mode") "\" type=\"boolean\" >false</param>\n"
"<effect>\n"
@@ -603,18 +603,18 @@ public:
"<name>" N_("Poster paint, custom") "</name>\n"
"<id>org.inkscape.effect.filter.Posterize</id>\n"
"<param name=\"type\" gui-text=\"" N_("Effect type:") "\" type=\"enum\">\n"
- "<_item value=\"normal\">" N_("Normal") "</_item>\n"
- "<_item value=\"dented\">" N_("Dented") "</_item>\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"dented\">Dented</_item>\n"
"</param>\n"
"<param name=\"table\" gui-text=\"" N_("Transfer type:") "\" type=\"enum\">\n"
- "<_item value=\"discrete\">" N_("Poster") "</_item>\n"
- "<_item value=\"table\">" N_("Painting") "</_item>\n"
+ "<_item value=\"discrete\">Poster</_item>\n"
+ "<_item value=\"table\">Painting</_item>\n"
"</param>\n"
"<param name=\"levels\" gui-text=\"" N_("Levels:") "\" type=\"int\" min=\"1\" max=\"15\">5</param>\n"
"<param name=\"blend\" gui-text=\"" N_("Blend mode:") "\" type=\"enum\">\n"
- "<_item value=\"lighten\">" N_("Lighten") "</_item>\n"
- "<_item value=\"normal\">" N_("Normal") "</_item>\n"
- "<_item value=\"darken\">" N_("Darken") "</_item>\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
"</param>\n"
"<param name=\"blur1\" gui-text=\"" N_("Primary blur:") "\" type=\"float\" min=\"0.01\" max=\"100.0\">4.0</param>\n"
"<param name=\"blur2\" gui-text=\"" N_("Secondary blur:") "\" type=\"float\" min=\"0.01\" max=\"100.0\">0.5</param>\n"
diff --git a/src/extension/internal/filter/filter-all.cpp b/src/extension/internal/filter/filter-all.cpp
index 7383b793a..280dc9563 100755
--- a/src/extension/internal/filter/filter-all.cpp
+++ b/src/extension/internal/filter/filter-all.cpp
@@ -47,9 +47,12 @@ Filter::filters_all (void )
SpecularLight::init();
// Color
+ Brightness::init();
Colorize::init();
Duochrome::init();
Electrize::init();
+ Greyscale::init();
+ Lightness::init();
Quadritone::init();
Solarize::init();
Tritone::init();