ui: Improved graph layout
* wider gabs between buckets * different column widths above and below horizontal edge split * only use base/derived bundles for inheritance
This commit is contained in:
@@ -1111,7 +1111,7 @@ void GraphController::bundleNodes()
|
|||||||
bundleNodesAndEdgesMatching(
|
bundleNodesAndEdgesMatching(
|
||||||
[](const DummyNode::BundleInfo& info, const Node* data)
|
[](const DummyNode::BundleInfo& info, const Node* data)
|
||||||
{
|
{
|
||||||
return info.isReferencing && info.layoutVertical;
|
return info.isReferencing && info.layoutVertical && data->findEdgeOfType(Edge::EDGE_INHERITANCE);
|
||||||
},
|
},
|
||||||
5,
|
5,
|
||||||
false,
|
false,
|
||||||
@@ -1121,7 +1121,7 @@ void GraphController::bundleNodes()
|
|||||||
bundleNodesAndEdgesMatching(
|
bundleNodesAndEdgesMatching(
|
||||||
[](const DummyNode::BundleInfo& info, const Node* data)
|
[](const DummyNode::BundleInfo& info, const Node* data)
|
||||||
{
|
{
|
||||||
return info.isReferenced && info.layoutVertical;
|
return info.isReferenced && info.layoutVertical && data->findEdgeOfType(Edge::EDGE_INHERITANCE);
|
||||||
},
|
},
|
||||||
5,
|
5,
|
||||||
false,
|
false,
|
||||||
|
|||||||
@@ -128,40 +128,45 @@ void Bucket::preLayout(Vec2i viewSize, bool addVerticalSplit, bool forceVertical
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<DummyNode*> aboveNodes;
|
|
||||||
std::vector<DummyNode*> belowNodes;
|
|
||||||
|
|
||||||
// align each column vertically and leave a gap in the middle where edges can pass through
|
// align each column vertically and leave a gap in the middle where edges can pass through
|
||||||
// NOTE: m_height is not gonna be correct after this, but stays unchanged to allow correct positioning next to
|
// NOTE: m_height is not gonna be correct after this, but stays unchanged to allow correct positioning next to
|
||||||
// active node.
|
// active node.
|
||||||
|
int nodeOffset = GraphViewStyle::s_gridCellPadding + GraphViewStyle::s_gridCellSize;
|
||||||
|
|
||||||
for (size_t i = 0; i < nodesInCol.size(); i++)
|
for (size_t i = 0; i < nodesInCol.size(); i++)
|
||||||
{
|
{
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
bool hasOffset = false;
|
bool hasOffset = false;
|
||||||
int mid = colHeights[i] / 2;
|
int mid = colHeights[i] / 2;
|
||||||
|
|
||||||
|
std::vector<DummyNode*> aboveNodes;
|
||||||
|
std::vector<DummyNode*> belowNodes;
|
||||||
|
|
||||||
|
int aboveNodesMaxWidth = 0;
|
||||||
|
int belowNodesMaxWidth = 0;
|
||||||
|
|
||||||
for (DummyNode* node : nodesInCol[i])
|
for (DummyNode* node : nodesInCol[i])
|
||||||
{
|
{
|
||||||
|
bool above = true;
|
||||||
|
|
||||||
if (hasOffset)
|
if (hasOffset)
|
||||||
{
|
{
|
||||||
belowNodes.push_back(node);
|
above = false;
|
||||||
}
|
}
|
||||||
else if (nodesInCol[i].size() == 1)
|
else if (nodesInCol[i].size() == 1)
|
||||||
{
|
{
|
||||||
offset -= (node->size.y + GraphViewStyle::s_gridCellPadding) / 2;
|
offset -= (node->size.y + GraphViewStyle::s_gridCellPadding) / 2;
|
||||||
aboveNodes.push_back(node);
|
|
||||||
}
|
}
|
||||||
else if (node->position.y < mid && node->position.y + node->size.y > mid)
|
else if (node->position.y < mid && node->position.y + node->size.y > mid)
|
||||||
{
|
{
|
||||||
if (mid - node->position.y < (node->position.y + node->size.y) - mid)
|
if (mid - node->position.y < (node->position.y + node->size.y) - mid)
|
||||||
{
|
{
|
||||||
offset = mid - node->position.y + GraphViewStyle::s_gridCellPadding / 2;
|
offset = mid - node->position.y + GraphViewStyle::s_gridCellPadding / 2;
|
||||||
belowNodes.push_back(node);
|
above = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
offset = mid - (node->position.y + node->size.y) - GraphViewStyle::s_gridCellPadding / 2;
|
offset = mid - (node->position.y + node->size.y) - GraphViewStyle::s_gridCellPadding / 2;
|
||||||
aboveNodes.push_back(node);
|
|
||||||
}
|
}
|
||||||
hasOffset = true;
|
hasOffset = true;
|
||||||
}
|
}
|
||||||
@@ -169,30 +174,32 @@ void Bucket::preLayout(Vec2i viewSize, bool addVerticalSplit, bool forceVertical
|
|||||||
mid < node->position.y + node->size.y + GraphViewStyle::s_gridCellPadding)
|
mid < node->position.y + node->size.y + GraphViewStyle::s_gridCellPadding)
|
||||||
{
|
{
|
||||||
offset = mid - (node->position.y + node->size.y + GraphViewStyle::s_gridCellPadding / 2);
|
offset = mid - (node->position.y + node->size.y + GraphViewStyle::s_gridCellPadding / 2);
|
||||||
aboveNodes.push_back(node);
|
|
||||||
hasOffset = true;
|
hasOffset = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (above)
|
||||||
|
{
|
||||||
|
aboveNodes.push_back(node);
|
||||||
|
aboveNodesMaxWidth = std::max(aboveNodesMaxWidth, node->size.x());
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
aboveNodes.push_back(node);
|
belowNodes.push_back(node);
|
||||||
|
belowNodesMaxWidth = std::max(belowNodesMaxWidth, node->size.x());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
offset += (m_height - colHeights[i]) / 2;
|
offset += (m_height - colHeights[i]) / 2;
|
||||||
for (DummyNode* node : nodesInCol[i])
|
for (DummyNode* node : aboveNodes)
|
||||||
{
|
{
|
||||||
node->position.y() += offset;
|
node->position.y() += offset - nodeOffset;
|
||||||
|
node->columnSize.x() = aboveNodesMaxWidth;
|
||||||
|
}
|
||||||
|
for (DummyNode* node : belowNodes)
|
||||||
|
{
|
||||||
|
node->position.y() += offset + nodeOffset;
|
||||||
|
node->columnSize.x() = belowNodesMaxWidth;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
int nodeOffset = GraphViewStyle::s_gridCellPadding + GraphViewStyle::s_gridCellSize;
|
|
||||||
for (DummyNode* node : aboveNodes)
|
|
||||||
{
|
|
||||||
node->position.y() -= nodeOffset;
|
|
||||||
}
|
|
||||||
for (DummyNode* node : belowNodes)
|
|
||||||
{
|
|
||||||
node->position.y() += nodeOffset;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,10 +350,10 @@ void BucketLayouter::layoutBuckets(bool addVerticalSplit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bucket->layout(x, y + yOff, widths[i], heights[j]);
|
bucket->layout(x, y + yOff, widths[i], heights[j]);
|
||||||
x += widths[i] + GraphViewStyle::toGridGap(85);
|
x += widths[i] + GraphViewStyle::toGridGap(110);
|
||||||
}
|
}
|
||||||
|
|
||||||
y += heights[j] + GraphViewStyle::toGridGap(45);
|
y += heights[j] + GraphViewStyle::toGridGap(70);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user