55
66#include " ConnectionGeometry.hpp"
77
8+ // #define DEBUG_DRAWING 1
9+
810class ConnectionPainter
911{
1012public:
1113 ConnectionPainter (ConnectionGeometry& connectionGeometry)
1214 : _connectionGeometry(connectionGeometry)
13- {
14- }
15+ {}
1516
1617public:
18+
19+ inline
1720 void paint (QPainter* painter) const
1821 {
1922 QPointF const & source = _connectionGeometry.source ();
20- QPointF const & sink = _connectionGeometry.sink ();
21- double const lineWidth = _connectionGeometry.lineWidth ();
23+ QPointF const & sink = _connectionGeometry.sink ();
24+
25+ QPointF diff = (sink - source);
26+
27+ double xDistance = sink.x () - source.x ();
28+ double distance = std::sqrt (QPointF::dotProduct (diff, diff));
29+
30+ double const defaultOffset = 200 ;
31+
32+ double const lineWidth = _connectionGeometry.lineWidth ();
2233 double const pointDiameter = _connectionGeometry.pointDiameter ();
2334
2435 double const ratio1 = 0.5 ;
25- double const ratio2 = 1 - ratio1;
26- QPointF c1 (sink.x () * ratio2 + source.x () * ratio1, source.y ());
27- QPointF c2 (sink.x () * ratio1 + source.x () * ratio2, sink.y ());
36+ // double const ratio2 = 1 - ratio1;
37+ // QPointF c1(sink.x() * ratio2 + source.x() * ratio1, source.y());
38+ // QPointF c2(sink.x() * ratio1 + source.x() * ratio2, sink.y());
39+
40+
41+ double verticalOffset = 0 ;
42+ if (xDistance <= 0 )
43+ {
44+ verticalOffset = - qMin (defaultOffset, std::abs (xDistance));
45+ }
46+
47+
48+ QPointF c1 (source.x () + defaultOffset * ratio1, source.y () + 2 * verticalOffset);
49+ QPointF c2 (sink.x () - defaultOffset * ratio1, sink.y () + verticalOffset);
50+
51+
2852
2953#ifdef DEBUG_DRAWING
3054
@@ -40,7 +64,8 @@ class ConnectionPainter
4064 }
4165#endif
4266
43- QPen p;
67+ QPen p;
68+
4469 p.setWidth (lineWidth);
4570 p.setColor (QColor (Qt::cyan).darker ());
4671 painter->setPen (p);
0 commit comments