diff options
| author | Nicolas Dufour <nicoduf@yahoo.fr> | 2010-09-12 12:17:52 +0000 |
|---|---|---|
| committer | JazzyNico <nicoduf@yahoo.fr> | 2010-09-12 12:17:52 +0000 |
| commit | d5ca85ad1b0d50453869275eadfff1b56316502b (patch) | |
| tree | 1c57fb50237a8efde986f3b8e4599aab98547561 /src | |
| parent | Stop overrun. (diff) | |
| download | inkscape-d5ca85ad1b0d50453869275eadfff1b56316502b.tar.gz inkscape-d5ca85ad1b0d50453869275eadfff1b56316502b.zip | |
Filters. New customizable Bicolorizer filter (experimental).
(bzr r9757)
Diffstat (limited to 'src')
| -rw-r--r-- | src/extension/internal/filter/color.h | 115 | ||||
| -rw-r--r-- | src/extension/internal/filter/filter-all.cpp | 2 |
2 files changed, 117 insertions, 0 deletions
diff --git a/src/extension/internal/filter/color.h b/src/extension/internal/filter/color.h new file mode 100644 index 000000000..4fd60aab8 --- /dev/null +++ b/src/extension/internal/filter/color.h @@ -0,0 +1,115 @@ +#ifndef __INKSCAPE_EXTENSION_INTERNAL_FILTER_COLOR_H__ +#define __INKSCAPE_EXTENSION_INTERNAL_FILTER_COLOR_H__ +/* Change the 'COLOR' 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 { + +class Bicolorizer : public Inkscape::Extension::Internal::Filter::Filter { +protected: + virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext); + +public: + Bicolorizer ( ) : Filter() { }; + virtual ~Bicolorizer ( ) { 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_("Bicolorizer -EXP-") "</name>\n" + "<id>org.inkscape.effect.filter.bicolorizer</id>\n" +// Using color widgets in tabs makes Inkscape crash... +// "<param name=\"tab\" type=\"notebook\">\n" +// "<page name=\"Color1\" _gui-text=\"Color 1\">\n" + "<_param name=\"header1\" type=\"groupheader\">Color 1</_param>\n" + "<param name=\"color1\" gui-text=\"" N_("Color 1") "\" type=\"color\">1946122495</param>\n" +// "</page>\n" +// "<page name=\"Color2\" _gui-text=\"Color 2\">\n" + "<_param name=\"header2\" type=\"groupheader\">Color 2</_param>\n" + "<param name=\"color2\" gui-text=\"" N_("Color 2") "\" type=\"color\">367387135</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_("Color") "\"/>\n" + "</submenu>\n" + "</effects-menu>\n" + "<menu-tip>" N_("Change colors to a two colors palette") "</menu-tip>\n" + "</effect>\n" + "</inkscape-extension>\n", new Bicolorizer()); + }; + +}; + +gchar const * +Bicolorizer::get_filter_text (Inkscape::Extension::Extension * ext) +{ + if (_filter != NULL) g_free((void *)_filter); + + std::ostringstream a1; + std::ostringstream r1; + std::ostringstream g1; + std::ostringstream b1; + std::ostringstream a2; + std::ostringstream r2; + std::ostringstream g2; + std::ostringstream b2; + + guint32 color1 = ext->get_param_color("color1"); + guint32 color2 = ext->get_param_color("color2"); + a1 << (color1 & 0xff) / 255.0F; + r1 << ((color1 >> 24) & 0xff); + g1 << ((color1 >> 16) & 0xff); + b1 << ((color1 >> 8) & 0xff); + a2 << (color2 & 0xff) / 255.0F; + r2 << ((color2 >> 24) & 0xff); + g2 << ((color2 >> 16) & 0xff); + b2 << ((color2 >> 8) & 0xff); + + _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=\"Bicolorizer -EXP-\">\n" + "<feColorMatrix result=\"fbSourceGraphic\" type=\"luminanceToAlpha\" />\n" + "<feFlood flood-opacity=\"%s\" in=\"fbSourceGraphic\" result=\"result1\" flood-color=\"rgb(%s,%s,%s)\" />\n" + "<feColorMatrix values=\"0\" result=\"result7\" type=\"hueRotate\" />\n" + "<feColorMatrix values=\"1\" type=\"saturate\" result=\"result8\" />\n" + "<feComposite result=\"result2\" operator=\"out\" in=\"result8\" in2=\"fbSourceGraphic\" />\n" + "<feComposite k2=\"1\" result=\"fbSourceGraphic\" operator=\"arithmetic\" in2=\"SourceGraphic\" />\n" + "<feFlood flood-opacity=\"%s\" in=\"fbSourceGraphic\" result=\"result2\" flood-color=\"rgb(%s,%s,%s)\" />\n" + "<feColorMatrix result=\"result3\" values=\"0\" type=\"hueRotate\" />\n" + "<feColorMatrix values=\"1\" result=\"result9\" type=\"saturate\" />\n" + "<feMerge result=\"result5\">\n" + "<feMergeNode in=\"result9\" />\n" + "<feMergeNode in=\"fbSourceGraphic\" />\n" + "</feMerge>\n" + "<feBlend result=\"result6\" mode=\"normal\" blend=\"normal\" in2=\"fbSourceGraphic\" />\n" + "<feComposite result=\"result6\" operator=\"in\" in2=\"SourceGraphic\" />\n" + "</filter>\n", a1.str().c_str(), r1.str().c_str(), g1.str().c_str(), b1.str().c_str(), a2.str().c_str(), r2.str().c_str(), g2.str().c_str(), b2.str().c_str()); + + return _filter; +}; +}; /* namespace Filter */ +}; /* namespace Internal */ +}; /* namespace Extension */ +}; /* namespace Inkscape */ + +/* Change the 'COLOR' below to be your file name */ +#endif /* __INKSCAPE_EXTENSION_INTERNAL_FILTER_COLOR_H__ */ diff --git a/src/extension/internal/filter/filter-all.cpp b/src/extension/internal/filter/filter-all.cpp index 6d61501fb..de683ba83 100644 --- a/src/extension/internal/filter/filter-all.cpp +++ b/src/extension/internal/filter/filter-all.cpp @@ -8,6 +8,7 @@ #include "filter.h" /* Put your filter here */ +#include "color.h" #include "drop-shadow.h" #include "snow.h" @@ -21,6 +22,7 @@ void Filter::filters_all (void ) { // Here come the filters which are coded in C++ in order to present a parameters dialog + Bicolorizer::init(); DropShadow::init(); DropGlow::init(); ColorizableDropShadow::init(); |
