From cfd10a87780a598987c3de0b2850fa22addb0798 Mon Sep 17 00:00:00 2001 From: Christoph Egger Date: Mon, 25 May 2015 13:17:05 +0200 Subject: [PATCH] Add comments on how the graph is drawn --- src/gui/widgets/CFGScene.cxx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/gui/widgets/CFGScene.cxx b/src/gui/widgets/CFGScene.cxx index c40e249..aa27f2c 100644 --- a/src/gui/widgets/CFGScene.cxx +++ b/src/gui/widgets/CFGScene.cxx @@ -30,6 +30,12 @@ void CFGScene::drawBackground(QPainter* painter, const QRectF & rect) { } } +/* Forward edges: Forward (downward) edges are just drawn straight + * down and then to the right side + * Backward edges: Consider the smallest rectangle that contains both, + * source and destination block. Draw the edge along + * the shorter side of that rectangle + */ void CFGScene::drawLine(QPainter* painter, BasicBlockWidget * from, BasicBlockWidget * to, int8_t side) { QPointF from_p = from->getExits()[side+1] + QPointF(0, 20); QPointF to_p = to->getEntry() - QPointF(0, 20); @@ -66,6 +72,13 @@ void CFGScene::drawLine(QPainter* painter, BasicBlockWidget * from, BasicBlockWi void CFGScene::spaceWidgets() { bool changed = false; + + /* While some BasicBlockWidget overlaps with a direct predecessor, + * move that widget down one step. Move each widget at most once + * per iteration so that widgets with severall incoming edges + * don't outrun these with less -- preserving order by address + * where appropriate. + */ do { changed = false; for (BasicBlockWidget * widget : widgets) { @@ -86,6 +99,9 @@ void CFGScene::spaceWidgets() { } } while (changed); + /* If there are still BasicBlockWidgets overlapping (BasicBlocks + * that don't have a direct edge) spread them sideways. + */ for (BasicBlockWidget * widget : widgets) { QRectF relevantRect = widget->boundingRect(); relevantRect.moveTo(widget->scenePos()); -- 2.39.5