index 0da9896e1f3f0f96b034577e9f1b38095ae359e9..78ea135076387886839cdaaea2c3a9f2f54e430d 100644 (file)
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak
+ * Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
*
+ * Copyright (C) 2007 Johan Engelen
* Copyright (C) 2001-2005 authors
* Copyright (C) 2001 Ximian, Inc.
*
@@ -93,12 +95,13 @@ sp_gradient_get_private_normalized(SPDocument *document, SPGradient *vector, SPG
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+ Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
// create a new private gradient of the requested type
Inkscape::XML::Node *repr;
if (type == SP_GRADIENT_TYPE_LINEAR) {
- repr = sp_repr_new("svg:linearGradient");
+ repr = xml_doc->createElement("svg:linearGradient");
} else {
- repr = sp_repr_new("svg:radialGradient");
+ repr = xml_doc->createElement("svg:radialGradient");
}
// privates are garbage-collectable
@@ -621,13 +624,11 @@ sp_item_gradient_stop_set_style (SPItem *item, guint point_type, guint point_i,
if (!vector) // orphan!
return;
-
- /*
- vector = sp_gradient_fork_vector_if_necessary (vector); // TESTJOHAN
+
+ vector = sp_gradient_fork_vector_if_necessary (vector);
if ( gradient != vector && gradient->ref->getObject() != vector ) {
sp_gradient_repr_set_link(SP_OBJECT_REPR(gradient), vector);
}
- */
switch (point_type) {
case POINT_LG_BEGIN:
sp_document_default_gradient_vector(SPDocument *document, guint32 color)
{
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+ Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
- Inkscape::XML::Node *repr = sp_repr_new("svg:linearGradient");
+ Inkscape::XML::Node *repr = xml_doc->createElement("svg:linearGradient");
repr->setAttribute("inkscape:collect", "always");
// set here, but removed when it's edited in the gradient editor
// (1) here, search gradients by color and return what is found without duplication
// (2) in fill & stroke, show only one copy of each gradient in list
- Inkscape::XML::Node *stop = sp_repr_new("svg:stop");
+ Inkscape::XML::Node *stop = xml_doc->createElement("svg:stop");
gchar b[64];
sp_svg_write_color(b, 64, color);
repr->appendChild(stop);
Inkscape::GC::release(stop);
- stop = sp_repr_new("svg:stop");
+ stop = xml_doc->createElement("svg:stop");
{
gchar *t = g_strdup_printf("stop-color:%s;stop-opacity:0;", b);
@@ -1222,6 +1224,18 @@ sp_gradient_vector_for_object(SPDocument *const doc, SPDesktop *const desktop,
return sp_document_default_gradient_vector(doc, rgba);
}
+
+SPGradient *
+sp_gradient_get_forked_vector_if_necessary(SPGradient *gradient, bool force_vector)
+{
+ SPGradient *vector = sp_gradient_get_vector (gradient, force_vector);
+ vector = sp_gradient_fork_vector_if_necessary (vector);
+ if ( gradient != vector && gradient->ref->getObject() != vector ) {
+ sp_gradient_repr_set_link(SP_OBJECT_REPR(gradient), vector);
+ }
+ return vector;
+}
+
/*
Local Variables:
mode:c++