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
|
// if there was an exception, return the complete raw text as a fragment
|
||||||
fragment = new TextFragment(sizer, font, text);
|
fragment = new TextFragment(sizer, font, text);
|
||||||
}
|
}
|
||||||
fragment.dx += font.getSize() / 10;
|
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +131,7 @@ public final class GraphicsFormatter {
|
|||||||
* @param expression the expression
|
* @param expression the expression
|
||||||
* @return the fragment
|
* @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) {
|
if (expression instanceof Variable) {
|
||||||
String ident = ((Variable) expression).getIdentifier();
|
String ident = ((Variable) expression).getIdentifier();
|
||||||
return createFragment(sizer, font, ident);
|
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.analyse.expression.Expression;
|
||||||
import de.neemann.digital.draw.graphics.text.formatter.GraphicsFormatter;
|
import de.neemann.digital.draw.graphics.text.formatter.GraphicsFormatter;
|
||||||
|
import sun.font.FontDesignMetrics;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.awt.font.FontRenderContext;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import static de.neemann.digital.draw.graphics.text.formatter.GraphicsFormatter.createFragment;
|
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 {
|
public class ExpressionComponent extends JComponent {
|
||||||
private static final int XPAD = 5;
|
private static final int XPAD = 5;
|
||||||
private ArrayList<Expression> expressions;
|
private ArrayList<Expression> expressions;
|
||||||
private Dimension lastRectSet;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a single expression to visualize
|
* Sets a single expression to visualize
|
||||||
@ -29,7 +31,7 @@ public class ExpressionComponent extends JComponent {
|
|||||||
* @param expression the expression
|
* @param expression the expression
|
||||||
*/
|
*/
|
||||||
public void setExpression(Expression expression) {
|
public void setExpression(Expression expression) {
|
||||||
ArrayList<Expression> l = new ArrayList<Expression>();
|
ArrayList<Expression> l = new ArrayList<>();
|
||||||
l.add(expression);
|
l.add(expression);
|
||||||
setExpressions(l);
|
setExpressions(l);
|
||||||
}
|
}
|
||||||
@ -41,6 +43,7 @@ public class ExpressionComponent extends JComponent {
|
|||||||
*/
|
*/
|
||||||
public void setExpressions(ArrayList<Expression> expressions) {
|
public void setExpressions(ArrayList<Expression> expressions) {
|
||||||
this.expressions = expressions;
|
this.expressions = expressions;
|
||||||
|
setPreferredSize(calcSize());
|
||||||
revalidate();
|
revalidate();
|
||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
@ -59,13 +62,33 @@ public class ExpressionComponent extends JComponent {
|
|||||||
gr.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
gr.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||||
int lineSpacing = getFont().getSize() / 2;
|
int lineSpacing = getFont().getSize() / 2;
|
||||||
int y = 0;
|
int y = 0;
|
||||||
int dx = 0;
|
|
||||||
for (Expression e : expressions) {
|
for (Expression e : expressions) {
|
||||||
try {
|
try {
|
||||||
GraphicsFormatter.Fragment fr = createFragment(gr, e);
|
GraphicsFormatter.Fragment fr = createFragment(gr, e);
|
||||||
y += fr.getHeight();
|
y += fr.getHeight();
|
||||||
fr.draw(gr, XPAD, y);
|
fr.draw(gr, XPAD, y);
|
||||||
y += lineSpacing;
|
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())
|
if (dx < fr.getWidth())
|
||||||
dx = fr.getWidth();
|
dx = fr.getWidth();
|
||||||
@ -73,14 +96,7 @@ public class ExpressionComponent extends JComponent {
|
|||||||
} catch (GraphicsFormatter.FormatterException ex) {
|
} catch (GraphicsFormatter.FormatterException ex) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return new Dimension(dx + XPAD * 2, y);
|
||||||
Dimension p = new Dimension(dx+XPAD*2, y);
|
|
||||||
if (!p.equals(lastRectSet)) {
|
|
||||||
lastRectSet = p;
|
|
||||||
SwingUtilities.invokeLater(() -> {
|
|
||||||
setPreferredSize(p);
|
|
||||||
revalidate();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -25,4 +25,15 @@ public class GraphicsFormatterTest extends TestCase {
|
|||||||
assertTrue(f instanceof GraphicsFormatter.TextFragment);
|
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