blob: e63b6e730b7c5aa3f2d6d71e17ebb773ed83bc6f (
plain)
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
package gl4java.drawable.utils;
import gl4java.drawable.GLDrawable;
import gl4java.drawable.GLEventListener;
import java.util.EventListener;
/** Helper class for implementing a list of GLEventListeners. This is
only needed because we can not use the JDK 1.2 collection classes
since we have to be backward compatible with JDK 1.1. */
public class GLEventListenerList {
private GLEventListener[] data = new GLEventListener[2];
private int nextFreeIdx = 0;
public GLEventListenerList() {
}
public void add(GLEventListener listener) {
if (nextFreeIdx == data.length) {
grow();
}
data[nextFreeIdx++] = listener;
}
public void remove(GLEventListener listener) {
for (int i = 0; i < nextFreeIdx; i++) {
if (data[i] == listener) {
for (int j = i; j < nextFreeIdx - 1; j++) {
data[j] = data[j+1];
}
data[nextFreeIdx - 1] = null;
--nextFreeIdx;
return;
}
}
}
public void sendInitEvent(GLDrawable from) {
for (int i = 0; i < nextFreeIdx; i++) {
data[i].init(from);
}
}
public void sendPreDisplayEvent(GLDrawable from) {
for (int i = 0; i < nextFreeIdx; i++) {
data[i].preDisplay(from);
}
}
public void sendDisplayEvent(GLDrawable from) {
for (int i = 0; i < nextFreeIdx; i++) {
data[i].display(from);
}
}
public void sendPostDisplayEvent(GLDrawable from) {
for (int i = 0; i < nextFreeIdx; i++) {
data[i].postDisplay(from);
}
}
public void sendCleanupEvent(GLDrawable from) {
for (int i = 0; i < nextFreeIdx; i++) {
data[i].cleanup(from);
}
}
public void sendReshapeEvent(GLDrawable from, int width, int height) {
for (int i = 0; i < nextFreeIdx; i++) {
data[i].reshape(from, width, height);
}
}
public EventListener[] getListeners()
{
GLEventListener[] _new = new GLEventListener[nextFreeIdx];
System.arraycopy(data, 0, _new, 0, nextFreeIdx);
return _new;
}
public int size()
{ return nextFreeIdx; }
private void grow() {
GLEventListener[] newData = new GLEventListener[2 * data.length];
System.arraycopy(data, 0, newData, 0, data.length);
data = newData;
}
}
|