summaryrefslogtreecommitdiffstats
path: root/src/extension
diff options
context:
space:
mode:
authorMarc Jeanmougin <marc@jeanmougin.fr>2015-04-26 09:46:39 +0000
committerMarc Jeanmougin <mc@M0nst3r.bouyguesbox.fr>2015-04-26 09:46:39 +0000
commitac6617a55b9f7c05db084eeaa5684fb42d5e1406 (patch)
tree1fc8e668890618463d48298074559c7fe6bc5040 /src/extension
parentmerge (diff)
parentextensions. ink2canvas.py - do not parse html comments. (Bug 1446204) (diff)
downloadinkscape-ac6617a55b9f7c05db084eeaa5684fb42d5e1406.tar.gz
inkscape-ac6617a55b9f7c05db084eeaa5684fb42d5e1406.zip
merging
(bzr r13922.1.13)
Diffstat (limited to 'src/extension')
-rw-r--r--src/extension/internal/cairo-render-context.cpp5
-rw-r--r--src/extension/internal/cairo-renderer.cpp2
-rw-r--r--src/extension/internal/filter/color.h77
-rw-r--r--src/extension/internal/filter/filter-all.cpp1
-rw-r--r--src/extension/param/radiobutton.cpp41
5 files changed, 107 insertions, 19 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index d76c187a2..2d6619e1e 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -42,6 +42,7 @@
#include "sp-hatch.h"
#include "sp-linear-gradient.h"
#include "sp-radial-gradient.h"
+#include "sp-mesh.h"
#include "sp-pattern.h"
#include "sp-mask.h"
#include "sp-clippath.h"
@@ -1259,6 +1260,10 @@ CairoRenderContext::_createPatternForPaintServer(SPPaintServer const *const pain
sp_color_get_rgb_floatv(&rg->vector.stops[i].color, rgb);
cairo_pattern_add_color_stop_rgba(pattern, rg->vector.stops[i].offset, rgb[0], rgb[1], rgb[2], rg->vector.stops[i].opacity * alpha);
}
+ } else if (SP_IS_MESH (paintserver)) {
+ SPMesh *mg = SP_MESH(paintserver);
+
+ pattern = mg->pattern_new(_cr, pbox, 1.0);
} else if (SP_IS_PATTERN (paintserver)) {
pattern = _createPatternPainter(paintserver, pbox);
} else if ( dynamic_cast<SPHatch const *>(paintserver) ) {
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp
index a2cea014b..49e145de0 100644
--- a/src/extension/internal/cairo-renderer.cpp
+++ b/src/extension/internal/cairo-renderer.cpp
@@ -515,7 +515,7 @@ static void sp_item_invoke_render(SPItem *item, CairoRenderContext *ctx)
SPStyle* style = item->style;
if((ctx->getFilterToBitmap() == TRUE) && (style->filter.set != 0)) {
- sp_asbitmap_render(item, ctx);
+ return sp_asbitmap_render(item, ctx);
}
SPRoot *root = dynamic_cast<SPRoot *>(item);
diff --git a/src/extension/internal/filter/color.h b/src/extension/internal/filter/color.h
index 19af6e969..c3c26bf8b 100644
--- a/src/extension/internal/filter/color.h
+++ b/src/extension/internal/filter/color.h
@@ -3,13 +3,14 @@
/* Change the 'COLOR' above to be your file name */
/*
- * Copyright (C) 2013 Authors:
+ * Copyright (C) 2013-2015 Authors:
* Ivan Louette (filters)
* Nicolas Dufour (UI) <nicoduf@yahoo.fr>
*
* Color filters
* Brilliance
* Channel painting
+ * Color blindness
* Color shift
* Colorize
* Component transfer
@@ -231,6 +232,80 @@ ChannelPaint::get_filter_text (Inkscape::Extension::Extension * ext)
}; /* Channel Painting filter */
/**
+ \brief Custom predefined Color Blindness filter.
+
+ Color Blindness filter.
+ Based on https://openclipart.org/detail/22299/Color%20Blindness%20filters
+
+ Filter's parameters:
+ * Blindness type (enum, default Achromatomaly) -> colormatrix
+*/
+class ColorBlindness : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ ColorBlindness ( ) : Filter() { };
+ virtual ~ColorBlindness ( ) { 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_("Color Blindness") "</name>\n"
+ "<id>org.inkscape.effect.filter.ColorBlindness</id>\n"
+ "<param name=\"tab\" type=\"notebook\">\n"
+ "<page name=\"optionstab\" _gui-text=\"Options\">\n"
+ "<param name=\"type\" gui-text=\"" N_("Blindness type:") "\" type=\"enum\">\n"
+ "<_item value=\"0.618 0.32 0.062 0 0 0.163 0.775 0.062 0 0 0.163 0.32 0.516 0 0 0 0 0 1 0 \">" N_("Rod monochromacy (atypical achromatopsia)") "</_item>\n"
+ "<_item value=\"0.299 0.587 0.114 0 0 0.299 0.587 0.114 0 0 0.299 0.587 0.114 0 0 0 0 0 1 0 \">" N_("Cone monochromacy (typical achromatopsia)") "</_item>\n"
+ "<_item value=\"0.8 0.2 0 0 0 0.2583 0.74167 0 0 0 0 0.14167 0.85833 0 0 0 0 0 1 0 \">" N_("Geen weak (deuteranomaly)") "</_item>\n"
+ "<_item value=\"0.625 0.375 0 0 0 0.7 0.3 0 0 0 0 0.3 0.7 0 0 0 0 0 1 0 \">" N_("Green blind (deuteranopia)") "</_item>\n"
+ "<_item value=\"0.8166 0.1833 0 0 0 0.333 0.666 0 0 0 0 0.125 0.875 0 0 0 0 0 1 0 \">" N_("Red weak (protanomaly)") "</_item>\n"
+ "<_item value=\"0.566 0.43333 0 0 0 0.55833 0.4416 0 0 0 0 0.24167 0.75833 0 0 0 0 0 1 0 \">" N_("Red blind (protanopia)") "</_item>\n"
+ "<_item value=\"0.966 0.033 0 0 0 0 0.733 0.266 0 0 0 0.1833 0.816 0 0 0 0 0 1 0 \">" N_("Blue weak (tritanomaly)") "</_item>\n"
+ "<_item value=\"0.95 0.05 0 0 0 0.2583 0.4333 0.5667 0 0 0 0.475 0.525 0 0 0 0 0 1 0 \">" N_("Blue blind (tritanopia)") "</_item>\n"
+ "</param>\n"
+ "</page>\n"
+ "<page name=\"helptab\" _gui-text=\"Help\">\n"
+ "<param name=\"help\" xml:space=\"preserve\" type=\"description\">\n"
+"Filters based on https://openclipart.org/detail/22299/Color%20Blindness%20filters\n"
+"\n"
+"These filters don't correctly reflect actual color blindness for two main reasons:\n"
+" * Everyone is different, and is not affected exactly the same way.\n"
+" * The filters are in the RGB color space, and ignore confusion lines.\n"
+ "</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_("Simulate color blindness") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new ColorBlindness());
+ };
+};
+
+gchar const *
+ColorBlindness::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream type;
+ type << ext->get_param_enum("type");
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" style=\"color-interpolation-filters:sRGB;\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Color Blindness\">\n"
+ "<feColorMatrix values=\"%s\" type=\"matrix\" result=\"colormatrix1\" />\n"
+ "</filter>\n", type.str().c_str());
+
+ return _filter;
+}; /* Color Blindness filter */
+
+/**
\brief Custom predefined Color shift filter.
Rotate and desaturate hue
diff --git a/src/extension/internal/filter/filter-all.cpp b/src/extension/internal/filter/filter-all.cpp
index 0273d1669..35504d37f 100644
--- a/src/extension/internal/filter/filter-all.cpp
+++ b/src/extension/internal/filter/filter-all.cpp
@@ -54,6 +54,7 @@ Filter::filters_all (void )
// Color
Brilliance::init();
ChannelPaint::init();
+ ColorBlindness::init();
ColorShift::init();
Colorize::init();
ComponentTransfer::init();
diff --git a/src/extension/param/radiobutton.cpp b/src/extension/param/radiobutton.cpp
index f9515197c..740acf1d1 100644
--- a/src/extension/param/radiobutton.cpp
+++ b/src/extension/param/radiobutton.cpp
@@ -249,28 +249,35 @@ void ParamRadioButtonWdg::changed(void)
class ComboWdg : public Gtk::ComboBoxText {
+private:
+ ParamRadioButton* _base;
+ SPDocument* _doc;
+ Inkscape::XML::Node* _node;
+ sigc::signal<void> * _changeSignal;
+
public:
- ComboWdg(ParamRadioButton* base, SPDocument * doc, Inkscape::XML::Node * node) :
- Gtk::ComboBoxText(),
- base(base),
- doc(doc),
- node(node)
+ ComboWdg(ParamRadioButton* base, SPDocument * doc, Inkscape::XML::Node * node, sigc::signal<void> * changeSignal) :
+ _base(base),
+ _doc(doc),
+ _node(node),
+ _changeSignal(changeSignal)
{
+ this->signal_changed().connect(sigc::mem_fun(this, &ComboWdg::changed));
}
virtual ~ComboWdg() {}
+ void changed (void);
+};
-protected:
- ParamRadioButton* base;
- SPDocument* doc;
- Inkscape::XML::Node* node;
-
- virtual void on_changed() {
- if ( base ) {
- Glib::ustring value = base->value_from_label(get_active_text());
- base->set(value.c_str(), doc, node);
- }
+void ComboWdg::changed(void)
+{
+ if ( _base ) {
+ Glib::ustring value = _base->value_from_label(get_active_text());
+ _base->set(value.c_str(), _doc, _node);
}
-};
+ if (_changeSignal != NULL) {
+ _changeSignal->emit();
+ }
+}
/**
* Returns the value for the options label parameter
@@ -317,7 +324,7 @@ Gtk::Widget * ParamRadioButton::get_widget(SPDocument * doc, Inkscape::XML::Node
Gtk::ComboBoxText* cbt = 0;
bool comboSet = false;
if (_mode == MINIMAL) {
- cbt = Gtk::manage(new ComboWdg(this, doc, node));
+ cbt = Gtk::manage(new ComboWdg(this, doc, node, changeSignal));
cbt->show();
vbox->pack_start(*cbt, false, false);
}