diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2017-11-03 00:55:01 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2018-05-09 19:42:10 +0000 |
| commit | 61cbbcbe02f11d67e4fe9f3c4f452442d2e9f778 (patch) | |
| tree | 3ed5e5b78b00cf25892a3a18e118eee41cbc15ec /src/extension/implementation/script.cpp | |
| parent | Fix typo (diff) | |
| download | inkscape-61cbbcbe02f11d67e4fe9f3c4f452442d2e9f778.tar.gz inkscape-61cbbcbe02f11d67e4fe9f3c4f452442d2e9f778.zip | |
Start migrating 0.92 patch to master
Diffstat (limited to 'src/extension/implementation/script.cpp')
| -rw-r--r-- | src/extension/implementation/script.cpp | 137 |
1 files changed, 36 insertions, 101 deletions
diff --git a/src/extension/implementation/script.cpp b/src/extension/implementation/script.cpp index f25c8a5d6..42867b823 100644 --- a/src/extension/implementation/script.cpp +++ b/src/extension/implementation/script.cpp @@ -417,11 +417,29 @@ ScriptDocCache::ScriptDocCache (Inkscape::UI::View::View * view) : SPDesktop *desktop = (SPDesktop *) view; sp_namedview_document_from_window(desktop); - + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool sort_attributes = prefs->getBool("/options/svgoutput/sort_attributes", false); + bool incorrect_style_properties_remove = prefs->getBool("/options/svgoutput/incorrect_style_properties_remove", false); + bool incorrect_attributes_remove = prefs->getBool("/options/svgoutput/incorrect_attributes_remove", false); + bool usenamedcolors = prefs->getBool("/options/svgoutput/usenamedcolors", false); + bool forcerepeatcommands = prefs->getBool("/options/svgoutput/forcerepeatcommands", false); + bool style_defaults_remove = prefs->getBool("/options/svgoutput/style_defaults_remove", false); + prefs->setBool("/options/svgoutput/sort_attributes", false); + prefs->setBool("/options/svgoutput/incorrect_style_properties_remove", false); + prefs->setBool("/options/svgoutput/incorrect_attributes_remove", false); + prefs->setBool("/options/svgoutput/usenamedcolors", false); + prefs->setBool("/options/svgoutput/forcerepeatcommands", false); + prefs->setBool("/options/svgoutput/style_defaults_remove", false); Inkscape::Extension::save( Inkscape::Extension::db.get(SP_MODULE_KEY_OUTPUT_SVG_INKSCAPE), view->doc(), _filename.c_str(), false, false, false, Inkscape::Extension::FILE_SAVE_METHOD_TEMPORARY); + prefs->setBool("/options/svgoutput/sort_attributes", sort_attributes); + prefs->setBool("/options/svgoutput/incorrect_style_properties_remove", incorrect_style_properties_remove); + prefs->setBool("/options/svgoutput/incorrect_attributes_remove", incorrect_attributes_remove); + prefs->setBool("/options/svgoutput/usenamedcolors", usenamedcolors); + prefs->setBool("/options/svgoutput/forcerepeatcommands", forcerepeatcommands); + prefs->setBool("/options/svgoutput/style_defaults_remove", style_defaults_remove); return; } @@ -686,57 +704,14 @@ void Script::effect(Inkscape::Extension::Effect *module, return; } - auto selected = - desktop->getSelection()->items(); //desktop should not be NULL since doc was checked and desktop is a casted pointer - for(auto x = selected.begin(); x != selected.end(); ++x){ - Glib::ustring selected_id; - selected_id += "--id="; - selected_id += (*x)->getId(); - params.push_front(selected_id); - } - - {//add selected nodes - Inkscape::UI::Tools::NodeTool *tool = 0; - if (SP_ACTIVE_DESKTOP ) { - Inkscape::UI::Tools::ToolBase *ec = SP_ACTIVE_DESKTOP->event_context; - if (INK_IS_NODE_TOOL(ec)) { - tool = static_cast<Inkscape::UI::Tools::NodeTool*>(ec); - } - } - - if(tool){ - Inkscape::UI::ControlPointSelection *cps = tool->_selected_nodes; - for (Inkscape::UI::ControlPointSelection::iterator i = cps->begin(); i != cps->end(); ++i) { - Inkscape::UI::Node *node = dynamic_cast<Inkscape::UI::Node*>(*i); - if (node) { - std::string id = node->nodeList().subpathList().pm().item()->getId(); - - int sp = 0; - bool found_sp = false; - for(Inkscape::UI::SubpathList::iterator i = node->nodeList().subpathList().begin(); i != node->nodeList().subpathList().end(); ++i,++sp){ - if(&**i == &(node->nodeList())){ - found_sp = true; - break; - } - } - int nl=0; - bool found_nl = false; - for (Inkscape::UI::NodeList::iterator j = node->nodeList().begin(); j != node->nodeList().end(); ++j, ++nl){ - if(&*j==node){ - found_nl = true; - break; - } - } - std::ostringstream ss; - ss<< "--selected-nodes=" << id << ":" << sp << ":" << nl; - Glib::ustring selected = ss.str(); - - if(found_nl && found_sp)params.push_front(selected); - else g_warning("Something went wrong while trying to pass selected nodes to extension. Please report a bug."); - } + if (desktop) { + Inkscape::Selection * selection = desktop->getSelection(); + if (!selection->isEmpty()) { + selection->setBackup(); } + params = selection->params; + module->paramListString(params); } - }//end add selected nodes file_listener fileout; int data_read = execute(command, params, dc->_filename, fileout); @@ -790,6 +765,7 @@ void Script::effect(Inkscape::Extension::Effect *module, layer = document->getObjectById(g_quark_to_string(nv->default_layer_id)); } } + desktop->showGrids(nv->grids_visible); } sp_namedview_update_layers_from_document(desktop); @@ -798,6 +774,14 @@ void Script::effect(Inkscape::Extension::Effect *module, //set the current layer desktop->setCurrentLayer(layer); } + SPDesktop *desktop = SP_ACTIVE_DESKTOP; + if (desktop) { + Inkscape::Selection * selection = desktop->getSelection(); + if (selection && selection->isEmpty() && !desktop->on_live_extension) { + selection->restoreBackup(); + selection->emptyBackup(); + } + } } mydoc->release(); } @@ -833,12 +817,10 @@ void Script::copy_doc (Inkscape::XML::Node * oldroot, Inkscape::XML::Node * newr g_warning("Error on copy_doc: NULL pointer input."); return; } - // For copying attributes in root and in namedview using Inkscape::Util::List; using Inkscape::XML::AttributeRecord; std::vector<gchar const *> attribs; - // Must explicitly copy root attributes. This must be done first since // copying grid lines calls "SPGuide::set()" which needs to know the // width, height, and viewBox of the root element. @@ -859,80 +841,33 @@ void Script::copy_doc (Inkscape::XML::Node * oldroot, Inkscape::XML::Node * newr oldroot->setAttribute(name, newroot->attribute(name)); } - // Question: Why is the "sodipodi:namedview" special? Treating it as a normal // elmement results in crashes. // Seems to be a bug: // http://inkscape.13.x6.nabble.com/Effect-that-modifies-the-document-properties-tt2822126.html std::vector<Inkscape::XML::Node *> delete_list; - Inkscape::XML::Node * oldroot_namedview = NULL; - Inkscape::XML::Node * newroot_namedview = NULL; // Make list for (Inkscape::XML::Node * child = oldroot->firstChild(); child != NULL; child = child->next()) { if (!strcmp("sodipodi:namedview", child->name())) { - oldroot_namedview = child; for (Inkscape::XML::Node * oldroot_namedview_child = child->firstChild(); oldroot_namedview_child != NULL; oldroot_namedview_child = oldroot_namedview_child->next()) { delete_list.push_back(oldroot_namedview_child); } - } else { - delete_list.push_back(child); + break; } } - if(!oldroot_namedview) - { - g_warning("Error on copy_doc: No namedview on destination document."); - return; - } - // Unparent (delete) for (unsigned int i = 0; i < delete_list.size(); i++) { sp_repr_unparent(delete_list[i]); } - - // Copy - for (Inkscape::XML::Node * child = newroot->firstChild(); - child != NULL; - child = child->next()) { - if (!strcmp("sodipodi:namedview", child->name())) { - newroot_namedview = child; - for (Inkscape::XML::Node * newroot_namedview_child = child->firstChild(); - newroot_namedview_child != NULL; - newroot_namedview_child = newroot_namedview_child->next()) { - oldroot_namedview->appendChild(newroot_namedview_child->duplicate(oldroot->document())); - } - } else { - oldroot->appendChild(child->duplicate(oldroot->document())); - } - } - attribs.clear(); - - // Must explicitly copy namedview attributes. - // Make a list of all attributes of the old namedview node. - for (List<AttributeRecord const> iter = oldroot_namedview->attributeList(); iter; ++iter) { - attribs.push_back(g_quark_to_string(iter->key)); - } - - // Delete the attributes of the old namedview node. - for (std::vector<gchar const *>::const_iterator it = attribs.begin(); it != attribs.end(); ++it) { - oldroot_namedview->setAttribute(*it, NULL); - } - - // Set the new attributes. - for (List<AttributeRecord const> iter = newroot_namedview->attributeList(); iter; ++iter) { - gchar const *name = g_quark_to_string(iter->key); - oldroot_namedview->setAttribute(name, newroot_namedview->attribute(name)); - } - - /** \todo Restore correct layer */ - /** \todo Restore correct selection */ + oldroot->mergeFrom(newroot, "id", true, true); } /** \brief This function checks the stderr file, and if it has data, |
