1
0
mirror of https://github.com/octoleo/plantuml.git synced 2024-12-31 22:11:53 +00:00

Minor bug fix

This commit is contained in:
Arnaud Roques 2022-07-21 14:09:24 +02:00
parent 51b9bfb05a
commit ebf7613792
2 changed files with 35 additions and 34 deletions

View File

@ -70,17 +70,17 @@ public class ConstraintSet {
} }
public Constraint getConstraint(Pushable p1, Pushable p2) { public Constraint getConstraint(Pushable p1, Pushable p2) {
if (p1 == null || p2 == null || p1 == p2) { if (p1 == null || p2 == null || p1 == p2)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
}
final int i1 = participantList.indexOf(p1); final int i1 = participantList.indexOf(p1);
final int i2 = participantList.indexOf(p2); final int i2 = participantList.indexOf(p2);
if (i1 == -1 || i2 == -1) { if (i1 == -1 || i2 == -1)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
}
if (i1 > i2) { if (i1 > i2)
return getConstraint(p2, p1); return getConstraint(p2, p1);
}
final List<Pushable> key = Arrays.asList(p1, p2); final List<Pushable> key = Arrays.asList(p1, p2);
Constraint result = constraints.get(key); Constraint result = constraints.get(key);
if (result == null) { if (result == null) {
@ -108,16 +108,16 @@ public class ConstraintSet {
private Pushable getOtherParticipant(Pushable p, int delta) { private Pushable getOtherParticipant(Pushable p, int delta) {
final int i = participantList.indexOf(p); final int i = participantList.indexOf(p);
if (i == -1) { if (i == -1)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
}
return participantList.get(i + delta); return participantList.get(i + delta);
} }
public void takeConstraintIntoAccount(StringBounder stringBounder) { public void takeConstraintIntoAccount(StringBounder stringBounder) {
for (int dist = 1; dist < participantList.size(); dist++) { for (int dist = 1; dist < participantList.size(); dist++)
pushEverybody(stringBounder, dist); pushEverybody(stringBounder, dist);
}
} }
private void pushEverybody(StringBounder stringBounder, int dist) { private void pushEverybody(StringBounder stringBounder, int dist) {
@ -130,22 +130,22 @@ public class ConstraintSet {
} }
public void pushToLeftParticipantBox(double deltaX, Pushable firstToChange, boolean including) { public void pushToLeftParticipantBox(double deltaX, Pushable firstToChange, boolean including) {
if (deltaX <= 0) { if (deltaX <= 0)
throw new IllegalArgumentException(); throw new IllegalArgumentException();
}
Objects.requireNonNull(firstToChange); Objects.requireNonNull(firstToChange);
// freeX += deltaX; // freeX += deltaX;
boolean founded = false; boolean founded = false;
for (Pushable box : participantList) { for (Pushable box : participantList) {
if (box.equals(firstToChange)) { if (box.equals(firstToChange)) {
founded = true; founded = true;
if (including == false) { if (including == false)
continue; continue;
} }
} if (founded)
if (founded) {
box.pushToLeft(deltaX); box.pushToLeft(deltaX);
}
} }
} }
@ -154,18 +154,17 @@ public class ConstraintSet {
} }
private void ensureSpaceAfter(StringBounder stringBounder, Pushable p1, Pushable p2, double space) { private void ensureSpaceAfter(StringBounder stringBounder, Pushable p1, Pushable p2, double space) {
if (p1.equals(p2)) { if (p1.equals(p2))
throw new IllegalArgumentException(); throw new IllegalArgumentException();
}
if (p1.getCenterX(stringBounder) > p2.getCenterX(stringBounder)) { if (p1.getCenterX(stringBounder) > p2.getCenterX(stringBounder)) {
ensureSpaceAfter(stringBounder, p2, p1, space); ensureSpaceAfter(stringBounder, p2, p1, space);
return; return;
} }
assert p1.getCenterX(stringBounder) < p2.getCenterX(stringBounder); assert p1.getCenterX(stringBounder) < p2.getCenterX(stringBounder);
final double existingSpace = p2.getCenterX(stringBounder) - p1.getCenterX(stringBounder); final double existingSpace = p2.getCenterX(stringBounder) - p1.getCenterX(stringBounder);
if (existingSpace < space) { if (existingSpace < space)
pushToLeftParticipantBox(space - existingSpace, p2, true); pushToLeftParticipantBox(space - existingSpace, p2, true);
}
} }

View File

@ -56,11 +56,11 @@ final class NotesBoxes extends GraphicalElement implements InGroupable {
public void add(NoteBox noteBox, ParticipantBox participantBox1, ParticipantBox participantBox2) { public void add(NoteBox noteBox, ParticipantBox participantBox1, ParticipantBox participantBox2) {
notes.add(noteBox); notes.add(noteBox);
participants1.add(participantBox1); participants1.add(participantBox1);
if (participantBox2 == null) { if (participantBox2 == null)
participants2.add(participantBox1); participants2.add(participantBox1);
} else { else
participants2.add(participantBox2); participants2.add(participantBox2);
}
} }
public void ensureConstraints(StringBounder stringBounder, ConstraintSet constraintSet) { public void ensureConstraints(StringBounder stringBounder, ConstraintSet constraintSet) {
@ -79,7 +79,9 @@ final class NotesBoxes extends GraphicalElement implements InGroupable {
final NoteBox noteBox2 = notes.get(j); final NoteBox noteBox2 = notes.get(j);
final ParticipantBox otherParticipantBox1 = participants1.get(j); final ParticipantBox otherParticipantBox1 = participants1.get(j);
final double width2 = noteBox2.getPreferredWidth(stringBounder); final double width2 = noteBox2.getPreferredWidth(stringBounder);
constraintSet.getConstraint(participantBox2, otherParticipantBox1).ensureValue((width + width2) / 2); if (participantBox2 != otherParticipantBox1)
constraintSet.getConstraint(participantBox2, otherParticipantBox1)
.ensureValue((width + width2) / 2);
} }
} }
} }
@ -88,9 +90,9 @@ final class NotesBoxes extends GraphicalElement implements InGroupable {
double result = Double.MAX_VALUE; double result = Double.MAX_VALUE;
for (NoteBox n : notes) { for (NoteBox n : notes) {
final double m = n.getMinX(stringBounder); final double m = n.getMinX(stringBounder);
if (m < result) { if (m < result)
result = m; result = m;
}
} }
return result; return result;
} }
@ -99,9 +101,9 @@ final class NotesBoxes extends GraphicalElement implements InGroupable {
double result = -Double.MAX_VALUE; double result = -Double.MAX_VALUE;
for (NoteBox n : notes) { for (NoteBox n : notes) {
final double m = n.getMaxX(stringBounder); final double m = n.getMaxX(stringBounder);
if (m > result) { if (m > result)
result = m; result = m;
}
} }
return result; return result;
} }
@ -112,9 +114,9 @@ final class NotesBoxes extends GraphicalElement implements InGroupable {
@Override @Override
protected void drawInternalU(UGraphic ug, double maxX, Context2D context) { protected void drawInternalU(UGraphic ug, double maxX, Context2D context) {
for (NoteBox n : notes) { for (NoteBox n : notes)
n.drawInternalU(ug, maxX, context); n.drawInternalU(ug, maxX, context);
}
} }
@Override @Override
@ -122,9 +124,9 @@ final class NotesBoxes extends GraphicalElement implements InGroupable {
double result = Double.MAX_VALUE; double result = Double.MAX_VALUE;
for (NoteBox n : notes) { for (NoteBox n : notes) {
final double m = n.getStartingX(stringBounder); final double m = n.getStartingX(stringBounder);
if (m < result) { if (m < result)
result = m; result = m;
}
} }
return result; return result;
} }
@ -140,9 +142,9 @@ final class NotesBoxes extends GraphicalElement implements InGroupable {
double result = 0; double result = 0;
for (NoteBox n : notes) { for (NoteBox n : notes) {
final double m = n.getPreferredHeight(stringBounder); final double m = n.getPreferredHeight(stringBounder);
if (m > result) { if (m > result)
result = m; result = m;
}
} }
return result; return result;
} }