mirror of
https://github.com/octoleo/plantuml.git
synced 2024-11-21 20:45:10 +00:00
wip
This commit is contained in:
parent
206f807952
commit
2d07f5ae2c
@ -72,13 +72,12 @@ stereotype {
|
||||
|
||||
element {
|
||||
Shadowing 0.0
|
||||
title {
|
||||
FontStyle bold
|
||||
}
|
||||
}
|
||||
|
||||
element {
|
||||
LineThickness 0.5
|
||||
composite {
|
||||
title {
|
||||
FontStyle bold
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
@ -226,6 +225,9 @@ stateDiagram {
|
||||
group {
|
||||
LineThickness 0.5
|
||||
}
|
||||
header {
|
||||
FontSize 12
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -68,8 +68,10 @@ stereotype {
|
||||
|
||||
element {
|
||||
Shadowing 4.0
|
||||
title {
|
||||
FontStyle bold
|
||||
composite {
|
||||
title {
|
||||
FontStyle bold
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -210,7 +210,8 @@ try {
|
||||
ST_adjmatrix_t rv = new ST_adjmatrix_t();
|
||||
rv.nrows = i;
|
||||
rv.ncols = j;
|
||||
rv.data = new int[i][j]; // Or maybe new int[j][i] ?
|
||||
// Arnaud 15/09/2022: the j+1 is needed in some case to avoid ArrayIndexOutOfBoundsException
|
||||
rv.data = new int[i][j+1]; // Or maybe new int[j][i] ?
|
||||
return rv;
|
||||
} finally {
|
||||
LEAVING("756bre1tpxb1tq68p7xhkrxkc","new_matrix");
|
||||
|
@ -306,7 +306,7 @@ static private HColorSet colors = HColorSet.instance();
|
||||
private Color decodeInternal(String value) {
|
||||
if (value!=null) {
|
||||
try {
|
||||
return new ColorMapperIdentity().toColor(colors.getColor(ThemeStyle.LIGHT_REGULAR, value));
|
||||
return colors.getColor(ThemeStyle.LIGHT_REGULAR, value).toColor(new ColorMapperIdentity());
|
||||
} catch (NoSuchColorException e) {
|
||||
return Color.WHITE;
|
||||
}
|
||||
|
@ -83,7 +83,6 @@ import net.sourceforge.plantuml.ugraphic.URectangle;
|
||||
import net.sourceforge.plantuml.ugraphic.UShape;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
import net.sourceforge.plantuml.ugraphic.comp.CompressionMode;
|
||||
import net.sourceforge.plantuml.ugraphic.comp.SlotFinder;
|
||||
import net.sourceforge.plantuml.utils.MathUtils;
|
||||
@ -302,7 +301,7 @@ public class Swimlanes extends AbstractTextBlock implements TextBlock, Styleable
|
||||
|
||||
final double xpos = swimlane.getTranslate().getDx() + swimlane.getMinMax().getMinX();
|
||||
final HColor back = swimlane.getColors().getColor(ColorType.BACK);
|
||||
if (HColors.isTransparent(back) == false) {
|
||||
if (back != null && back.isTransparent() == false) {
|
||||
final LaneDivider divider2 = dividers.get(i + 1);
|
||||
final UGraphic background = ug.apply(back.bg()).apply(back)
|
||||
.apply(UTranslate.dx(xpos - divider1.getX2()));
|
||||
|
@ -39,12 +39,11 @@ import net.sourceforge.plantuml.posimo.DotPath;
|
||||
import net.sourceforge.plantuml.ugraphic.UDriver;
|
||||
import net.sourceforge.plantuml.ugraphic.UParam;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverDotPathBraille implements UDriver<DotPath, BrailleGrid> {
|
||||
|
||||
public void draw(DotPath shape, double x, double y, ColorMapper mapper, UParam param, BrailleGrid grid) {
|
||||
if (HColors.isTransparent(param.getColor()) == false)
|
||||
if (param.getColor().isTransparent() == false)
|
||||
grid.drawDotPath(x, y, shape);
|
||||
|
||||
}
|
||||
|
@ -36,6 +36,6 @@
|
||||
package net.sourceforge.plantuml.creole;
|
||||
|
||||
public enum CreoleMode {
|
||||
FULL, SIMPLE_LINE, NO_CREOLE;
|
||||
FULL, SIMPLE_LINE, NO_CREOLE, FULL_BUT_UNDERSCORE;
|
||||
|
||||
}
|
||||
|
@ -101,7 +101,7 @@ public class AtomMath extends AbstractAtom implements Atom {
|
||||
|
||||
private Color getColor(HColor color, Color defaultValue) {
|
||||
if (color instanceof HColorSimple)
|
||||
return colorMapper.toColor(color);
|
||||
return color.toColor(colorMapper);
|
||||
|
||||
return defaultValue;
|
||||
|
||||
|
@ -57,7 +57,6 @@ import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||
import net.sourceforge.plantuml.ugraphic.UText;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
import net.sourceforge.plantuml.utils.CharHidder;
|
||||
|
||||
public final class AtomText extends AbstractAtom implements Atom {
|
||||
@ -142,7 +141,7 @@ public final class AtomText extends AbstractAtom implements Atom {
|
||||
FontConfiguration useFontConfiguration = fontConfiguration;
|
||||
|
||||
HColor backcolor = ug.getParam().getBackcolor();
|
||||
if (HColors.isTransparent(backcolor))
|
||||
if (backcolor.isTransparent())
|
||||
backcolor = ug.getDefaultBackground();
|
||||
|
||||
textColor = textColor.getAppropriateColor(backcolor);
|
||||
|
@ -76,16 +76,23 @@ import net.sourceforge.plantuml.cucadiagram.Stereotag;
|
||||
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||
import net.sourceforge.plantuml.cucadiagram.dot.Neighborhood;
|
||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||
import net.sourceforge.plantuml.graphic.TextBlockEmpty;
|
||||
import net.sourceforge.plantuml.graphic.USymbol;
|
||||
import net.sourceforge.plantuml.graphic.USymbols;
|
||||
import net.sourceforge.plantuml.graphic.color.ColorType;
|
||||
import net.sourceforge.plantuml.graphic.color.Colors;
|
||||
import net.sourceforge.plantuml.skin.VisibilityModifier;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
||||
import net.sourceforge.plantuml.svek.IEntityImage;
|
||||
import net.sourceforge.plantuml.svek.Kal;
|
||||
import net.sourceforge.plantuml.svek.Margins;
|
||||
import net.sourceforge.plantuml.svek.PackageStyle;
|
||||
import net.sourceforge.plantuml.svek.SingleStrategy;
|
||||
import net.sourceforge.plantuml.svek.image.EntityImageStateCommon;
|
||||
import net.sourceforge.plantuml.ugraphic.UFont;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
|
||||
@ -839,4 +846,29 @@ final public class EntityImpl implements ILeaf, IGroup {
|
||||
return isStatic;
|
||||
}
|
||||
|
||||
// For group
|
||||
|
||||
public TextBlock getStateHeader(ISkinParam skinParam) {
|
||||
checkGroup();
|
||||
final Style style = EntityImageStateCommon.getStyleStateHeader(this, skinParam);
|
||||
final List<CharSequence> details = getBodier().getRawBody();
|
||||
|
||||
if (details.size() == 0)
|
||||
return new TextBlockEmpty();
|
||||
|
||||
if (style == null)
|
||||
throw new IllegalArgumentException();
|
||||
final FontConfiguration fontConfiguration = FontConfiguration.create(skinParam, style);
|
||||
|
||||
Display display = null;
|
||||
for (CharSequence s : details)
|
||||
if (display == null)
|
||||
display = Display.getWithNewlines(s.toString());
|
||||
else
|
||||
display = display.addAll(Display.getWithNewlines(s.toString()));
|
||||
|
||||
return display.create(fontConfiguration, HorizontalAlignment.LEFT, skinParam);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ public class SpriteSvgNanoParser implements Sprite {
|
||||
} else if (color == null)
|
||||
ug.draw(img.scale(scale));
|
||||
else
|
||||
ug.draw(img.muteColor(colorMapper.toColor(color)).scale(scale));
|
||||
ug.draw(img.muteColor(color.toColor(colorMapper)).scale(scale));
|
||||
|
||||
// ug.draw(img.muteColor(((HColorSimple) color).getColor999()).scale(scale));
|
||||
|
||||
|
@ -21,8 +21,9 @@ import net.sourceforge.plantuml.ugraphic.UImageSvg;
|
||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||
import net.sourceforge.plantuml.ugraphic.UText;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorChangerMonochrome;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapperMonochrome;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorUtils;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorSet;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorSimple;
|
||||
@ -120,7 +121,7 @@ public class SvgNanoParser implements Sprite {
|
||||
}
|
||||
|
||||
private int getGray(HColor col) {
|
||||
final Color tmp = new ColorChangerMonochrome().getChangedColor(col);
|
||||
final Color tmp = ColorUtils.getGrayScaleColor(col.toColor(new ColorMapperMonochrome(false)));
|
||||
return tmp.getGreen();
|
||||
}
|
||||
|
||||
|
@ -339,7 +339,7 @@ public class EpsGraphics {
|
||||
|
||||
final public void epsPolygon(HColorGradient gr, ColorMapper mapper, double... points) {
|
||||
assert points.length % 2 == 0;
|
||||
setFillColor(mapper.toColor(gr.getColor1()));
|
||||
setFillColor(gr.getColor1().toColor(mapper));
|
||||
epsPolygon(points);
|
||||
}
|
||||
|
||||
@ -419,8 +419,8 @@ public class EpsGraphics {
|
||||
|
||||
if (rx == 0 && ry == 0) {
|
||||
simplerectUsed = true;
|
||||
appendColorShort(mapper.toColor(gr.getColor1()));
|
||||
appendColorShort(mapper.toColor(gr.getColor2()));
|
||||
appendColorShort(gr.getColor1().toColor(mapper));
|
||||
appendColorShort(gr.getColor2().toColor(mapper));
|
||||
append(format(width) + " " + format(height) + " " + format(x) + " " + format(y), true);
|
||||
append("100 -1 1 {", true);
|
||||
append("100 div", true);
|
||||
@ -442,8 +442,8 @@ public class EpsGraphics {
|
||||
append("initclip", true);
|
||||
} else {
|
||||
roundrectUsed = true;
|
||||
appendColorShort(mapper.toColor(gr.getColor1()));
|
||||
appendColorShort(mapper.toColor(gr.getColor2()));
|
||||
appendColorShort(gr.getColor1().toColor(mapper));
|
||||
appendColorShort(gr.getColor2().toColor(mapper));
|
||||
append(format(width) + " " + format(height) + " " + format(x) + " " + format(y) + " "
|
||||
+ format((rx + ry) / 2), true);
|
||||
append("100 -1 1 {", true);
|
||||
|
@ -111,7 +111,7 @@ public class GraphicStrings extends AbstractTextBlock implements IEntityImage {
|
||||
public static TextBlockBackcolored createBlackOnWhite(List<String> strings, BufferedImage image,
|
||||
GraphicPosition position) {
|
||||
return new GraphicStrings(strings, sansSerif12(HColors.BLACK), HColors.WHITE, image, position,
|
||||
CreoleMode.FULL);
|
||||
CreoleMode.FULL_BUT_UNDERSCORE);
|
||||
}
|
||||
|
||||
public static FontConfiguration sansSerif12(HColor color) {
|
||||
|
@ -48,7 +48,6 @@ import net.sourceforge.plantuml.ugraphic.UImage;
|
||||
import net.sourceforge.plantuml.ugraphic.URectangle;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class TextBlockVertical2 extends AbstractTextBlock implements TextBlock, WithPorts {
|
||||
|
||||
@ -102,7 +101,7 @@ public class TextBlockVertical2 extends AbstractTextBlock implements TextBlock,
|
||||
final XDimension2D dimb = block.calculateDimension(ug.getStringBounder());
|
||||
if (block instanceof TextBlockBackcolored) {
|
||||
final HColor back = ((TextBlockBackcolored) block).getBackcolor();
|
||||
if (HColors.isTransparent(back) == false)
|
||||
if (back != null && back.isTransparent() == false)
|
||||
ug.apply(UTranslate.dy(y)).apply(back).apply(back.bg())
|
||||
.draw(new URectangle(dimtotal.getWidth(), dimb.getHeight()));
|
||||
|
||||
|
@ -113,7 +113,7 @@ public class PSystemLatex extends AbstractPSystem {
|
||||
|
||||
private Color getColor(final String col) {
|
||||
final HColor col2 = col == null ? null : HColorSet.instance().getColorOrWhite(col);
|
||||
final Color col3 = new ColorMapperIdentity().toColor(col2);
|
||||
final Color col3 = col2.toColor(new ColorMapperIdentity());
|
||||
return col3;
|
||||
}
|
||||
|
||||
|
@ -114,7 +114,7 @@ public class PSystemMath extends AbstractPSystem {
|
||||
|
||||
private Color getColor(final String col) {
|
||||
final HColor col2 = col == null ? null : HColorSet.instance().getColorOrWhite(col);
|
||||
final Color col3 = new ColorMapperIdentity().toColor(col2);
|
||||
final Color col3 = col2.toColor(new ColorMapperIdentity());
|
||||
return col3;
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,6 @@ import net.sourceforge.plantuml.ugraphic.UPath;
|
||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class FingerImpl implements Finger, UDrawable {
|
||||
|
||||
@ -130,7 +129,7 @@ public class FingerImpl implements Finger, UDrawable {
|
||||
|
||||
child.drawU(ug.apply(new UTranslate(p2)));
|
||||
final HColor linkColor = getLinkColor();
|
||||
if (HColors.isTransparent(linkColor) == false)
|
||||
if (linkColor.isTransparent() == false)
|
||||
drawLine(ug.apply(linkColor).apply(getUStroke()), p1, p2);
|
||||
}
|
||||
|
||||
|
@ -226,7 +226,7 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit
|
||||
|
||||
final HColor back = timelineStyle.value(PName.BackGroundColor)
|
||||
.asColor(getSkinParam().getThemeStyle(), getIHtmlColorSet());
|
||||
if (HColors.isTransparent(back) == false) {
|
||||
if (back.isTransparent() == false) {
|
||||
final URectangle rect1 = new URectangle(calculateDimension(ug.getStringBounder()).getWidth(),
|
||||
timeHeader.getTimeHeaderHeight());
|
||||
ug.apply(back.bg()).draw(rect1);
|
||||
|
@ -63,7 +63,6 @@ import net.sourceforge.plantuml.ugraphic.URectangle;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorSet;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class TaskDrawSeparator implements TaskDraw {
|
||||
|
||||
@ -142,7 +141,7 @@ public class TaskDrawSeparator implements TaskDraw {
|
||||
final HColor backColor = getStyle().value(PName.BackGroundColor)
|
||||
.asColor(styleBuilder.getSkinParam().getThemeStyle(), colorSet);
|
||||
|
||||
if (HColors.isTransparent(backColor) == false) {
|
||||
if (backColor.isTransparent() == false) {
|
||||
final double height = padding.getTop() + getTextHeight(stringBounder) + padding.getBottom();
|
||||
if (height > 0) {
|
||||
final URectangle rect = new URectangle(end - start, height);
|
||||
|
@ -72,14 +72,13 @@ import net.sourceforge.plantuml.awt.geom.XPoint2D;
|
||||
import net.sourceforge.plantuml.core.ImageData;
|
||||
import net.sourceforge.plantuml.cucadiagram.CucaDiagram;
|
||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||
import net.sourceforge.plantuml.cucadiagram.EntityPortion;
|
||||
import net.sourceforge.plantuml.cucadiagram.GroupType;
|
||||
import net.sourceforge.plantuml.cucadiagram.IEntity;
|
||||
import net.sourceforge.plantuml.cucadiagram.IGroup;
|
||||
import net.sourceforge.plantuml.cucadiagram.ILeaf;
|
||||
import net.sourceforge.plantuml.cucadiagram.Link;
|
||||
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||
import net.sourceforge.plantuml.cucadiagram.entity.EntityFactory;
|
||||
import net.sourceforge.plantuml.cucadiagram.entity.EntityImpl;
|
||||
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||
@ -87,12 +86,10 @@ import net.sourceforge.plantuml.graphic.QuoteUtils;
|
||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||
import net.sourceforge.plantuml.graphic.USymbol;
|
||||
import net.sourceforge.plantuml.log.Logme;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.svek.Bibliotekon;
|
||||
import net.sourceforge.plantuml.svek.Cluster;
|
||||
import net.sourceforge.plantuml.svek.ClusterHeader;
|
||||
import net.sourceforge.plantuml.svek.CucaDiagramFileMaker;
|
||||
import net.sourceforge.plantuml.svek.DotStringFactory;
|
||||
import net.sourceforge.plantuml.svek.GeneralImageBuilder;
|
||||
@ -253,31 +250,9 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
||||
if (g.getGroupType() == GroupType.CONCURRENT_STATE)
|
||||
return;
|
||||
|
||||
int titleAndAttributeWidth = 0;
|
||||
int titleAndAttributeHeight = 0;
|
||||
|
||||
final TextBlock title = getTitleBlock(g);
|
||||
final TextBlock stereo = getStereoBlock(g);
|
||||
final TextBlock stereoAndTitle = TextBlockUtils.mergeTB(stereo, title, HorizontalAlignment.CENTER);
|
||||
final XDimension2D dimLabel = stereoAndTitle.calculateDimension(stringBounder);
|
||||
if (dimLabel.getWidth() > 0) {
|
||||
|
||||
final TextBlock attribute = GeneralImageBuilder.stateHeader(g, null, diagram.getSkinParam());
|
||||
|
||||
final XDimension2D dimAttribute = attribute.calculateDimension(stringBounder);
|
||||
final double attributeHeight = dimAttribute.getHeight();
|
||||
final double attributeWidth = dimAttribute.getWidth();
|
||||
final double marginForFields = attributeHeight > 0 ? IEntityImage.MARGIN : 0;
|
||||
final USymbol uSymbol = g.getUSymbol();
|
||||
final int suppHeightBecauseOfShape = uSymbol == null ? 0 : uSymbol.suppHeightBecauseOfShape();
|
||||
final int suppWidthBecauseOfShape = uSymbol == null ? 0 : uSymbol.suppWidthBecauseOfShape();
|
||||
|
||||
titleAndAttributeWidth = (int) Math.max(dimLabel.getWidth(), attributeWidth) + suppWidthBecauseOfShape;
|
||||
titleAndAttributeHeight = (int) (dimLabel.getHeight() + attributeHeight + marginForFields
|
||||
+ suppHeightBecauseOfShape);
|
||||
}
|
||||
|
||||
dotStringFactory.openCluster(titleAndAttributeWidth, titleAndAttributeHeight, title, stereo, g);
|
||||
final ClusterHeader clusterHeader = new ClusterHeader((EntityImpl) g, diagram.getSkinParam(), diagram,
|
||||
stringBounder);
|
||||
dotStringFactory.openCluster(g, clusterHeader);
|
||||
this.printEntities(g.getLeafsDirect());
|
||||
|
||||
printAllSubgroups(g);
|
||||
@ -285,11 +260,6 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
||||
dotStringFactory.closeCluster();
|
||||
}
|
||||
|
||||
private Style getStyle(FontParam fontParam) {
|
||||
return fontParam.getStyleDefinition(SName.stateDiagram)
|
||||
.getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
private void printEntities(Collection<ILeaf> entities) {
|
||||
for (ILeaf ent : entities) {
|
||||
if (ent.isRemoved())
|
||||
@ -334,38 +304,6 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
||||
dotStringFactory.addNode(node);
|
||||
}
|
||||
|
||||
private TextBlock getTitleBlock(IGroup g) {
|
||||
final Display label = g.getDisplay();
|
||||
if (label == null)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final ISkinParam skinParam = diagram.getSkinParam();
|
||||
final FontConfiguration fontConfiguration = g.getFontConfigurationForTitle(skinParam);
|
||||
return label.create(fontConfiguration, HorizontalAlignment.CENTER, skinParam);
|
||||
}
|
||||
|
||||
private TextBlock getStereoBlock(IGroup g) {
|
||||
final Stereotype stereotype = g.getStereotype();
|
||||
if (stereotype == null)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final TextBlock tmp = stereotype.getSprite(diagram.getSkinParam());
|
||||
if (tmp != null)
|
||||
return tmp;
|
||||
|
||||
final List<String> stereos = stereotype.getLabels(diagram.getSkinParam().guillemet());
|
||||
if (stereos == null)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final boolean show = diagram.showPortion(EntityPortion.STEREOTYPE, g);
|
||||
if (show == false)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final FontParam fontParam = FontParam.PACKAGE_STEREOTYPE;
|
||||
return Display.create(stereos).create(FontConfiguration.create(diagram.getSkinParam(), fontParam, stereotype),
|
||||
HorizontalAlignment.CENTER, diagram.getSkinParam());
|
||||
}
|
||||
|
||||
private Collection<ILeaf> getUnpackagedEntities() {
|
||||
final List<ILeaf> result = new ArrayList<>();
|
||||
for (ILeaf ent : diagram.getLeafsvalues())
|
||||
|
@ -71,7 +71,7 @@ public class ComponentRoseGroupingElse extends AbstractTextualComponent {
|
||||
|
||||
@Override
|
||||
protected void drawBackgroundInternalU(UGraphic ug, Area area) {
|
||||
if (HColors.isTransparent(backgroundColor))
|
||||
if (backgroundColor.isTransparent())
|
||||
return;
|
||||
|
||||
final XDimension2D dimensionToUse = area.getDimensionToUse();
|
||||
|
@ -51,14 +51,13 @@ import net.sourceforge.plantuml.code.NoPlantumlCompressionException;
|
||||
import net.sourceforge.plantuml.code.PairInt;
|
||||
import net.sourceforge.plantuml.code.SpiralOnRectangle;
|
||||
import net.sourceforge.plantuml.log.Logme;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorChangerMonochrome;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorUtils;
|
||||
|
||||
public enum SpriteGrayLevel {
|
||||
|
||||
GRAY_16(16), GRAY_8(8), GRAY_4(4);
|
||||
|
||||
private final int nbColor;
|
||||
private static final ColorChangerMonochrome mono = new ColorChangerMonochrome();
|
||||
|
||||
private SpriteGrayLevel(int nbColor) {
|
||||
this.nbColor = nbColor;
|
||||
@ -166,7 +165,7 @@ public enum SpriteGrayLevel {
|
||||
if (y >= img.getHeight()) {
|
||||
return 0;
|
||||
}
|
||||
final Color g = mono.getChangedColor(new Color(img.getRGB(x, y)));
|
||||
final Color g = ColorUtils.getGrayScaleColor(new Color(img.getRGB(x, y)));
|
||||
final int gray = 255 - g.getRed();
|
||||
return gray / 16;
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ public class SpriteImage implements Sprite {
|
||||
else if (color == null)
|
||||
ug.draw(img.scale(scale));
|
||||
else
|
||||
ug.draw(img.muteColor(colorMapper.toColor(color)).scale(scale));
|
||||
ug.draw(img.muteColor(color.toColor(colorMapper)).scale(scale));
|
||||
}
|
||||
|
||||
public XDimension2D calculateDimension(StringBounder stringBounder) {
|
||||
|
@ -178,10 +178,10 @@ public class SpriteMonochrome implements Sprite {
|
||||
|
||||
public UImage toUImage(ColorMapper colorMapper, HColor backcolor, HColor color) {
|
||||
|
||||
if (backcolor == null || HColors.isTransparent(backcolor))
|
||||
if (backcolor == null || backcolor.isTransparent())
|
||||
backcolor = HColors.WHITE.withDark(HColors.BLACK);
|
||||
|
||||
if (color == null || HColors.isTransparent(color))
|
||||
if (color == null || color.isTransparent())
|
||||
color = HColors.BLACK.withDark(HColors.WHITE);
|
||||
|
||||
final BufferedImage im = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||
|
@ -161,7 +161,7 @@ public class FromSkinparamToStyle {
|
||||
addConvert("titleBorderColor", PName.LineColor, SName.title);
|
||||
addConvert("titleBackgroundColor", PName.BackGroundColor, SName.title);
|
||||
addConvert("titleBorderRoundCorner", PName.RoundCorner, SName.title);
|
||||
addConFont("title", SName.title);
|
||||
addConFont("title", SName.document, SName.title);
|
||||
|
||||
addConvert("legendBorderThickness", PName.LineThickness, SName.legend);
|
||||
addConvert("legendBorderColor", PName.LineColor, SName.legend);
|
||||
|
@ -60,6 +60,7 @@ public enum SName {
|
||||
collection, //
|
||||
collections, //
|
||||
component, //
|
||||
composite, //
|
||||
robust, //
|
||||
concise, //
|
||||
clock, //
|
||||
|
@ -64,6 +64,7 @@ import net.sourceforge.plantuml.cucadiagram.IEntity;
|
||||
import net.sourceforge.plantuml.cucadiagram.IGroup;
|
||||
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||
import net.sourceforge.plantuml.cucadiagram.dot.GraphvizVersion;
|
||||
import net.sourceforge.plantuml.cucadiagram.entity.EntityImpl;
|
||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||
import net.sourceforge.plantuml.graphic.USymbol;
|
||||
@ -75,15 +76,14 @@ import net.sourceforge.plantuml.style.PName;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.style.StyleBuilder;
|
||||
import net.sourceforge.plantuml.style.StyleSignature;
|
||||
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
||||
import net.sourceforge.plantuml.svek.image.EntityImageNoteLink;
|
||||
import net.sourceforge.plantuml.svek.image.EntityImageState;
|
||||
import net.sourceforge.plantuml.svek.image.EntityImageStateCommon;
|
||||
import net.sourceforge.plantuml.ugraphic.UComment;
|
||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||
import net.sourceforge.plantuml.ugraphic.UGroupType;
|
||||
import net.sourceforge.plantuml.ugraphic.ULine;
|
||||
import net.sourceforge.plantuml.ugraphic.URectangle;
|
||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
@ -108,10 +108,7 @@ public class Cluster implements Moveable {
|
||||
private final ISkinParam skinParam;
|
||||
protected final CucaDiagram diagram;
|
||||
|
||||
private int titleAndAttributeWidth;
|
||||
private int titleAndAttributeHeight;
|
||||
private TextBlock ztitle;
|
||||
private TextBlock zstereo;
|
||||
private ClusterHeader clusterHeader;
|
||||
|
||||
private XPoint2D xyTitle;
|
||||
|
||||
@ -235,13 +232,10 @@ public class Cluster implements Moveable {
|
||||
return Collections.unmodifiableList(children);
|
||||
}
|
||||
|
||||
public Cluster createChild(int titleAndAttributeWidth, int titleAndAttributeHeight, TextBlock title,
|
||||
TextBlock stereo, ColorSequence colorSequence, ISkinParam skinParam, IGroup g) {
|
||||
public Cluster createChild(ClusterHeader clusterHeader, ColorSequence colorSequence, ISkinParam skinParam,
|
||||
IGroup g) {
|
||||
final Cluster child = new Cluster(diagram, this, colorSequence, skinParam, g);
|
||||
child.titleAndAttributeWidth = titleAndAttributeWidth;
|
||||
child.titleAndAttributeHeight = titleAndAttributeHeight;
|
||||
child.ztitle = title;
|
||||
child.zstereo = stereo;
|
||||
child.clusterHeader = clusterHeader;
|
||||
this.children.add(child);
|
||||
return child;
|
||||
}
|
||||
@ -255,11 +249,11 @@ public class Cluster implements Moveable {
|
||||
}
|
||||
|
||||
public final int getTitleAndAttributeWidth() {
|
||||
return titleAndAttributeWidth;
|
||||
return clusterHeader.getTitleAndAttributeWidth();
|
||||
}
|
||||
|
||||
public final int getTitleAndAttributeHeight() {
|
||||
return titleAndAttributeHeight;
|
||||
return clusterHeader.getTitleAndAttributeHeight();
|
||||
}
|
||||
|
||||
public ClusterPosition getClusterPosition() {
|
||||
@ -286,13 +280,6 @@ public class Cluster implements Moveable {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, diagramStyleName, SName.group, symbol.getSName());
|
||||
}
|
||||
|
||||
static public StyleSignature getDefaultStyleDefinitionStateGroup(Stereotype stereotype) {
|
||||
if (stereotype == null)
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.group);
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.group)
|
||||
.withTOBECHANGED(stereotype);
|
||||
}
|
||||
|
||||
public void drawU(UGraphic ug, UmlDiagramType umlDiagramType, ISkinParam skinParam2unused) {
|
||||
if (group.isHidden())
|
||||
return;
|
||||
@ -302,7 +289,6 @@ public class Cluster implements Moveable {
|
||||
getCucaNote(Position.TOP).drawU(ug.apply(new UTranslate(xyNoteTop)));
|
||||
if (xyNoteBottom != null)
|
||||
getCucaNote(Position.BOTTOM).drawU(ug.apply(new UTranslate(xyNoteBottom)));
|
||||
|
||||
}
|
||||
|
||||
final String fullName = group.getCodeGetName();
|
||||
@ -352,18 +338,12 @@ public class Cluster implements Moveable {
|
||||
group.getUSymbol(), skinParam.getCurrentStyleBuilder(), skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
|
||||
if (ztitle != null || zstereo != null) {
|
||||
final ClusterDecoration decoration = new ClusterDecoration(packageStyle, group.getUSymbol(), ztitle,
|
||||
zstereo, clusterPosition, stroke);
|
||||
decoration.drawU(ug, backColor, borderColor, shadowing, rounded,
|
||||
skinParam.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null),
|
||||
skinParam.getStereotypeAlignment(), diagonalCorner);
|
||||
return;
|
||||
}
|
||||
final URectangle rect = new URectangle(clusterPosition.getDimension());
|
||||
rect.setDeltaShadow(shadowing);
|
||||
ug = ug.apply(backColor.bg()).apply(borderColor);
|
||||
ug.apply(new UStroke(2)).apply(clusterPosition.getPosition()).draw(rect);
|
||||
final ClusterDecoration decoration = new ClusterDecoration(packageStyle, group.getUSymbol(),
|
||||
clusterHeader.getTitle(), clusterHeader.getStereo(), clusterPosition, stroke);
|
||||
decoration.drawU(ug, backColor, borderColor, shadowing, rounded,
|
||||
skinParam.getHorizontalAlignment(AlignmentParam.packageTitleAlignment, null, false, null),
|
||||
skinParam.getStereotypeAlignment(), diagonalCorner);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
@ -403,20 +383,19 @@ public class Cluster implements Moveable {
|
||||
insides.add(in.getClusterPosition());
|
||||
|
||||
final FrontierCalculator frontierCalculator = new FrontierCalculator(getClusterPosition(), insides, points);
|
||||
if (titleAndAttributeHeight > 0 && titleAndAttributeWidth > 0)
|
||||
frontierCalculator.ensureMinWidth(titleAndAttributeWidth + 10);
|
||||
if (getTitleAndAttributeWidth() > 0 && getTitleAndAttributeHeight() > 0)
|
||||
frontierCalculator.ensureMinWidth(getTitleAndAttributeWidth() + 10);
|
||||
|
||||
this.clusterPosition = frontierCalculator.getSuggestedPosition();
|
||||
|
||||
final double widthTitle = ztitle.calculateDimension(stringBounder).getWidth();
|
||||
final double widthTitle = clusterHeader.getTitle().calculateDimension(stringBounder).getWidth();
|
||||
final double minX = clusterPosition.getMinX();
|
||||
final double minY = clusterPosition.getMinY();
|
||||
this.xyTitle = new XPoint2D(minX + ((clusterPosition.getWidth() - widthTitle) / 2), minY + IEntityImage.MARGIN);
|
||||
}
|
||||
|
||||
private void drawSwinLinesState(UGraphic ug, HColor borderColor) {
|
||||
if (ztitle != null)
|
||||
ztitle.drawU(ug.apply(UTranslate.dx(xyTitle.x)));
|
||||
clusterHeader.getTitle().drawU(ug.apply(UTranslate.dx(xyTitle.x)));
|
||||
|
||||
final ULine line = ULine.vline(clusterPosition.getHeight());
|
||||
ug = ug.apply(borderColor);
|
||||
@ -425,55 +404,27 @@ public class Cluster implements Moveable {
|
||||
|
||||
}
|
||||
|
||||
// GroupPngMakerState
|
||||
private Style getStyleStateHeader() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
private Style getStyleState() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
private Style getStyleStateBody() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.stateBody)
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
// GroupPngMakerState
|
||||
|
||||
private void drawUState(UGraphic ug, UmlDiagramType umlDiagramType, double rounded, double shadowing) {
|
||||
final XDimension2D total = clusterPosition.getDimension();
|
||||
final double suppY;
|
||||
if (ztitle == null)
|
||||
suppY = 0;
|
||||
else
|
||||
suppY = ztitle.calculateDimension(ug.getStringBounder()).getHeight() + IEntityImage.MARGIN;
|
||||
|
||||
final Style styleGroup = getDefaultStyleDefinitionStateGroup(group.getStereotype())
|
||||
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
final double suppY = clusterHeader.getTitle().calculateDimension(ug.getStringBounder()).getHeight()
|
||||
+ IEntityImage.MARGIN;
|
||||
|
||||
HColor borderColor = group.getColors().getColor(ColorType.LINE);
|
||||
if (borderColor == null)
|
||||
borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
borderColor = EntityImageStateCommon.getStyleState(group, skinParam).value(PName.LineColor)
|
||||
.asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
|
||||
|
||||
HColor backColor = group.getColors().getColor(ColorType.BACK);
|
||||
if (backColor == null)
|
||||
backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
backColor = EntityImageStateCommon.getStyleState(group, skinParam).value(PName.BackGroundColor)
|
||||
.asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
|
||||
|
||||
// final HColor imgBackcolor = HColorUtils.transparent();
|
||||
final HColor imgBackcolor = EntityImageStateCommon.getStyleStateBody(group, skinParam)
|
||||
.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
|
||||
|
||||
final HColor imgBackcolor = getStyleStateBody().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
|
||||
// final HColor imgBackcolor = getBackColor(umlDiagramType, styleGroup);
|
||||
|
||||
// final Style style = getStyle(FontParam.STATE_ATTRIBUTE, skinParam2);
|
||||
|
||||
final TextBlock attribute = GeneralImageBuilder.stateHeader(group, styleGroup, skinParam);
|
||||
final TextBlock attribute = ((EntityImpl) group).getStateHeader(skinParam);
|
||||
final double attributeHeight = attribute.calculateDimension(ug.getStringBounder()).getHeight();
|
||||
if (total.getWidth() == 0) {
|
||||
System.err.println("Cluster::drawUState issue");
|
||||
@ -482,15 +433,14 @@ public class Cluster implements Moveable {
|
||||
|
||||
UStroke stroke = group.getColors().getSpecificLineStroke();
|
||||
if (stroke == null)
|
||||
stroke = getStyleState().getStroke();
|
||||
stroke = EntityImageStateCommon.getStyleState(group, skinParam).getStroke();
|
||||
|
||||
final RoundedContainer r = new RoundedContainer(total, suppY,
|
||||
attributeHeight + (attributeHeight > 0 ? IEntityImage.MARGIN : 0), borderColor, backColor, imgBackcolor,
|
||||
stroke, rounded, shadowing);
|
||||
r.drawU(ug.apply(clusterPosition.getPosition()));
|
||||
|
||||
if (ztitle != null)
|
||||
ztitle.drawU(ug.apply(new UTranslate(xyTitle)));
|
||||
clusterHeader.getTitle().drawU(ug.apply(new UTranslate(xyTitle)));
|
||||
|
||||
if (attributeHeight > 0)
|
||||
attribute.drawU(ug.apply(new UTranslate(clusterPosition.getMinX() + IEntityImage.MARGIN,
|
||||
@ -671,10 +621,8 @@ public class Cluster implements Moveable {
|
||||
|
||||
double checkFolderPosition(XPoint2D pt, StringBounder stringBounder) {
|
||||
if (getClusterPosition().isPointJustUpper(pt)) {
|
||||
if (ztitle == null)
|
||||
return 0;
|
||||
|
||||
final XDimension2D dimTitle = ztitle.calculateDimension(stringBounder);
|
||||
final XDimension2D dimTitle = clusterHeader.getTitle().calculateDimension(stringBounder);
|
||||
|
||||
if (pt.getX() < getClusterPosition().getMinX() + dimTitle.getWidth())
|
||||
return 0;
|
||||
@ -693,9 +641,7 @@ public class Cluster implements Moveable {
|
||||
}
|
||||
|
||||
public XDimension2D getTitleDimension(StringBounder stringBounder) {
|
||||
if (ztitle == null)
|
||||
return null;
|
||||
return ztitle.calculateDimension(stringBounder);
|
||||
return clusterHeader.getTitle().calculateDimension(stringBounder);
|
||||
}
|
||||
|
||||
// public XPoint2D projection(double x, double y) {
|
||||
|
@ -42,7 +42,6 @@ import net.sourceforge.plantuml.graphic.TextBlock;
|
||||
import net.sourceforge.plantuml.graphic.USymbol;
|
||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
|
||||
public class ClusterDecoration {
|
||||
|
177
src/net/sourceforge/plantuml/svek/ClusterHeader.java
Normal file
177
src/net/sourceforge/plantuml/svek/ClusterHeader.java
Normal file
@ -0,0 +1,177 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2023, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* http://plantuml.com/patreon (only 1$ per month!)
|
||||
* http://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
* Contribution : Hisashi Miyashita
|
||||
* Contribution : Serge Wenger
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.svek;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.sourceforge.plantuml.ISkinParam;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.EntityImageLegend;
|
||||
import net.sourceforge.plantuml.awt.geom.XDimension2D;
|
||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||
import net.sourceforge.plantuml.cucadiagram.DisplayPositioned;
|
||||
import net.sourceforge.plantuml.cucadiagram.EntityPortion;
|
||||
import net.sourceforge.plantuml.cucadiagram.GroupType;
|
||||
import net.sourceforge.plantuml.cucadiagram.PortionShower;
|
||||
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||
import net.sourceforge.plantuml.cucadiagram.entity.EntityImpl;
|
||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||
import net.sourceforge.plantuml.graphic.USymbol;
|
||||
import net.sourceforge.plantuml.graphic.USymbols;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
||||
|
||||
public final class ClusterHeader {
|
||||
|
||||
private int titleAndAttributeWidth = 0;
|
||||
private int titleAndAttributeHeight = 0;
|
||||
final private TextBlock title;
|
||||
final private TextBlock stereo;
|
||||
|
||||
public ClusterHeader(EntityImpl g, ISkinParam skinParam, PortionShower portionShower, StringBounder stringBounder) {
|
||||
|
||||
this.title = getTitleBlock(g, skinParam);
|
||||
this.stereo = getStereoBlock(g, skinParam, portionShower);
|
||||
final TextBlock stereoAndTitle = TextBlockUtils.mergeTB(stereo, title, HorizontalAlignment.CENTER);
|
||||
final XDimension2D dimLabel = stereoAndTitle.calculateDimension(stringBounder);
|
||||
if (dimLabel.getWidth() > 0) {
|
||||
final XDimension2D dimAttribute = ((EntityImpl) g).getStateHeader(skinParam)
|
||||
.calculateDimension(stringBounder);
|
||||
final double attributeHeight = dimAttribute.getHeight();
|
||||
final double attributeWidth = dimAttribute.getWidth();
|
||||
final double marginForFields = attributeHeight > 0 ? IEntityImage.MARGIN : 0;
|
||||
final USymbol uSymbol = g.getUSymbol();
|
||||
final int suppHeightBecauseOfShape = uSymbol == null ? 0 : uSymbol.suppHeightBecauseOfShape();
|
||||
final int suppWidthBecauseOfShape = uSymbol == null ? 0 : uSymbol.suppWidthBecauseOfShape();
|
||||
|
||||
this.titleAndAttributeWidth = (int) Math.max(dimLabel.getWidth(), attributeWidth) + suppWidthBecauseOfShape;
|
||||
this.titleAndAttributeHeight = (int) (dimLabel.getHeight() + attributeHeight + marginForFields
|
||||
+ suppHeightBecauseOfShape);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public final int getTitleAndAttributeWidth() {
|
||||
return titleAndAttributeWidth;
|
||||
}
|
||||
|
||||
public final int getTitleAndAttributeHeight() {
|
||||
return titleAndAttributeHeight;
|
||||
}
|
||||
|
||||
public final TextBlock getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public final TextBlock getStereo() {
|
||||
return stereo;
|
||||
}
|
||||
|
||||
private TextBlock getTitleBlock(EntityImpl g, ISkinParam skinParam) {
|
||||
final Display label = g.getDisplay();
|
||||
if (label == null)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final SName sname = skinParam.getUmlDiagramType().getStyleName();
|
||||
final StyleSignatureBasic signature;
|
||||
final USymbol uSymbol = g.getUSymbol();
|
||||
if (g.getGroupType() == GroupType.STATE)
|
||||
signature = StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state,
|
||||
SName.composite, SName.title);
|
||||
else if (uSymbol != null)
|
||||
signature = StyleSignatureBasic.of(SName.root, SName.element, sname, uSymbol.getSName(), SName.composite,
|
||||
SName.title);
|
||||
else
|
||||
signature = StyleSignatureBasic.of(SName.root, SName.element, sname, SName.composite, SName.title);
|
||||
|
||||
final Style style = signature //
|
||||
.withTOBECHANGED(g.getStereotype()) //
|
||||
.with(g.getStereostyles()) //
|
||||
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
|
||||
final FontConfiguration fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet(), g.getColors());
|
||||
|
||||
final HorizontalAlignment alignment = HorizontalAlignment.CENTER;
|
||||
return label.create(fontConfiguration, alignment, skinParam);
|
||||
}
|
||||
|
||||
private TextBlock getStereoBlock(EntityImpl g, ISkinParam skinParam, PortionShower portionShower) {
|
||||
final TextBlock stereo = getStereoBlockWithoutLegend(g, portionShower, skinParam);
|
||||
final DisplayPositioned legend = g.getLegend();
|
||||
if (legend == null || legend.isNull())
|
||||
return stereo;
|
||||
|
||||
final TextBlock legendBlock = EntityImageLegend.create(legend.getDisplay(), skinParam);
|
||||
return DecorateEntityImage.add(legendBlock, stereo, legend.getHorizontalAlignment(),
|
||||
legend.getVerticalAlignment());
|
||||
}
|
||||
|
||||
private TextBlock getStereoBlockWithoutLegend(EntityImpl g, PortionShower portionShower, ISkinParam skinParam) {
|
||||
final Stereotype stereotype = g.getStereotype();
|
||||
// final DisplayPositionned legend = g.getLegend();
|
||||
if (stereotype == null)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final TextBlock tmp = stereotype.getSprite(skinParam);
|
||||
if (tmp != null)
|
||||
return tmp;
|
||||
|
||||
final List<String> stereos = stereotype.getLabels(skinParam.guillemet());
|
||||
if (stereos == null)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final boolean show = portionShower.showPortion(EntityPortion.STEREOTYPE, g);
|
||||
if (show == false)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final Style style = Cluster
|
||||
.getDefaultStyleDefinition(skinParam.getUmlDiagramType().getStyleName(), g.getUSymbol())
|
||||
.forStereotypeItself(g.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
|
||||
final FontConfiguration fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
return Display.create(stereos).create(fontConfiguration, HorizontalAlignment.CENTER, skinParam);
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -468,10 +468,8 @@ public class DotStringFactory implements Moveable {
|
||||
return idx;
|
||||
}
|
||||
|
||||
public void openCluster(int titleAndAttributeWidth, int titleAndAttributeHeight, TextBlock title, TextBlock stereo,
|
||||
IGroup g) {
|
||||
this.current = current.createChild(titleAndAttributeWidth, titleAndAttributeHeight, title, stereo,
|
||||
colorSequence, skinParam, g);
|
||||
public void openCluster(IGroup g, ClusterHeader clusterHeader) {
|
||||
this.current = current.createChild(clusterHeader, colorSequence, skinParam, g);
|
||||
bibliotekon.addCluster(this.current);
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,6 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import net.sourceforge.plantuml.BaseFile;
|
||||
import net.sourceforge.plantuml.FontParam;
|
||||
import net.sourceforge.plantuml.Guillemet;
|
||||
import net.sourceforge.plantuml.ISkinParam;
|
||||
import net.sourceforge.plantuml.LineParam;
|
||||
@ -57,13 +56,9 @@ import net.sourceforge.plantuml.Pragma;
|
||||
import net.sourceforge.plantuml.SkinParamSameClassWidth;
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.UmlDiagramType;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.EntityImageLegend;
|
||||
import net.sourceforge.plantuml.awt.geom.XDimension2D;
|
||||
import net.sourceforge.plantuml.awt.geom.XRectangle2D;
|
||||
import net.sourceforge.plantuml.core.UmlSource;
|
||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||
import net.sourceforge.plantuml.cucadiagram.DisplayPositioned;
|
||||
import net.sourceforge.plantuml.cucadiagram.EntityPortion;
|
||||
import net.sourceforge.plantuml.cucadiagram.EntityPosition;
|
||||
import net.sourceforge.plantuml.cucadiagram.GroupRoot;
|
||||
import net.sourceforge.plantuml.cucadiagram.GroupType;
|
||||
@ -81,22 +76,17 @@ import net.sourceforge.plantuml.cucadiagram.dot.GraphvizUtils;
|
||||
import net.sourceforge.plantuml.cucadiagram.dot.GraphvizVersion;
|
||||
import net.sourceforge.plantuml.cucadiagram.dot.Neighborhood;
|
||||
import net.sourceforge.plantuml.cucadiagram.entity.EntityFactory;
|
||||
import net.sourceforge.plantuml.cucadiagram.entity.EntityImpl;
|
||||
import net.sourceforge.plantuml.descdiagram.EntityImageDesignedDomain;
|
||||
import net.sourceforge.plantuml.descdiagram.EntityImageDomain;
|
||||
import net.sourceforge.plantuml.descdiagram.EntityImageMachine;
|
||||
import net.sourceforge.plantuml.descdiagram.EntityImageRequirement;
|
||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||
import net.sourceforge.plantuml.graphic.GraphicStrings;
|
||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||
import net.sourceforge.plantuml.graphic.InnerStrategy;
|
||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||
import net.sourceforge.plantuml.graphic.TextBlockEmpty;
|
||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||
import net.sourceforge.plantuml.graphic.USymbol;
|
||||
import net.sourceforge.plantuml.graphic.USymbolHexagon;
|
||||
import net.sourceforge.plantuml.graphic.USymbolInterface;
|
||||
import net.sourceforge.plantuml.graphic.USymbols;
|
||||
import net.sourceforge.plantuml.log.Logme;
|
||||
import net.sourceforge.plantuml.security.SecurityProfile;
|
||||
import net.sourceforge.plantuml.security.SecurityUtils;
|
||||
@ -169,7 +159,7 @@ public final class GeneralImageBuilder {
|
||||
if (leaf.getLeafType() == LeafType.ACTIVITY)
|
||||
return new EntityImageActivity(leaf, skinParam, bibliotekon);
|
||||
|
||||
if (/*(leaf.getLeafType() == LeafType.PORT) || */leaf.getLeafType() == LeafType.PORTIN
|
||||
if (/* (leaf.getLeafType() == LeafType.PORT) || */leaf.getLeafType() == LeafType.PORTIN
|
||||
|| leaf.getLeafType() == LeafType.PORTOUT) {
|
||||
final Cluster parent = bibliotekon.getCluster(leaf.getParentContainer());
|
||||
return new EntityImagePort(leaf, skinParam, parent, bibliotekon, umlDiagramType.getStyleName());
|
||||
@ -617,29 +607,10 @@ public final class GeneralImageBuilder {
|
||||
return;
|
||||
}
|
||||
}
|
||||
int titleAndAttributeWidth = 0;
|
||||
int titleAndAttributeHeight = 0;
|
||||
|
||||
final TextBlock title = getTitleBlock(g);
|
||||
final TextBlock stereo = getStereoBlock(g);
|
||||
final TextBlock stereoAndTitle = TextBlockUtils.mergeTB(stereo, title, HorizontalAlignment.CENTER);
|
||||
final XDimension2D dimLabel = stereoAndTitle.calculateDimension(stringBounder);
|
||||
if (dimLabel.getWidth() > 0) {
|
||||
final XDimension2D dimAttribute = stateHeader((IEntity) g, getStyleState(FontParam.STATE_ATTRIBUTE),
|
||||
dotData.getSkinParam()).calculateDimension(stringBounder);
|
||||
final double attributeHeight = dimAttribute.getHeight();
|
||||
final double attributeWidth = dimAttribute.getWidth();
|
||||
final double marginForFields = attributeHeight > 0 ? IEntityImage.MARGIN : 0;
|
||||
final USymbol uSymbol = g.getUSymbol();
|
||||
final int suppHeightBecauseOfShape = uSymbol == null ? 0 : uSymbol.suppHeightBecauseOfShape();
|
||||
final int suppWidthBecauseOfShape = uSymbol == null ? 0 : uSymbol.suppWidthBecauseOfShape();
|
||||
|
||||
titleAndAttributeWidth = (int) Math.max(dimLabel.getWidth(), attributeWidth) + suppWidthBecauseOfShape;
|
||||
titleAndAttributeHeight = (int) (dimLabel.getHeight() + attributeHeight + marginForFields
|
||||
+ suppHeightBecauseOfShape);
|
||||
}
|
||||
|
||||
dotStringFactory.openCluster(titleAndAttributeWidth, titleAndAttributeHeight, title, stereo, g);
|
||||
final ClusterHeader clusterHeader = new ClusterHeader((EntityImpl) g, dotData.getSkinParam(), dotData,
|
||||
stringBounder);
|
||||
dotStringFactory.openCluster(g, clusterHeader);
|
||||
this.printEntities(dotStringFactory, g.getLeafsDirect());
|
||||
|
||||
printGroups(dotStringFactory, g);
|
||||
@ -647,106 +618,6 @@ public final class GeneralImageBuilder {
|
||||
dotStringFactory.closeCluster();
|
||||
}
|
||||
|
||||
public static TextBlock stateHeader(IEntity group, Style style, ISkinParam skinParam) {
|
||||
final List<CharSequence> details = group.getBodier().getRawBody();
|
||||
|
||||
if (details.size() == 0)
|
||||
return new TextBlockEmpty();
|
||||
|
||||
final FontConfiguration fontConfiguration;
|
||||
if (style == null)
|
||||
fontConfiguration = FontConfiguration.create(skinParam, FontParam.STATE_ATTRIBUTE, null);
|
||||
else
|
||||
fontConfiguration = FontConfiguration.create(skinParam, style);
|
||||
|
||||
Display display = null;
|
||||
for (CharSequence s : details)
|
||||
if (display == null)
|
||||
display = Display.getWithNewlines(s.toString());
|
||||
else
|
||||
display = display.addAll(Display.getWithNewlines(s.toString()));
|
||||
|
||||
return display.create(fontConfiguration, HorizontalAlignment.LEFT, skinParam);
|
||||
|
||||
}
|
||||
|
||||
private Style getStyleState(FontParam fontParam) {
|
||||
return fontParam.getStyleDefinition(SName.stateDiagram)
|
||||
.getMergedStyle(dotData.getSkinParam().getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
private TextBlock getTitleBlock(IGroup g) {
|
||||
final Display label = g.getDisplay();
|
||||
if (label == null)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final ISkinParam skinParam = dotData.getSkinParam();
|
||||
|
||||
final SName sname = dotData.getUmlDiagramType().getStyleName();
|
||||
final StyleSignatureBasic signature;
|
||||
final USymbol uSymbol = g.getUSymbol();
|
||||
if (g.getGroupType() == GroupType.STATE)
|
||||
signature = StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state,
|
||||
SName.header);
|
||||
else if (uSymbol == USymbols.RECTANGLE)
|
||||
signature = StyleSignatureBasic.of(SName.root, SName.element, sname, uSymbol.getSName(), SName.title);
|
||||
else
|
||||
signature = StyleSignatureBasic.of(SName.root, SName.element, sname, SName.title);
|
||||
|
||||
final Style style = signature //
|
||||
.withTOBECHANGED(g.getStereotype()) //
|
||||
.with(g.getStereostyles()) //
|
||||
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
|
||||
final FontConfiguration fontConfiguration = style.getFontConfiguration(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet(), g.getColors());
|
||||
|
||||
final HorizontalAlignment alignment = HorizontalAlignment.CENTER;
|
||||
return label.create(fontConfiguration, alignment, dotData.getSkinParam());
|
||||
}
|
||||
|
||||
private TextBlock addLegend(TextBlock original, DisplayPositioned legend) {
|
||||
if (legend == null || legend.isNull())
|
||||
return original;
|
||||
|
||||
final TextBlock legendBlock = EntityImageLegend.create(legend.getDisplay(), dotData.getSkinParam());
|
||||
return DecorateEntityImage.add(legendBlock, original, legend.getHorizontalAlignment(),
|
||||
legend.getVerticalAlignment());
|
||||
}
|
||||
|
||||
private TextBlock getStereoBlock(IGroup g) {
|
||||
final DisplayPositioned legend = g.getLegend();
|
||||
return addLegend(getStereoBlockWithoutLegend(g), legend);
|
||||
}
|
||||
|
||||
private TextBlock getStereoBlockWithoutLegend(IGroup g) {
|
||||
final Stereotype stereotype = g.getStereotype();
|
||||
// final DisplayPositionned legend = g.getLegend();
|
||||
if (stereotype == null)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final TextBlock tmp = stereotype.getSprite(dotData.getSkinParam());
|
||||
if (tmp != null)
|
||||
return tmp;
|
||||
|
||||
final List<String> stereos = stereotype.getLabels(dotData.getSkinParam().guillemet());
|
||||
if (stereos == null)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final boolean show = dotData.showPortion(EntityPortion.STEREOTYPE, g);
|
||||
if (show == false)
|
||||
return TextBlockUtils.empty(0, 0);
|
||||
|
||||
final Style style = Cluster
|
||||
.getDefaultStyleDefinition(dotData.getUmlDiagramType().getStyleName(), g.getUSymbol())
|
||||
.forStereotypeItself(g.getStereotype()).getMergedStyle(dotData.getSkinParam().getCurrentStyleBuilder());
|
||||
|
||||
final FontConfiguration fontConfiguration = style.getFontConfiguration(dotData.getSkinParam().getThemeStyle(),
|
||||
dotData.getSkinParam().getIHtmlColorSet());
|
||||
return Display.create(stereos).create(fontConfiguration, HorizontalAlignment.CENTER, dotData.getSkinParam());
|
||||
|
||||
}
|
||||
|
||||
public String getWarningOrError(int warningOrError) {
|
||||
if (maxX == null)
|
||||
return "";
|
||||
|
@ -84,11 +84,11 @@ public class GraphvizCrash extends AbstractTextBlock implements IEntityImage {
|
||||
|
||||
public static List<String> anErrorHasOccured(Throwable exception, String text) {
|
||||
final List<String> strings = new ArrayList<>();
|
||||
if (exception == null) {
|
||||
if (exception == null)
|
||||
strings.add("An error has occured!");
|
||||
} else {
|
||||
else
|
||||
strings.add("An error has occured : " + exception);
|
||||
}
|
||||
|
||||
final String quote = StringUtils.rot(QuoteUtils.getSomeQuote());
|
||||
strings.add("<i>" + quote);
|
||||
strings.add(" ");
|
||||
@ -99,11 +99,10 @@ public class GraphvizCrash extends AbstractTextBlock implements IEntityImage {
|
||||
|
||||
private static int lines(String text) {
|
||||
int result = 0;
|
||||
for (int i = 0; i < text.length(); i++) {
|
||||
if (text.charAt(i) == BackSlash.CHAR_NEWLINE) {
|
||||
for (int i = 0; i < text.length(); i++)
|
||||
if (text.charAt(i) == BackSlash.CHAR_NEWLINE)
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -139,9 +138,9 @@ public class GraphvizCrash extends AbstractTextBlock implements IEntityImage {
|
||||
strings.add("For some reason, dot/GraphViz has crashed.");
|
||||
strings.add("");
|
||||
strings.add("RootCause " + rootCause);
|
||||
if (rootCause != null) {
|
||||
if (rootCause != null)
|
||||
strings.addAll(CommandExecutionResult.getStackTrace(rootCause));
|
||||
}
|
||||
|
||||
strings.add("");
|
||||
strings.add("This has been generated with PlantUML (" + Version.versionString() + ").");
|
||||
checkOldVersionWarning(strings);
|
||||
@ -156,9 +155,8 @@ public class GraphvizCrash extends AbstractTextBlock implements IEntityImage {
|
||||
}
|
||||
pleaseGoTo(strings);
|
||||
youShouldSendThisDiagram(strings);
|
||||
if (flashCode != null) {
|
||||
if (flashCode != null)
|
||||
addDecodeHint(strings);
|
||||
}
|
||||
|
||||
return strings;
|
||||
}
|
||||
|
@ -46,7 +46,6 @@ import net.sourceforge.plantuml.cucadiagram.Display;
|
||||
import net.sourceforge.plantuml.cucadiagram.EntityUtils;
|
||||
import net.sourceforge.plantuml.cucadiagram.GroupHierarchy;
|
||||
import net.sourceforge.plantuml.cucadiagram.GroupType;
|
||||
import net.sourceforge.plantuml.cucadiagram.IEntity;
|
||||
import net.sourceforge.plantuml.cucadiagram.IGroup;
|
||||
import net.sourceforge.plantuml.cucadiagram.ILeaf;
|
||||
import net.sourceforge.plantuml.cucadiagram.LeafType;
|
||||
@ -54,6 +53,7 @@ import net.sourceforge.plantuml.cucadiagram.Link;
|
||||
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||
import net.sourceforge.plantuml.cucadiagram.SuperGroup;
|
||||
import net.sourceforge.plantuml.cucadiagram.dot.DotData;
|
||||
import net.sourceforge.plantuml.cucadiagram.entity.EntityImpl;
|
||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||
@ -62,8 +62,8 @@ import net.sourceforge.plantuml.graphic.color.ColorType;
|
||||
import net.sourceforge.plantuml.style.PName;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
||||
import net.sourceforge.plantuml.svek.image.EntityImageState;
|
||||
import net.sourceforge.plantuml.svek.image.EntityImageStateCommon;
|
||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
|
||||
@ -118,30 +118,21 @@ public final class GroupPngMakerState {
|
||||
return result;
|
||||
}
|
||||
|
||||
private Style getStyleStateHeader() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
private Style getStyleState() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
private Style getStyleStateBody() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.stateBody)
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
public IEntityImage getImage() {
|
||||
final Display display = group.getDisplay();
|
||||
final ISkinParam skinParam = diagram.getSkinParam();
|
||||
|
||||
final double rounded = getStyleState().value(PName.RoundCorner).asDouble();
|
||||
final double shadowing = getStyleState().value(PName.Shadowing).asDouble();
|
||||
final FontConfiguration fontConfiguration = getStyleStateHeader()
|
||||
.getFontConfiguration(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
|
||||
final TextBlock title = display.create(fontConfiguration, HorizontalAlignment.CENTER, diagram.getSkinParam());
|
||||
final Style style = EntityImageStateCommon.getStyleState(group, skinParam);
|
||||
// final Style styleHeader = EntityImageStateCommon.getStyleStateHeader(group, skinParam);
|
||||
final Style styleTitle = EntityImageStateCommon.getStyleStateTitle(group, skinParam);
|
||||
final Style styleBody = EntityImageStateCommon.getStyleStateBody(group, skinParam);
|
||||
|
||||
final double rounded = style.value(PName.RoundCorner).asDouble();
|
||||
final double shadowing = style.value(PName.Shadowing).asDouble();
|
||||
final FontConfiguration titleFontConfiguration = styleTitle.getFontConfiguration(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
final TextBlock title = display.create(titleFontConfiguration, HorizontalAlignment.CENTER,
|
||||
diagram.getSkinParam());
|
||||
|
||||
if (group.size() == 0 && group.getChildren().size() == 0)
|
||||
return new EntityImageState(group, diagram.getSkinParam());
|
||||
@ -164,20 +155,19 @@ public final class GroupPngMakerState {
|
||||
|
||||
HColor borderColor = group.getColors().getColor(ColorType.LINE);
|
||||
if (borderColor == null)
|
||||
borderColor = getStyleState().value(PName.LineColor).asColor(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
borderColor = style.value(PName.LineColor).asColor(skinParam.getThemeStyle(), skinParam.getIHtmlColorSet());
|
||||
|
||||
final Stereotype stereo = group.getStereotype();
|
||||
HColor backColor = group.getColors().getColor(ColorType.BACK);
|
||||
if (backColor == null)
|
||||
backColor = getStyleState().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
|
||||
backColor = style.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
|
||||
UStroke stroke = group.getColors().getSpecificLineStroke();
|
||||
if (stroke == null)
|
||||
stroke = getStyleState().getStroke();
|
||||
stroke = style.getStroke();
|
||||
|
||||
final TextBlock attribute = GeneralImageBuilder.stateHeader((IEntity) group, null, skinParam);
|
||||
final TextBlock attribute = ((EntityImpl) group).getStateHeader(skinParam);
|
||||
|
||||
final Stereotype stereotype = group.getStereotype();
|
||||
final boolean withSymbol = stereotype != null && stereotype.isWithOOSymbol();
|
||||
@ -186,7 +176,7 @@ public final class GroupPngMakerState {
|
||||
final IEntityImage image = containsOnlyConcurrentStates ? buildImageForConcurrentState(dotData)
|
||||
: svek2.buildImage(null, new String[0]);
|
||||
|
||||
final HColor bodyColor = getStyleStateBody().value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
|
||||
final HColor bodyColor = styleBody.value(PName.BackGroundColor).asColor(skinParam.getThemeStyle(),
|
||||
skinParam.getIHtmlColorSet());
|
||||
return new InnerStateAutonom(image, title, attribute, borderColor, backColor, group.getUrl99(), withSymbol,
|
||||
stroke, rounded, shadowing, bodyColor);
|
||||
|
@ -42,7 +42,6 @@ import net.sourceforge.plantuml.ugraphic.URectangle;
|
||||
import net.sourceforge.plantuml.ugraphic.UShape;
|
||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public final class RoundedNorth implements UDrawable {
|
||||
|
||||
@ -64,7 +63,7 @@ public final class RoundedNorth implements UDrawable {
|
||||
}
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
if (HColors.isTransparent(backColor))
|
||||
if (backColor.isTransparent())
|
||||
return;
|
||||
|
||||
final UShape header;
|
||||
|
@ -42,7 +42,6 @@ import net.sourceforge.plantuml.ugraphic.URectangle;
|
||||
import net.sourceforge.plantuml.ugraphic.UShape;
|
||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public final class RoundedSouth implements UDrawable {
|
||||
|
||||
@ -64,7 +63,7 @@ public final class RoundedSouth implements UDrawable {
|
||||
}
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
if (HColors.isTransparent(backColor))
|
||||
if (backColor.isTransparent())
|
||||
return;
|
||||
|
||||
final UShape header;
|
||||
|
@ -129,30 +129,31 @@ public class EntityImageDescription extends AbstractEntityImage {
|
||||
|
||||
final Colors colors = entity.getColors();
|
||||
|
||||
final StyleSignatureBasic tmp = StyleSignatureBasic.of(SName.root, SName.element, styleName, symbol.getSName());
|
||||
final StyleSignatureBasic tmp = StyleSignatureBasic.of(SName.root, SName.element, styleName, symbol.getSName(),
|
||||
SName.title);
|
||||
final Stereotype stereotype = entity.getStereotype();
|
||||
final Style style = tmp.withTOBECHANGED(stereotype).getMergedStyle(getSkinParam().getCurrentStyleBuilder())
|
||||
final Style styleTitle = tmp.withTOBECHANGED(stereotype).getMergedStyle(getSkinParam().getCurrentStyleBuilder())
|
||||
.eventuallyOverride(colors);
|
||||
|
||||
final Style styleStereo = tmp.forStereotypeItself(stereotype)
|
||||
.getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||
final HColor forecolor = style.value(PName.LineColor).asColor(getSkinParam().getThemeStyle(),
|
||||
final HColor forecolor = styleTitle.value(PName.LineColor).asColor(getSkinParam().getThemeStyle(),
|
||||
getSkinParam().getIHtmlColorSet());
|
||||
|
||||
HColor backcolor = colors.getColor(ColorType.BACK);
|
||||
if (backcolor == null)
|
||||
backcolor = style.value(PName.BackGroundColor).asColor(getSkinParam().getThemeStyle(),
|
||||
backcolor = styleTitle.value(PName.BackGroundColor).asColor(getSkinParam().getThemeStyle(),
|
||||
getSkinParam().getIHtmlColorSet());
|
||||
|
||||
final double roundCorner = style.value(PName.RoundCorner).asDouble();
|
||||
final double diagonalCorner = style.value(PName.DiagonalCorner).asDouble();
|
||||
final double deltaShadow = style.value(PName.Shadowing).asDouble();
|
||||
final UStroke stroke = style.getStroke(colors);
|
||||
final FontConfiguration fcTitle = style.getFontConfiguration(getSkinParam().getThemeStyle(),
|
||||
final double roundCorner = styleTitle.value(PName.RoundCorner).asDouble();
|
||||
final double diagonalCorner = styleTitle.value(PName.DiagonalCorner).asDouble();
|
||||
final double deltaShadow = styleTitle.value(PName.Shadowing).asDouble();
|
||||
final UStroke stroke = styleTitle.getStroke(colors);
|
||||
final FontConfiguration fcTitle = styleTitle.getFontConfiguration(getSkinParam().getThemeStyle(),
|
||||
getSkinParam().getIHtmlColorSet());
|
||||
final FontConfiguration fcStereo = styleStereo.getFontConfiguration(getSkinParam().getThemeStyle(),
|
||||
getSkinParam().getIHtmlColorSet());
|
||||
final HorizontalAlignment defaultAlign = style.getHorizontalAlignment();
|
||||
final HorizontalAlignment defaultAlign = styleTitle.getHorizontalAlignment();
|
||||
|
||||
assert getStereo() == stereotype;
|
||||
|
||||
@ -165,7 +166,7 @@ public class EntityImageDescription extends AbstractEntityImage {
|
||||
desc = TextBlockUtils.empty(getSkinParam().minClassWidth(), 0);
|
||||
else
|
||||
desc = BodyFactory.create3(entity.getDisplay(), getSkinParam(), defaultAlign, fcTitle,
|
||||
getSkinParam().wrapWidth(), style);
|
||||
getSkinParam().wrapWidth(), styleTitle);
|
||||
|
||||
stereo = TextBlockUtils.empty(0, 0);
|
||||
|
||||
@ -177,7 +178,7 @@ public class EntityImageDescription extends AbstractEntityImage {
|
||||
HorizontalAlignment.CENTER, getSkinParam());
|
||||
|
||||
name = BodyFactory.create2(getSkinParam().getDefaultTextAlignment(HorizontalAlignment.CENTER), codeDisplay,
|
||||
getSkinParam(), stereotype, entity, style);
|
||||
getSkinParam(), stereotype, entity, styleTitle);
|
||||
|
||||
if (hideText)
|
||||
asSmall = symbol.asSmall(TextBlockUtils.empty(0, 0), TextBlockUtils.empty(0, 0), TextBlockUtils.empty(0, 0),
|
||||
|
@ -86,11 +86,8 @@ public class EntityImageEmptyPackage extends AbstractEntityImage {
|
||||
private final HColor back;
|
||||
|
||||
private Style getStyle() {
|
||||
return getStyleSignature().getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
private StyleSignature getStyleSignature() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, sname, SName.package_).withTOBECHANGED(stereotype);
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, sname, SName.package_, SName.title)
|
||||
.withTOBECHANGED(stereotype).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
public EntityImageEmptyPackage(ILeaf entity, ISkinParam skinParam, PortionShower portionShower, SName sname) {
|
||||
|
@ -75,16 +75,17 @@ public class EntityImageState extends EntityImageStateCommon {
|
||||
|
||||
this.withSymbol = stereotype != null && stereotype.isWithOOSymbol();
|
||||
final Display list = Display.create(entity.getBodier().getRawBody());
|
||||
final FontConfiguration fontConfiguration = getStyleState().getFontConfiguration(getSkinParam().getThemeStyle(),
|
||||
getSkinParam().getIHtmlColorSet());
|
||||
|
||||
this.fields = list.create8(fontConfiguration, HorizontalAlignment.LEFT, skinParam, CreoleMode.FULL,
|
||||
final FontConfiguration fieldsFontConfiguration = getStyleStateHeader()
|
||||
.getFontConfiguration(getSkinParam().getThemeStyle(), getSkinParam().getIHtmlColorSet());
|
||||
|
||||
this.fields = list.create8(fieldsFontConfiguration, HorizontalAlignment.LEFT, skinParam, CreoleMode.FULL,
|
||||
skinParam.wrapWidth());
|
||||
|
||||
}
|
||||
|
||||
public XDimension2D calculateDimension(StringBounder stringBounder) {
|
||||
final XDimension2D dim = XDimension2D.mergeTB(desc.calculateDimension(stringBounder),
|
||||
final XDimension2D dim = XDimension2D.mergeTB(title.calculateDimension(stringBounder),
|
||||
fields.calculateDimension(stringBounder));
|
||||
double heightSymbol = 0;
|
||||
if (withSymbol)
|
||||
@ -101,7 +102,7 @@ public class EntityImageState extends EntityImageStateCommon {
|
||||
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final XDimension2D dimTotal = calculateDimension(stringBounder);
|
||||
final XDimension2D dimDesc = desc.calculateDimension(stringBounder);
|
||||
final XDimension2D dimDesc = title.calculateDimension(stringBounder);
|
||||
|
||||
final UStroke stroke = getStyleState().getStroke(lineConfig.getColors());
|
||||
|
||||
@ -120,7 +121,7 @@ public class EntityImageState extends EntityImageStateCommon {
|
||||
|
||||
final double xDesc = (dimTotal.getWidth() - dimDesc.getWidth()) / 2;
|
||||
final double yDesc = MARGIN;
|
||||
desc.drawU(ug.apply(new UTranslate(xDesc, yDesc)));
|
||||
title.drawU(ug.apply(new UTranslate(xDesc, yDesc)));
|
||||
|
||||
final double xFields = MARGIN;
|
||||
final double yFields = yLine + MARGIN_LINE;
|
||||
|
@ -58,7 +58,7 @@ import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
|
||||
public abstract class EntityImageStateCommon extends AbstractEntityImage {
|
||||
|
||||
final protected TextBlock desc;
|
||||
final protected TextBlock title;
|
||||
final protected Url url;
|
||||
|
||||
final protected LineConfigurable lineConfig;
|
||||
@ -68,31 +68,41 @@ public abstract class EntityImageStateCommon extends AbstractEntityImage {
|
||||
|
||||
this.lineConfig = entity;
|
||||
|
||||
final FontConfiguration fontConfiguration = getStyleStateHeader().getFontConfiguration(
|
||||
final FontConfiguration titleFontConfiguration = getStyleStateTitle(entity, skinParam).getFontConfiguration(
|
||||
getSkinParam().getThemeStyle(), getSkinParam().getIHtmlColorSet(), entity.getColors());
|
||||
|
||||
this.desc = entity.getDisplay().create8(fontConfiguration, HorizontalAlignment.CENTER, skinParam,
|
||||
this.title = entity.getDisplay().create8(titleFontConfiguration, HorizontalAlignment.CENTER, skinParam,
|
||||
CreoleMode.FULL, skinParam.wrapWidth());
|
||||
this.url = entity.getUrl99();
|
||||
|
||||
}
|
||||
|
||||
private Style getStyleStateHeader() {
|
||||
public static Style getStyleStateTitle(IEntity group, ISkinParam skinParam) {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.title)
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
public static Style getStyleStateHeader(IEntity group, ISkinParam skinParam) {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state, SName.header)
|
||||
.withTOBECHANGED(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
public static Style getStyleState(IEntity group, ISkinParam skinParam) {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
public static Style getStyleStateBody(IEntity group, ISkinParam skinParam) {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.stateBody)
|
||||
.withTOBECHANGED(group.getStereotype()).getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
final protected Style getStyleState() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.stateDiagram, SName.state)
|
||||
.withTOBECHANGED(getEntity().getStereotype()).getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||
return getStyleState(getEntity(), getSkinParam());
|
||||
}
|
||||
|
||||
private UStroke getStrokeWIP() {
|
||||
UStroke stroke = lineConfig.getColors().getSpecificLineStroke();
|
||||
if (stroke == null) {
|
||||
stroke = new UStroke(1.5);
|
||||
}
|
||||
return stroke;
|
||||
final protected Style getStyleStateHeader() {
|
||||
return getStyleStateHeader(getEntity(), getSkinParam());
|
||||
}
|
||||
|
||||
final public ShapeType getShapeType() {
|
||||
|
@ -54,7 +54,7 @@ public class EntityImageStateEmptyDescription extends EntityImageStateCommon {
|
||||
}
|
||||
|
||||
public XDimension2D calculateDimension(StringBounder stringBounder) {
|
||||
final XDimension2D dim = desc.calculateDimension(stringBounder);
|
||||
final XDimension2D dim = title.calculateDimension(stringBounder);
|
||||
final XDimension2D result = XDimension2D.delta(dim, MARGIN * 2);
|
||||
return XDimension2D.atLeast(result, MIN_WIDTH, MIN_HEIGHT);
|
||||
}
|
||||
@ -65,7 +65,7 @@ public class EntityImageStateEmptyDescription extends EntityImageStateCommon {
|
||||
|
||||
final StringBounder stringBounder = ug.getStringBounder();
|
||||
final XDimension2D dimTotal = calculateDimension(stringBounder);
|
||||
final XDimension2D dimDesc = desc.calculateDimension(stringBounder);
|
||||
final XDimension2D dimDesc = title.calculateDimension(stringBounder);
|
||||
|
||||
final UStroke stroke = getStyleState().getStroke(lineConfig.getColors());
|
||||
|
||||
@ -76,7 +76,7 @@ public class EntityImageStateEmptyDescription extends EntityImageStateCommon {
|
||||
|
||||
final double xDesc = (dimTotal.getWidth() - dimDesc.getWidth()) / 2;
|
||||
final double yDesc = (dimTotal.getHeight() - dimDesc.getHeight()) / 2;
|
||||
desc.drawU(ug.apply(new UTranslate(xDesc, yDesc)));
|
||||
title.drawU(ug.apply(new UTranslate(xDesc, yDesc)));
|
||||
|
||||
if (url != null)
|
||||
ug.closeUrl();
|
||||
|
@ -259,7 +259,7 @@ public class SvgGraphics {
|
||||
private Element pendingBackground;
|
||||
|
||||
public void paintBackcolorGradient(ColorMapper mapper, HColorGradient gr) {
|
||||
final String id = createSvgGradient(mapper.toRGB(gr.getColor1()), mapper.toRGB(gr.getColor2()), gr.getPolicy());
|
||||
final String id = createSvgGradient(gr.getColor1().toRGB(mapper), gr.getColor2().toRGB(mapper), gr.getPolicy());
|
||||
setFillColor("url(#" + id + ")");
|
||||
setStrokeColor(null);
|
||||
pendingBackground = createRectangleInternal(0, 0, 0, 0);
|
||||
|
@ -109,7 +109,7 @@ public class TikzGraphics {
|
||||
}
|
||||
|
||||
private String getColorName(HColor hcolor) {
|
||||
final Color color = mapper.toColor(hcolor);
|
||||
final Color color = hcolor.toColor(mapper);
|
||||
if (color.equals(Color.WHITE))
|
||||
return "white";
|
||||
|
||||
@ -124,10 +124,10 @@ public class TikzGraphics {
|
||||
if (fillcolor == null)
|
||||
return false;
|
||||
|
||||
if (HColors.isTransparent(fillcolor))
|
||||
if (fillcolor.isTransparent())
|
||||
return false;
|
||||
|
||||
if (mapper.toColor(fillcolor).getAlpha() == 0)
|
||||
if (fillcolor.toColor(mapper).getAlpha() == 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@ -646,7 +646,7 @@ public class TikzGraphics {
|
||||
private void addColor(HColor hcolor) {
|
||||
if (hcolor == null)
|
||||
return;
|
||||
final Color color = mapper.toColor(hcolor);
|
||||
final Color color = hcolor.toColor(mapper);
|
||||
if (color == null)
|
||||
return;
|
||||
|
||||
|
@ -93,7 +93,6 @@ import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorGradient;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorNone;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorSimple;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
import net.sourceforge.plantuml.ugraphic.debug.UGraphicDebug;
|
||||
@ -445,21 +444,18 @@ public class ImageBuilder {
|
||||
|
||||
}
|
||||
|
||||
private UGraphic createUGraphicPNG(double scaleFactor, final XDimension2D dim, Animation affineTransforms, double dx,
|
||||
double dy, String watermark) {
|
||||
Color backColor = getDefaultBackColor();
|
||||
private UGraphic createUGraphicPNG(double scaleFactor, final XDimension2D dim, Animation affineTransforms,
|
||||
double dx, double dy, String watermark) {
|
||||
Color pngBackColor = new Color(0, 0, 0, 0);
|
||||
|
||||
if (this.backcolor instanceof HColorSimple)
|
||||
backColor = colorMapper.toColor(this.backcolor);
|
||||
else if (this.backcolor instanceof HColorNone)
|
||||
backColor = null;
|
||||
pngBackColor = this.backcolor.toColor(colorMapper);
|
||||
|
||||
if (OptionFlags.getInstance().isReplaceWhiteBackgroundByTransparent() && backColor != null
|
||||
&& backColor.equals(Color.WHITE))
|
||||
backColor = new Color(0, 0, 0, 0);
|
||||
if (OptionFlags.getInstance().isReplaceWhiteBackgroundByTransparent() && Color.WHITE.equals(pngBackColor))
|
||||
pngBackColor = new Color(0, 0, 0, 0);
|
||||
|
||||
final EmptyImageBuilder builder = new EmptyImageBuilder(watermark, (int) (dim.getWidth() * scaleFactor),
|
||||
(int) (dim.getHeight() * scaleFactor), backColor, stringBounder);
|
||||
(int) (dim.getHeight() * scaleFactor), pngBackColor, stringBounder);
|
||||
final Graphics2D graphics2D = builder.getGraphics2D();
|
||||
|
||||
final UGraphicG2d ug = new UGraphicG2d(backcolor, colorMapper, stringBounder, graphics2D, scaleFactor,
|
||||
@ -473,10 +469,6 @@ public class ImageBuilder {
|
||||
return ug;
|
||||
}
|
||||
|
||||
static private Color getDefaultBackColor() {
|
||||
return Color.WHITE;
|
||||
}
|
||||
|
||||
static private HColor getDefaultHBackColor() {
|
||||
return HColors.WHITE;
|
||||
}
|
||||
@ -487,7 +479,7 @@ public class ImageBuilder {
|
||||
} else if (skinParam != null) {
|
||||
final HColor color = skinParam.hoverPathColor();
|
||||
if (color != null)
|
||||
return colorMapper.toRGB(color);
|
||||
return color.toRGB(colorMapper);
|
||||
|
||||
}
|
||||
return null;
|
||||
|
@ -1,57 +0,0 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2023, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* http://plantuml.com/patreon (only 1$ per month!)
|
||||
* http://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.ugraphic.color;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
public class ColorChangerMonochrome {
|
||||
|
||||
public Color getChangedColor(Color color) {
|
||||
if (color == null)
|
||||
return null;
|
||||
|
||||
final int grayScale = ColorUtils.getGrayScale(color);
|
||||
return new Color(grayScale, grayScale, grayScale);
|
||||
}
|
||||
|
||||
public Color getChangedColor(HColor color) {
|
||||
if (color == null)
|
||||
return null;
|
||||
|
||||
return getChangedColor(((HColorSimple) color).getColor999());
|
||||
}
|
||||
|
||||
}
|
@ -37,44 +37,8 @@ package net.sourceforge.plantuml.ugraphic.color;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
|
||||
public abstract class ColorMapper {
|
||||
|
||||
public abstract Color toColor(HColor color);
|
||||
|
||||
final public String toRGB(HColor hcolor) {
|
||||
if (hcolor == null)
|
||||
return null;
|
||||
|
||||
final Color color = toColor(hcolor);
|
||||
return StringUtils.sharp000000(color.getRGB());
|
||||
}
|
||||
|
||||
final public String toSvg(HColor hcolor) {
|
||||
if (hcolor == null)
|
||||
return "none";
|
||||
|
||||
if (HColors.isTransparent(hcolor))
|
||||
return "#00000000";
|
||||
|
||||
final Color color = toColor(hcolor);
|
||||
final int alpha = color.getAlpha();
|
||||
if (alpha == 255)
|
||||
return toRGB(hcolor);
|
||||
|
||||
String s = "0" + Integer.toHexString(alpha).toUpperCase();
|
||||
s = s.substring(s.length() - 2);
|
||||
return toRGB(hcolor) + s;
|
||||
}
|
||||
|
||||
private static String sharpAlpha(int color) {
|
||||
final int v = color & 0xFFFFFF;
|
||||
String s = "00000" + Integer.toHexString(v).toUpperCase();
|
||||
s = s.substring(s.length() - 6);
|
||||
final int alpha = (int) (((long) color) & 0x000000FF) << 24;
|
||||
final String s2 = "0" + Integer.toHexString(alpha).toUpperCase();
|
||||
return "#" + s + s2.substring(0, 2);
|
||||
}
|
||||
public abstract Color fromColorSimple(HColorSimple simple);
|
||||
|
||||
}
|
||||
|
@ -40,26 +40,8 @@ import java.awt.Color;
|
||||
public class ColorMapperForceDark extends ColorMapper {
|
||||
|
||||
@Override
|
||||
public Color toColor(HColor color) {
|
||||
if (color == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
if (color instanceof HColorNone)
|
||||
return new Color(0, 0, 0, 0);
|
||||
|
||||
if (color instanceof HColorGradient)
|
||||
return toColor(((HColorGradient) color).getColor1());
|
||||
|
||||
if (color instanceof HColorMiddle)
|
||||
return ((HColorMiddle) color).getMappedColor(this);
|
||||
|
||||
if (color instanceof HColorScheme)
|
||||
throw new IllegalStateException();
|
||||
|
||||
if (color instanceof HColorAutomagic)
|
||||
throw new IllegalStateException();
|
||||
|
||||
final HColor tmp = ((HColorSimple) color).darkSchemeTheme();
|
||||
return ((HColorSimple) tmp).getColor999();
|
||||
public Color fromColorSimple(HColorSimple simple) {
|
||||
return ((HColorSimple) simple.darkSchemeTheme()).getColor999();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -40,25 +40,8 @@ import java.awt.Color;
|
||||
public class ColorMapperIdentity extends ColorMapper {
|
||||
|
||||
@Override
|
||||
public Color toColor(HColor color) {
|
||||
if (color == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
if (color instanceof HColorNone)
|
||||
return new Color(0, 0, 0, 0);
|
||||
|
||||
if (color instanceof HColorGradient)
|
||||
return toColor(((HColorGradient) color).getColor1());
|
||||
|
||||
if (color instanceof HColorMiddle)
|
||||
return ((HColorMiddle) color).getMappedColor(this);
|
||||
|
||||
if (color instanceof HColorScheme)
|
||||
throw new IllegalStateException();
|
||||
|
||||
if (color instanceof HColorAutomagic)
|
||||
throw new IllegalStateException();
|
||||
|
||||
return ((HColorSimple) color).getColor999();
|
||||
public Color fromColorSimple(HColorSimple simple) {
|
||||
return simple.getColor999();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -40,21 +40,8 @@ import java.awt.Color;
|
||||
public class ColorMapperLightnessInverse extends ColorMapper {
|
||||
|
||||
@Override
|
||||
public Color toColor(HColor color) {
|
||||
if (color == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
if (color instanceof HColorGradient)
|
||||
return toColor(((HColorGradient) color).getColor1());
|
||||
|
||||
if (color instanceof HColorMiddle)
|
||||
return ((HColorMiddle) color).getMappedColor(this);
|
||||
|
||||
if (color instanceof HColorNone)
|
||||
return ColorUtils.getReversed((new Color(0, 0, 0, 0)));
|
||||
|
||||
// return ColorUtils.reverseHsluv(((HColorSimple) color).getColor999());
|
||||
return ColorUtils.getReversed(((HColorSimple) color).getColor999());
|
||||
|
||||
public Color fromColorSimple(HColorSimple simple) {
|
||||
return ColorUtils.getReversed(simple.getColor999());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -45,18 +45,19 @@ public class ColorMapperMonochrome extends ColorMapper {
|
||||
this.reverse = reverse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color toColor(HColor htmlColor) {
|
||||
if (htmlColor == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
final Color color = new ColorMapperIdentity().toColor(htmlColor);
|
||||
if (HColors.isTransparent(htmlColor))
|
||||
return color;
|
||||
|
||||
if (reverse)
|
||||
return ColorUtils.getGrayScaleColorReverse(color);
|
||||
|
||||
return ColorUtils.getGrayScaleColor(color);
|
||||
private boolean isReverse() {
|
||||
return reverse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color fromColorSimple(HColorSimple simple) {
|
||||
if (simple.isTransparent())
|
||||
return simple.getColor999();
|
||||
|
||||
if (isReverse())
|
||||
return ColorUtils.getGrayScaleColorReverse(simple.getColor999());
|
||||
|
||||
return ColorUtils.getGrayScaleColor(simple.getColor999());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -45,22 +45,13 @@ public class ColorMapperReverse extends ColorMapper {
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color toColor(HColor color) {
|
||||
if (color == null)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
if (color instanceof HColorMiddle)
|
||||
return ((HColorMiddle) color).getMappedColor(this);
|
||||
|
||||
if (color instanceof HColorNone)
|
||||
return new Color(0, 0, 0, 0);
|
||||
|
||||
return getReverse(((HColorSimple) color).getColor999());
|
||||
}
|
||||
|
||||
private Color getReverse(Color color) {
|
||||
return order.getReverse(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color fromColorSimple(HColorSimple simple) {
|
||||
return getReverse(simple.getColor999());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -34,6 +34,9 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.ugraphic.color;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import net.sourceforge.plantuml.StringUtils;
|
||||
import net.sourceforge.plantuml.ugraphic.UBackground;
|
||||
import net.sourceforge.plantuml.ugraphic.UChange;
|
||||
|
||||
@ -47,6 +50,31 @@ public abstract class HColor implements UChange {
|
||||
};
|
||||
}
|
||||
|
||||
public Color toColor(ColorMapper mapper) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
final public String toRGB(ColorMapper mapper) {
|
||||
final Color color = toColor(mapper);
|
||||
return StringUtils.sharp000000(color.getRGB());
|
||||
}
|
||||
|
||||
final public String toSvg(ColorMapper mapper) {
|
||||
if (this.isTransparent())
|
||||
return "#00000000";
|
||||
|
||||
final Color color = toColor(mapper);
|
||||
final int alpha = color.getAlpha();
|
||||
if (alpha == 255)
|
||||
return toRGB(mapper);
|
||||
|
||||
String s = "0" + Integer.toHexString(alpha).toUpperCase();
|
||||
s = s.substring(s.length() - 2);
|
||||
return toRGB(mapper) + s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public HColor lighten(int ratio) {
|
||||
return this;
|
||||
}
|
||||
@ -87,4 +115,9 @@ public abstract class HColor implements UChange {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public boolean isTransparent() {
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -67,8 +67,8 @@ public class HColorGradient extends HColor {
|
||||
if (coeff > 1 || coeff < 0)
|
||||
throw new IllegalArgumentException("c=" + coeff);
|
||||
|
||||
final Color c1 = mapper.toColor(color1);
|
||||
final Color c2 = mapper.toColor(color2);
|
||||
final Color c1 = color1.toColor(mapper);
|
||||
final Color c2 = color2.toColor(mapper);
|
||||
final int vred = c2.getRed() - c1.getRed();
|
||||
final int vgreen = c2.getGreen() - c1.getGreen();
|
||||
final int vblue = c2.getBlue() - c1.getBlue();
|
||||
@ -85,4 +85,9 @@ public class HColorGradient extends HColor {
|
||||
return policy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color toColor(ColorMapper mapper) {
|
||||
return color1.toColor(mapper);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -47,9 +47,18 @@ public class HColorMiddle extends HColor {
|
||||
this.color2 = c2;
|
||||
}
|
||||
|
||||
public Color getMappedColor(ColorMapper colorMapper) {
|
||||
final Color cc1 = colorMapper.toColor(color1);
|
||||
final Color cc2 = colorMapper.toColor(color2);
|
||||
public final HColor getColor1() {
|
||||
return color1;
|
||||
}
|
||||
|
||||
public final HColor getColor2() {
|
||||
return color2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color toColor(ColorMapper mapper) {
|
||||
final Color cc1 = color1.toColor(mapper);
|
||||
final Color cc2 = color2.toColor(mapper);
|
||||
final int r1 = cc1.getRed();
|
||||
final int g1 = cc1.getGreen();
|
||||
final int b1 = cc1.getBlue();
|
||||
@ -63,12 +72,4 @@ public class HColorMiddle extends HColor {
|
||||
return new Color(r, g, b);
|
||||
}
|
||||
|
||||
public final HColor getColor1() {
|
||||
return color1;
|
||||
}
|
||||
|
||||
public final HColor getColor2() {
|
||||
return color2;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,53 +0,0 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2023, Arnaud Roques
|
||||
*
|
||||
* Project Info: http://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* http://plantuml.com/patreon (only 1$ per month!)
|
||||
* http://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.ugraphic.color;
|
||||
|
||||
import net.sourceforge.plantuml.ugraphic.UBackground;
|
||||
|
||||
public class HColorNone extends HColor {
|
||||
|
||||
HColorNone() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public UBackground bg() {
|
||||
return new UBackground() {
|
||||
public HColor getBackColor() {
|
||||
return HColors.none();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
@ -34,6 +34,8 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.ugraphic.color;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
class HColorScheme extends HColor {
|
||||
|
||||
private final HColor colorForLight;
|
||||
@ -48,7 +50,7 @@ class HColorScheme extends HColor {
|
||||
|
||||
@Override
|
||||
public HColor getAppropriateColor(HColor back) {
|
||||
if (HColors.isTransparent(back)) {
|
||||
if (back.isTransparent()) {
|
||||
if (colorForTransparent != null)
|
||||
return colorForTransparent;
|
||||
|
||||
|
@ -362,7 +362,7 @@ public class HColorSet {
|
||||
s = removeFirstDieseAndgoLowerCase(s);
|
||||
final Color color;
|
||||
if (s.equalsIgnoreCase("transparent") || s.equalsIgnoreCase("background")) {
|
||||
return HColors.generalBackground();
|
||||
return HColors.none();
|
||||
} else if (s.equalsIgnoreCase("automatic")) {
|
||||
return new HColorAutomagic();
|
||||
} else if (s.matches("[0-9A-Fa-f]")) {
|
||||
|
@ -105,6 +105,7 @@ public class HColorSimple extends HColor {
|
||||
return ColorUtils.getGrayScale(color) < 128;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTransparent() {
|
||||
return color.getAlpha() == 0;
|
||||
}
|
||||
@ -132,11 +133,11 @@ public class HColorSimple extends HColor {
|
||||
}
|
||||
|
||||
public HColor asMonochrome() {
|
||||
return new HColorSimple(new ColorChangerMonochrome().getChangedColor(color));
|
||||
return new HColorSimple(ColorUtils.getGrayScaleColor(color));
|
||||
}
|
||||
|
||||
public HColor asMonochrome(HColorSimple colorForMonochrome, double minGray, double maxGray) {
|
||||
final Color tmp = new ColorChangerMonochrome().getChangedColor(color);
|
||||
final Color tmp = ColorUtils.getGrayScaleColor(color);
|
||||
final int gray = tmp.getGreen();
|
||||
assert gray == tmp.getBlue();
|
||||
assert gray == tmp.getRed();
|
||||
@ -148,7 +149,7 @@ public class HColorSimple extends HColor {
|
||||
|
||||
@Override
|
||||
public HColor opposite() {
|
||||
final Color mono = new ColorChangerMonochrome().getChangedColor(color);
|
||||
final Color mono = ColorUtils.getGrayScaleColor(color);
|
||||
final int grayScale = 255 - mono.getGreen() > 127 ? 255 : 0;
|
||||
return new HColorSimple(new Color(grayScale, grayScale, grayScale));
|
||||
}
|
||||
@ -201,4 +202,9 @@ public class HColorSimple extends HColor {
|
||||
return dark;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color toColor(ColorMapper mapper) {
|
||||
return mapper.fromColorSimple(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -133,29 +133,14 @@ public class HColors {
|
||||
return color.bg();
|
||||
}
|
||||
|
||||
private static final HColorSimple TRANSPARENT = new HColorSimple(new Color(0, 0, 0, 0));
|
||||
|
||||
public static HColor transparent() {
|
||||
return new HColorNone();
|
||||
return TRANSPARENT;
|
||||
}
|
||||
|
||||
public static HColor none() {
|
||||
return new HColorNone();
|
||||
}
|
||||
|
||||
public static HColor generalBackground() {
|
||||
return new HColorNone();
|
||||
}
|
||||
|
||||
public static boolean isTransparent(HColor back) {
|
||||
if (back == null)
|
||||
return true;
|
||||
|
||||
if (back instanceof HColorNone)
|
||||
return true;
|
||||
|
||||
if (back instanceof HColorSimple && ((HColorSimple) back).isTransparent())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return TRANSPARENT;
|
||||
}
|
||||
|
||||
public static HColor unlinear(HColor color1, HColor color2, int completion) {
|
||||
|
@ -255,7 +255,7 @@ public class UGraphicDebug extends AbstractCommonUGraphic implements ClipContain
|
||||
}
|
||||
|
||||
private String colorToString(HColor color) {
|
||||
if (HColors.isTransparent(color))
|
||||
if (color == null || color.isTransparent())
|
||||
return "NULL_COLOR";
|
||||
|
||||
if (color instanceof HColorSimple) {
|
||||
|
@ -57,7 +57,7 @@ public class DriverCenteredCharacterEps implements UDriver<UCenteredCharacter, E
|
||||
final double ypos = y - unusedSpace.getCenterY() - 0.5;
|
||||
|
||||
final TextLayout t = createTextLayout(font, "" + c);
|
||||
eps.setStrokeColor(mapper.toColor(param.getColor()));
|
||||
eps.setStrokeColor(param.getColor().toColor(mapper));
|
||||
DriverTextEps.drawPathIterator(eps, xpos, ypos, t.getOutline(null));
|
||||
}
|
||||
|
||||
|
@ -40,15 +40,14 @@ import net.sourceforge.plantuml.posimo.DotPath;
|
||||
import net.sourceforge.plantuml.ugraphic.UDriver;
|
||||
import net.sourceforge.plantuml.ugraphic.UParam;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverDotPathEps implements UDriver<DotPath, EpsGraphics> {
|
||||
|
||||
public void draw(DotPath shape, double x, double y, ColorMapper mapper, UParam param, EpsGraphics eps) {
|
||||
// DriverLineG2d.manageStroke(param, g2d);
|
||||
|
||||
if (HColors.isTransparent(param.getColor()) == false) {
|
||||
eps.setStrokeColor(mapper.toColor(param.getColor()));
|
||||
if (param.getColor().isTransparent() == false) {
|
||||
eps.setStrokeColor(param.getColor().toColor(mapper));
|
||||
eps.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDashVisible(),
|
||||
param.getStroke().getDashSpace());
|
||||
shape.draw(eps, x, y);
|
||||
|
@ -69,8 +69,8 @@ public class DriverEllipseEps implements UDriver<UEllipse, EpsGraphics> {
|
||||
eps.epsEllipseShadow(x + width / 2, y + height / 2, width / 2, height / 2, shape.getDeltaShadow());
|
||||
}
|
||||
|
||||
eps.setFillColor(mapper.toColor(param.getBackcolor()));
|
||||
eps.setStrokeColor(mapper.toColor(param.getColor()));
|
||||
eps.setFillColor(param.getBackcolor().toColor(mapper));
|
||||
eps.setStrokeColor(param.getColor().toColor(mapper));
|
||||
eps.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDashVisible(), param.getStroke()
|
||||
.getDashSpace());
|
||||
|
||||
|
@ -61,7 +61,7 @@ public class DriverImageEps implements UDriver<UImage, EpsGraphics> {
|
||||
}
|
||||
}
|
||||
|
||||
eps.drawImage(shape.muteTransparentColor(mapper.toColor(param.getBackcolor())).getImage(1), x, y);
|
||||
eps.drawImage(shape.muteTransparentColor(param.getBackcolor().toColor(mapper)).getImage(1), x, y);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ public class DriverLineEps implements UDriver<ULine, EpsGraphics> {
|
||||
y2 = line.y2;
|
||||
}
|
||||
|
||||
eps.setStrokeColor(mapper.toColor(param.getColor()));
|
||||
eps.setStrokeColor(param.getColor().toColor(mapper));
|
||||
eps.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDashVisible(), param.getStroke()
|
||||
.getDashSpace());
|
||||
eps.epsLine(x, y, x2, y2);
|
||||
|
@ -43,8 +43,8 @@ import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
public class DriverPathEps implements UDriver<UPath, EpsGraphics> {
|
||||
|
||||
public void draw(UPath shape, double x, double y, ColorMapper mapper, UParam param, EpsGraphics eps) {
|
||||
eps.setStrokeColor(mapper.toColor(param.getColor()));
|
||||
eps.setFillColor(mapper.toColor(param.getBackcolor()));
|
||||
eps.setStrokeColor(param.getColor().toColor(mapper));
|
||||
eps.setFillColor(param.getBackcolor().toColor(mapper));
|
||||
eps.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDashVisible(), param
|
||||
.getStroke().getDashSpace());
|
||||
|
||||
|
@ -77,12 +77,12 @@ public class DriverPolygonEps implements UDriver<UPolygon, EpsGraphics> {
|
||||
|
||||
final HColor back = param.getBackcolor();
|
||||
if (back instanceof HColorGradient) {
|
||||
eps.setStrokeColor(mapper.toColor(param.getColor()));
|
||||
eps.setStrokeColor(param.getColor().toColor(mapper));
|
||||
eps.epsPolygon((HColorGradient) back, mapper, points);
|
||||
} else {
|
||||
|
||||
eps.setFillColor(mapper.toColor(back));
|
||||
eps.setStrokeColor(mapper.toColor(param.getColor()));
|
||||
eps.setFillColor(back.toColor(mapper));
|
||||
eps.setStrokeColor(param.getColor().toColor(mapper));
|
||||
eps.epsPolygon(points);
|
||||
}
|
||||
}
|
||||
|
@ -81,11 +81,11 @@ public class DriverRectangleEps implements UDriver<URectangle, EpsGraphics> {
|
||||
|
||||
final HColor back = param.getBackcolor();
|
||||
if (back instanceof HColorGradient) {
|
||||
eps.setStrokeColor(mapper.toColor(param.getColor()));
|
||||
eps.setStrokeColor(param.getColor().toColor(mapper));
|
||||
eps.epsRectangle(x, y, width, height, rx / 2, ry / 2, (HColorGradient) back, mapper);
|
||||
} else {
|
||||
eps.setStrokeColor(mapper.toColor(param.getColor()));
|
||||
eps.setFillColor(mapper.toColor(param.getBackcolor()));
|
||||
eps.setStrokeColor(param.getColor().toColor(mapper));
|
||||
eps.setFillColor(param.getBackcolor().toColor(mapper));
|
||||
eps.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDashVisible(), param
|
||||
.getStroke().getDashSpace());
|
||||
eps.epsRectangle(x, y, width, height, rx / 2, ry / 2);
|
||||
|
@ -56,7 +56,6 @@ import net.sourceforge.plantuml.ugraphic.UParam;
|
||||
import net.sourceforge.plantuml.ugraphic.UText;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverTextEps implements UDriver<UText, EpsGraphics> {
|
||||
|
||||
@ -75,7 +74,7 @@ public class DriverTextEps implements UDriver<UText, EpsGraphics> {
|
||||
}
|
||||
|
||||
final FontConfiguration fontConfiguration = shape.getFontConfiguration();
|
||||
if (HColors.isTransparent(fontConfiguration.getColor())) {
|
||||
if (fontConfiguration.getColor().isTransparent()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -89,7 +88,7 @@ public class DriverTextEps implements UDriver<UText, EpsGraphics> {
|
||||
MinMax dim = null;
|
||||
|
||||
if (fontConfiguration.containsStyle(FontStyle.BACKCOLOR)) {
|
||||
final Color extended = mapper.toColor(fontConfiguration.getExtendedColor());
|
||||
final Color extended = fontConfiguration.getExtendedColor().toColor(mapper);
|
||||
if (extended != null) {
|
||||
eps.setStrokeColor(extended);
|
||||
eps.setFillColor(extended);
|
||||
@ -101,13 +100,13 @@ public class DriverTextEps implements UDriver<UText, EpsGraphics> {
|
||||
}
|
||||
}
|
||||
|
||||
eps.setStrokeColor(mapper.toColor(fontConfiguration.getColor()));
|
||||
eps.setStrokeColor(fontConfiguration.getColor().toColor(mapper));
|
||||
drawPathIterator(eps, x, y, getOutline(textLayout));
|
||||
|
||||
if (fontConfiguration.containsStyle(FontStyle.UNDERLINE)) {
|
||||
final HColor extended = fontConfiguration.getExtendedColor();
|
||||
if (extended != null) {
|
||||
eps.setStrokeColor(mapper.toColor(extended));
|
||||
eps.setStrokeColor(extended.toColor(mapper));
|
||||
}
|
||||
if (dim == null) {
|
||||
dim = getMinMax(x, y, getOutline(textLayout).getPathIterator(null));
|
||||
@ -123,7 +122,7 @@ public class DriverTextEps implements UDriver<UText, EpsGraphics> {
|
||||
final int ypos = (int) (y + 2.5) - 1;
|
||||
final HColor extended = fontConfiguration.getExtendedColor();
|
||||
if (extended != null) {
|
||||
eps.setStrokeColor(mapper.toColor(extended));
|
||||
eps.setStrokeColor(extended.toColor(mapper));
|
||||
}
|
||||
eps.setStrokeWidth(1.1, 0, 0);
|
||||
for (int i = (int) x; i < x + dim.getWidth() - 5; i += 6) {
|
||||
@ -135,7 +134,7 @@ public class DriverTextEps implements UDriver<UText, EpsGraphics> {
|
||||
if (fontConfiguration.containsStyle(FontStyle.STRIKE)) {
|
||||
final HColor extended = fontConfiguration.getExtendedColor();
|
||||
if (extended != null) {
|
||||
eps.setStrokeColor(mapper.toColor(extended));
|
||||
eps.setStrokeColor(extended.toColor(mapper));
|
||||
}
|
||||
if (dim == null) {
|
||||
dim = getMinMax(x, y, getOutline(textLayout).getPathIterator(null));
|
||||
@ -160,7 +159,7 @@ public class DriverTextEps implements UDriver<UText, EpsGraphics> {
|
||||
// final double ypos = y - fm.getDescent() + 0.5;
|
||||
final double ypos = y - 1;
|
||||
|
||||
eps.setStrokeColor(mapper.toColor(fontConfiguration.getColor()));
|
||||
eps.setStrokeColor(fontConfiguration.getColor().toColor(mapper));
|
||||
((EpsGraphicsMacroAndText) eps).drawText(shape.getText(), fontConfiguration, x, ypos);
|
||||
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ public class DriverCenteredCharacterG2d implements UDriver<UCenteredCharacter, G
|
||||
final UFont font = characterCircled.getFont();
|
||||
final UnusedSpace unusedSpace = UnusedSpace.getUnusedSpace(font, c);
|
||||
|
||||
g2d.setColor(mapper.toColor(param.getColor()));
|
||||
g2d.setColor(param.getColor().toColor(mapper));
|
||||
final double xpos = x - unusedSpace.getCenterX();
|
||||
final double ypos = y - unusedSpace.getCenterY() - 0.5;
|
||||
|
||||
|
@ -42,7 +42,6 @@ import net.sourceforge.plantuml.posimo.DotPath;
|
||||
import net.sourceforge.plantuml.ugraphic.UDriver;
|
||||
import net.sourceforge.plantuml.ugraphic.UParam;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverDotPathG2d implements UDriver<DotPath, Graphics2D> {
|
||||
|
||||
@ -55,8 +54,8 @@ public class DriverDotPathG2d implements UDriver<DotPath, Graphics2D> {
|
||||
public void draw(DotPath shape, double x, double y, ColorMapper mapper, UParam param, Graphics2D g2d) {
|
||||
DriverLineG2d.manageStroke(param, g2d);
|
||||
|
||||
if (HColors.isTransparent(param.getColor()) == false) {
|
||||
g2d.setColor(mapper.toColor(param.getColor()));
|
||||
if (param.getColor().isTransparent() == false) {
|
||||
g2d.setColor(param.getColor().toColor(mapper));
|
||||
shape.draw(g2d, x, y);
|
||||
shape.manageEnsureVisible(x, y, visible);
|
||||
}
|
||||
|
@ -49,7 +49,6 @@ import net.sourceforge.plantuml.ugraphic.UParam;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorGradient;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverEllipseG2d extends DriverShadowedG2d implements UDriver<UEllipse, Graphics2D> {
|
||||
|
||||
@ -82,20 +81,20 @@ public class DriverEllipseG2d extends DriverShadowedG2d implements UDriver<UElli
|
||||
g2d.fill(shape);
|
||||
DriverRectangleG2d.drawBorder(param, color, mapper, ellipse, shape, g2d, x, y);
|
||||
} else {
|
||||
if (HColors.isTransparent(back) == false) {
|
||||
g2d.setColor(mapper.toColor(param.getBackcolor()));
|
||||
if (back.isTransparent() == false) {
|
||||
g2d.setColor(param.getBackcolor().toColor(mapper));
|
||||
DriverRectangleG2d.managePattern(param, g2d);
|
||||
g2d.fill(shape);
|
||||
}
|
||||
if (HColors.isTransparent(color) == false && color.equals(param.getBackcolor()) == false)
|
||||
if (color.isTransparent() == false && color.equals(param.getBackcolor()) == false)
|
||||
DriverRectangleG2d.drawBorder(param, color, mapper, ellipse, shape, g2d, x, y);
|
||||
|
||||
}
|
||||
} else {
|
||||
final Shape arc = new Arc2D.Double(x, y, ellipse.getWidth(), ellipse.getHeight(), round(ellipse.getStart()),
|
||||
round(ellipse.getExtend()), Arc2D.OPEN);
|
||||
if (HColors.isTransparent(color) == false) {
|
||||
g2d.setColor(mapper.toColor(color));
|
||||
if (color.isTransparent() == false) {
|
||||
g2d.setColor(color.toColor(mapper));
|
||||
g2d.draw(arc);
|
||||
}
|
||||
}
|
||||
|
@ -47,7 +47,6 @@ import net.sourceforge.plantuml.ugraphic.USegmentType;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorGradient;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverPathG2d extends DriverShadowedG2d implements UDriver<UPath, Graphics2D> {
|
||||
|
||||
@ -86,14 +85,14 @@ public class DriverPathG2d extends DriverShadowedG2d implements UDriver<UPath, G
|
||||
|
||||
if (shape.isOpenIconic()) {
|
||||
p.closePath();
|
||||
g2d.setColor(mapper.toColor(param.getColor()));
|
||||
g2d.setColor(param.getColor().toColor(mapper));
|
||||
g2d.fill(p);
|
||||
return;
|
||||
}
|
||||
|
||||
// Shadow
|
||||
if (shape.getDeltaShadow() != 0)
|
||||
if (back == null || HColors.isTransparent(back))
|
||||
if (back == null || back.isTransparent())
|
||||
drawOnlyLineShadowSpecial(g2d, p, shape.getDeltaShadow(), dpiFactor);
|
||||
else
|
||||
drawShadow(g2d, p, shape.getDeltaShadow(), dpiFactor);
|
||||
@ -104,30 +103,30 @@ public class DriverPathG2d extends DriverShadowedG2d implements UDriver<UPath, G
|
||||
final GradientPaint paint;
|
||||
if (policy == '|') {
|
||||
paint = new GradientPaint((float) minMax.getMinX(), (float) minMax.getMaxY() / 2,
|
||||
mapper.toColor(gr.getColor1()), (float) minMax.getMaxX(), (float) minMax.getMaxY() / 2,
|
||||
mapper.toColor(gr.getColor2()));
|
||||
gr.getColor1().toColor(mapper), (float) minMax.getMaxX(), (float) minMax.getMaxY() / 2,
|
||||
gr.getColor2().toColor(mapper));
|
||||
} else if (policy == '\\') {
|
||||
paint = new GradientPaint((float) minMax.getMinX(), (float) minMax.getMaxY(),
|
||||
mapper.toColor(gr.getColor1()), (float) minMax.getMaxX(), (float) minMax.getMinY(),
|
||||
mapper.toColor(gr.getColor2()));
|
||||
gr.getColor1().toColor(mapper), (float) minMax.getMaxX(), (float) minMax.getMinY(),
|
||||
gr.getColor2().toColor(mapper));
|
||||
} else if (policy == '-') {
|
||||
paint = new GradientPaint((float) minMax.getMaxX() / 2, (float) minMax.getMinY(),
|
||||
mapper.toColor(gr.getColor1()), (float) minMax.getMaxX() / 2, (float) minMax.getMaxY(),
|
||||
mapper.toColor(gr.getColor2()));
|
||||
gr.getColor1().toColor(mapper), (float) minMax.getMaxX() / 2, (float) minMax.getMaxY(),
|
||||
gr.getColor2().toColor(mapper));
|
||||
} else {
|
||||
// for /
|
||||
paint = new GradientPaint((float) x, (float) y, mapper.toColor(gr.getColor1()),
|
||||
(float) minMax.getMaxX(), (float) minMax.getMaxY(), mapper.toColor(gr.getColor2()));
|
||||
paint = new GradientPaint((float) x, (float) y, gr.getColor1().toColor(mapper),
|
||||
(float) minMax.getMaxX(), (float) minMax.getMaxY(), gr.getColor2().toColor(mapper));
|
||||
}
|
||||
g2d.setPaint(paint);
|
||||
g2d.fill(p);
|
||||
} else if (HColors.isTransparent(back) == false) {
|
||||
g2d.setColor(mapper.toColor(back));
|
||||
} else if (back.isTransparent() == false) {
|
||||
g2d.setColor(back.toColor(mapper));
|
||||
g2d.fill(p);
|
||||
}
|
||||
|
||||
if (HColors.isTransparent(param.getColor()) == false) {
|
||||
g2d.setColor(mapper.toColor(param.getColor()));
|
||||
if (param.getColor().isTransparent() == false) {
|
||||
g2d.setColor(param.getColor().toColor(mapper));
|
||||
g2d.draw(p);
|
||||
}
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
public class DriverPixelG2d implements UDriver<UPixel, Graphics2D> {
|
||||
|
||||
public void draw(UPixel pixel, double x, double y, ColorMapper mapper, UParam param, Graphics2D g2d) {
|
||||
g2d.setColor(mapper.toColor(param.getColor()));
|
||||
g2d.setColor(param.getColor().toColor(mapper));
|
||||
g2d.fillRect((int) x, (int) y, 1, 1);
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,6 @@ import net.sourceforge.plantuml.ugraphic.UPolygon;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorGradient;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverPolygonG2d extends DriverShadowedG2d implements UDriver<UPolygon, Graphics2D> {
|
||||
|
||||
@ -84,7 +83,7 @@ public class DriverPolygonG2d extends DriverShadowedG2d implements UDriver<UPoly
|
||||
path.closePath();
|
||||
|
||||
if (shape.getDeltaShadow() != 0)
|
||||
if (HColors.isTransparent(back))
|
||||
if (back.isTransparent())
|
||||
drawOnlyLineShadowSpecial(g2d, path, shape.getDeltaShadow(), dpiFactor);
|
||||
else
|
||||
drawShadow(g2d, path, shape.getDeltaShadow(), dpiFactor);
|
||||
@ -95,31 +94,31 @@ public class DriverPolygonG2d extends DriverShadowedG2d implements UDriver<UPoly
|
||||
final GradientPaint paint;
|
||||
if (policy == '|')
|
||||
paint = new GradientPaint((float) x, (float) (y + shape.getHeight()) / 2,
|
||||
mapper.toColor(gr.getColor1()), (float) (x + shape.getWidth()),
|
||||
(float) (y + shape.getHeight()) / 2, mapper.toColor(gr.getColor2()));
|
||||
gr.getColor1().toColor(mapper), (float) (x + shape.getWidth()),
|
||||
(float) (y + shape.getHeight()) / 2, gr.getColor2().toColor(mapper));
|
||||
else if (policy == '\\')
|
||||
paint = new GradientPaint((float) x, (float) (y + shape.getHeight()), mapper.toColor(gr.getColor1()),
|
||||
(float) (x + shape.getWidth()), (float) y, mapper.toColor(gr.getColor2()));
|
||||
paint = new GradientPaint((float) x, (float) (y + shape.getHeight()), gr.getColor1().toColor(mapper),
|
||||
(float) (x + shape.getWidth()), (float) y, gr.getColor2().toColor(mapper));
|
||||
else if (policy == '-')
|
||||
paint = new GradientPaint((float) (x + shape.getWidth()) / 2, (float) y, mapper.toColor(gr.getColor1()),
|
||||
paint = new GradientPaint((float) (x + shape.getWidth()) / 2, (float) y, gr.getColor1().toColor(mapper),
|
||||
(float) (x + shape.getWidth()) / 2, (float) (y + shape.getHeight()),
|
||||
mapper.toColor(gr.getColor2()));
|
||||
gr.getColor2().toColor(mapper));
|
||||
else
|
||||
// for /
|
||||
paint = new GradientPaint((float) x, (float) y, mapper.toColor(gr.getColor1()),
|
||||
paint = new GradientPaint((float) x, (float) y, gr.getColor1().toColor(mapper),
|
||||
(float) (x + shape.getWidth()), (float) (y + shape.getHeight()),
|
||||
mapper.toColor(gr.getColor2()));
|
||||
gr.getColor2().toColor(mapper));
|
||||
|
||||
g2d.setPaint(paint);
|
||||
g2d.fill(path);
|
||||
} else if (HColors.isTransparent(back) == false) {
|
||||
g2d.setColor(mapper.toColor(back));
|
||||
} else if (back.isTransparent() == false) {
|
||||
g2d.setColor(back.toColor(mapper));
|
||||
DriverRectangleG2d.managePattern(param, g2d);
|
||||
g2d.fill(path);
|
||||
}
|
||||
|
||||
if (HColors.isTransparent(param.getColor()) == false) {
|
||||
g2d.setColor(mapper.toColor(param.getColor()));
|
||||
if (param.getColor().isTransparent() == false) {
|
||||
g2d.setColor(param.getColor().toColor(mapper));
|
||||
DriverLineG2d.manageStroke(param, g2d);
|
||||
g2d.draw(path);
|
||||
}
|
||||
|
@ -55,7 +55,6 @@ import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorGradient;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorSimple;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverRectangleG2d extends DriverShadowedG2d implements UDriver<URectangle, Graphics2D> {
|
||||
|
||||
@ -84,7 +83,7 @@ public class DriverRectangleG2d extends DriverShadowedG2d implements UDriver<URe
|
||||
|
||||
// Shadow
|
||||
if (rect.getDeltaShadow() != 0) {
|
||||
if (HColors.isTransparent(back))
|
||||
if (back.isTransparent())
|
||||
drawOnlyLineShadowSpecial(g2d, shape, rect.getDeltaShadow(), dpiFactor);
|
||||
else
|
||||
drawShadow(g2d, shape, rect.getDeltaShadow(), dpiFactor);
|
||||
@ -100,8 +99,8 @@ public class DriverRectangleG2d extends DriverShadowedG2d implements UDriver<URe
|
||||
g2d.fill(shape);
|
||||
drawBorder(param, color, mapper, rect, shape, g2d, x, y);
|
||||
} else {
|
||||
if (HColors.isTransparent(param.getBackcolor()) == false) {
|
||||
g2d.setColor(mapper.toColor(param.getBackcolor()));
|
||||
if (param.getBackcolor().isTransparent() == false) {
|
||||
g2d.setColor(param.getBackcolor().toColor(mapper));
|
||||
DriverLineG2d.manageStroke(param, g2d);
|
||||
managePattern(param, g2d);
|
||||
g2d.fill(shape);
|
||||
@ -114,14 +113,14 @@ public class DriverRectangleG2d extends DriverShadowedG2d implements UDriver<URe
|
||||
|
||||
public static void drawBorder(UParam param, HColor color, ColorMapper mapper, UShapeSized sized, Shape shape,
|
||||
Graphics2D g2d, double x, double y) {
|
||||
if (HColors.isTransparent(color))
|
||||
if (color.isTransparent())
|
||||
return;
|
||||
|
||||
if (color instanceof HColorGradient) {
|
||||
final GradientPaint paint = getPaintGradient(x, y, mapper, sized.getWidth(), sized.getHeight(), color);
|
||||
g2d.setPaint(paint);
|
||||
} else {
|
||||
g2d.setColor(mapper.toColor(color));
|
||||
g2d.setColor(color.toColor(mapper));
|
||||
}
|
||||
DriverLineG2d.manageStroke(param, g2d);
|
||||
g2d.draw(shape);
|
||||
@ -133,18 +132,18 @@ public class DriverRectangleG2d extends DriverShadowedG2d implements UDriver<URe
|
||||
final char policy = gr.getPolicy();
|
||||
final GradientPaint paint;
|
||||
if (policy == '|')
|
||||
paint = new GradientPaint((float) x, (float) (y + height) / 2, mapper.toColor(gr.getColor1()),
|
||||
(float) (x + width), (float) (y + height) / 2, mapper.toColor(gr.getColor2()));
|
||||
paint = new GradientPaint((float) x, (float) (y + height) / 2, gr.getColor1().toColor(mapper),
|
||||
(float) (x + width), (float) (y + height) / 2, gr.getColor2().toColor(mapper));
|
||||
else if (policy == '\\')
|
||||
paint = new GradientPaint((float) x, (float) (y + height), mapper.toColor(gr.getColor1()),
|
||||
(float) (x + width), (float) y, mapper.toColor(gr.getColor2()));
|
||||
paint = new GradientPaint((float) x, (float) (y + height), gr.getColor1().toColor(mapper),
|
||||
(float) (x + width), (float) y, gr.getColor2().toColor(mapper));
|
||||
else if (policy == '-')
|
||||
paint = new GradientPaint((float) (x + width) / 2, (float) y, mapper.toColor(gr.getColor1()),
|
||||
(float) (x + width) / 2, (float) (y + height), mapper.toColor(gr.getColor2()));
|
||||
paint = new GradientPaint((float) (x + width) / 2, (float) y, gr.getColor1().toColor(mapper),
|
||||
(float) (x + width) / 2, (float) (y + height), gr.getColor2().toColor(mapper));
|
||||
else
|
||||
// for /
|
||||
paint = new GradientPaint((float) x, (float) y, mapper.toColor(gr.getColor1()), (float) (x + width),
|
||||
(float) (y + height), mapper.toColor(gr.getColor2()));
|
||||
paint = new GradientPaint((float) x, (float) y, gr.getColor1().toColor(mapper), (float) (x + width),
|
||||
(float) (y + height), gr.getColor2().toColor(mapper));
|
||||
|
||||
return paint;
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ public class DriverTextAsPathG2d implements UDriver<UText, Graphics2D> {
|
||||
final double width = dim.getWidth();
|
||||
|
||||
if (fontConfiguration.containsStyle(FontStyle.BACKCOLOR)) {
|
||||
final Color extended = mapper.toColor(fontConfiguration.getExtendedColor());
|
||||
final Color extended = fontConfiguration.getExtendedColor().toColor(mapper);
|
||||
if (extended != null) {
|
||||
g2d.setColor(extended);
|
||||
g2d.setBackground(extended);
|
||||
@ -98,7 +98,7 @@ public class DriverTextAsPathG2d implements UDriver<UText, Graphics2D> {
|
||||
visible.ensureVisible(x + width, y + 1.5);
|
||||
|
||||
g2d.setFont(font.getUnderlayingFont());
|
||||
g2d.setColor(mapper.toColor(fontConfiguration.getColor()));
|
||||
g2d.setColor(fontConfiguration.getColor().toColor(mapper));
|
||||
final TextLayout t = createTextLayout(font, shape.getText());
|
||||
g2d.translate(x, y);
|
||||
g2d.fill(t.getOutline(null));
|
||||
@ -107,7 +107,7 @@ public class DriverTextAsPathG2d implements UDriver<UText, Graphics2D> {
|
||||
if (fontConfiguration.containsStyle(FontStyle.UNDERLINE)) {
|
||||
final HColor extended = fontConfiguration.getExtendedColor();
|
||||
if (extended != null) {
|
||||
g2d.setColor(mapper.toColor(extended));
|
||||
g2d.setColor(extended.toColor(mapper));
|
||||
}
|
||||
final int ypos = (int) (y + 2.5);
|
||||
g2d.setStroke(new BasicStroke((float) 1));
|
||||
@ -118,7 +118,7 @@ public class DriverTextAsPathG2d implements UDriver<UText, Graphics2D> {
|
||||
final int ypos = (int) (y + 2.5) - 1;
|
||||
final HColor extended = fontConfiguration.getExtendedColor();
|
||||
if (extended != null) {
|
||||
g2d.setColor(mapper.toColor(extended));
|
||||
g2d.setColor(extended.toColor(mapper));
|
||||
}
|
||||
for (int i = (int) x; i < x + width - 5; i += 6) {
|
||||
g2d.drawLine(i, ypos - 0, i + 3, ypos + 1);
|
||||
@ -130,7 +130,7 @@ public class DriverTextAsPathG2d implements UDriver<UText, Graphics2D> {
|
||||
final int ypos = (int) (y - fm.getDescent() - 0.5);
|
||||
final HColor extended = fontConfiguration.getExtendedColor();
|
||||
if (extended != null) {
|
||||
g2d.setColor(mapper.toColor(extended));
|
||||
g2d.setColor(extended.toColor(mapper));
|
||||
}
|
||||
g2d.setStroke(new BasicStroke((float) 1.5));
|
||||
g2d.drawLine((int) x, ypos, (int) (x + width), ypos);
|
||||
|
@ -60,7 +60,6 @@ import net.sourceforge.plantuml.ugraphic.UText;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorGradient;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverTextG2d implements UDriver<UText, Graphics2D> {
|
||||
|
||||
@ -75,7 +74,7 @@ public class DriverTextG2d implements UDriver<UText, Graphics2D> {
|
||||
public void draw(UText shape, double x, double y, ColorMapper mapper, UParam param, Graphics2D g2d) {
|
||||
final FontConfiguration fontConfiguration = shape.getFontConfiguration();
|
||||
|
||||
if (HColors.isTransparent(fontConfiguration.getColor())) {
|
||||
if (fontConfiguration.getColor().isTransparent()) {
|
||||
return;
|
||||
}
|
||||
final String text = shape.getText();
|
||||
@ -103,7 +102,7 @@ public class DriverTextG2d implements UDriver<UText, Graphics2D> {
|
||||
if (orientation == 90) {
|
||||
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
g2d.setFont(font.getUnderlayingFont());
|
||||
g2d.setColor(mapper.toColor(fontConfiguration.getColor()));
|
||||
g2d.setColor(fontConfiguration.getColor().toColor(mapper));
|
||||
final AffineTransform orig = g2d.getTransform();
|
||||
g2d.translate(x, y);
|
||||
g2d.rotate(Math.PI / 2);
|
||||
@ -119,7 +118,7 @@ public class DriverTextG2d implements UDriver<UText, Graphics2D> {
|
||||
g2d.setPaint(paint);
|
||||
g2d.fill(area);
|
||||
} else {
|
||||
final Color backColor = mapper.toColor(extended);
|
||||
final Color backColor = extended.toColor(mapper);
|
||||
if (backColor != null) {
|
||||
g2d.setColor(backColor);
|
||||
g2d.setBackground(backColor);
|
||||
@ -132,12 +131,12 @@ public class DriverTextG2d implements UDriver<UText, Graphics2D> {
|
||||
|
||||
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
g2d.setFont(font.getUnderlayingFont());
|
||||
g2d.setColor(mapper.toColor(fontConfiguration.getColor()));
|
||||
g2d.setColor(fontConfiguration.getColor().toColor(mapper));
|
||||
g2d.drawString(text, (float) x, (float) y);
|
||||
|
||||
if (fontConfiguration.containsStyle(FontStyle.UNDERLINE)) {
|
||||
if (extended != null) {
|
||||
g2d.setColor(mapper.toColor(extended));
|
||||
g2d.setColor(extended.toColor(mapper));
|
||||
}
|
||||
final int ypos = (int) (y + 2.5);
|
||||
g2d.setStroke(new BasicStroke((float) 1));
|
||||
@ -147,7 +146,7 @@ public class DriverTextG2d implements UDriver<UText, Graphics2D> {
|
||||
if (fontConfiguration.containsStyle(FontStyle.WAVE)) {
|
||||
final int ypos = (int) (y + 2.5) - 1;
|
||||
if (extended != null) {
|
||||
g2d.setColor(mapper.toColor(extended));
|
||||
g2d.setColor(extended.toColor(mapper));
|
||||
}
|
||||
for (int i = (int) x; i < x + width - 5; i += 6) {
|
||||
g2d.drawLine(i, ypos - 0, i + 3, ypos + 1);
|
||||
@ -158,7 +157,7 @@ public class DriverTextG2d implements UDriver<UText, Graphics2D> {
|
||||
final FontMetrics fm = g2d.getFontMetrics(font.getUnderlayingFont());
|
||||
final int ypos = (int) (y - fm.getDescent() - 0.5);
|
||||
if (extended != null) {
|
||||
g2d.setColor(mapper.toColor(extended));
|
||||
g2d.setColor(extended.toColor(mapper));
|
||||
}
|
||||
g2d.setStroke(new BasicStroke((float) 1.5));
|
||||
g2d.drawLine((int) x, ypos, (int) (x + width), ypos);
|
||||
|
@ -67,7 +67,7 @@ public class DriverLineHtml5 implements UDriver<ULine, Html5Drawer> {
|
||||
y2 = line.y2;
|
||||
}
|
||||
|
||||
final String color = param.getColor() == null ? null : mapper.toRGB(param.getColor());
|
||||
final String color = param.getColor() == null ? null : param.getColor().toRGB(mapper);
|
||||
html.setStrokeColor(color);
|
||||
|
||||
html.htmlLine(x, y, x2, y2, 0);
|
||||
|
@ -79,8 +79,8 @@ public class DriverRectangleHtml5 implements UDriver<URectangle, Html5Drawer> {
|
||||
// eps.setStrokeColor(mapper.getMappedColor(param.getColor()));
|
||||
// eps.epsRectangle(x, y, width, height, rx / 2, ry / 2, (HtmlColorGradient) back, mapper);
|
||||
} else {
|
||||
final String color = param.getColor() == null ? null : mapper.toRGB(param.getColor());
|
||||
final String backcolor = param.getColor() == null ? null : mapper.toRGB(param.getBackcolor());
|
||||
final String color = param.getColor() == null ? null : param.getColor().toRGB(mapper);
|
||||
final String backcolor = param.getColor() == null ? null : param.getBackcolor().toRGB(mapper);
|
||||
|
||||
html.setStrokeColor(color);
|
||||
html.setFillColor(backcolor);
|
||||
|
@ -62,9 +62,9 @@ public class DriverCenteredCharacterSvg implements UDriver<UCenteredCharacter, S
|
||||
final HColor textColor = param.getColor();
|
||||
final HColor dark = textColor == null ? null : textColor.darkSchemeTheme();
|
||||
if (dark == textColor)
|
||||
svg.setFillColor(mapper.toSvg(textColor));
|
||||
svg.setFillColor(textColor.toSvg(mapper));
|
||||
else
|
||||
svg.setFillColor(mapper.toSvg(textColor), mapper.toSvg(dark));
|
||||
svg.setFillColor(textColor.toSvg(mapper), dark.toSvg(mapper));
|
||||
|
||||
svg.drawPathIterator(xpos, ypos, t.getOutline(null).getPathIterator(null));
|
||||
}
|
||||
|
@ -40,14 +40,13 @@ import net.sourceforge.plantuml.svg.SvgGraphics;
|
||||
import net.sourceforge.plantuml.ugraphic.UDriver;
|
||||
import net.sourceforge.plantuml.ugraphic.UParam;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverDotPathSvg implements UDriver<DotPath, SvgGraphics> {
|
||||
|
||||
public void draw(DotPath shape, double x, double y, ColorMapper mapper, UParam param, SvgGraphics svg) {
|
||||
// DriverLineG2d.manageStroke(param, g2d);
|
||||
|
||||
if (HColors.isTransparent(param.getColor()) == false) {
|
||||
if (param.getColor().isTransparent() == false) {
|
||||
DriverRectangleSvg.applyStrokeColor(svg, mapper, param);
|
||||
|
||||
svg.setFillColor(null);
|
||||
|
@ -78,13 +78,13 @@ public class DriverLineSvg implements UDriver<ULine, SvgGraphics> {
|
||||
final HColor color = param.getColor();
|
||||
if (color instanceof HColorGradient) {
|
||||
final HColorGradient gr = (HColorGradient) color;
|
||||
svg.setStrokeColor(mapper.toSvg(gr.getColor1()));
|
||||
svg.setStrokeColor(gr.getColor1().toSvg(mapper));
|
||||
} else {
|
||||
final HColor dark = color == null ? null : color.darkSchemeTheme();
|
||||
if (dark == color)
|
||||
svg.setStrokeColor(mapper.toSvg(color));
|
||||
svg.setStrokeColor(color.toSvg(mapper));
|
||||
else
|
||||
svg.setStrokeColor(mapper.toSvg(color), mapper.toSvg(dark));
|
||||
svg.setStrokeColor(color.toSvg(mapper), dark.toSvg(mapper));
|
||||
}
|
||||
svg.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDasharraySvg());
|
||||
svg.svgLine(x, y, x2, y2, shape.getDeltaShadow());
|
||||
|
@ -61,9 +61,9 @@ public class DriverPathSvg extends DriverShadowedG2d implements UDriver<UPath, S
|
||||
final HColor color = param.getColor();
|
||||
final HColor dark = color == null ? null : color.darkSchemeTheme();
|
||||
if (dark == color)
|
||||
svg.setFillColor(mapper.toSvg(color));
|
||||
svg.setFillColor(color.toSvg(mapper));
|
||||
else
|
||||
svg.setFillColor(mapper.toSvg(color), mapper.toSvg(dark));
|
||||
svg.setFillColor(color.toSvg(mapper), dark.toSvg(mapper));
|
||||
svg.setStrokeColor("");
|
||||
svg.setStrokeWidth(0, "");
|
||||
} else {
|
||||
|
@ -48,9 +48,9 @@ public class DriverPixelSvg implements UDriver<UPixel, SvgGraphics> {
|
||||
final HColor color = param.getColor();
|
||||
if (color instanceof HColorGradient) {
|
||||
final HColorGradient gr = (HColorGradient) color;
|
||||
svg.setStrokeColor(mapper.toSvg(gr.getColor1()));
|
||||
svg.setStrokeColor(gr.getColor1().toSvg(mapper));
|
||||
} else {
|
||||
svg.setStrokeColor(mapper.toSvg(color));
|
||||
svg.setStrokeColor(color.toSvg(mapper));
|
||||
}
|
||||
svg.setStrokeWidth(0.5, "");
|
||||
|
||||
|
@ -84,15 +84,15 @@ public class DriverRectangleSvg implements UDriver<URectangle, SvgGraphics> {
|
||||
final HColor background = param.getBackcolor();
|
||||
if (background instanceof HColorGradient) {
|
||||
final HColorGradient gr = (HColorGradient) background;
|
||||
final String id = svg.createSvgGradient(mapper.toRGB(gr.getColor1()), mapper.toRGB(gr.getColor2()),
|
||||
final String id = svg.createSvgGradient(gr.getColor1().toRGB(mapper), gr.getColor2().toRGB(mapper),
|
||||
gr.getPolicy());
|
||||
svg.setFillColor("url(#" + id + ")");
|
||||
} else {
|
||||
final HColor dark = background == null ? null : background.darkSchemeTheme();
|
||||
if (dark == background)
|
||||
svg.setFillColor(mapper.toSvg(background));
|
||||
svg.setFillColor(background.toSvg(mapper));
|
||||
else
|
||||
svg.setFillColor(mapper.toSvg(background), mapper.toSvg(dark));
|
||||
svg.setFillColor(background.toSvg(mapper), dark.toSvg(mapper));
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,15 +100,15 @@ public class DriverRectangleSvg implements UDriver<URectangle, SvgGraphics> {
|
||||
final HColor color = param.getColor();
|
||||
if (color instanceof HColorGradient) {
|
||||
final HColorGradient gr = (HColorGradient) color;
|
||||
final String id = svg.createSvgGradient(mapper.toRGB(gr.getColor1()), mapper.toRGB(gr.getColor2()),
|
||||
final String id = svg.createSvgGradient(gr.getColor1().toRGB(mapper), gr.getColor2().toRGB(mapper),
|
||||
gr.getPolicy());
|
||||
svg.setStrokeColor("url(#" + id + ")");
|
||||
} else {
|
||||
final HColor dark = color == null ? null : color.darkSchemeTheme();
|
||||
if (dark == color)
|
||||
svg.setStrokeColor(mapper.toSvg(color));
|
||||
svg.setStrokeColor(color.toSvg(mapper));
|
||||
else
|
||||
svg.setStrokeColor(mapper.toSvg(color), mapper.toSvg(dark));
|
||||
svg.setStrokeColor(color.toSvg(mapper), dark.toSvg(mapper));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -50,7 +50,6 @@ import net.sourceforge.plantuml.ugraphic.UText;
|
||||
import net.sourceforge.plantuml.ugraphic.color.ColorMapper;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColorGradient;
|
||||
import net.sourceforge.plantuml.ugraphic.color.HColors;
|
||||
|
||||
public class DriverTextSvg implements UDriver<UText, SvgGraphics> {
|
||||
|
||||
@ -69,7 +68,7 @@ public class DriverTextSvg implements UDriver<UText, SvgGraphics> {
|
||||
}
|
||||
|
||||
final FontConfiguration fontConfiguration = shape.getFontConfiguration();
|
||||
if (HColors.isTransparent(fontConfiguration.getColor())) {
|
||||
if (fontConfiguration.getColor().isTransparent()) {
|
||||
return;
|
||||
}
|
||||
final UFont font = fontConfiguration.getFont();
|
||||
@ -114,7 +113,7 @@ public class DriverTextSvg implements UDriver<UText, SvgGraphics> {
|
||||
final HColor back = fontConfiguration.getExtendedColor();
|
||||
if (back instanceof HColorGradient) {
|
||||
final HColorGradient gr = (HColorGradient) back;
|
||||
final String id = svg.createSvgGradient(mapper.toRGB(gr.getColor1()), mapper.toRGB(gr.getColor2()),
|
||||
final String id = svg.createSvgGradient(gr.getColor1().toRGB(mapper), gr.getColor2().toRGB(mapper),
|
||||
gr.getPolicy());
|
||||
svg.setFillColor("url(#" + id + ")");
|
||||
svg.setStrokeColor(null);
|
||||
@ -122,16 +121,16 @@ public class DriverTextSvg implements UDriver<UText, SvgGraphics> {
|
||||
svg.svgRectangle(x, y - height + deltaPatch, width, height, 0, 0, 0, null, null);
|
||||
|
||||
} else {
|
||||
backColor = mapper.toRGB(back);
|
||||
backColor = back.toRGB(mapper);
|
||||
}
|
||||
}
|
||||
|
||||
final HColor textColor = fontConfiguration.getColor();
|
||||
final HColor dark = textColor == null ? null : textColor.darkSchemeTheme();
|
||||
if (dark == textColor)
|
||||
svg.setFillColor(mapper.toSvg(textColor));
|
||||
svg.setFillColor(textColor.toSvg(mapper));
|
||||
else
|
||||
svg.setFillColor(mapper.toSvg(textColor), mapper.toSvg(dark));
|
||||
svg.setFillColor(textColor.toSvg(mapper), dark.toSvg(mapper));
|
||||
|
||||
svg.text(text, x, y, font.getFamily(UFontContext.SVG), font.getSize(), fontWeight, fontStyle, textDecoration,
|
||||
width, fontConfiguration.getAttributes(), backColor);
|
||||
|
@ -93,7 +93,7 @@ public class UGraphicSvg extends AbstractUGraphic<SvgGraphics> implements ClipCo
|
||||
boolean textAsPath, double scale, String linkTarget, String hover, long seed, String preserveAspectRatio,
|
||||
StringBounder stringBounder, LengthAdjust lengthAdjust, boolean interactive) {
|
||||
this(defaultBackground, minDim, colorMapper,
|
||||
new SvgGraphics(colorMapper.toSvg(defaultBackground), svgDimensionStyle, minDim, scale, hover, seed,
|
||||
new SvgGraphics(defaultBackground.toSvg(colorMapper), svgDimensionStyle, minDim, scale, hover, seed,
|
||||
preserveAspectRatio, lengthAdjust, DarkStrategy.IGNORE_DARK_COLOR, interactive),
|
||||
textAsPath, linkTarget, stringBounder, interactive);
|
||||
if (defaultBackground instanceof HColorGradient) {
|
||||
|
@ -81,7 +81,7 @@ public class Version {
|
||||
}
|
||||
|
||||
public static int beta() {
|
||||
final int beta = 6;
|
||||
final int beta = 7;
|
||||
return beta;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user