From 5a2dae366dd8d2797b55b0cd0eb801d2e03f0176 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Wed, 9 Oct 2019 06:05:56 +0000 Subject: Improve node selection ~x3 removing unneded updateNow() called in non necesary places. Also ensure canvas is always redraw --- src/ui/tool/multi-path-manipulator.cpp | 7 +++++++ src/ui/tools/node-tool.cpp | 10 ++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) (limited to 'src/ui') diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp index 90662237e..544ababbe 100644 --- a/src/ui/tool/multi-path-manipulator.cpp +++ b/src/ui/tool/multi-path-manipulator.cpp @@ -181,7 +181,11 @@ void MultiPathManipulator::setItems(std::set const &s) } // add newly selected items + bool updatecanvas = false; for (const auto & r : shapes) { + if (IS_LIVEPATHEFFECT(r.item)) { + updatecanvas = true; + } if (!SP_IS_PATH(r.item) && !IS_LIVEPATHEFFECT(r.item)) continue; std::shared_ptr newpm(new PathManipulator(*this, (SPPath*) r.item, r.edit_transform, _getOutlineColor(r.role, r.item), r.lpe_key)); @@ -193,6 +197,9 @@ void MultiPathManipulator::setItems(std::set const &s) newpm->setLiveObjects(_live_objects); _mmap.insert(std::make_pair(r, newpm)); } + if (updatecanvas) { + _desktop->updateNow(); + } } void MultiPathManipulator::selectSubpaths() diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 63161b3cd..937c1a657 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -458,7 +458,8 @@ void NodeTool::selection_changed(Inkscape::Selection *sel) { this->_multipath->setItems(shapes); this->update_tip(nullptr); - this->desktop->updateNow(); + // This not need to be called canvas is updated on selection change on setItems + // this->desktop->updateNow(); } bool NodeTool::root_handler(GdkEvent* event) { @@ -548,7 +549,7 @@ bool NodeTool::root_handler(GdkEvent* event) { SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(flash), 0, SP_WIND_RULE_NONZERO); - + desktop->canvas->forceFullRedrawAfterInterruptions(5); this->flash_tempitem = desktop->add_temporary_canvasitem(flash, prefs->getInt("/tools/nodes/pathflash_timeout", 500)); @@ -631,6 +632,7 @@ bool NodeTool::root_handler(GdkEvent* event) { } } } + desktop->canvas->forceFullRedrawAfterInterruptions(5); break; default: @@ -777,8 +779,8 @@ void NodeTool::select_point(Geom::Point const &/*sel*/, GdkEventButton *event) { } else { selection->set(item_clicked); } - - this->desktop->updateNow(); + // This not need to be called canvas is updated on selection change + // this->desktop->updateNow(); } } -- cgit v1.2.3