diff options
Diffstat (limited to 'src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java')
-rw-r--r-- | src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java | 85 |
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; } } |