summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 72a0785)
raw | patch | inline | side by side (parent: 72a0785)
author | Krzysztof Kosiński <tweenk.pl@gmail.com> | |
Sun, 31 Oct 2010 21:22:56 +0000 (22:22 +0100) | ||
committer | Krzysztof Kosiński <tweenk.pl@gmail.com> | |
Sun, 31 Oct 2010 21:22:56 +0000 (22:22 +0100) |
src/ui/tool/node-tool.cpp | patch | blob | history | |
src/ui/tool/node-tool.h | patch | blob | history |
index f2b2426ae81527bcdacdc8775f0aad1d134f02cb..b573ff3e3d1bac0bac918bbc08d9ff4498c685ef 100644 (file)
#include "sp-mask.h"
#include "sp-object-group.h"
#include "sp-path.h"
+#include "sp-text.h"
#include "ui/tool/node-tool.h"
#include "ui/tool/control-point-selection.h"
#include "ui/tool/curve-drag-point.h"
if (nt->_node_message_context) {
delete nt->_node_message_context;
}
- if (nt->shape_editor) {
- nt->shape_editor->unset_item(SH_KNOTHOLDER);
- delete nt->shape_editor;
- }
G_OBJECT_CLASS(g_type_class_peek(g_type_parent(INK_TYPE_NODE_TOOL)))->dispose(object);
}
nt->flash_tempitem = NULL;
nt->flashed_item = NULL;
nt->_last_over = NULL;
- // TODO long term, fold ShapeEditor into MultiPathManipulator and rename MPM
- // to something better
- //nt->shape_editor = new ShapeEditor(nt->desktop);
// read prefs before adding items to selection to prevent momentarily showing the outline
sp_event_context_read(nt, "show_handles");
@@ -405,19 +399,28 @@ void ink_node_tool_selection_changed(InkNodeTool *nt, Inkscape::Selection *sel)
}
}
- nt->_shape_editors.clear();
-
// use multiple ShapeEditors for now, to allow editing many shapes at once
// needs to be rethought
+ for (ShapeEditors::iterator i = nt->_shape_editors.begin();
+ i != nt->_shape_editors.end(); )
+ {
+ ShapeRecord s;
+ s.item = i->first;
+ if (shapes.find(s) == shapes.end()) {
+ nt->_shape_editors.erase(i++);
+ } else {
+ ++i;
+ }
+ }
for (std::set<ShapeRecord>::iterator i = shapes.begin(); i != shapes.end(); ++i) {
ShapeRecord const &r = *i;
- if (SP_IS_SHAPE(r.item))
+ if ((SP_IS_SHAPE(r.item) || SP_IS_TEXT(r.item)) &&
+ nt->_shape_editors.find(r.item) == nt->_shape_editors.end())
{
ShapeEditor *si = new ShapeEditor(nt->desktop);
si->set_item(r.item, SH_KNOTHOLDER);
- nt->_shape_editors.push_back(si);
- //nt->shape_editor->set_item(r.item, SH_KNOTHOLDER);
+ nt->_shape_editors.insert(const_cast<SPItem*&>(r.item), si);
}
}
index 11652b535da74d641c7dddfd09e747d0875a2734..39d04a18305e7d901badc1f0613b8586990ea4db 100644 (file)
--- a/src/ui/tool/node-tool.h
+++ b/src/ui/tool/node-tool.h
#define SEEN_UI_TOOL_NODE_TOOL_H
#include <memory>
-#include <boost/ptr_container/ptr_vector.hpp>
+#include <boost/ptr_container/ptr_map.hpp>
#include <glib.h>
#include <sigc++/sigc++.h>
#include "event-context.h"
typedef std::auto_ptr<Inkscape::UI::ControlPointSelection> CSelPtr;
typedef std::auto_ptr<Inkscape::UI::Selector> SelectorPtr;
typedef std::auto_ptr<Inkscape::UI::PathSharedData> PathSharedDataPtr;
-typedef boost::ptr_vector<ShapeEditor> ShapeEditors;
+typedef boost::ptr_map<SPItem*, ShapeEditor> ShapeEditors;
struct InkNodeTool : public SPEventContext
{