1
0
mirror of https://github.com/octoleo/plantuml.git synced 2025-04-10 12:11:50 +00:00

Pass a StringBounder into DriverTextG2d & DriverTextAsPathG2d

This commit is contained in:
matthew16550 2021-10-03 05:39:53 +11:00
parent 102a7ccf64
commit 102d67271c
3 changed files with 19 additions and 18 deletions

View File

@ -48,7 +48,6 @@ import java.awt.geom.Rectangle2D;
import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.Dimension2DDouble;
import net.sourceforge.plantuml.EnsureVisible; import net.sourceforge.plantuml.EnsureVisible;
import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.Log; import net.sourceforge.plantuml.Log;
import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.FontConfiguration;
import net.sourceforge.plantuml.graphic.FontStyle; import net.sourceforge.plantuml.graphic.FontStyle;
@ -64,9 +63,11 @@ import net.sourceforge.plantuml.ugraphic.color.HColor;
public class DriverTextAsPathG2d implements UDriver<Graphics2D> { public class DriverTextAsPathG2d implements UDriver<Graphics2D> {
private final EnsureVisible visible; private final EnsureVisible visible;
private final StringBounder stringBounder;
public DriverTextAsPathG2d(EnsureVisible visible) { public DriverTextAsPathG2d(EnsureVisible visible, StringBounder stringBounder) {
this.visible = visible; this.visible = visible;
this.stringBounder = stringBounder;
} }
private static void printFont() { private static void printFont() {
@ -83,7 +84,7 @@ public class DriverTextAsPathG2d implements UDriver<Graphics2D> {
final FontConfiguration fontConfiguration = shape.getFontConfiguration(); final FontConfiguration fontConfiguration = shape.getFontConfiguration();
final UFont font = fontConfiguration.getFont().scaled(param.getScale()); final UFont font = fontConfiguration.getFont().scaled(param.getScale());
final Dimension2D dimBack = calculateDimension(FileFormat.PNG.getDefaultStringBounder(), font, shape.getText()); final Dimension2D dimBack = calculateDimension(font, shape.getText());
if (fontConfiguration.containsStyle(FontStyle.BACKCOLOR)) { if (fontConfiguration.containsStyle(FontStyle.BACKCOLOR)) {
final Color extended = mapper.toColor(fontConfiguration.getExtendedColor()); final Color extended = mapper.toColor(fontConfiguration.getExtendedColor());
if (extended != null) { if (extended != null) {
@ -108,14 +109,14 @@ public class DriverTextAsPathG2d implements UDriver<Graphics2D> {
if (extended != null) { if (extended != null) {
g2d.setColor(mapper.toColor(extended)); g2d.setColor(mapper.toColor(extended));
} }
final Dimension2D dim = calculateDimension(FileFormat.PNG.getDefaultStringBounder(), font, shape.getText()); final Dimension2D dim = calculateDimension(font, shape.getText());
final int ypos = (int) (y + 2.5); final int ypos = (int) (y + 2.5);
g2d.setStroke(new BasicStroke((float) 1)); g2d.setStroke(new BasicStroke((float) 1));
g2d.drawLine((int) x, ypos, (int) (x + dim.getWidth()), ypos); g2d.drawLine((int) x, ypos, (int) (x + dim.getWidth()), ypos);
g2d.setStroke(new BasicStroke()); g2d.setStroke(new BasicStroke());
} }
if (fontConfiguration.containsStyle(FontStyle.WAVE)) { if (fontConfiguration.containsStyle(FontStyle.WAVE)) {
final Dimension2D dim = calculateDimension(FileFormat.PNG.getDefaultStringBounder(), font, shape.getText()); final Dimension2D dim = calculateDimension(font, shape.getText());
final int ypos = (int) (y + 2.5) - 1; final int ypos = (int) (y + 2.5) - 1;
final HColor extended = fontConfiguration.getExtendedColor(); final HColor extended = fontConfiguration.getExtendedColor();
if (extended != null) { if (extended != null) {
@ -127,7 +128,7 @@ public class DriverTextAsPathG2d implements UDriver<Graphics2D> {
} }
} }
if (fontConfiguration.containsStyle(FontStyle.STRIKE)) { if (fontConfiguration.containsStyle(FontStyle.STRIKE)) {
final Dimension2D dim = calculateDimension(FileFormat.PNG.getDefaultStringBounder(), font, shape.getText()); final Dimension2D dim = calculateDimension(font, shape.getText());
final FontMetrics fm = g2d.getFontMetrics(font.getUnderlayingFont()); final FontMetrics fm = g2d.getFontMetrics(font.getUnderlayingFont());
final int ypos = (int) (y - fm.getDescent() - 0.5); final int ypos = (int) (y - fm.getDescent() - 0.5);
final HColor extended = fontConfiguration.getExtendedColor(); final HColor extended = fontConfiguration.getExtendedColor();
@ -140,7 +141,7 @@ public class DriverTextAsPathG2d implements UDriver<Graphics2D> {
} }
} }
static public Dimension2D calculateDimension(StringBounder stringBounder, UFont font, String text) { public Dimension2D calculateDimension(UFont font, String text) {
final Dimension2D rect = stringBounder.calculateDimension(font, text); final Dimension2D rect = stringBounder.calculateDimension(font, text);
double h = rect.getHeight(); double h = rect.getHeight();
if (h < 10) { if (h < 10) {

View File

@ -48,7 +48,6 @@ import java.util.List;
import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.Dimension2DDouble;
import net.sourceforge.plantuml.EnsureVisible; import net.sourceforge.plantuml.EnsureVisible;
import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.FontConfiguration;
import net.sourceforge.plantuml.graphic.FontStyle; import net.sourceforge.plantuml.graphic.FontStyle;
import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.StringBounder;
@ -66,9 +65,11 @@ import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
public class DriverTextG2d implements UDriver<Graphics2D> { public class DriverTextG2d implements UDriver<Graphics2D> {
private final EnsureVisible visible; private final EnsureVisible visible;
private final StringBounder stringBounder;
public DriverTextG2d(EnsureVisible visible) { public DriverTextG2d(EnsureVisible visible, StringBounder stringBounder) {
this.visible = visible; this.visible = visible;
this.stringBounder = stringBounder;
} }
public void draw(UShape ushape, double x, double y, ColorMapper mapper, UParam param, Graphics2D g2d) { public void draw(UShape ushape, double x, double y, ColorMapper mapper, UParam param, Graphics2D g2d) {
@ -87,8 +88,7 @@ public class DriverTextG2d implements UDriver<Graphics2D> {
for (StyledString styledString : strings) { for (StyledString styledString : strings) {
final FontConfiguration fc = styledString.getStyle() == FontStyle.BOLD ? fontConfiguration.bold() final FontConfiguration fc = styledString.getStyle() == FontStyle.BOLD ? fontConfiguration.bold()
: fontConfiguration; : fontConfiguration;
final Dimension2D dim = calculateDimension(FileFormat.PNG.getDefaultStringBounder(), fc.getFont(), final Dimension2D dim = calculateDimension(fc.getFont(), styledString.getText());
styledString.getText());
printSingleText(g2d, fc, styledString.getText(), x, y, mapper, param); printSingleText(g2d, fc, styledString.getText(), x, y, mapper, param);
x += dim.getWidth(); x += dim.getWidth();
} }
@ -113,7 +113,7 @@ public class DriverTextG2d implements UDriver<Graphics2D> {
} else if (orientation == 0) { } else if (orientation == 0) {
final Dimension2D dimBack = calculateDimension(FileFormat.PNG.getDefaultStringBounder(), font, text); final Dimension2D dimBack = calculateDimension(font, text);
if (fontConfiguration.containsStyle(FontStyle.BACKCOLOR)) { if (fontConfiguration.containsStyle(FontStyle.BACKCOLOR)) {
final Rectangle2D.Double area = new Rectangle2D.Double(x, y - dimBack.getHeight() + 1.5, final Rectangle2D.Double area = new Rectangle2D.Double(x, y - dimBack.getHeight() + 1.5,
dimBack.getWidth(), dimBack.getHeight()); dimBack.getWidth(), dimBack.getHeight());
@ -143,14 +143,14 @@ public class DriverTextG2d implements UDriver<Graphics2D> {
if (extended != null) { if (extended != null) {
g2d.setColor(mapper.toColor(extended)); g2d.setColor(mapper.toColor(extended));
} }
final Dimension2D dim = calculateDimension(FileFormat.PNG.getDefaultStringBounder(), font, text); final Dimension2D dim = calculateDimension(font, text);
final int ypos = (int) (y + 2.5); final int ypos = (int) (y + 2.5);
g2d.setStroke(new BasicStroke((float) 1)); g2d.setStroke(new BasicStroke((float) 1));
g2d.drawLine((int) x, ypos, (int) (x + dim.getWidth()), ypos); g2d.drawLine((int) x, ypos, (int) (x + dim.getWidth()), ypos);
g2d.setStroke(new BasicStroke()); g2d.setStroke(new BasicStroke());
} }
if (fontConfiguration.containsStyle(FontStyle.WAVE)) { if (fontConfiguration.containsStyle(FontStyle.WAVE)) {
final Dimension2D dim = calculateDimension(FileFormat.PNG.getDefaultStringBounder(), font, text); final Dimension2D dim = calculateDimension(font, text);
final int ypos = (int) (y + 2.5) - 1; final int ypos = (int) (y + 2.5) - 1;
if (extended != null) { if (extended != null) {
g2d.setColor(mapper.toColor(extended)); g2d.setColor(mapper.toColor(extended));
@ -161,7 +161,7 @@ public class DriverTextG2d implements UDriver<Graphics2D> {
} }
} }
if (fontConfiguration.containsStyle(FontStyle.STRIKE)) { if (fontConfiguration.containsStyle(FontStyle.STRIKE)) {
final Dimension2D dim = calculateDimension(FileFormat.PNG.getDefaultStringBounder(), font, text); final Dimension2D dim = calculateDimension(font, text);
final FontMetrics fm = g2d.getFontMetrics(font.getUnderlayingFont()); final FontMetrics fm = g2d.getFontMetrics(font.getUnderlayingFont());
final int ypos = (int) (y - fm.getDescent() - 0.5); final int ypos = (int) (y - fm.getDescent() - 0.5);
if (extended != null) { if (extended != null) {
@ -174,7 +174,7 @@ public class DriverTextG2d implements UDriver<Graphics2D> {
} }
} }
static public Dimension2D calculateDimension(StringBounder stringBounder, UFont font, String text) { public Dimension2D calculateDimension(UFont font, String text) {
final Dimension2D rect = stringBounder.calculateDimension(font, text); final Dimension2D rect = stringBounder.calculateDimension(font, text);
double h = rect.getHeight(); double h = rect.getHeight();
if (h < 10) { if (h < 10) {

View File

@ -140,9 +140,9 @@ public class UGraphicG2d extends AbstractUGraphic<Graphics2D> implements EnsureV
private void register(double dpiFactor) { private void register(double dpiFactor) {
registerDriver(URectangle.class, new DriverRectangleG2d(dpiFactor, this)); registerDriver(URectangle.class, new DriverRectangleG2d(dpiFactor, this));
if (this.hasAffineTransform || dpiFactor != 1.0) { if (this.hasAffineTransform || dpiFactor != 1.0) {
registerDriver(UText.class, new DriverTextAsPathG2d(this)); registerDriver(UText.class, new DriverTextAsPathG2d(this, getStringBounder()));
} else { } else {
registerDriver(UText.class, new DriverTextG2d(this)); registerDriver(UText.class, new DriverTextG2d(this, getStringBounder()));
} }
registerDriver(ULine.class, new DriverLineG2d(dpiFactor)); registerDriver(ULine.class, new DriverLineG2d(dpiFactor));
registerDriver(UPixel.class, new DriverPixelG2d()); registerDriver(UPixel.class, new DriverPixelG2d());