Browse Source

Object graph visualizer - fix bug in TreeLayouter.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4158 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts^2
Martin Koníček 17 years ago
parent
commit
ce71ce0575
  1. 14
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeLayouter.cs
  2. 3
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeNode.cs

14
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeLayouter.cs

@ -83,7 +83,7 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout @@ -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 @@ -97,9 +97,15 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout
/// <param name="mainStart"></param>
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 @@ -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);

3
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Visualizers/Graph/Layout/Tree/TreeNode.cs

@ -45,6 +45,9 @@ namespace Debugger.AddIn.Visualizers.Graph.Layout @@ -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; }

Loading…
Cancel
Save