diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/extension/internal/filter/color.h | 229 | ||||
| -rwxr-xr-x | src/extension/internal/filter/experimental.h | 62 | ||||
| -rwxr-xr-x | src/extension/internal/filter/filter-all.cpp | 3 |
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(); |
