From ce71ce0575113fb3321bc880421575877de9a348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Kon=C3=AD=C4=8Dek?= Date: Sat, 30 May 2009 09:48:45 +0000 Subject: [PATCH] Object graph visualizer - fix bug in TreeLayouter. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4158 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Visualizers/Graph/Layout/Tree/TreeLayouter.cs | 14 ++++++++++---- .../Src/Visualizers/Graph/Layout/Tree/TreeNode.cs | 3 +++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeLayouter.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeLayouter.cs index 36b01e9bf5..0caf226d5f 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeLayouter.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeLayouter.cs @@ -83,7 +83,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout subtreeSize += newChild.SubtreeSize; } } - subtreeSize = Math.Max(newTreeNode.LateralSize + newTreeNode.LateralMargin, subtreeSize); + subtreeSize = Math.Max(newTreeNode.LateralSizeWithMargin, subtreeSize); newTreeNode.SubtreeSize = subtreeSize; return newTreeNode; @@ -97,9 +97,15 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout /// private void calculateNodePosRecursive(TreeNode node, double lateralStart, double mainStart) { + double childsSubtreeSize = node.Childs.Sum(child => child.SubtreeSize); // center this node - double subtreeSize = node.Childs.Sum(child => child.SubtreeSize); - double center = node.ChildEdges.Count() == 0 ? 0 : 0.5 * (subtreeSize - (node.LateralSize + node.LateralMargin)); + double center = node.ChildEdges.Count() == 0 ? 0 : 0.5 * (childsSubtreeSize - (node.LateralSizeWithMargin)); + if (center < 0) + { + // if root is larger than subtree, it would be shifted below lateralStart + // -> make whole layout start at lateralStart + lateralStart -= center; + } // design alternatives // node.MainPos += center; // used this @@ -110,7 +116,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout node.MainCoord = mainStart; double childLateral = lateralStart; - double childsMainFixed = node.MainCoord + node.MainSize + node.MainMargin; + double childsMainFixed = node.MainCoord + node.MainSizeWithMargin; foreach (TreeNode child in node.Childs) { calculateNodePosRecursive(child, childLateral, childsMainFixed); diff --git a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeNode.cs b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeNode.cs index 4cb9271d64..b803e6a1b2 100644 --- a/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeNode.cs +++ b/src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeNode.cs @@ -45,6 +45,9 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout public abstract double MainSize { get; } public abstract double LateralSize { get; } + public double MainSizeWithMargin { get { return MainSize + MainMargin; } } + public double LateralSizeWithMargin { get { return LateralSize + LateralMargin; } } + public abstract double MainMargin { get; } public abstract double LateralMargin { get; }