mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-16 08:25:09 -04:00
fixed some minor sizing issues
This commit is contained in:
parent
61a22aa057
commit
7702e8e785
@ -58,7 +58,6 @@ public final class GraphicsFormatter {
|
||||
// if there was an exception, return the complete raw text as a fragment
|
||||
fragment = new TextFragment(sizer, font, text);
|
||||
}
|
||||
fragment.dx += font.getSize() / 10;
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@ -132,7 +131,7 @@ public final class GraphicsFormatter {
|
||||
* @param expression the expression
|
||||
* @return the fragment
|
||||
*/
|
||||
private static Fragment createFragment(FontSizer sizer, Font font, Expression expression) throws FormatterException {
|
||||
public static Fragment createFragment(FontSizer sizer, Font font, Expression expression) throws FormatterException {
|
||||
if (expression instanceof Variable) {
|
||||
String ident = ((Variable) expression).getIdentifier();
|
||||
return createFragment(sizer, font, ident);
|
||||
|
@ -7,9 +7,13 @@ package de.neemann.digital.gui.components.table;
|
||||
|
||||
import de.neemann.digital.analyse.expression.Expression;
|
||||
import de.neemann.digital.draw.graphics.text.formatter.GraphicsFormatter;
|
||||
import sun.font.FontDesignMetrics;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.font.FontRenderContext;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static de.neemann.digital.draw.graphics.text.formatter.GraphicsFormatter.createFragment;
|
||||
@ -20,8 +24,6 @@ import static de.neemann.digital.draw.graphics.text.formatter.GraphicsFormatter.
|
||||
public class ExpressionComponent extends JComponent {
|
||||
private static final int XPAD = 5;
|
||||
private ArrayList<Expression> expressions;
|
||||
private Dimension lastRectSet;
|
||||
|
||||
|
||||
/**
|
||||
* Sets a single expression to visualize
|
||||
@ -29,7 +31,7 @@ public class ExpressionComponent extends JComponent {
|
||||
* @param expression the expression
|
||||
*/
|
||||
public void setExpression(Expression expression) {
|
||||
ArrayList<Expression> l = new ArrayList<Expression>();
|
||||
ArrayList<Expression> l = new ArrayList<>();
|
||||
l.add(expression);
|
||||
setExpressions(l);
|
||||
}
|
||||
@ -41,6 +43,7 @@ public class ExpressionComponent extends JComponent {
|
||||
*/
|
||||
public void setExpressions(ArrayList<Expression> expressions) {
|
||||
this.expressions = expressions;
|
||||
setPreferredSize(calcSize());
|
||||
revalidate();
|
||||
repaint();
|
||||
}
|
||||
@ -59,13 +62,33 @@ public class ExpressionComponent extends JComponent {
|
||||
gr.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
int lineSpacing = getFont().getSize() / 2;
|
||||
int y = 0;
|
||||
int dx = 0;
|
||||
for (Expression e : expressions) {
|
||||
try {
|
||||
GraphicsFormatter.Fragment fr = createFragment(gr, e);
|
||||
y += fr.getHeight();
|
||||
fr.draw(gr, XPAD, y);
|
||||
y += lineSpacing;
|
||||
} catch (GraphicsFormatter.FormatterException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Dimension calcSize() {
|
||||
FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, false);
|
||||
|
||||
int lineSpacing = getFont().getSize() / 2;
|
||||
int dx = 0;
|
||||
int y = 0;
|
||||
for (Expression e : expressions) {
|
||||
try {
|
||||
GraphicsFormatter.Fragment fr = createFragment((fragment, font, str) -> {
|
||||
Rectangle2D rec = font.getStringBounds(str, frc);
|
||||
final FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font, frc);
|
||||
fragment.set((int) rec.getWidth(), (int) rec.getHeight(), metrics.getDescent());
|
||||
}, getFont(), e);
|
||||
|
||||
y += fr.getHeight();
|
||||
y += lineSpacing;
|
||||
|
||||
if (dx < fr.getWidth())
|
||||
dx = fr.getWidth();
|
||||
@ -73,14 +96,7 @@ public class ExpressionComponent extends JComponent {
|
||||
} catch (GraphicsFormatter.FormatterException ex) {
|
||||
}
|
||||
}
|
||||
|
||||
Dimension p = new Dimension(dx+XPAD*2, y);
|
||||
if (!p.equals(lastRectSet)) {
|
||||
lastRectSet = p;
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
setPreferredSize(p);
|
||||
revalidate();
|
||||
});
|
||||
}
|
||||
return new Dimension(dx + XPAD * 2, y);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -25,4 +25,15 @@ public class GraphicsFormatterTest extends TestCase {
|
||||
assertTrue(f instanceof GraphicsFormatter.TextFragment);
|
||||
}
|
||||
|
||||
public void testInvert() {
|
||||
GraphicsFormatter.Fragment f = GraphicsFormatter.createFragment(
|
||||
(fragment, font, str) -> {
|
||||
assertEquals("Q", str);
|
||||
fragment.set(10, 10, 5);
|
||||
},
|
||||
Font.decode(null), "~{~Q}");
|
||||
|
||||
assertEquals(10, f.dx);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user