/** * Writes the gradient's internal vector (whether from its own stops, or * inherited from refs) into the gradient repr as svg:stop elements. */ void sp_gradient_repr_write_vector(SPGradient *gr) { g_return_if_fail(gr != NULL); g_return_if_fail(SP_IS_GRADIENT(gr)); Inkscape::XML::Document *xml_doc = gr->document->getReprDoc(); Inkscape::XML::Node *repr = gr->getRepr(); /* We have to be careful, as vector may be our own, so construct repr list at first */ GSList *cl = NULL; for (guint i = 0; i < gr->vector.stops.size(); i++) { Inkscape::CSSOStringStream os; Inkscape::XML::Node *child = xml_doc->createElement("svg:stop"); sp_repr_set_css_double(child, "offset", gr->vector.stops[i].offset); /* strictly speaking, offset an SVG <number> rather than a CSS one, but exponents make no * sense for offset proportions. */ os << "stop-color:" << gr->vector.stops[i].color.toString() << ";stop-opacity:" << gr->vector.stops[i].opacity; child->setAttribute("style", os.str().c_str()); /* Order will be reversed here */ cl = g_slist_prepend(cl, child); } sp_gradient_repr_clear_vector(gr); /* And insert new children from list */ while (cl) { Inkscape::XML::Node *child = static_cast<Inkscape::XML::Node *>(cl->data); repr->addChild(child, NULL); Inkscape::GC::release(child); cl = g_slist_remove(cl, child); } }
void RegisteredColorPicker::on_changed (guint32 rgba) { if (_wr->isUpdating()) return; _wr->setUpdating (true); // Use local repr here. When repr is specified, use that one, but // if repr==NULL, get the repr of namedview of active desktop. Inkscape::XML::Node *local_repr = repr; SPDocument *local_doc = doc; if (!local_repr) { // no repr specified, use active desktop's namedview's repr SPDesktop *dt = SP_ACTIVE_DESKTOP; if (!dt) return; local_repr = sp_desktop_namedview(dt)->getRepr(); local_doc = sp_desktop_document(dt); } gchar c[32]; sp_svg_write_color(c, sizeof(c), rgba); bool saved = DocumentUndo::getUndoSensitive(local_doc); DocumentUndo::setUndoSensitive(local_doc, false); local_repr->setAttribute(_ckey.c_str(), c); sp_repr_set_css_double(local_repr, _akey.c_str(), (rgba & 0xff) / 255.0); DocumentUndo::setUndoSensitive(local_doc, saved); local_doc->setModifiedSinceSave(); DocumentUndo::done(local_doc, SP_VERB_NONE, /* TODO: annotate */ "registered-widget.cpp: RegisteredColorPicker::on_changed"); _wr->setUpdating (false); }
/** * Writes its settings to an incoming repr object, if any. */ static Inkscape::XML::Node * sp_fepointlight_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { SPFePointLight *fepointlight = SP_FEPOINTLIGHT(object); if (!repr) { repr = SP_OBJECT_REPR(object)->duplicate(doc); } if (fepointlight->x_set) sp_repr_set_css_double(repr, "x", fepointlight->x); if (fepointlight->y_set) sp_repr_set_css_double(repr, "y", fepointlight->y); if (fepointlight->z_set) sp_repr_set_css_double(repr, "z", fepointlight->z); if (((SPObjectClass *) fePointLight_parent_class)->write) { ((SPObjectClass *) fePointLight_parent_class)->write(object, doc, repr, flags); } return repr; }