summaryrefslogtreecommitdiffstats
path: root/src/ui/tools/eraser-tool.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2016-05-22 16:17:49 +0000
committerjabiertxof <info@marker.es>2016-05-22 16:17:49 +0000
commit2d1b3b926c94db73a3f5cb73071027b9ee348154 (patch)
tree63c86dde2400a11518d9aa80074bf955dd0d165e /src/ui/tools/eraser-tool.cpp
parentfirst attem to work throught layers (diff)
downloadinkscape-2d1b3b926c94db73a3f5cb73071027b9ee348154.tar.gz
inkscape-2d1b3b926c94db73a3f5cb73071027b9ee348154.zip
Speed improvements
(bzr r14865.1.12)
Diffstat (limited to 'src/ui/tools/eraser-tool.cpp')
-rw-r--r--src/ui/tools/eraser-tool.cpp24
1 files changed, 9 insertions, 15 deletions
diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp
index 02908fdf9..5cd04fa6f 100644
--- a/src/ui/tools/eraser-tool.cpp
+++ b/src/ui/tools/eraser-tool.cpp
@@ -766,20 +766,11 @@ void EraserTool::set_to_accumulated() {
SPItem *item = *i;
Geom::OptRect bbox = item->desktopVisualBounds();
Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc();
- Inkscape::XML::Node *rect_repr = xml_doc->createElement("svg:rect");
- sp_desktop_apply_style_tool (this->desktop, rect_repr, "/tools/eraser", false);
- SPRect * rect = SP_RECT(item_repr->parent->appendChildRepr(rect_repr));
- Inkscape::GC::release(rect_repr);
- rect->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height());
- rect->transform = SP_ITEM(rect->parent)->i2dt_affine().inverse();
- rect->updateRepr();
- this->desktop->canvas->endForcedFullRedraws();
Inkscape::XML::Node* dup = this->repr->duplicate(xml_doc);
this->repr->parent()->appendChild(dup);
Inkscape::GC::release(dup); // parent takes over
selection->set(dup);
sp_selected_path_union_skip_undo(selection, this->desktop);
- sp_selection_raise_to_top(selection, this->desktop, true);
if (bbox && bbox->intersects(*eraserBbox)) {
SPClipPath *clip_path = item->clip_ref->getObject();
if (clip_path) {
@@ -790,15 +781,9 @@ void EraserTool::set_to_accumulated() {
SPItem * dup_clip_obj = SP_ITEM(item_repr->parent->appendChildRepr(dup_clip));
if (dup_clip_obj) {
dup_clip_obj->doWriteTransform(dup_clip, item->transform);
- sp_object_ref(clip_data, 0);
- clip_data->deleteObject(true);
- sp_object_unref(clip_data);
sp_object_ref(clip_path, 0);
clip_path->deleteObject(true);
sp_object_unref(clip_path);
- sp_object_ref(rect, 0);
- rect->deleteObject(true);
- sp_object_unref(rect);
sp_selection_raise_to_top(selection, this->desktop, true);
selection->add(dup_clip);
sp_selected_path_diff_skip_undo(selection, this->desktop);
@@ -807,6 +792,15 @@ void EraserTool::set_to_accumulated() {
}
}
} else {
+ Inkscape::XML::Node *rect_repr = xml_doc->createElement("svg:rect");
+ sp_desktop_apply_style_tool (this->desktop, rect_repr, "/tools/eraser", false);
+ SPRect * rect = SP_RECT(item_repr->parent->appendChildRepr(rect_repr));
+ Inkscape::GC::release(rect_repr);
+ rect->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height());
+ rect->transform = SP_ITEM(rect->parent)->i2dt_affine().inverse();
+ rect->updateRepr();
+ rect->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ sp_selection_raise_to_top(selection, this->desktop, true);
selection->add(rect);
sp_selected_path_diff_skip_undo(selection, this->desktop);
}