Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/demo/share/jfc/J2Ddemo/java2d/demos/Fonts/AllFonts.java
41175 views
1
/*
2
*
3
* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
*
9
* - Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
*
12
* - Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* - Neither the name of Oracle nor the names of its
17
* contributors may be used to endorse or promote products derived
18
* from this software without specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*/
32
package java2d.demos.Fonts;
33
34
35
import static java.awt.Color.BLACK;
36
import static java.awt.Color.GRAY;
37
import static java.awt.Color.WHITE;
38
import java.awt.Component;
39
import java.awt.Dimension;
40
import java.awt.Font;
41
import java.awt.FontMetrics;
42
import java.awt.Graphics2D;
43
import java.awt.GraphicsEnvironment;
44
import java.awt.event.ActionEvent;
45
import java.awt.event.ActionListener;
46
import java.util.ArrayList;
47
import java.util.List;
48
import java2d.AnimatingControlsSurface;
49
import java2d.CustomControls;
50
import javax.swing.JMenu;
51
import javax.swing.JMenuBar;
52
import javax.swing.JMenuItem;
53
import javax.swing.JSlider;
54
import javax.swing.SwingConstants;
55
import javax.swing.border.EtchedBorder;
56
import javax.swing.event.ChangeEvent;
57
import javax.swing.event.ChangeListener;
58
59
60
/**
61
* Scrolling text of fonts returned from GraphicsEnvironment.getAllFonts().
62
*/
63
@SuppressWarnings("serial")
64
public class AllFonts extends AnimatingControlsSurface {
65
66
private static final List<Font> fonts = new ArrayList<Font>();
67
68
static {
69
GraphicsEnvironment ge =
70
GraphicsEnvironment.getLocalGraphicsEnvironment();
71
for (Font font : ge.getAllFonts()) {
72
if (font.canDisplayUpTo(font.getName()) != 0) {
73
fonts.add(font);
74
}
75
}
76
}
77
private int nStrs;
78
private int strH;
79
private int fi;
80
protected int fsize = 14;
81
protected List<Font> v = new ArrayList<Font>();
82
83
public AllFonts() {
84
setBackground(WHITE);
85
setSleepAmount(500);
86
setControls(new Component[] { new DemoControls(this) });
87
}
88
89
public void handleThread(int state) {
90
}
91
92
@Override
93
public void reset(int w, int h) {
94
v.clear();
95
Font f = fonts.get(0).deriveFont(Font.PLAIN, fsize);
96
FontMetrics fm = getFontMetrics(f);
97
strH = (fm.getAscent() + fm.getDescent());
98
nStrs = h / strH + 1;
99
fi = 0;
100
}
101
102
@Override
103
public void step(int w, int h) {
104
if (fi < fonts.size()) {
105
v.add(fonts.get(fi).deriveFont(Font.PLAIN, fsize));
106
}
107
if (v.size() == nStrs && !v.isEmpty() || fi > fonts.size()) {
108
v.remove(0);
109
}
110
fi = v.isEmpty() ? 0 : ++fi;
111
}
112
113
@Override
114
public void render(int w, int h, Graphics2D g2) {
115
116
g2.setColor(BLACK);
117
118
int yy = (fi >= fonts.size()) ? 0 : h - v.size() * strH - strH / 2;
119
120
for (int i = 0; i < v.size(); i++) {
121
Font f = v.get(i);
122
int sw = getFontMetrics(f).stringWidth(f.getName());
123
g2.setFont(f);
124
g2.drawString(f.getName(), (w / 2 - sw / 2), yy += strH);
125
}
126
}
127
128
public static void main(String[] argv) {
129
createDemoFrame(new AllFonts());
130
}
131
132
133
static class DemoControls extends CustomControls implements ActionListener,
134
ChangeListener {
135
136
AllFonts demo;
137
JSlider slider;
138
int[] fsize = { 8, 14, 18, 24 };
139
JMenuItem[] menuitem = new JMenuItem[fsize.length];
140
Font[] font = new Font[fsize.length];
141
142
@SuppressWarnings("LeakingThisInConstructor")
143
public DemoControls(AllFonts demo) {
144
this.demo = demo;
145
setBackground(GRAY);
146
147
int sleepAmount = (int) demo.getSleepAmount();
148
slider = new JSlider(SwingConstants.HORIZONTAL, 0, 999, sleepAmount);
149
slider.setBorder(new EtchedBorder());
150
slider.setPreferredSize(new Dimension(90, 22));
151
slider.addChangeListener(this);
152
add(slider);
153
JMenuBar menubar = new JMenuBar();
154
add(menubar);
155
JMenu menu = menubar.add(new JMenu("Font Size"));
156
for (int i = 0; i < fsize.length; i++) {
157
font[i] = new Font(Font.SERIF, Font.PLAIN, fsize[i]);
158
menuitem[i] = menu.add(new JMenuItem(String.valueOf(fsize[i])));
159
menuitem[i].setFont(font[i]);
160
menuitem[i].addActionListener(this);
161
}
162
}
163
164
@Override
165
public void actionPerformed(ActionEvent e) {
166
for (int i = 0; i < fsize.length; i++) {
167
if (e.getSource().equals(menuitem[i])) {
168
demo.fsize = fsize[i];
169
Dimension d = demo.getSize();
170
demo.reset(d.width, d.height);
171
break;
172
}
173
}
174
}
175
176
@Override
177
public void stateChanged(ChangeEvent e) {
178
demo.setSleepAmount(slider.getValue());
179
}
180
}
181
}
182
183