summaryrefslogtreecommitdiff
path: root/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java')
-rw-r--r--src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java85
1 files changed, 68 insertions, 17 deletions
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java b/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java
index 63bc39f..256a313 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java
@@ -38,6 +38,8 @@ package net.sourceforge.plantuml.svek.image;
import java.awt.geom.Dimension2D;
import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
import net.sourceforge.plantuml.Dimension2DDouble;
import net.sourceforge.plantuml.ISkinParam;
@@ -46,6 +48,7 @@ import net.sourceforge.plantuml.Url;
import net.sourceforge.plantuml.cucadiagram.BodyEnhanced;
import net.sourceforge.plantuml.cucadiagram.Display;
import net.sourceforge.plantuml.cucadiagram.EntityPortion;
+import net.sourceforge.plantuml.cucadiagram.IEntity;
import net.sourceforge.plantuml.cucadiagram.ILeaf;
import net.sourceforge.plantuml.cucadiagram.Link;
import net.sourceforge.plantuml.cucadiagram.PortionShower;
@@ -60,6 +63,7 @@ import net.sourceforge.plantuml.graphic.TextBlockUtils;
import net.sourceforge.plantuml.graphic.USymbol;
import net.sourceforge.plantuml.graphic.USymbolFolder;
import net.sourceforge.plantuml.graphic.color.ColorType;
+import net.sourceforge.plantuml.graphic.color.Colors;
import net.sourceforge.plantuml.svek.AbstractEntityImage;
import net.sourceforge.plantuml.svek.Margins;
import net.sourceforge.plantuml.svek.ShapeType;
@@ -90,10 +94,18 @@ public class EntityImageDescription extends AbstractEntityImage {
Collection<Link> links) {
super(entity, entity.getColors(skinParam).mute(skinParam));
this.useRankSame = skinParam.useRankSame();
+
this.links = links;
final Stereotype stereotype = entity.getStereotype();
USymbol symbol = getUSymbol(entity);
- this.shapeType = symbol == USymbol.FOLDER ? ShapeType.FOLDER : ShapeType.RECTANGLE;
+ if (symbol == USymbol.FOLDER) {
+ this.shapeType = ShapeType.FOLDER;
+ } else if (symbol == USymbol.INTERFACE) {
+ this.shapeType = ShapeType.RECTANGLE;
+ // this.shapeType = ShapeType.RECTANGLE_WITH_CIRCLE_INSIDE;
+ } else {
+ this.shapeType = ShapeType.RECTANGLE;
+ }
this.hideText = symbol == USymbol.INTERFACE;
final Display codeDisplay = Display.getWithNewlines(entity.getCode());
@@ -104,7 +116,8 @@ public class EntityImageDescription extends AbstractEntityImage {
this.url = entity.getUrl99();
- HtmlColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK);
+ final Colors colors = entity.getColors(skinParam);
+ HtmlColor backcolor = colors.getColor(ColorType.BACK);
if (backcolor == null) {
backcolor = SkinParamUtils.getColor(getSkinParam(), symbol.getColorParamBack(), getStereo());
}
@@ -112,9 +125,12 @@ public class EntityImageDescription extends AbstractEntityImage {
assert getStereo() == stereotype;
final HtmlColor forecolor = SkinParamUtils.getColor(getSkinParam(), symbol.getColorParamBorder(), stereotype);
final double roundCorner = symbol.getSkinParameter().getRoundCorner(getSkinParam(), stereotype);
- final UStroke stroke = symbol.getSkinParameter().getStroke(getSkinParam(), stereotype);
+ final double diagonalCorner = symbol.getSkinParameter().getDiagonalCorner(getSkinParam(), stereotype);
+ final UStroke stroke = colors.muteStroke(symbol.getSkinParameter().getStroke(getSkinParam(), stereotype));
+
final SymbolContext ctx = new SymbolContext(backcolor, forecolor).withStroke(stroke)
- .withShadow(getSkinParam().shadowing2(symbol.getSkinParameter())).withRoundCorner(roundCorner);
+ .withShadow(getSkinParam().shadowing2(symbol.getSkinParameter()))
+ .withCorner(roundCorner, diagonalCorner);
stereo = TextBlockUtils.empty(0, 0);
@@ -162,24 +178,59 @@ public class EntityImageDescription extends AbstractEntityImage {
@Override
public Margins getShield(StringBounder stringBounder) {
- if (hideText && (useRankSame == false || hasSomeHorizontalLink((ILeaf) getEntity(), links) == false)) {
- final Dimension2D dimStereo = stereo.calculateDimension(stringBounder);
- final Dimension2D dimDesc = desc.calculateDimension(stringBounder);
- final Dimension2D dimSmall = asSmall.calculateDimension(stringBounder);
- final double x = Math.max(dimStereo.getWidth(), dimDesc.getWidth());
- double suppX = x - dimSmall.getWidth();
- if (suppX < 1) {
- suppX = 1;
+ if (hideText == false) {
+ return Margins.NONE;
+ }
+ // if (useRankSame && hasSomeHorizontalLink((ILeaf) getEntity(), links)) {
+ // return Margins.NONE;
+ // }
+ if (isThereADoubleLink((ILeaf) getEntity(), links)) {
+ return Margins.NONE;
+ }
+ if (hasSomeHorizontalLinkVisible((ILeaf) getEntity(), links)) {
+ return Margins.NONE;
+ }
+ if (hasSomeHorizontalLinkDoubleDecorated((ILeaf) getEntity(), links)) {
+ return Margins.NONE;
+ }
+ final Dimension2D dimStereo = stereo.calculateDimension(stringBounder);
+ final Dimension2D dimDesc = desc.calculateDimension(stringBounder);
+ final Dimension2D dimSmall = asSmall.calculateDimension(stringBounder);
+ final double x = Math.max(dimStereo.getWidth(), dimDesc.getWidth());
+ double suppX = x - dimSmall.getWidth();
+ if (suppX < 1) {
+ suppX = 1;
+ }
+ final double y = MathUtils.max(1, dimDesc.getHeight(), dimStereo.getHeight());
+ return new Margins(suppX / 2, suppX / 2, y, y);
+ }
+
+ private boolean hasSomeHorizontalLinkVisible(ILeaf leaf, Collection<Link> links) {
+ for (Link link : links) {
+ if (link.getLength() == 1 && link.contains(leaf) && link.isInvis() == false) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean isThereADoubleLink(ILeaf leaf, Collection<Link> links) {
+ final Set<IEntity> others = new HashSet<IEntity>();
+ for (Link link : links) {
+ if (link.contains(leaf)) {
+ final IEntity other = link.getOther(leaf);
+ final boolean changed = others.add(other);
+ if (changed == false) {
+ return true;
+ }
}
- final double y = MathUtils.max(1, dimDesc.getHeight(), dimStereo.getHeight());
- return new Margins(suppX / 2, suppX / 2, y, y);
}
- return Margins.NONE;
+ return false;
}
- private boolean hasSomeHorizontalLink(ILeaf leaf, Collection<Link> links) {
+ private boolean hasSomeHorizontalLinkDoubleDecorated(ILeaf leaf, Collection<Link> links) {
for (Link link : links) {
- if (link.getLength() == 1 && link.contains(leaf)) {
+ if (link.getLength() == 1 && link.contains(leaf) && link.getType().isDoubleDecorated()) {
return true;
}
}