summaryrefslogtreecommitdiff
path: root/src/gui/tikzscene.cpp
diff options
context:
space:
mode:
authorAleks Kissinger <aleks0@gmail.com>2018-04-17 11:03:24 +0300
committerAleks Kissinger <aleks0@gmail.com>2018-04-17 11:03:24 +0300
commit8ac7248513189d82fe5bdf90c0d7fc15f2e718ce (patch)
treea537036afd281726cad73b1622935d3084c68f15 /src/gui/tikzscene.cpp
parent34b60b77d3f9830ddb6a0107bd65aa3c79701305 (diff)
fixed bounding box bug
Diffstat (limited to 'src/gui/tikzscene.cpp')
-rw-r--r--src/gui/tikzscene.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/gui/tikzscene.cpp b/src/gui/tikzscene.cpp
index 345d02c..40d56e7 100644
--- a/src/gui/tikzscene.cpp
+++ b/src/gui/tikzscene.cpp
@@ -57,15 +57,16 @@ Graph *TikzScene::graph()
void TikzScene::graphReplaced()
{
- foreach (NodeItem *ni, _nodeItems) {
+
+ foreach (NodeItem *ni, _nodeItems) {
removeItem(ni);
- delete ni;
+ //delete ni;
}
_nodeItems.clear();
foreach (EdgeItem *ei, _edgeItems) {
removeItem(ei);
- delete ei;
+ //delete ei;
}
_edgeItems.clear();
@@ -287,8 +288,12 @@ void TikzScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
foreach (Node *n, _oldNodePositions.keys()) {
NodeItem *ni = _nodeItems[n];
- ni->setPos(toScreen(_oldNodePositions[n]) + shift);
- ni->writePos();
+
+ // in (rare) cases, the graph can change while we are dragging
+ if (ni != 0) {
+ ni->setPos(toScreen(_oldNodePositions[n]) + shift);
+ ni->writePos();
+ }
}
refreshAdjacentEdges(_oldNodePositions.keys());
@@ -711,11 +716,16 @@ void TikzScene::reloadStyles()
void TikzScene::refreshAdjacentEdges(QList<Node*> nodes)
{
if (nodes.empty()) return;
- foreach (EdgeItem *ei, _edgeItems) {
- if (nodes.contains(ei->edge()->source()) || nodes.contains(ei->edge()->target())) {
- ei->edge()->updateControls();
- ei->readPos();
- }
+ foreach (Edge *e, _edgeItems.keys()) {
+ EdgeItem *ei = _edgeItems[e];
+
+ // the list "nodes" can be out of date, e.g. if the graph changes while dragging
+ if (ei != 0) {
+ if (nodes.contains(ei->edge()->source()) || nodes.contains(ei->edge()->target())) {
+ ei->edge()->updateControls();
+ ei->readPos();
+ }
+ }
}
}