diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/live_effects/lpe-measure-segments.cpp | 30 | ||||
| -rw-r--r-- | src/live_effects/parameter/originalitemarray.cpp | 2 | ||||
| -rw-r--r-- | src/ui/clipboard.cpp | 8 | ||||
| -rw-r--r-- | src/ui/clipboard.h | 2 |
4 files changed, 27 insertions, 15 deletions
diff --git a/src/live_effects/lpe-measure-segments.cpp b/src/live_effects/lpe-measure-segments.cpp index f488fc565..e15e1749e 100644 --- a/src/live_effects/lpe-measure-segments.cpp +++ b/src/live_effects/lpe-measure-segments.cpp @@ -754,7 +754,19 @@ double getAngle(Geom::Point p1, Geom::Point p2, Geom::Point p3, bool flip_side, return angle; } -std::vector< Point > getNodes(SPItem * item) +std::vector< Point > +transformNodes(std::vector< Point > nodes, Geom::Affine transform) +{ + std::vector< Point > result; + for ( std::vector<Point>::iterator iter = nodes.begin(); iter != nodes.end(); ++iter ) { + Geom::Point point = (*iter); + result.push_back(point * transform); + } + return result; +} + +std::vector< Point > +getNodes(SPItem * item) { std::vector< Point > current_nodes; SPShape * shape = dynamic_cast<SPShape *> (item); @@ -766,12 +778,12 @@ std::vector< Point > getNodes(SPItem * item) std::vector<SPItem*> const item_list = sp_item_group_item_list(group); for ( std::vector<SPItem*>::const_iterator iter=item_list.begin();iter!=item_list.end();++iter) { SPItem *sub_item = *iter; - std::vector< Point > nodes = getNodes(sub_item); + std::vector< Point > nodes = transformNodes(getNodes(sub_item), item->transform); current_nodes.insert(current_nodes.end(), nodes.begin(), nodes.end()); } } else if (shape) { SPCurve * c = shape->getCurve(); - current_nodes = c->get_pathvector().nodes(); + current_nodes = transformNodes(c->get_pathvector().nodes(), item->transform); c->unref(); } else if (text || flowtext) { Inkscape::Text::Layout::iterator iter = te_get_layout(item)->begin(); @@ -791,7 +803,7 @@ std::vector< Point > getNodes(SPItem * item) curve->unref(); continue; } - std::vector< Point > letter_nodes = curve->get_pathvector().nodes(); + std::vector< Point > letter_nodes = transformNodes(curve->get_pathvector().nodes(), item->transform); current_nodes.insert(current_nodes.end(),letter_nodes.begin(),letter_nodes.end()); if (iter == te_get_layout(item)->end()) { break; @@ -800,10 +812,10 @@ std::vector< Point > getNodes(SPItem * item) } else { Geom::OptRect bbox = item->geometricBounds(); if (bbox) { - current_nodes.push_back((*bbox).corner(0)); - current_nodes.push_back((*bbox).corner(1)); - current_nodes.push_back((*bbox).corner(2)); - current_nodes.push_back((*bbox).corner(3)); + current_nodes.push_back((*bbox).corner(0) * item->transform); + current_nodes.push_back((*bbox).corner(1) * item->transform); + current_nodes.push_back((*bbox).corner(2) * item->transform); + current_nodes.push_back((*bbox).corner(3) * item->transform); } } return current_nodes; @@ -844,7 +856,7 @@ LPEMeasureSegments::doBeforeEffect (SPLPEItem const* lpeitem) std::vector< Point > nodes; for (std::vector<ItemAndActive*>::iterator iter = linked_items._vector.begin(); iter != linked_items._vector.end(); ++iter) { SPObject *obj; - if ((*iter)->ref.isAttached() && (obj = (*iter)->ref.getObject()) && SP_IS_ITEM(obj)) { + if ((*iter)->ref.isAttached() && (*iter)->actived && (obj = (*iter)->ref.getObject()) && SP_IS_ITEM(obj)) { SPItem * item = dynamic_cast<SPItem *>(obj); if (item) { hasprojection = true; diff --git a/src/live_effects/parameter/originalitemarray.cpp b/src/live_effects/parameter/originalitemarray.cpp index b89485e2d..a4c2e5087 100644 --- a/src/live_effects/parameter/originalitemarray.cpp +++ b/src/live_effects/parameter/originalitemarray.cpp @@ -283,7 +283,7 @@ OriginalItemArrayParam::on_link_button_click() { Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get(); //without second parameter populate all elements filled inside the called function - std::vector<Glib::ustring> itemsid = cm->getElementsOfType(SP_ACTIVE_DESKTOP); + std::vector<Glib::ustring> itemsid = cm->getElementsOfType(SP_ACTIVE_DESKTOP, "*", 1); if (itemsid.empty()) { return; diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index 58a276090..83e878d66 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -107,7 +107,7 @@ public: virtual bool pastePathEffect(ObjectSet *set); virtual Glib::ustring getPathParameter(SPDesktop* desktop); virtual Glib::ustring getShapeOrTextObjectId(SPDesktop *desktop); - virtual std::vector<Glib::ustring> getElementsOfType(SPDesktop *desktop, gchar const *type); + virtual std::vector<Glib::ustring> getElementsOfType(SPDesktop *desktop, gchar const* type = "*", gint maxdepth = -1); virtual const gchar *getFirstObjectID(); ClipboardManagerImpl(); @@ -661,7 +661,7 @@ Glib::ustring ClipboardManagerImpl::getShapeOrTextObjectId(SPDesktop *desktop) * @return A vector containing all IDs or empty if no shape or text item was found. * type. Set to "*" to retrieve all elements of the types vector inside, feel free to populate more */ -std::vector<Glib::ustring> ClipboardManagerImpl::getElementsOfType(SPDesktop *desktop, gchar const* type) +std::vector<Glib::ustring> ClipboardManagerImpl::getElementsOfType(SPDesktop *desktop, gchar const* type, gint maxdepth) { std::vector<Glib::ustring> result; SPDocument *tempdoc = _retrieveClipboard(); // any target will do here @@ -686,11 +686,11 @@ std::vector<Glib::ustring> ClipboardManagerImpl::getElementsOfType(SPDesktop *de types.push_back((Glib::ustring)"svg:image"); for (auto i=types.begin();i!=types.end();++i) { Glib::ustring type_elem = *i; - std::vector<Inkscape::XML::Node const *> reprs_found = sp_repr_lookup_name_many(root, type_elem.c_str(), -1); // unlimited search depth + std::vector<Inkscape::XML::Node const *> reprs_found = sp_repr_lookup_name_many(root, type_elem.c_str(), maxdepth); // unlimited search depth reprs.insert(reprs.end(), reprs_found.begin(), reprs_found.end()); } } else { - reprs = sp_repr_lookup_name_many(root, type, -1); // unlimited search depth + reprs = sp_repr_lookup_name_many(root, type, maxdepth); } for (auto i=reprs.begin();i!=reprs.end();++i) { Inkscape::XML::Node const * node = *i; diff --git a/src/ui/clipboard.h b/src/ui/clipboard.h index 390830bba..e32b5aed2 100644 --- a/src/ui/clipboard.h +++ b/src/ui/clipboard.h @@ -51,7 +51,7 @@ public: virtual bool pastePathEffect(ObjectSet *set) = 0; virtual Glib::ustring getPathParameter(SPDesktop* desktop) = 0; virtual Glib::ustring getShapeOrTextObjectId(SPDesktop *desktop) = 0; - virtual std::vector<Glib::ustring> getElementsOfType(SPDesktop *desktop, gchar const* type = "*") = 0; + virtual std::vector<Glib::ustring> getElementsOfType(SPDesktop *desktop, gchar const* type = "*", gint maxdepth = -1) = 0; virtual const gchar *getFirstObjectID() = 0; static ClipboardManager *get(); |
