d6c849a824
Support Unicode Variation Selectors Reviewed-by: prr, srl
66 lines
2.6 KiB
Java
66 lines
2.6 KiB
Java
/* @test
|
|
* @summary Verify two identical 'a's are rendered
|
|
* @bug 8187100
|
|
* @ignore Requires a special font installed.
|
|
*/
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JComponent;
|
|
import javax.swing.SwingUtilities;
|
|
import javax.swing.WindowConstants;
|
|
import java.awt.Font;
|
|
import java.awt.Graphics;
|
|
import java.awt.Graphics2D;
|
|
import java.awt.font.FontRenderContext;
|
|
import java.awt.font.GlyphVector;
|
|
|
|
public class VariationSelectorTest {
|
|
// A font supporting Unicode variation selectors is required
|
|
// At least DejaVu 2.20 from 2007
|
|
private static final Font FONT = new Font("DejaVu Sans", Font.PLAIN, 12);
|
|
|
|
public static void main(String[] args) {
|
|
final String fontName = FONT.getFontName();
|
|
if (!fontName.equals("DejaVuSans")) {
|
|
System.err.println("*** Warning: Font DejaVuSans not installed.");
|
|
System.err.println("*** Using font: " + fontName);
|
|
}
|
|
SwingUtilities.invokeLater(() -> {
|
|
JFrame frame = new JFrame();
|
|
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
|
frame.add(new MyComponent());
|
|
frame.setSize(200, 200);
|
|
frame.setVisible(true);
|
|
frame.setLocationRelativeTo(null);
|
|
});
|
|
}
|
|
|
|
private static class MyComponent extends JComponent {
|
|
@Override
|
|
protected void paintComponent(Graphics g) {
|
|
Graphics2D g2d = (Graphics2D) g;
|
|
FontRenderContext frc = g2d.getFontRenderContext();
|
|
String text = "a";
|
|
GlyphVector gv = FONT.layoutGlyphVector(
|
|
frc, text.toCharArray(), 0, text.length(),
|
|
Font.LAYOUT_LEFT_TO_RIGHT);
|
|
System.out.println("'a'=" + gv.getNumGlyphs());
|
|
g2d.drawString("=" + gv.getNumGlyphs() + " ('a')", 100, 50);
|
|
g2d.drawGlyphVector(gv, 80, 50);
|
|
String text2 = "a\ufe00";
|
|
GlyphVector gv2 = FONT.layoutGlyphVector(
|
|
frc, text2.toCharArray(), 0, text2.length(),
|
|
Font.LAYOUT_LEFT_TO_RIGHT);
|
|
g2d.drawGlyphVector(gv2, 80, 100);
|
|
System.out.println("'a'+VS=" + gv2.getNumGlyphs());
|
|
g2d.drawString("=" + gv2.getNumGlyphs() + " ('a'+VS)", 100, 100);
|
|
if ((gv.getNumGlyphs() == 1) && (gv2.getNumGlyphs() == 1)) {
|
|
System.out.println("PASS");
|
|
g2d.drawString("PASS", 10, 15);
|
|
} else {
|
|
System.err.println("FAIL");
|
|
g2d.drawString("FAIL", 10, 15);
|
|
}
|
|
}
|
|
}
|
|
}
|