File: VariationSelectorTest.java

package info (click to toggle)
openjdk-11 11.0.4%2B11-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 757,028 kB
  • sloc: java: 5,016,041; xml: 1,191,974; cpp: 934,731; ansic: 555,697; sh: 24,299; objc: 12,703; python: 3,602; asm: 3,415; makefile: 2,772; awk: 351; sed: 172; perl: 114; jsp: 24; csh: 3
file content (65 lines) | stat: -rw-r--r-- 2,629 bytes parent folder | download | duplicates (16)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* @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);
            }
        }
    }
}