Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/demo/applets/GraphicsTest/GraphicsTest.java
38829 views
1
/*
2
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
6
* are met:
7
*
8
* - Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
*
11
* - Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* - Neither the name of Oracle nor the names of its
16
* contributors may be used to endorse or promote products derived
17
* from this software without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
*/
31
32
/*
33
* This source code is provided to illustrate the usage of a given feature
34
* or technique and has been deliberately simplified. Additional steps
35
* required for a production-quality application, such as security checks,
36
* input validation and proper error handling, might not be present in
37
* this sample code.
38
*/
39
40
41
42
import java.awt.*;
43
import java.util.*;
44
import java.awt.event.*;
45
import java.applet.Applet;
46
47
48
@SuppressWarnings("serial")
49
class GraphicsPanel extends Panel {
50
51
ActionListener al;
52
ItemListener il;
53
public GraphicsCards cards;
54
55
GraphicsPanel(EventListener listener) {
56
al = (ActionListener) listener;
57
il = (ItemListener) listener;
58
59
setLayout(new BorderLayout());
60
61
add("Center", cards = new GraphicsCards());
62
63
Panel p = new Panel();
64
//p.setLayout(new BorderLayout());
65
66
Button b = new Button("next");
67
b.addActionListener(al);
68
p.add(b);
69
70
b = new Button("previous");
71
b.addActionListener(al);
72
p.add(b);
73
74
p.add(new Label("go to:", Label.RIGHT));
75
76
Choice c = new Choice();
77
c.addItemListener(il);
78
p.add(c);
79
80
c.addItem("Arc");
81
c.addItem("Oval");
82
c.addItem("Polygon");
83
c.addItem("Rect");
84
c.addItem("RoundRect");
85
86
add("North", p);
87
88
setSize(400, 400);
89
}
90
91
@Override
92
public Dimension getPreferredSize() {
93
return new Dimension(200, 100);
94
}
95
}
96
97
98
@SuppressWarnings("serial")
99
public class GraphicsTest extends Applet
100
implements ActionListener, ItemListener {
101
102
GraphicsPanel mainPanel;
103
104
@Override
105
public void init() {
106
setLayout(new BorderLayout());
107
add("Center", mainPanel = new GraphicsPanel(this));
108
}
109
110
@Override
111
public void destroy() {
112
remove(mainPanel);
113
}
114
115
@Override
116
public void actionPerformed(ActionEvent e) {
117
String arg = e.getActionCommand();
118
119
if ("next".equals(arg)) {
120
((CardLayout) mainPanel.cards.getLayout()).next(mainPanel.cards);
121
} else if ("previous".equals(arg)) {
122
((CardLayout) mainPanel.cards.getLayout()).previous(mainPanel.cards);
123
}
124
}
125
126
@Override
127
public void itemStateChanged(ItemEvent e) {
128
((CardLayout) mainPanel.cards.getLayout()).show(mainPanel.cards,
129
(String) e.getItem());
130
}
131
132
public static void main(String args[]) {
133
AppletFrame.startApplet("GraphicsTest", "Graphics Test", args);
134
}
135
136
@Override
137
public String getAppletInfo() {
138
return "An interactive demonstration of some graphics.";
139
}
140
} // end class GraphicsTest
141
142
143
@SuppressWarnings("serial")
144
class GraphicsCards extends Panel {
145
146
public GraphicsCards() {
147
setLayout(new CardLayout());
148
add("Arc", new ArcCard());
149
add("Oval", new ShapeTest(new OvalShape()));
150
add("Polygon", new ShapeTest(new PolygonShape()));
151
add("Rect", new ShapeTest(new RectShape()));
152
add("RoundRect", new ShapeTest(new RoundRectShape()));
153
}
154
} // end class GraphicsCards
155
156
157
@SuppressWarnings("serial")
158
class ArcCard extends Panel {
159
160
public ArcCard() {
161
setLayout(new GridLayout(0, 2));
162
add(new ArcPanel(true));
163
add(new ArcPanel(false));
164
add(new ArcDegreePanel(true));
165
add(new ArcDegreePanel(false));
166
}
167
} // end class ArcCard
168
169
170
@SuppressWarnings("serial")
171
class ArcDegreePanel extends Panel {
172
173
boolean filled;
174
175
public ArcDegreePanel(boolean filled) {
176
this.filled = filled;
177
}
178
179
void arcSteps(Graphics g,
180
int step,
181
int x,
182
int y,
183
int w,
184
int h,
185
Color c1,
186
Color c2) {
187
int a1 = 0;
188
int a2 = step;
189
int progress = 0;
190
g.setColor(c1);
191
for (; (a1 + a2) <= 360; a1 = a1 + a2, a2 += 1) {
192
if (g.getColor() == c1) {
193
g.setColor(c2);
194
} else {
195
g.setColor(c1);
196
}
197
198
if (filled) {
199
g.fillArc(x, y, w, h, a1, a2);
200
} else {
201
g.drawArc(x, y, w, h, a1, a2);
202
}
203
204
progress = a1 + a2;
205
} // end for
206
207
if (progress != 360) {
208
if (filled) {
209
g.fillArc(x, y, w, h, a1, 360 - progress);
210
} else {
211
g.drawArc(x, y, w, h, a1, 360 - progress);
212
}
213
} // end if
214
} // end arcSteps()
215
216
@Override
217
public void paint(Graphics g) {
218
Rectangle r = getBounds();
219
220
arcSteps(g, 3, 0, 0, r.width, r.height, Color.orange, Color.blue);
221
222
arcSteps(g,
223
2,
224
r.width / 4,
225
r.height / 4,
226
r.width / 2,
227
r.height / 2,
228
Color.yellow,
229
Color.green);
230
231
arcSteps(g,
232
1,
233
(r.width * 3) / 8,
234
(r.height * 3) / 8,
235
r.width / 4,
236
r.height / 4,
237
Color.magenta,
238
Color.white);
239
240
} // end paint()
241
} // end class ArcDegreePanel
242
243
244
@SuppressWarnings("serial")
245
class ArcPanel extends Panel {
246
247
boolean filled;
248
249
public ArcPanel(boolean filled) {
250
this.filled = filled;
251
}
252
253
@Override
254
public void paint(Graphics g) {
255
Rectangle r = getBounds();
256
257
g.setColor(Color.yellow);
258
if (filled) {
259
g.fillArc(0, 0, r.width, r.height, 0, 45);
260
} else {
261
g.drawArc(0, 0, r.width, r.height, 0, 45);
262
}
263
264
g.setColor(Color.green);
265
if (filled) {
266
g.fillArc(0, 0, r.width, r.height, 90, -45);
267
} else {
268
g.drawArc(0, 0, r.width, r.height, 90, -45);
269
}
270
271
g.setColor(Color.orange);
272
if (filled) {
273
g.fillArc(0, 0, r.width, r.height, 135, -45);
274
} else {
275
g.drawArc(0, 0, r.width, r.height, 135, -45);
276
}
277
278
g.setColor(Color.magenta);
279
280
if (filled) {
281
g.fillArc(0, 0, r.width, r.height, -225, 45);
282
} else {
283
g.drawArc(0, 0, r.width, r.height, -225, 45);
284
}
285
286
g.setColor(Color.yellow);
287
if (filled) {
288
g.fillArc(0, 0, r.width, r.height, 225, -45);
289
} else {
290
g.drawArc(0, 0, r.width, r.height, 225, -45);
291
}
292
293
g.setColor(Color.green);
294
if (filled) {
295
g.fillArc(0, 0, r.width, r.height, -135, 45);
296
} else {
297
g.drawArc(0, 0, r.width, r.height, -135, 45);
298
}
299
300
g.setColor(Color.orange);
301
if (filled) {
302
g.fillArc(0, 0, r.width, r.height, -45, -45);
303
} else {
304
g.drawArc(0, 0, r.width, r.height, -45, -45);
305
}
306
307
g.setColor(Color.magenta);
308
if (filled) {
309
g.fillArc(0, 0, r.width, r.height, 315, 45);
310
} else {
311
g.drawArc(0, 0, r.width, r.height, 315, 45);
312
}
313
314
} // end paint()
315
} // end class ArcPanel
316
317
318
abstract class Shape {
319
320
abstract void draw(Graphics g, int x, int y, int w, int h);
321
322
abstract void fill(Graphics g, int x, int y, int w, int h);
323
}
324
325
326
class RectShape extends Shape {
327
328
@Override
329
void draw(Graphics g, int x, int y, int w, int h) {
330
g.drawRect(x, y, w, h);
331
}
332
333
@Override
334
void fill(Graphics g, int x, int y, int w, int h) {
335
g.fillRect(x, y, w, h);
336
}
337
}
338
339
340
class OvalShape extends Shape {
341
342
@Override
343
void draw(Graphics g, int x, int y, int w, int h) {
344
g.drawOval(x, y, w, h);
345
}
346
347
@Override
348
void fill(Graphics g, int x, int y, int w, int h) {
349
g.fillOval(x, y, w, h);
350
}
351
}
352
353
354
class RoundRectShape extends Shape {
355
356
@Override
357
void draw(Graphics g, int x, int y, int w, int h) {
358
g.drawRoundRect(x, y, w, h, 10, 10);
359
}
360
361
@Override
362
void fill(Graphics g, int x, int y, int w, int h) {
363
g.fillRoundRect(x, y, w, h, 10, 10);
364
}
365
}
366
367
368
class PolygonShape extends Shape {
369
// class variables
370
371
Polygon p;
372
Polygon pBase;
373
374
public PolygonShape() {
375
pBase = new Polygon();
376
pBase.addPoint(0, 0);
377
pBase.addPoint(10, 0);
378
pBase.addPoint(5, 15);
379
pBase.addPoint(10, 20);
380
pBase.addPoint(5, 20);
381
pBase.addPoint(0, 10);
382
pBase.addPoint(0, 0);
383
}
384
385
void scalePolygon(float w, float h) {
386
p = new Polygon();
387
for (int i = 0; i < pBase.npoints; ++i) {
388
p.addPoint((int) (pBase.xpoints[i] * w),
389
(int) (pBase.ypoints[i] * h));
390
}
391
392
}
393
394
@Override
395
void draw(Graphics g, int x, int y, int w, int h) {
396
Graphics ng = g.create();
397
try {
398
ng.translate(x, y);
399
scalePolygon(((float) w / 10f), ((float) h / 20f));
400
ng.drawPolygon(p);
401
} finally {
402
ng.dispose();
403
}
404
}
405
406
@Override
407
void fill(Graphics g, int x, int y, int w, int h) {
408
Graphics ng = g.create();
409
try {
410
ng.translate(x, y);
411
scalePolygon(((float) w / 10f), ((float) h / 20f));
412
ng.fillPolygon(p);
413
} finally {
414
ng.dispose();
415
}
416
}
417
}
418
419
420
@SuppressWarnings("serial")
421
class ShapeTest extends Panel {
422
423
Shape shape;
424
int step;
425
426
public ShapeTest(Shape shape, int step) {
427
this.shape = shape;
428
this.step = step;
429
}
430
431
public ShapeTest(Shape shape) {
432
this(shape, 10);
433
}
434
435
@Override
436
public void paint(Graphics g) {
437
Rectangle bounds = getBounds();
438
439
int cx, cy, cw, ch;
440
441
Color color;
442
443
for (color = Color.red, cx = bounds.x, cy = bounds.y,
444
cw = bounds.width / 2, ch = bounds.height;
445
cw > 0 && ch > 0;
446
cx += step, cy += step, cw -= (step * 2), ch -= (step * 2),
447
color = ColorUtils.darker(color, 0.9)) {
448
g.setColor(color);
449
shape.draw(g, cx, cy, cw, ch);
450
}
451
452
for (cx = bounds.x + bounds.width / 2, cy = bounds.y,
453
cw = bounds.width / 2, ch = bounds.height;
454
cw > 0 && ch > 0;
455
cx += step, cy += step, cw -= (step * 2), ch -= (step * 2)) {
456
if (g.getColor() == Color.red) {
457
g.setColor(Color.blue);
458
} else {
459
g.setColor(Color.red);
460
}
461
462
shape.fill(g, cx, cy, cw, ch);
463
} // end for
464
} // end paint()
465
} // end class ShapeTest
466
467
468
class ColorUtils {
469
470
static Color brighter(Color c, double factor) {
471
return new Color(Math.min((int) (c.getRed() * (1 / factor)), 255),
472
Math.min((int) (c.getGreen() * (1 / factor)), 255),
473
Math.min((int) (c.getBlue() * (1 / factor)), 255));
474
}
475
476
static Color darker(Color c, double factor) {
477
return new Color(Math.max((int) (c.getRed() * factor), 0),
478
Math.max((int) (c.getGreen() * factor), 0),
479
Math.max((int) (c.getBlue() * factor), 0));
480
}
481
}
482
483