Fix History rendering
There was the possibility that during history rendering we draw a lane "trough" a passed commit. Vadim Dmitriev found that out in bug 335818. I added the needed check to that block of code where it was missing. Bug: 335818 Change-Id: Ic944193b2aca55ff3eb0235d46afa60b7896aa0f Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
This commit is contained in:
parent
cea935ab1b
commit
df8511eeea
|
@ -141,6 +141,7 @@ protected void enter(final int index, final PlotCommit<L> currCommit) {
|
|||
}
|
||||
|
||||
currCommit.lane = c.lane;
|
||||
handleBlockedLanes(index, currCommit, nChildren);
|
||||
} else {
|
||||
// More than one child, or our child is a merge.
|
||||
// Use a different lane.
|
||||
|
@ -189,39 +190,50 @@ protected void enter(final int index, final PlotCommit<L> currCommit) {
|
|||
currCommit.lane = nextFreeLane();
|
||||
activeLanes.add(currCommit.lane);
|
||||
|
||||
// take care: when connecting yourself to your child make sure that
|
||||
// you will not be located on a lane on which a passed commit is
|
||||
// located on. Otherwise we would have to draw a line through a
|
||||
// commit.
|
||||
int remaining = nChildren;
|
||||
BitSet blockedPositions = new BitSet();
|
||||
for (int r = index - 1; r >= 0; r--) {
|
||||
final PlotCommit rObj = get(r);
|
||||
if (currCommit.isChild(rObj)) {
|
||||
if (--remaining == 0)
|
||||
break;
|
||||
}
|
||||
if (rObj != null) {
|
||||
PlotLane lane = rObj.getLane();
|
||||
if (lane != null)
|
||||
blockedPositions.set(lane.getPosition());
|
||||
rObj.addPassingLane(currCommit.lane);
|
||||
}
|
||||
handleBlockedLanes(index, currCommit, nChildren);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* when connecting a plotcommit to the child make sure that you will not be
|
||||
* located on a lane on which a passed commit is located on. Otherwise we
|
||||
* would have to draw a line through a commit.
|
||||
*
|
||||
* @param index
|
||||
* @param commit
|
||||
* @param nChildren
|
||||
*/
|
||||
private void handleBlockedLanes(final int index,
|
||||
final PlotCommit<L> commit, final int nChildren) {
|
||||
// take care:
|
||||
int remaining = nChildren;
|
||||
BitSet blockedPositions = new BitSet();
|
||||
for (int r = index - 1; r >= 0; r--) {
|
||||
final PlotCommit rObj = get(r);
|
||||
if (commit.isChild(rObj)) {
|
||||
if (--remaining == 0)
|
||||
break;
|
||||
}
|
||||
// Now let's check whether we have to reposition the lane
|
||||
if (blockedPositions.get(currCommit.lane.getPosition())) {
|
||||
int newPos = -1;
|
||||
for (Integer pos : freePositions)
|
||||
if (!blockedPositions.get(pos)) {
|
||||
newPos = pos;
|
||||
break;
|
||||
}
|
||||
if (newPos == -1)
|
||||
newPos = positionsAllocated++;
|
||||
freePositions.add(currCommit.lane.getPosition());
|
||||
currCommit.lane.position = newPos;
|
||||
if (rObj != null) {
|
||||
PlotLane lane = rObj.getLane();
|
||||
if (lane != null)
|
||||
blockedPositions.set(lane.getPosition());
|
||||
rObj.addPassingLane(commit.lane);
|
||||
}
|
||||
}
|
||||
// Now let's check whether we have to reposition the lane
|
||||
if (blockedPositions.get(commit.lane.getPosition())) {
|
||||
int newPos = -1;
|
||||
for (Integer pos : freePositions)
|
||||
if (!blockedPositions.get(pos)) {
|
||||
newPos = pos;
|
||||
break;
|
||||
}
|
||||
if (newPos == -1)
|
||||
newPos = positionsAllocated++;
|
||||
freePositions.add(commit.lane.getPosition());
|
||||
commit.lane.position = newPos;
|
||||
}
|
||||
}
|
||||
|
||||
private void closeLane(PlotLane lane) {
|
||||
|
|
Loading…
Reference in New Issue