summaryrefslogtreecommitdiffstats
path: root/src/sp-filter.cpp
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2012-12-22 16:43:07 +0000
committertavmjong-free <tavmjong@free.fr>2012-12-22 16:43:07 +0000
commit8c4d3b68e4a5727b2205ec136d6fb5f50289d1e9 (patch)
treee42d82fbd37bf5876a67f7ac199a2f2fb607f291 /src/sp-filter.cpp
parentAdd utilities to tag a cairo surface with color interpolation value. (diff)
downloadinkscape-8c4d3b68e4a5727b2205ec136d6fb5f50289d1e9.tar.gz
inkscape-8c4d3b68e4a5727b2205ec136d6fb5f50289d1e9.zip
Add support for color-interpolation-filters = linearRGB.
(bzr r11972)
Diffstat (limited to 'src/sp-filter.cpp')
-rw-r--r--src/sp-filter.cpp28
1 files changed, 5 insertions, 23 deletions
diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp
index a20856f53..c7dce3850 100644
--- a/src/sp-filter.cpp
+++ b/src/sp-filter.cpp
@@ -130,11 +130,8 @@ sp_filter_init(SPFilter *filter)
static void
sp_filter_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- if (((SPObjectClass *) filter_parent_class)->build) {
- ((SPObjectClass *) filter_parent_class)->build(object, document, repr);
- }
-
//Read values of key attributes from XML nodes into object.
+ object->readAttr( "style" ); // struct not derived from SPItem, we need to do this ourselves.
object->readAttr( "filterUnits" );
object->readAttr( "primitiveUnits" );
object->readAttr( "x" );
@@ -144,6 +141,10 @@ sp_filter_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
object->readAttr( "filterRes" );
object->readAttr( "xlink:href" );
+ if (((SPObjectClass *) filter_parent_class)->build) {
+ ((SPObjectClass *) filter_parent_class)->build(object, document, repr);
+ }
+
//is this necessary?
document->addResource("filter", object);
}
@@ -366,25 +367,6 @@ sp_filter_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::N
g_free(uri_string);
}
- // TODO: This is evil, correctly implement support for color-interpolation-filters!!!
- // The color-interpolation-filters attribute is initially set to linearRGB according to the SVG standard.
- // However, Inkscape completely ignores it and implicitly assumes that it is sRGB (like color-interpolation).
- // This results in a discrepancy between Inkscape and other renderers in how they render filters.
- // To mitigate this problem I've (Jasper van de Gronde,th.v.d.gronde@hccnet.nl) added this to ensure that at least
- // any filters written by Inkscape will henceforth be rendered the same in other renderers.
- // In the future Inkscape should have proper support for the color-interpolation properties and this should be changed.
-
- // repr->setAttribute("color-interpolation-filters", "sRGB");
-
- // Actually, the above line is not correct as the attribute is only allowed on filter
- // primitives and not <filter> objects. However, it is allowed as a property in a style
- // attribute. Note, this property must also be set in sp-filter-chemistry, filter_new() as the
- // code here is not necessarily called when a new filter is created. 29 Aug 2011 Tav.
- SPCSSAttr *css = sp_repr_css_attr_new();
- sp_repr_css_set_property(css, "color-interpolation-filters", "sRGB");
- sp_repr_css_change(repr, css, "style");
- sp_repr_css_attr_unref(css);
-
if (((SPObjectClass *) filter_parent_class)->write) {
((SPObjectClass *) filter_parent_class)->write(object, doc, repr, flags);
}