[Uml-devel] branches/KDE/3.5/kdesdk/umbrello/umbrello
Oliver Kellogg
okellogg at users.sourceforge.net
Mon Dec 12 12:00:03 UTC 2005
SVN commit 487987 by okellogg:
constrainTextPos(): Tighten the constraint so that role labels can't be placed
too far from the related role object.
M +10 -5 associationwidget.cpp
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/associationwidget.cpp #487986:487987
@@ -1824,21 +1824,26 @@
const int textCenterY = textY + textHeight / 2;
const uint lastSegment = m_LinePath.count() - 1;
QPoint p0, p1;
- bool atSideA = false, atSideB = false;
switch (tr) {
case tr_RoleAName:
case tr_MultiA:
case tr_ChangeA:
p0 = m_LinePath.getPoint(0);
p1 = m_LinePath.getPoint(1);
- atSideA = true;
+ // If we are dealing with a single line then tie the
+ // role label to the proper half of the line, i.e.
+ // the role label must be closer to the "other"
+ // role object.
+ if (lastSegment == 1)
+ p1 = midPoint(p0, p1);
break;
case tr_RoleBName:
case tr_MultiB:
case tr_ChangeB:
p0 = m_LinePath.getPoint(lastSegment - 1);
p1 = m_LinePath.getPoint(lastSegment);
- atSideB = true;
+ if (lastSegment == 1)
+ p0 = midPoint(p0, p1);
break;
case tr_Name:
case tr_Coll_Message: // CHECK: collab.msg texts seem to be tr_Name
@@ -1874,12 +1879,12 @@
The midpoint between p0 and p1 is taken to be the center of a circle
with radius D/2 where D is the distance between p0 and p1.
The text center needs to be within this circle else it is constrained
- to the midpoint.
+ to the nearest point on the circle.
*/
p0 = swapXY(p0); // go to the natural coordinate system
p1 = swapXY(p1); // with (0,0) in the lower left corner
QPoint midP = midPoint(p0, p1);
- // If (textX,textY) is not inside the circle around midP then
+ // If (textX,textY) is not inside the circle around midP then
// constrain (textX,textY) to the nearest point on that circle.
const int x0 = p0.x();
const int y0 = p0.y();
More information about the umbrello-devel
mailing list