Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/demo/share/jfc/J2Ddemo/java2d/AnimatingSurface.java
41154 views
1
/*
2
*
3
* Copyright (c) 2007, 2011, 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
33
34
package java2d;
35
36
37
/**
38
* Demos that animate extend this class.
39
*/
40
@SuppressWarnings("serial")
41
public abstract class AnimatingSurface extends Surface implements Runnable {
42
43
private volatile boolean running = false;
44
45
private volatile Thread thread;
46
47
public abstract void step(int w, int h);
48
49
public abstract void reset(int newwidth, int newheight);
50
51
52
public synchronized void start() {
53
if (!running() && !dontThread) {
54
thread = new Thread(this);
55
thread.setPriority(Thread.MIN_PRIORITY);
56
thread.setName(name + " Demo");
57
thread.start();
58
running = true;
59
}
60
}
61
62
63
public synchronized void stop() {
64
if (thread != null) {
65
running = false;
66
thread.interrupt();
67
}
68
thread = null;
69
notifyAll();
70
}
71
72
73
@Override
74
@SuppressWarnings("SleepWhileHoldingLock")
75
public void run() {
76
77
while (running() && !isShowing() || getSize().width == 0) {
78
try {
79
Thread.sleep(200);
80
} catch (InterruptedException ignored) {
81
}
82
}
83
84
while (running()) {
85
repaint();
86
try {
87
Thread.sleep(sleepAmount);
88
} catch (InterruptedException ignored) {
89
}
90
}
91
synchronized (this) {
92
running = false;
93
}
94
}
95
96
/**
97
* @return the running
98
*/
99
public synchronized boolean running() {
100
return running;
101
}
102
103
/**
104
* Causes surface to repaint immediately
105
*/
106
public synchronized void doRepaint() {
107
if (running() && thread != null) {
108
thread.interrupt();
109
}
110
}
111
}
112
113