Index: tools/turbolizer/graph-view.js |
diff --git a/tools/turbolizer/graph-view.js b/tools/turbolizer/graph-view.js |
index 7d1ab06e0c348c4eeff2cc26ac9d802a8e4d04f6..8de050f3e682e0ece17a3f04ceb1c994fcfe3027 100644 |
--- a/tools/turbolizer/graph-view.js |
+++ b/tools/turbolizer/graph-view.js |
@@ -174,11 +174,11 @@ class GraphView extends View { |
return 50; |
} |
- getNodeHeight(graph) { |
+ getNodeHeight(d) { |
if (this.state.showTypes) { |
- return DEFAULT_NODE_HEIGHT + TYPE_HEIGHT; |
+ return d.normalheight + d.labelbbox.height; |
} else { |
- return DEFAULT_NODE_HEIGHT; |
+ return d.normalheight; |
} |
} |
@@ -254,11 +254,19 @@ class GraphView extends View { |
} |
}; |
+ measureText(text) { |
+ var textMeasure = document.getElementById('text-measure'); |
+ textMeasure.textContent = text; |
+ return { |
+ width: textMeasure.getBBox().width, |
+ height: textMeasure.getBBox().height, |
+ }; |
+ } |
+ |
createGraph(data, initiallyVisibileIds) { |
var g = this; |
g.nodes = data.nodes; |
g.nodeMap = []; |
- var textMeasure = document.getElementById('text-measure'); |
g.nodes.forEach(function(n, i){ |
n.__proto__ = Node; |
n.visible = false; |
@@ -272,12 +280,13 @@ class GraphView extends View { |
n.cfg = n.control; |
g.nodeMap[n.id] = n; |
n.displayLabel = n.getDisplayLabel(); |
- textMeasure.textContent = n.getDisplayLabel(); |
- var width = textMeasure.getComputedTextLength(); |
- textMeasure.textContent = n.getDisplayType(); |
- width = Math.max(width, textMeasure.getComputedTextLength()); |
- n.width = Math.alignUp(width + NODE_INPUT_WIDTH * 2, |
+ n.labelbbox = g.measureText(n.displayLabel); |
+ n.typebbox = g.measureText(n.getDisplayType()); |
+ var innerwidth = Math.max(n.labelbbox.width, n.typebbox.width); |
+ n.width = Math.alignUp(innerwidth + NODE_INPUT_WIDTH * 2, |
NODE_INPUT_WIDTH); |
+ var innerheight = Math.max(n.labelbbox.height, n.typebbox.height); |
+ n.normalheight = innerheight + 20; |
}); |
g.edges = []; |
data.edges.forEach(function(e, i){ |
@@ -356,7 +365,7 @@ class GraphView extends View { |
if (components[0] == "ob") { |
var from = g.nodeMap[components[1]]; |
var x = from.getOutputX(); |
- var y = g.getNodeHeight() + DEFAULT_NODE_BUBBLE_RADIUS / 2 + 4; |
+ var y = g.getNodeHeight(from) + DEFAULT_NODE_BUBBLE_RADIUS; |
var transform = "translate(" + x + "," + y + ")"; |
this.setAttribute('transform', transform); |
} |
@@ -466,7 +475,7 @@ class GraphView extends View { |
} |
hideDeadAction(graph) { |
- graph.nodes.filter(function(n) { if (!n.live) n.visible = false; }) |
+ graph.nodes.filter(function(n) { if (!n.isLive()) n.visible = false; }) |
graph.updateGraphVisibility(); |
} |
@@ -725,7 +734,7 @@ class GraphView extends View { |
graph.visibleNodes.attr("transform", function(n){ |
return "translate(" + n.x + "," + n.y + ")"; |
}).select('rect'). |
- attr(HEIGHT, function(d) { return graph.getNodeHeight(); }); |
+ attr(HEIGHT, function(d) { return graph.getNodeHeight(d); }); |
// add new nodes |
var newGs = graph.visibleNodes.enter() |
@@ -750,13 +759,17 @@ class GraphView extends View { |
newGs.append("rect") |
.attr("rx", 10) |
.attr("ry", 10) |
- .attr(WIDTH, function(d) { return d.getTotalNodeWidth(); }) |
- .attr(HEIGHT, function(d) { return graph.getNodeHeight(); }) |
+ .attr(WIDTH, function(d) { |
+ return d.getTotalNodeWidth(); |
+ }) |
+ .attr(HEIGHT, function(d) { |
+ return graph.getNodeHeight(d); |
+ }) |
function appendInputAndOutputBubbles(g, d) { |
for (var i = 0; i < d.inputs.length; ++i) { |
var x = d.getInputX(i); |
- var y = -DEFAULT_NODE_BUBBLE_RADIUS / 2 - 4; |
+ var y = -DEFAULT_NODE_BUBBLE_RADIUS; |
var s = g.append('circle') |
.classed("filledBubbleStyle", function(c) { |
return d.inputs[i].isVisible(); |
@@ -781,7 +794,7 @@ class GraphView extends View { |
} |
if (d.outputs.length != 0) { |
var x = d.getOutputX(); |
- var y = graph.getNodeHeight() + DEFAULT_NODE_BUBBLE_RADIUS / 2 + 4; |
+ var y = graph.getNodeHeight(d) + DEFAULT_NODE_BUBBLE_RADIUS; |
var s = g.append('circle') |
.classed("filledBubbleStyle", function(c) { |
return d.areAnyOutputsVisible() == 2; |
@@ -813,8 +826,8 @@ class GraphView extends View { |
d3.select(this).append("text") |
.classed("label", true) |
.attr("text-anchor","right") |
- .attr("dx", "5") |
- .attr("dy", DEFAULT_NODE_HEIGHT / 2 + 5) |
+ .attr("dx", 5) |
+ .attr("dy", 5) |
.append('tspan') |
.text(function(l) { |
return d.getDisplayLabel(); |
@@ -828,8 +841,8 @@ class GraphView extends View { |
.classed("label", true) |
.classed("type", true) |
.attr("text-anchor","right") |
- .attr("dx", "5") |
- .attr("dy", DEFAULT_NODE_HEIGHT / 2 + TYPE_HEIGHT + 5) |
+ .attr("dx", 5) |
+ .attr("dy", d.labelbbox.height + 5) |
.append('tspan') |
.text(function(l) { |
return d.getDisplayType(); |
@@ -986,8 +999,8 @@ class GraphView extends View { |
maxX = maxX ? Math.max(maxX, n.x + n.getTotalNodeWidth()) : |
n.x + n.getTotalNodeWidth(); |
minY = minY ? Math.min(minY, n.y) : n.y; |
- maxY = maxY ? Math.max(maxY, n.y + DEFAULT_NODE_HEIGHT) : |
- n.y + DEFAULT_NODE_HEIGHT; |
+ maxY = maxY ? Math.max(maxY, n.y + graph.getNodeHeight(n)) : |
+ n.y + graph.getNodeHeight(n); |
} |
}); |
if (hasSelection) { |