From f8ec6beee66399feae2bd94d6f212aaeb86d1a50 Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Thu, 11 Aug 2011 18:47:03 +0200 Subject: Filters. New Point engraving and Nudge custom predefined filters. Translations. Translation list and template files update. (bzr r10536) --- src/extension/internal/filter/color.h | 146 ++++++++++++++++++++++++- src/extension/internal/filter/distort.h | 37 ++++--- src/extension/internal/filter/filter-all.cpp | 3 +- src/extension/internal/filter/paint.h | 155 +++++++++++++++++++++++++++ src/extension/internal/filter/textures.h | 6 +- 5 files changed, 325 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/extension/internal/filter/color.h b/src/extension/internal/filter/color.h index fb6ea0ab9..e9aea4ed2 100644 --- a/src/extension/internal/filter/color.h +++ b/src/extension/internal/filter/color.h @@ -17,6 +17,7 @@ * Greyscale * Invert * Lightness + * Nudge * Quadritone * Solarize * Tritone @@ -65,7 +66,7 @@ public: Inkscape::Extension::build_from_mem( "\n" "" N_("Brilliance") "\n" - "org.inkscape.effect.filter.Brightness\n" + "org.inkscape.effect.filter.Brilliance\n" "2\n" "0.5\n" "0\n" @@ -916,6 +917,149 @@ Lightness::get_filter_text (Inkscape::Extension::Extension * ext) return _filter; }; /* Lightness filter */ +/** + \brief Custom predefined Nudge filter. + + Nudge separately RGB channels and blend them to different types of backgrounds + + Filter's parameters: + Offsets + * Red + * x (-100.->100., default -7) -> offset1 (dx) + * y (-100.->100., default 5) -> offset1 (dy) + * Green + * x (-100.->100., default 0) -> offset2 (dx) + * y (-100.->100., default 10) -> offset2 (dy) + * Blue + * x (-100.->100., default 3) -> offset3 (dx) + * y (-100.->100., default -9) -> offset3 (dy) + Color + * Background color (guint, default -1)-> flood (flood-color, flood-opacity) + * Blend type (enum [normal,multiply and screen], default screen) -> blend1,2,3 (mode) + * Blend source (enum, default color) -> + * color: blend1 (in="flood") + * image: blend1 (in="SourceGraphic") + * background: blend1 (in="BackgroundImage") + * Composite (enum [in,over], default over) -> composite (operator) + +*/ +class Nudge : public Inkscape::Extension::Internal::Filter::Filter { +protected: + virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext); + +public: + Nudge ( ) : Filter() { }; + virtual ~Nudge ( ) { if (_filter != NULL) g_free((void *)_filter); return; } + + static void init (void) { + Inkscape::Extension::build_from_mem( + "\n" + "" N_("Nudge") "\n" + "org.inkscape.effect.filter.Nudge\n" + "\n" + "\n" + "<_param name=\"redOffset\" type=\"description\" appearance=\"header\">" N_("Red offset") "\n" + "-7\n" + "5\n" + "<_param name=\"greenOffset\" type=\"description\" appearance=\"header\">" N_("Green offset") "\n" + "0\n" + "10\n" + "<_param name=\"redOffset\" type=\"description\" appearance=\"header\">" N_("Blue offset") "\n" + "3\n" + "-9\n" + "\n" + "\n" + "255\n" + "\n" + "<_item value=\"screen\">" N_("Screen") "\n" + "<_item value=\"multiply\">" N_("Multiply") "\n" + "<_item value=\"normal\">" N_("Normal") "\n" + "\n" + "\n" + "<_item value=\"flood\">" N_("Color") "\n" + "<_item value=\"SourceGraphic\">" N_("Image") "\n" + "<_item value=\"BackgroundImage\">" N_("Background") "\n" + "\n" + "\n" + "<_item value=\"over\">" N_("Over") "\n" + "<_item value=\"in\">" N_("In") "\n" + "\n" + "\n" + "\n" + "\n" + "all\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "" N_("Nudge separately RGB channels and blend them to different types of backgrounds") "\n" + "\n" + "\n", new Nudge()); + }; +}; + +gchar const * +Nudge::get_filter_text (Inkscape::Extension::Extension * ext) +{ + if (_filter != NULL) g_free((void *)_filter); + + std::ostringstream rx; + std::ostringstream ry; + std::ostringstream gx; + std::ostringstream gy; + std::ostringstream bx; + std::ostringstream by; + + std::ostringstream blend; + std::ostringstream source; + std::ostringstream composite; + + std::ostringstream a; + std::ostringstream r; + std::ostringstream g; + std::ostringstream b; + + rx << ext->get_param_float("rx"); + ry << ext->get_param_float("ry"); + gx << ext->get_param_float("gx"); + gy << ext->get_param_float("gy"); + bx << ext->get_param_float("bx"); + by << ext->get_param_float("by"); + + blend << ext->get_param_enum("blend"); + source << ext->get_param_enum("source"); + composite << ext->get_param_enum("composite"); + + guint32 color = ext->get_param_color("color"); + r << ((color >> 24) & 0xff); + g << ((color >> 16) & 0xff); + b << ((color >> 8) & 0xff); + a << (color & 0xff) / 255.0F; + + _filter = g_strdup_printf( + "\n" + "\n" + "\n" + "\n" + "\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(), + rx.str().c_str(), ry.str().c_str(), source.str().c_str(), blend.str().c_str(), + gx.str().c_str(), gy.str().c_str(), blend.str().c_str(), + bx.str().c_str(), by.str().c_str(), blend.str().c_str(), + composite.str().c_str()); + + return _filter; + +}; /* Nudge filter */ + /** \brief Custom predefined Quadritone filter. diff --git a/src/extension/internal/filter/distort.h b/src/extension/internal/filter/distort.h index 3972029ae..56855abea 100644 --- a/src/extension/internal/filter/distort.h +++ b/src/extension/internal/filter/distort.h @@ -44,13 +44,13 @@ namespace Filter { Wide = composite4 (operator="over") Narrow = composite4 (operator="in") No fill = composite4 (operator="xor") - * Roughness (group) * Turbulence type (enum, default fractalNoise else turbulence) -> turbulence (type) - * Horizontal frequency (0.001->1., default 0.05) -> turbulence (baseFrequency [/1000]) - * Vertical frequency (0.001->1., default 0.05) -> turbulence (baseFrequency [/1000]) + * Horizontal frequency (0.001->1., default 0.05) -> turbulence (baseFrequency [/100]) + * Vertical frequency (0.001->1., default 0.05) -> turbulence (baseFrequency [/100]) * Complexity (1->5, default 3) -> turbulence (numOctaves) * Variation (0->100, default 0) -> turbulence (seed) + * Intensity (0.0->100., default 30) -> displacement (scale) */ class FeltFeather : public Inkscape::Extension::Internal::Filter::Filter { @@ -84,10 +84,11 @@ public: "<_item value=\"fractalNoise\">Fractal noise\n" "<_item value=\"turbulence\">Turbulence\n" "\n" - "0.05\n" - "0.05\n" + "5\n" + "5\n" "3\n" "0\n" + "30\n" "\n" "all\n" "\n" @@ -118,7 +119,8 @@ FeltFeather::get_filter_text (Inkscape::Extension::Extension * ext) std::ostringstream vfreq; std::ostringstream complexity; std::ostringstream variation; - + std::ostringstream intensity; + std::ostringstream map; std::ostringstream stroke; @@ -128,11 +130,12 @@ FeltFeather::get_filter_text (Inkscape::Extension::Extension * ext) erosion << -ext->get_param_float("erosion"); turbulence << ext->get_param_enum("turbulence"); - hfreq << ext->get_param_float("hfreq"); - vfreq << ext->get_param_float("vfreq"); + hfreq << ext->get_param_float("hfreq") / 100; + vfreq << ext->get_param_float("vfreq") / 100; complexity << ext->get_param_int("complexity"); variation << ext->get_param_int("variation"); - + intensity << ext->get_param_float("intensity"); + stroke << ext->get_param_enum("stroke"); const gchar *maptype = ext->get_param_enum("type"); @@ -149,12 +152,12 @@ FeltFeather::get_filter_text (Inkscape::Extension::Extension * ext) "\n" "\n" "\n" - "\n" + "\n" "\n" "\n" "\n", hblur.str().c_str(), vblur.str().c_str(), turbulence.str().c_str(), complexity.str().c_str(), variation.str().c_str(), hfreq.str().c_str(), vfreq.str().c_str(), - map.str().c_str(), dilat.str().c_str(), erosion.str().c_str(), stroke.str().c_str() ); + map.str().c_str(), intensity.str().c_str(), dilat.str().c_str(), erosion.str().c_str(), stroke.str().c_str() ); return _filter; }; /* Felt feather filter */ @@ -166,8 +169,8 @@ FeltFeather::get_filter_text (Inkscape::Extension::Extension * ext) Filter's parameters: * Turbulence type (enum, default fractalNoise else turbulence) -> turbulence (type) - * Horizontal frequency (0.01->10., default 0.013) -> turbulence (baseFrequency) - * Vertical frequency (0.01->10., default 0.013) -> turbulence (baseFrequency) + * Horizontal frequency (0.001->10., default 0.013) -> turbulence (baseFrequency [/100]) + * Vertical frequency (0.001->10., default 0.013) -> turbulence (baseFrequency [/100]) * Complexity (1->5, default 5) -> turbulence (numOctaves) * Variation (1->360, default 1) -> turbulence (seed) * Intensity (0.0->50., default 6.6) -> displacement (scale) @@ -190,8 +193,8 @@ public: "<_item value=\"fractalNoise\">Fractal noise\n" "<_item value=\"turbulence\">Turbulence\n" "\n" - "0.013\n" - "0.013\n" + "1.3\n" + "1.3\n" "5\n" "0\n" "6.6\n" @@ -222,8 +225,8 @@ Roughen::get_filter_text (Inkscape::Extension::Extension * ext) std::ostringstream intensity; type << ext->get_param_enum("type"); - hfreq << ext->get_param_float("hfreq"); - vfreq << ext->get_param_float("vfreq"); + hfreq << ext->get_param_float("hfreq") / 100; + vfreq << ext->get_param_float("vfreq") / 100; complexity << ext->get_param_int("complexity"); variation << ext->get_param_int("variation"); intensity << ext->get_param_float("intensity"); diff --git a/src/extension/internal/filter/filter-all.cpp b/src/extension/internal/filter/filter-all.cpp index 30376d231..f288c27b8 100755 --- a/src/extension/internal/filter/filter-all.cpp +++ b/src/extension/internal/filter/filter-all.cpp @@ -58,6 +58,7 @@ Filter::filters_all (void ) Greyscale::init(); Invert::init(); Lightness::init(); + Nudge::init(); Quadritone::init(); Solarize::init(); Tritone::init(); @@ -75,7 +76,7 @@ Filter::filters_all (void ) Drawing::init(); Electrize::init(); NeonDraw::init(); - //PointEngraving::init(); + PointEngraving::init(); Posterize::init(); PosterizeBasic::init(); diff --git a/src/extension/internal/filter/paint.h b/src/extension/internal/filter/paint.h index a3077d1c4..7c3bbfcd3 100644 --- a/src/extension/internal/filter/paint.h +++ b/src/extension/internal/filter/paint.h @@ -13,6 +13,7 @@ * Drawing * Electrize * Neon draw + * Point engraving * Posterize * Posterize basic * @@ -658,6 +659,160 @@ NeonDraw::get_filter_text (Inkscape::Extension::Extension * ext) return _filter; }; /* NeonDraw filter */ +/** + \brief Custom predefined Point engraving filter. + + Convert image to a transparent point engraving + + Filter's parameters: + + * Turbulence type (enum, default fractalNoise else turbulence) -> turbulence (type) + * Horizontal frequency (0.001->1., default 1) -> turbulence (baseFrequency [/100]) + * Vertical frequency (0.001->1., default 1) -> turbulence (baseFrequency [/100]) + * Complexity (1->5, default 3) -> turbulence (numOctaves) + * Variation (0->1000, default 0) -> turbulence (seed) + * Noise reduction (-1000->-1500, default -1045) -> convolve (kernelMatrix, central value) + * Noise blend (enum, all blend options, default normal) -> blend (mode) + * Lightness (0.->10., default 2.5) -> composite1 (k1) + * Grain lightness (0.->10., default 1.3) -> composite1 (k2) + * Erase (0.00->1., default 0) -> composite1 (k4) + * Blur (0.01->2., default 0.5) -> blur (stdDeviation) + + * Drawing color (guint32, default rgb(73,69,40)) -> flood1 (flood-color, flood-opacity) + + * Background color (guint32, default rgb(255,255,255)) -> flood2 (flood-color, flood-opacity) +*/ + +class PointEngraving : public Inkscape::Extension::Internal::Filter::Filter { +protected: + virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext); + +public: + PointEngraving ( ) : Filter() { }; + virtual ~PointEngraving ( ) { if (_filter != NULL) g_free((void *)_filter); return; } + + static void init (void) { + Inkscape::Extension::build_from_mem( + "\n" + "" N_("Point Engraving") "\n" + "org.inkscape.effect.filter.PointEngraving\n" + "\n" + "\n" + "\n" + "<_item value=\"fractalNoise\">Fractal noise\n" + "<_item value=\"turbulence\">Turbulence\n" + "\n" + "100\n" + "100\n" + "3\n" + "0\n" + "45\n" + "\n" + "<_item value=\"normal\">" N_("Normal") "\n" + "<_item value=\"screen\">" N_("Screen") "\n" + "<_item value=\"multiply\">" N_("Multiply") "\n" + "<_item value=\"lighten\">" N_("Lighten") "\n" + "<_item value=\"darken\">" N_("Darken") "\n" + "\n" + "2.5\n" + "1.3\n" + "0\n" + "0.5\n" + "\n" + "\n" + "1229269247\n" + "\n" + "\n" + "255\n" + "\n" + "\n" + "\n" + "all\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "" N_("Convert image to a transparent point engraving") "\n" + "\n" + "\n", new PointEngraving()); + }; + +}; + +gchar const * +PointEngraving::get_filter_text (Inkscape::Extension::Extension * ext) +{ + if (_filter != NULL) g_free((void *)_filter); + + std::ostringstream type; + std::ostringstream hfreq; + std::ostringstream vfreq; + std::ostringstream complexity; + std::ostringstream variation; + std::ostringstream reduction; + std::ostringstream blend; + std::ostringstream lightness; + std::ostringstream grain; + std::ostringstream erase; + std::ostringstream blur; + std::ostringstream r; + std::ostringstream g; + std::ostringstream b; + std::ostringstream a; + std::ostringstream br; + std::ostringstream bg; + std::ostringstream bb; + std::ostringstream ba; + + type << ext->get_param_enum("type"); + hfreq << ext->get_param_float("hfreq") / 100; + vfreq << ext->get_param_float("vfreq") / 100; + complexity << ext->get_param_int("complexity"); + variation << ext->get_param_int("variation"); + reduction << (-1000 - ext->get_param_int("reduction")); + blend << ext->get_param_enum("blend"); + lightness << ext->get_param_float("lightness"); + grain << ext->get_param_float("grain"); + erase << ext->get_param_float("erase"); + blur << ext->get_param_float("blur"); + + guint32 color = ext->get_param_color("color"); + r << ((color >> 24) & 0xff); + g << ((color >> 16) & 0xff); + b << ((color >> 8) & 0xff); + a << (color & 0xff) / 255.0F; + + guint32 bgcolor = ext->get_param_color("bgcolor"); + br << ((bgcolor >> 24) & 0xff); + bg << ((bgcolor >> 16) & 0xff); + bb << ((bgcolor >> 8) & 0xff); + ba << (bgcolor & 0xff) / 255.0F; + + _filter = g_strdup_printf( + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n", reduction.str().c_str(), blend.str().c_str(), + type.str().c_str(), hfreq.str().c_str(), vfreq.str().c_str(), complexity.str().c_str(), variation.str().c_str(), + lightness.str().c_str(), grain.str().c_str(), erase.str().c_str(), blur.str().c_str(), + r.str().c_str(), g.str().c_str(), b.str().c_str(), a.str().c_str(), + br.str().c_str(), bg.str().c_str(), bb.str().c_str(), ba.str().c_str() ); + + return _filter; +}; /* Point engraving filter */ + /** \brief Custom predefined Poster paint filter. diff --git a/src/extension/internal/filter/textures.h b/src/extension/internal/filter/textures.h index 17fccfcbc..f0086eccf 100644 --- a/src/extension/internal/filter/textures.h +++ b/src/extension/internal/filter/textures.h @@ -34,7 +34,7 @@ namespace Filter { Filter's parameters: * Turbulence type (enum, default fractalNoise else turbulence) -> turbulence (type) - * Frequency (0.001->1., default 0.04) -> turbulence (baseFrequency) + * Frequency (0.001->1., default 0.04) -> turbulence (baseFrequency [/100]) * Complexity (1->5, default 3) -> turbulence (numOctaves) * Variation (0->100, default 0) -> turbulence (seed) * Horizontal inlay (0.01->30., default 10) -> blur1 (stdDeviation x) @@ -65,7 +65,7 @@ public: "<_item value=\"fractalNoise\">Fractal noise\n" "<_item value=\"turbulence\">Turbulence\n" "\n" - "0.04\n" + "4\n" "3\n" "0\n" "10\n" @@ -115,7 +115,7 @@ InkBlot::get_filter_text (Inkscape::Extension::Extension * ext) std::ostringstream custom; type << ext->get_param_enum("type"); - freq << ext->get_param_float("freq"); + freq << ext->get_param_float("freq") / 100; complexity << ext->get_param_int("complexity"); variation << ext->get_param_int("variation"); hblur << ext->get_param_float("hblur"); -- cgit v1.2.3