Mercurial > hg > easyhg
diff connectionitem.cpp @ 46:bd3accba9b3f
* Better layout for branches; spline connection paths
author | Chris Cannam |
---|---|
date | Wed, 10 Nov 2010 17:11:41 +0000 |
parents | |
children | 3c46b2ac45d3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/connectionitem.cpp Wed Nov 10 17:11:41 2010 +0000 @@ -0,0 +1,48 @@ + + +#include "connectionitem.h" + +#include "changesetitem.h" + +#include <QPainter> + +QRectF +ConnectionItem::boundingRect() const +{ + if (!m_parent || !m_child) return QRectF(); + float scale = 100; + float size = 50; + return QRectF(scale * m_child->column() + size/2 - 2, + scale * m_child->row() + size - 2, + scale * m_parent->column() - scale * m_child->column() + 4, + scale * m_parent->row() - scale * m_child->row() - size + 4) + .normalized(); +} + +void +ConnectionItem::paint(QPainter *paint, const QStyleOptionGraphicsItem *, QWidget *) +{ + QPainterPath p; + float scale = 100; + float size = 50; + p.moveTo(scale * m_child->column() + size/2, + scale * m_child->row() + size); + if (m_parent->column() == m_child->column()) { + p.lineTo(scale * m_parent->column() + size/2, + scale * m_parent->row()); + } else { + p.cubicTo(scale * m_child->column() + size/2, + scale * m_child->row() + size + size, + scale * m_parent->column() + size/2, + scale * m_child->row() + size, + scale * m_parent->column() + size/2, + scale * m_child->row() + scale); + if (abs(m_parent->row() - m_child->row()) > 1) { + p.lineTo(scale * m_parent->column() + size/2, + scale * m_parent->row()); + } + } + paint->drawPath(p); +} + +