summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/extension/internal/filter/color.h58
-rw-r--r--src/extension/internal/filter/filter-all.cpp9
-rw-r--r--src/extension/internal/filter/morphology.h110
3 files changed, 155 insertions, 22 deletions
diff --git a/src/extension/internal/filter/color.h b/src/extension/internal/filter/color.h
index be055463c..d9720b05c 100644
--- a/src/extension/internal/filter/color.h
+++ b/src/extension/internal/filter/color.h
@@ -22,11 +22,14 @@ namespace Extension {
namespace Internal {
namespace Filter {
-/* Custom predefined Colorize filter
+/**
+ \brief Custom predefined Colorize filter.
+
+ Blend image or object with a flood color.
-Filter's parameters:
- * Harsh light (0.-10., default 0) -> composite1 (k1)
- * Normal light (0.-10., default 1) -> composite2 (k2)
+ Filter's parameters:
+ * Harsh light (0.->10., default 0) -> composite1 (k1)
+ * Normal light (0.->10., default 1) -> composite2 (k2)
* Duotone (boolean, default false) -> colormatrix1 (values="0")
* Filtered greys (boolean, default false) -> colormatrix2 (values="0")
* Blend mode 1 (enum, default Multiply) -> blend1 (mode)
@@ -129,10 +132,13 @@ Colorize::get_filter_text (Inkscape::Extension::Extension * ext)
}; /* Colorize filter */
-/* Custom predefined Duochrome filter
+/**
+ \brief Custom predefined Duochrome filter.
+
+ Convert luminance values to a duochrome palette.
-Filter's parameters:
- * Fluorescence level (0.-2., default 0) -> composite4 (k2)
+ Filter's parameters:
+ * Fluorescence level (0.->2., default 0) -> composite4 (k2)
* Swap (enum, default "No swap") -> composite1, composite2 (operator)
* Color 1 (guint, default 1364325887) -> flood1 (flood-opacity, flood-color)
* Color 2 (guint, default -65281) -> flood2 (flood-opacity, flood-color)
@@ -245,13 +251,16 @@ Duochrome::get_filter_text (Inkscape::Extension::Extension * ext)
}; /* Duochrome filter */
-/* Custom predefined Quadritone filter
+/**
+ \brief Custom predefined Quadritone filter.
+
+ Replace hue by two colors.
-Filter's parameters:
- * Hue distribution (0-360, default 280) -> colormatrix1 (values)
- * Colors (0-360, default 100) -> colormatrix3 (values)
+ Filter's parameters:
+ * Hue distribution (0->360, default 280) -> colormatrix1 (values)
+ * Colors (0->360, default 100) -> colormatrix3 (values)
* Blend mode 1 (enum, default Normal) -> blend1 (mode)
- * Over-saturation (0.-1., default 0) -> composite1 (k2)
+ * Over-saturation (0.->1., default 0) -> composite1 (k2)
* Blend mode 2 (enum, default Normal) -> blend2 (mode)
*/
@@ -329,15 +338,19 @@ Quadritone::get_filter_text (Inkscape::Extension::Extension * ext)
}; /* Quadritone filter */
-/* Custom predefined Solarize filter
+/**
+ \brief Custom predefined Solarize filter.
+
+ Classic photographic solarization effect.
-Filter's parameters:
+ Filter's parameters:
* Type (enum, default "Solarize") ->
Solarize = blend1 (mode="darken"), blend2 (mode="screen")
Moonarize = blend1 (mode="lighten"), blend2 (mode="multiply") [No other access to the blend modes]
- * Hue rotation (0-360, default 0) -> colormatrix1 (values)
+ * Hue rotation (0->360, default 0) -> colormatrix1 (values)
*/
+
class Solarize : public Inkscape::Extension::Internal::Filter::Filter {
protected:
virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
@@ -405,21 +418,24 @@ Solarize::get_filter_text (Inkscape::Extension::Extension * ext)
}; /* Solarize filter */
-/* Custom predefined Tritone filter
+/**
+ \brief Custom predefined Tritone filter.
+
+ Create a custom tritone palette with additional glow, blend modes and hue moving.
-Filter's parameters:
+ Filter's parameters:
* Option (enum, default Normal) ->
Normal = composite1 (in="qminp", in2="flood"), composite2 (in="p", in2="blend6"), blend6 (in2="qminpc")
Enhance hue = Normal + composite2 (in="SourceGraphic")
Radiation = Normal + blend6 (in2="SourceGraphic") composite2 (in="blend6", in2="qminpc")
Hue to background = Normal + composite1 (in2="BackgroundImage") [a template with an activated background is needed, or colors become black]
- * Hue distribution (0-360, default 0) -> colormatrix1 (values)
+ * Hue distribution (0->360, default 0) -> colormatrix1 (values)
* Colors (guint, default -73203457) -> flood (flood-opacity, flood-color)
* Global blend (enum, default Lighten) -> blend5 (mode) [Multiply, Screen, Darken, Lighten only!]
- * Glow (0.01-10., default 0.01) -> feGaussianBlur (stdDeviation)
+ * Glow (0.01->10., default 0.01) -> feGaussianBlur (stdDeviation)
* Glow & blend (enum, default Normal) -> blend6 (mode) [Normal, Multiply and Darken only!]
- * Local light (0.-10., default 0) -> composite2 (k1)
- * Global light (0.-10., default 1) -> composite2 (k3) [k2 must be fixed to 1].
+ * Local light (0.->10., default 0) -> composite2 (k1)
+ * Global light (0.->10., default 1) -> composite2 (k3) [k2 must be fixed to 1].
*/
class Tritone : public Inkscape::Extension::Internal::Filter::Filter {
diff --git a/src/extension/internal/filter/filter-all.cpp b/src/extension/internal/filter/filter-all.cpp
index 38f54e7df..80fa7c69e 100644
--- a/src/extension/internal/filter/filter-all.cpp
+++ b/src/extension/internal/filter/filter-all.cpp
@@ -10,7 +10,9 @@
/* Put your filter here */
#include "color.h"
#include "drop-shadow.h"
+#include "morphology.h"
#include "snow.h"
+
#include "experimental.h"
namespace Inkscape {
@@ -26,17 +28,22 @@ Filter::filters_all (void )
DropShadow::init();
DropGlow::init();
Snow::init();
+
+ /* Experimental custom predefined filters */
- // Experimental
// Color
Colorize::init();
Duochrome::init();
Quadritone::init();
Solarize::init();
Tritone::init();
+
+ // Morphology
+ Crosssmooth::init();
// Shadows and glows
ColorizableDropShadow::init();
+
// TDB
Posterize::init();
diff --git a/src/extension/internal/filter/morphology.h b/src/extension/internal/filter/morphology.h
new file mode 100644
index 000000000..61fb8d42b
--- /dev/null
+++ b/src/extension/internal/filter/morphology.h
@@ -0,0 +1,110 @@
+#ifndef __INKSCAPE_EXTENSION_INTERNAL_FILTER_MORPHOLOGY_H__
+#define __INKSCAPE_EXTENSION_INTERNAL_FILTER_MORPHOLOGY_H__
+/* Change the 'MORPHOLOGY' above to be your file name */
+
+/*
+ * Copyright (C) 2010 Authors:
+ * Ivan Louette (filters)
+ * Nicolas Dufour (UI) <nicoduf@yahoo.fr>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+/* ^^^ Change the copyright to be you and your e-mail address ^^^ */
+
+#include "filter.h"
+
+#include "extension/internal/clear-n_.h"
+#include "extension/system.h"
+#include "extension/extension.h"
+
+namespace Inkscape {
+namespace Extension {
+namespace Internal {
+namespace Filter {
+
+/**
+ \brief Custom predefined Crosssmooth filter.
+
+ Smooth the outside of shapes and pictures.
+
+ Filter's parameters:
+ * Type (enum, default "Smooth all") ->
+ Smooth all = composite (in="colormatrix", in2="colormatrix")
+ Smooth edges = composite (in="SourceGraphic", in2="colormatrix")
+ * Blur (0.01->10., default 5.) -> blur (stdDeviation)
+ * Spreading (1->100, default 20) -> colormatrix (value n-1)
+ * Erosion (0->-100, default -15) -> colormatrix (value n)
+*/
+
+class Crosssmooth : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Crosssmooth ( ) : Filter() { };
+ virtual ~Crosssmooth ( ) { 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_("Cross-smooth, custom -EXP-") "</name>\n"
+ "<id>org.inkscape.effect.filter.Crosssmooth</id>\n"
+ "<param name=\"type\" gui-text=\"" N_("Type:") "\" type=\"enum\">\n"
+ "<_item value=\"all\">Smooth all</_item>\n"
+ "<_item value=\"edges\">Smooth edges</_item>\n"
+ "</param>\n"
+ "<param name=\"blur\" gui-text=\"" N_("Blur:") "\" type=\"float\" min=\"0.01\" max=\"10\">5</param>\n"
+ "<param name=\"spreading\" gui-text=\"" N_("Spreading:") "\" type=\"int\" min=\"1\" max=\"100\">20</param>\n"
+ "<param name=\"erosion\" gui-text=\"" N_("Erosion:") "\" type=\"int\" min=\"-100\" max=\"0\">-15</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_("Smooth the outside of shapes and pictures without altering their contents") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Crosssmooth());
+ };
+
+};
+
+gchar const *
+Crosssmooth::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream blur;
+ std::ostringstream spreading;
+ std::ostringstream erosion;
+ std::ostringstream cin;
+
+ blur << ext->get_param_float("blur");
+ spreading << ext->get_param_int("spreading");
+ erosion << ext->get_param_int("erosion");
+
+ const gchar *type = ext->get_param_enum("type");
+ if((g_ascii_strcasecmp("all", type) == 0)) {
+ cin << "colormatrix";
+ } else {
+ cin << "SourceGraphic";
+ }
+
+ _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=\"Cross-smooth, custom -EXP-\">\n"
+ "<feGaussianBlur stdDeviation=\"%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=\"colormatrix\" />\n"
+ "<feComposite in=\"%s\" in2=\"colormatrix\" operator=\"in\" />\n"
+ "</filter>\n", blur.str().c_str(), spreading.str().c_str(), erosion.str().c_str(), cin.str().c_str());
+
+ return _filter;
+}; /* Crosssmooth filter */
+
+}; /* namespace Filter */
+}; /* namespace Internal */
+}; /* namespace Extension */
+}; /* namespace Inkscape */
+
+/* Change the 'COLOR' below to be your file name */
+#endif /* __INKSCAPE_EXTENSION_INTERNAL_FILTER_MORPHOLOGY_H__ */