diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-05-29 21:35:53 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-06-02 09:50:17 +0000 |
| commit | 9b298639ee324a0c0106ad7a638d04066f50f686 (patch) | |
| tree | 3089159720d1c0785ff9d4c40651cd0bf7576c16 /src/ui/dialog/styledialog.cpp | |
| parent | Remove lock button from XML dialog (diff) | |
| download | inkscape-9b298639ee324a0c0106ad7a638d04066f50f686.tar.gz inkscape-9b298639ee324a0c0106ad7a638d04066f50f686.zip | |
fixes for:update multiple objects, refersh strike on named colors and refersh styles on write
Diffstat (limited to 'src/ui/dialog/styledialog.cpp')
| -rw-r--r-- | src/ui/dialog/styledialog.cpp | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/src/ui/dialog/styledialog.cpp b/src/ui/dialog/styledialog.cpp index 9f3d85622..e33d9a52f 100644 --- a/src/ui/dialog/styledialog.cpp +++ b/src/ui/dialog/styledialog.cpp @@ -24,6 +24,7 @@ #include "ui/icon-loader.h" #include "ui/widget/iconrenderer.h" #include "verbs.h" +#include "svg/svg-color.h" #include "xml/attribute-record.h" #include "xml/node-observer.h" @@ -604,7 +605,16 @@ void StyleDialog::_readStyleElement() row[_mColumns._colActive] = true; row[_mColumns._colName] = iter->name; row[_mColumns._colValue] = attr_prop_styleshet[iter->name]; - if (attr_prop.count(iter->name) || row[_mColumns._colValue] != iter->get_value()) { + const Glib::ustring value = row[_mColumns._colValue]; + guint32 r1 = 0; // if there's no color, return black + r1 = sp_svg_read_color(value.c_str(), r1); + guint32 r2 = 0; // if there's no color, return black + r2 = sp_svg_read_color(iter->get_value().c_str(), r2); + if (attr_prop.count(iter->name) || + (value != iter->get_value() && + (r1 & 0xff == 0 || + r1 != r2))) + { row[_mColumns._colStrike] = true; } else { row[_mColumns._colStrike] = false; @@ -739,11 +749,9 @@ void StyleDialog::_onPropDelete(Glib::ustring path, Glib::RefPtr<Gtk::TreeStore> { Gtk::TreeModel::Row row = *store->get_iter(path); if (row) { - _updating = true; // to avoid a crash on deleting an obsolete widget Glib::ustring selector = row[_mColumns._colSelector]; row[_mColumns._colName] = ""; store->erase(row); - _updating = false; _writeStyleElement(store, selector); } } @@ -836,9 +844,26 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store, Glib::u std::string result; std::regex_replace(std::back_inserter(result), content.begin(), content.end(), e, "$1" + styleContent + "$3"); textNode->setContent(result.c_str()); - for (auto iter : document->getObjectsByClass(selector)) { - iter->style->readFromObject(iter); - iter->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); + std::vector<Glib::ustring> tokens = Glib::Regex::split_simple("[,]+", selector); + for (auto token : tokens) { + REMOVE_SPACES(token); + std::vector<Glib::ustring> selectorlist = Glib::Regex::split_simple("[ ]+", token); + if (selectorlist.size() > 0) { + Glib::ustring lastselector = REMOVE_SPACES(selectorlist[selectorlist.size() - 1]); + Glib::ustring selectorname = lastselector; + selectorname.erase(0, 1); + lastselector.erase(1); + if (lastselector == ".") { + for (auto iter : document->getObjectsByClass(selectorname)) { + iter->style->readFromObject(iter); + iter->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); + } + } else { + SPObject * obj = document->getObjectById(selectorname); + obj->style->readFromObject(obj); + obj->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG); + } + } } } /* if (selector == "attributes") { @@ -860,10 +885,10 @@ void StyleDialog::_writeStyleElement(Glib::RefPtr<Gtk::TreeStore> store, Glib::u } } } else */ + _updating = false; _readStyleElement(); DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_STYLE, _("Edited style element.")); - _updating = false; g_debug("StyleDialog::_writeStyleElement(): | %s |", styleContent.c_str()); } |
