Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/demo/share/jfc/J2Ddemo/java2d/demos/Clipping/Text.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.Clipping;
33
34
35
import static java.awt.Color.BLACK;
36
import static java.awt.Color.BLUE;
37
import static java.awt.Color.CYAN;
38
import static java.awt.Color.GRAY;
39
import static java.awt.Color.RED;
40
import static java.awt.Color.WHITE;
41
import static java.awt.Color.YELLOW;
42
import java.awt.BasicStroke;
43
import java.awt.Component;
44
import java.awt.Dimension;
45
import java.awt.Font;
46
import java.awt.GradientPaint;
47
import java.awt.Graphics2D;
48
import java.awt.Image;
49
import java.awt.Rectangle;
50
import java.awt.Shape;
51
import java.awt.TexturePaint;
52
import java.awt.event.ActionEvent;
53
import java.awt.event.ActionListener;
54
import java.awt.font.FontRenderContext;
55
import java.awt.font.TextLayout;
56
import java.awt.geom.AffineTransform;
57
import java.awt.geom.Line2D;
58
import java.awt.image.BufferedImage;
59
import java2d.ControlsSurface;
60
import java2d.CustomControls;
61
import javax.swing.AbstractButton;
62
import javax.swing.JToggleButton;
63
import javax.swing.JToolBar;
64
65
66
/**
67
* Clipping an image, lines, text, texture and gradient with text.
68
*/
69
@SuppressWarnings("serial")
70
public class Text extends ControlsSurface {
71
72
/**
73
*
74
*/
75
static Image img;
76
static TexturePaint texturePaint;
77
78
static {
79
BufferedImage bi = new BufferedImage(5, 5, BufferedImage.TYPE_INT_RGB);
80
Graphics2D big = bi.createGraphics();
81
big.setBackground(YELLOW);
82
big.clearRect(0, 0, 5, 5);
83
big.setColor(RED);
84
big.fillRect(0, 0, 3, 3);
85
texturePaint = new TexturePaint(bi, new Rectangle(0, 0, 5, 5));
86
}
87
private String clipType = "Lines";
88
protected boolean doClip = true;
89
90
public Text() {
91
setBackground(WHITE);
92
img = getImage("clouds.jpg");
93
setControls(new Component[] { new DemoControls(this) });
94
}
95
96
@Override
97
public void render(int w, int h, Graphics2D g2) {
98
99
FontRenderContext frc = g2.getFontRenderContext();
100
Font f = new Font(Font.SANS_SERIF, Font.BOLD, 32);
101
String s = "JDK";
102
TextLayout tl = new TextLayout(s, f, frc);
103
double sw = tl.getBounds().getWidth();
104
double sh = tl.getBounds().getHeight();
105
double sx = (w - 40) / sw;
106
double sy = (h - 40) / sh;
107
AffineTransform Tx = AffineTransform.getScaleInstance(sx, sy);
108
Shape shape = tl.getOutline(Tx);
109
sw = shape.getBounds().getWidth();
110
sh = shape.getBounds().getHeight();
111
Tx =
112
AffineTransform.getTranslateInstance(w / 2 - sw / 2, h / 2 + sh
113
/ 2);
114
shape = Tx.createTransformedShape(shape);
115
Rectangle r = shape.getBounds();
116
117
if (doClip) {
118
g2.clip(shape);
119
}
120
121
if (clipType.equals("Lines")) {
122
g2.setColor(BLACK);
123
g2.fill(r);
124
g2.setColor(YELLOW);
125
g2.setStroke(new BasicStroke(1.5f));
126
for (int j = r.y; j < r.y + r.height; j = j + 3) {
127
Line2D line = new Line2D.Float(r.x, j,
128
(r.x + r.width), j);
129
g2.draw(line);
130
}
131
} else if (clipType.equals("Image")) {
132
g2.drawImage(img, r.x, r.y, r.width, r.height, null);
133
} else if (clipType.equals("TP")) {
134
g2.setPaint(texturePaint);
135
g2.fill(r);
136
} else if (clipType.equals("GP")) {
137
g2.setPaint(new GradientPaint(0, 0, BLUE, w, h, YELLOW));
138
g2.fill(r);
139
} else if (clipType.equals("Text")) {
140
g2.setColor(BLACK);
141
g2.fill(shape.getBounds());
142
g2.setColor(CYAN);
143
f = new Font(Font.SERIF, Font.BOLD, 10);
144
tl = new TextLayout("OpenJDK", f, frc);
145
sw = tl.getBounds().getWidth();
146
147
int x = r.x;
148
int y = (int) (r.y + tl.getAscent());
149
sh = r.y + r.height;
150
while (y < sh) {
151
tl.draw(g2, x, y);
152
if ((x += (int) sw) > (r.x + r.width)) {
153
x = r.x;
154
y += (int) tl.getAscent();
155
}
156
}
157
}
158
g2.setClip(new Rectangle(0, 0, w, h));
159
160
g2.setColor(GRAY);
161
g2.draw(shape);
162
}
163
164
public static void main(String[] s) {
165
createDemoFrame(new Text());
166
}
167
168
169
@SuppressWarnings("serial")
170
static final class DemoControls extends CustomControls implements
171
ActionListener {
172
173
Text demo;
174
JToolBar toolbar;
175
176
public DemoControls(Text demo) {
177
super(demo.name);
178
this.demo = demo;
179
add(toolbar = new JToolBar());
180
toolbar.setFloatable(false);
181
addTool("Clip", true);
182
addTool("Lines", true);
183
addTool("Image", false);
184
addTool("TP", false);
185
addTool("GP", false);
186
addTool("Text", false);
187
}
188
189
public void addTool(String str, boolean state) {
190
JToggleButton b =
191
(JToggleButton) toolbar.add(new JToggleButton(str));
192
b.setFocusPainted(false);
193
b.setSelected(state);
194
b.addActionListener(this);
195
int width = b.getPreferredSize().width;
196
Dimension prefSize = new Dimension(width, 21);
197
b.setPreferredSize(prefSize);
198
b.setMaximumSize(prefSize);
199
b.setMinimumSize(prefSize);
200
}
201
202
@Override
203
public void actionPerformed(ActionEvent e) {
204
if (e.getSource().equals(toolbar.getComponentAtIndex(0))) {
205
JToggleButton b = (JToggleButton) e.getSource();
206
demo.doClip = b.isSelected();
207
} else {
208
for (Component comp : toolbar.getComponents()) {
209
((JToggleButton) comp).setSelected(false);
210
}
211
JToggleButton b = (JToggleButton) e.getSource();
212
b.setSelected(true);
213
demo.clipType = b.getText();
214
}
215
demo.repaint();
216
}
217
218
@Override
219
public Dimension getPreferredSize() {
220
return new Dimension(200, 40);
221
}
222
223
@Override
224
@SuppressWarnings("SleepWhileHoldingLock")
225
public void run() {
226
try {
227
Thread.sleep(1111);
228
} catch (Exception e) {
229
return;
230
}
231
Thread me = Thread.currentThread();
232
while (thread == me) {
233
for (int i = 1; i < toolbar.getComponentCount() - 1; i++) {
234
((AbstractButton) toolbar.getComponentAtIndex(i)).doClick();
235
try {
236
Thread.sleep(4444);
237
} catch (InterruptedException e) {
238
return;
239
}
240
}
241
}
242
thread = null;
243
}
244
} // End DemoControls
245
} // End Text
246
247
248