mirror of
https://github.com/processing/processing4.git
synced 2026-02-13 18:35:37 +01:00
rewriting event queue setup, changing default imports, general havoc
This commit is contained in:
@@ -25,6 +25,7 @@ package processing.core;
|
||||
|
||||
import processing.data.*;
|
||||
import processing.event.*;
|
||||
import processing.event.Event;
|
||||
import processing.opengl.*;
|
||||
|
||||
import java.applet.*;
|
||||
@@ -2136,8 +2137,9 @@ public class PApplet extends Applet
|
||||
// drawing commands can be run inside them. it can't
|
||||
// be before, since a call to background() would wipe
|
||||
// out anything that had been drawn so far.
|
||||
dequeueMouseEvents();
|
||||
dequeueKeyEvents();
|
||||
dequeueEvents();
|
||||
// dequeueMouseEvents();
|
||||
// dequeueKeyEvents();
|
||||
|
||||
handleMethods("draw");
|
||||
|
||||
@@ -2353,20 +2355,106 @@ public class PApplet extends Applet
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
// TODO this needs lots of cleaning
|
||||
// protected Event eventQueue[] = new Event[10];
|
||||
// protected int eventCount;
|
||||
|
||||
|
||||
class InternalEventQueue {
|
||||
protected Event queue[] = new Event[10];
|
||||
protected int offset;
|
||||
protected int count;
|
||||
|
||||
synchronized void add(Event e) {
|
||||
if (count == queue.length) {
|
||||
queue = (Event[]) expand(queue);
|
||||
}
|
||||
queue[count++] = e;
|
||||
}
|
||||
|
||||
synchronized Event remove() {
|
||||
if (offset == count) {
|
||||
throw new RuntimeException("Nothing left on the event queue.");
|
||||
}
|
||||
Event outgoing = queue[offset++];
|
||||
if (offset == count) {
|
||||
// All done, time to reset
|
||||
offset = 0;
|
||||
count = 0;
|
||||
}
|
||||
return outgoing;
|
||||
}
|
||||
|
||||
synchronized boolean available() {
|
||||
return count != 0;
|
||||
}
|
||||
}
|
||||
|
||||
InternalEventQueue eventQueue = new InternalEventQueue();
|
||||
|
||||
|
||||
/**
|
||||
* Add an event to the internal event queue, or process it immediately if
|
||||
* the sketch is not currently looping.
|
||||
*/
|
||||
public void postEvent(processing.event.Event pe) {
|
||||
if (pe instanceof MouseEvent) {
|
||||
if (looping) {
|
||||
enqueueMouseEvent((MouseEvent) pe);
|
||||
} else {
|
||||
handleMouseEvent((MouseEvent) pe);
|
||||
}
|
||||
} else if (pe instanceof KeyEvent) {
|
||||
if (looping) {
|
||||
enqueueKeyEvent((KeyEvent) pe);
|
||||
} else {
|
||||
handleKeyEvent((KeyEvent) pe);
|
||||
// if (pe instanceof MouseEvent) {
|
||||
//// switch (pe.getFlavor()) {
|
||||
//// case Event.MOUSE:
|
||||
// if (looping) {
|
||||
// enqueueMouseEvent((MouseEvent) pe);
|
||||
// } else {
|
||||
// handleMouseEvent((MouseEvent) pe);
|
||||
// enqueueEvent(pe);
|
||||
// }
|
||||
// } else if (pe instanceof KeyEvent) {
|
||||
// if (looping) {
|
||||
// enqueueKeyEvent((KeyEvent) pe);
|
||||
// } else {
|
||||
// handleKeyEvent((KeyEvent) pe);
|
||||
// }
|
||||
// }
|
||||
|
||||
// synchronized (eventQueue) {
|
||||
// if (eventCount == eventQueue.length) {
|
||||
// eventQueue = (Event[]) expand(eventQueue);
|
||||
// }
|
||||
// eventQueue[eventCount++] = pe;
|
||||
// }
|
||||
eventQueue.add(pe);
|
||||
|
||||
if (!looping) {
|
||||
dequeueEvents();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// protected void enqueueEvent(Event e) {
|
||||
// synchronized (eventQueue) {
|
||||
// if (eventCount == eventQueue.length) {
|
||||
// eventQueue = (Event[]) expand(eventQueue);
|
||||
// }
|
||||
// eventQueue[eventCount++] = e;
|
||||
// }
|
||||
// }
|
||||
|
||||
protected void dequeueEvents() {
|
||||
// can't do this.. thread lock
|
||||
// synchronized (eventQueue) {
|
||||
// for (int i = 0; i < eventCount; i++) {
|
||||
// Event e = eventQueue[i];
|
||||
while (eventQueue.available()) {
|
||||
Event e = eventQueue.remove();
|
||||
|
||||
switch (e.getFlavor()) {
|
||||
case Event.MOUSE:
|
||||
handleMouseEvent((MouseEvent) e);
|
||||
break;
|
||||
case Event.KEY:
|
||||
handleKeyEvent((KeyEvent) e);
|
||||
break;
|
||||
}
|
||||
// }
|
||||
// eventCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2374,28 +2462,28 @@ public class PApplet extends Applet
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
MouseEvent mouseEventQueue[] = new MouseEvent[10];
|
||||
int mouseEventCount;
|
||||
|
||||
protected void enqueueMouseEvent(MouseEvent e) {
|
||||
synchronized (mouseEventQueue) {
|
||||
if (mouseEventCount == mouseEventQueue.length) {
|
||||
MouseEvent temp[] = new MouseEvent[mouseEventCount << 1];
|
||||
System.arraycopy(mouseEventQueue, 0, temp, 0, mouseEventCount);
|
||||
mouseEventQueue = temp;
|
||||
}
|
||||
mouseEventQueue[mouseEventCount++] = e;
|
||||
}
|
||||
}
|
||||
|
||||
protected void dequeueMouseEvents() {
|
||||
synchronized (mouseEventQueue) {
|
||||
for (int i = 0; i < mouseEventCount; i++) {
|
||||
handleMouseEvent(mouseEventQueue[i]);
|
||||
}
|
||||
mouseEventCount = 0;
|
||||
}
|
||||
}
|
||||
// MouseEvent mouseEventQueue[] = new MouseEvent[10];
|
||||
// int mouseEventCount;
|
||||
//
|
||||
// protected void enqueueMouseEvent(MouseEvent e) {
|
||||
// synchronized (mouseEventQueue) {
|
||||
// if (mouseEventCount == mouseEventQueue.length) {
|
||||
// MouseEvent temp[] = new MouseEvent[mouseEventCount << 1];
|
||||
// System.arraycopy(mouseEventQueue, 0, temp, 0, mouseEventCount);
|
||||
// mouseEventQueue = temp;
|
||||
// }
|
||||
// mouseEventQueue[mouseEventCount++] = e;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// protected void dequeueMouseEvents() {
|
||||
// synchronized (mouseEventQueue) {
|
||||
// for (int i = 0; i < mouseEventCount; i++) {
|
||||
// handleMouseEvent(mouseEventQueue[i]);
|
||||
// }
|
||||
// mouseEventCount = 0;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
@@ -2529,10 +2617,10 @@ public class PApplet extends Applet
|
||||
int modifiers = nativeEvent.getModifiers();
|
||||
|
||||
int peModifiers = modifiers &
|
||||
(InputEvent.SHIFT_DOWN_MASK |
|
||||
InputEvent.CTRL_DOWN_MASK |
|
||||
InputEvent.META_DOWN_MASK |
|
||||
InputEvent.ALT_DOWN_MASK);
|
||||
(InputEvent.SHIFT_MASK |
|
||||
InputEvent.CTRL_MASK |
|
||||
InputEvent.META_MASK |
|
||||
InputEvent.ALT_MASK);
|
||||
|
||||
// Windows and OS X seem to disagree on how to handle this. Windows only
|
||||
// sets BUTTON1_DOWN_MASK, while OS X seems to set BUTTON1_MASK.
|
||||
@@ -2569,12 +2657,11 @@ public class PApplet extends Applet
|
||||
}
|
||||
}
|
||||
|
||||
MouseEvent pe = new MouseEvent(nativeEvent, nativeEvent.getWhen(),
|
||||
peAction, peModifiers,
|
||||
nativeEvent.getX(), nativeEvent.getY(),
|
||||
peButton,
|
||||
nativeEvent.getClickCount());
|
||||
postEvent(pe);
|
||||
postEvent(new MouseEvent(nativeEvent, nativeEvent.getWhen(),
|
||||
peAction, peModifiers,
|
||||
nativeEvent.getX(), nativeEvent.getY(),
|
||||
peButton,
|
||||
nativeEvent.getClickCount()));
|
||||
}
|
||||
|
||||
|
||||
@@ -2589,6 +2676,7 @@ public class PApplet extends Applet
|
||||
nativeMouseEvent(e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @nowebref
|
||||
*/
|
||||
@@ -2596,6 +2684,7 @@ public class PApplet extends Applet
|
||||
nativeMouseEvent(e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @nowebref
|
||||
*/
|
||||
@@ -2603,14 +2692,23 @@ public class PApplet extends Applet
|
||||
nativeMouseEvent(e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @nowebref
|
||||
*/
|
||||
public void mouseEntered(java.awt.event.MouseEvent e) {
|
||||
nativeMouseEvent(e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @nowebref
|
||||
*/
|
||||
public void mouseExited(java.awt.event.MouseEvent e) {
|
||||
nativeMouseEvent(e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @nowebref
|
||||
*/
|
||||
@@ -2618,6 +2716,7 @@ public class PApplet extends Applet
|
||||
nativeMouseEvent(e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @nowebref
|
||||
*/
|
||||
@@ -2653,6 +2752,7 @@ public class PApplet extends Applet
|
||||
*/
|
||||
public void mousePressed() { }
|
||||
|
||||
|
||||
/**
|
||||
* ( begin auto-generated from mouseReleased.xml )
|
||||
*
|
||||
@@ -2693,6 +2793,7 @@ public class PApplet extends Applet
|
||||
*/
|
||||
public void mouseClicked() { }
|
||||
|
||||
|
||||
/**
|
||||
* ( begin auto-generated from mouseDragged.xml )
|
||||
*
|
||||
@@ -2710,6 +2811,7 @@ public class PApplet extends Applet
|
||||
*/
|
||||
public void mouseDragged() { }
|
||||
|
||||
|
||||
/**
|
||||
* ( begin auto-generated from mouseMoved.xml )
|
||||
*
|
||||
@@ -2727,8 +2829,10 @@ public class PApplet extends Applet
|
||||
*/
|
||||
public void mouseMoved() { }
|
||||
|
||||
|
||||
public void mouseEntered() { }
|
||||
|
||||
|
||||
public void mouseExited() { }
|
||||
|
||||
|
||||
@@ -2736,29 +2840,29 @@ public class PApplet extends Applet
|
||||
//////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
KeyEvent keyEventQueue[] = new KeyEvent[10];
|
||||
int keyEventCount;
|
||||
|
||||
protected void enqueueKeyEvent(KeyEvent e) {
|
||||
synchronized (keyEventQueue) {
|
||||
if (keyEventCount == keyEventQueue.length) {
|
||||
KeyEvent temp[] = new KeyEvent[keyEventCount << 1];
|
||||
System.arraycopy(keyEventQueue, 0, temp, 0, keyEventCount);
|
||||
keyEventQueue = temp;
|
||||
}
|
||||
keyEventQueue[keyEventCount++] = e;
|
||||
}
|
||||
}
|
||||
|
||||
protected void dequeueKeyEvents() {
|
||||
synchronized (keyEventQueue) {
|
||||
for (int i = 0; i < keyEventCount; i++) {
|
||||
keyEvent = keyEventQueue[i];
|
||||
handleKeyEvent(keyEvent);
|
||||
}
|
||||
keyEventCount = 0;
|
||||
}
|
||||
}
|
||||
// KeyEvent keyEventQueue[] = new KeyEvent[10];
|
||||
// int keyEventCount;
|
||||
//
|
||||
// protected void enqueueKeyEvent(KeyEvent e) {
|
||||
// synchronized (keyEventQueue) {
|
||||
// if (keyEventCount == keyEventQueue.length) {
|
||||
// KeyEvent temp[] = new KeyEvent[keyEventCount << 1];
|
||||
// System.arraycopy(keyEventQueue, 0, temp, 0, keyEventCount);
|
||||
// keyEventQueue = temp;
|
||||
// }
|
||||
// keyEventQueue[keyEventCount++] = e;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// protected void dequeueKeyEvents() {
|
||||
// synchronized (keyEventQueue) {
|
||||
// for (int i = 0; i < keyEventCount; i++) {
|
||||
// keyEvent = keyEventQueue[i];
|
||||
// handleKeyEvent(keyEvent);
|
||||
// }
|
||||
// keyEventCount = 0;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// protected void handleKeyEvent(java.awt.event.KeyEvent event) {
|
||||
@@ -2836,13 +2940,18 @@ public class PApplet extends Applet
|
||||
exit();
|
||||
}
|
||||
// When running tethered to the Processing application, respond to
|
||||
// Ctrl-W (or Cmd-W) events by closing the sketch. Disable this behavior
|
||||
// when running independently, because this sketch may be one component
|
||||
// Ctrl-W (or Cmd-W) events by closing the sketch. Not enabled when
|
||||
// running independently, because this sketch may be one component
|
||||
// embedded inside an application that has its own close behavior.
|
||||
if (external && event.getNative() instanceof java.awt.event.KeyEvent &&
|
||||
((java.awt.event.KeyEvent) event.getNative()).getModifiers() ==
|
||||
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() &&
|
||||
event.getKeyCode() == 'W') {
|
||||
if (external &&
|
||||
event.getKeyCode() == 'W' &&
|
||||
((event.isMetaDown() && platform == MACOSX) ||
|
||||
(event.isControlDown() && platform != MACOSX))) {
|
||||
// Can't use this native stuff b/c the native event might be NEWT
|
||||
// if (external && event.getNative() instanceof java.awt.event.KeyEvent &&
|
||||
// ((java.awt.event.KeyEvent) event.getNative()).getModifiers() ==
|
||||
// Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() &&
|
||||
// event.getKeyCode() == 'W') {
|
||||
exit();
|
||||
}
|
||||
}
|
||||
@@ -2863,15 +2972,19 @@ public class PApplet extends Applet
|
||||
break;
|
||||
}
|
||||
|
||||
int peModifiers = event.getModifiersEx() &
|
||||
(InputEvent.SHIFT_DOWN_MASK |
|
||||
InputEvent.CTRL_DOWN_MASK |
|
||||
InputEvent.META_DOWN_MASK |
|
||||
InputEvent.ALT_DOWN_MASK);
|
||||
// int peModifiers = event.getModifiersEx() &
|
||||
// (InputEvent.SHIFT_DOWN_MASK |
|
||||
// InputEvent.CTRL_DOWN_MASK |
|
||||
// InputEvent.META_DOWN_MASK |
|
||||
// InputEvent.ALT_DOWN_MASK);
|
||||
int peModifiers = event.getModifiers() &
|
||||
(InputEvent.SHIFT_MASK |
|
||||
InputEvent.CTRL_MASK |
|
||||
InputEvent.META_MASK |
|
||||
InputEvent.ALT_MASK);
|
||||
|
||||
KeyEvent ke = new KeyEvent(event, event.getWhen(), peAction, peModifiers,
|
||||
event.getKeyChar(), event.getKeyCode());
|
||||
postEvent(ke);
|
||||
postEvent(new KeyEvent(event, event.getWhen(), peAction, peModifiers,
|
||||
event.getKeyChar(), event.getKeyCode()));
|
||||
}
|
||||
|
||||
|
||||
@@ -2884,17 +2997,25 @@ public class PApplet extends Applet
|
||||
*
|
||||
* @nowebref
|
||||
*/
|
||||
public void keyPressed(java.awt.event.KeyEvent e) { nativeKeyEvent(e); }
|
||||
public void keyPressed(java.awt.event.KeyEvent e) {
|
||||
nativeKeyEvent(e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @nowebref
|
||||
*/
|
||||
public void keyReleased(java.awt.event.KeyEvent e) { nativeKeyEvent(e); }
|
||||
public void keyReleased(java.awt.event.KeyEvent e) {
|
||||
nativeKeyEvent(e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @nowebref
|
||||
*/
|
||||
public void keyTyped(java.awt.event.KeyEvent e) { nativeKeyEvent(e); }
|
||||
public void keyTyped(java.awt.event.KeyEvent e) {
|
||||
nativeKeyEvent(e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,12 +29,20 @@ public class Event {
|
||||
protected long millis;
|
||||
protected int action;
|
||||
|
||||
static public final int SHIFT_MASK = 1 << 6;
|
||||
static public final int CTRL_MASK = 1 << 7;
|
||||
static public final int META_MASK = 1 << 8;
|
||||
static public final int ALT_MASK = 1 << 9;
|
||||
// These correspond to the java.awt.Event modifiers (not to be confused with
|
||||
// the newer getModifiersEx), though they're not guaranteed to in the future.
|
||||
static public final int SHIFT = 1 << 0;
|
||||
static public final int CTRL = 1 << 1;
|
||||
static public final int META = 1 << 2;
|
||||
static public final int ALT = 1 << 3;
|
||||
protected int modifiers;
|
||||
|
||||
// Types of events. As with all constants in Processing, brevity's preferred.
|
||||
static public final int KEY = 1;
|
||||
static public final int MOUSE = 2;
|
||||
static public final int TOUCH = 3;
|
||||
protected int flavor;
|
||||
|
||||
|
||||
public Event(Object nativeObject, long millis, int action, int modifiers) {
|
||||
this.nativeObject = nativeObject;
|
||||
@@ -44,6 +52,18 @@ public class Event {
|
||||
}
|
||||
|
||||
|
||||
public int getFlavor() {
|
||||
return flavor;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the platform-native event object. This might be the java.awt event
|
||||
* on the desktop, though if you're using OpenGL on the desktop it'll be a
|
||||
* NEWT event that JOGL uses. Android events are something else altogether.
|
||||
* Bottom line, use this only if you know what you're doing, and don't make
|
||||
* assumptions about the class type.
|
||||
*/
|
||||
public Object getNative() {
|
||||
return nativeObject;
|
||||
}
|
||||
@@ -85,21 +105,21 @@ public class Event {
|
||||
|
||||
|
||||
public boolean isShiftDown() {
|
||||
return (modifiers & SHIFT_MASK) != 0;
|
||||
return (modifiers & SHIFT) != 0;
|
||||
}
|
||||
|
||||
|
||||
public boolean isControlDown() {
|
||||
return (modifiers & CTRL_MASK) != 0;
|
||||
return (modifiers & CTRL) != 0;
|
||||
}
|
||||
|
||||
|
||||
public boolean isMetaDown() {
|
||||
return (modifiers & META_MASK) != 0;
|
||||
return (modifiers & META) != 0;
|
||||
}
|
||||
|
||||
|
||||
public boolean isAltDown() {
|
||||
return (modifiers & ALT_MASK) != 0;
|
||||
return (modifiers & ALT) != 0;
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,7 @@ public class KeyEvent extends Event {
|
||||
long millis, int action, int modifiers,
|
||||
char key, int keyCode) {
|
||||
super(nativeObject, millis, action, modifiers);
|
||||
this.flavor = KEY;
|
||||
this.key = key;
|
||||
this.keyCode = keyCode;
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ public class MouseEvent extends Event {
|
||||
long millis, int action, int modifiers,
|
||||
int x, int y, int button, int clickCount) {
|
||||
super(nativeObject, millis, action, modifiers);
|
||||
this.flavor = MOUSE;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.button = button;
|
||||
|
||||
@@ -41,5 +41,6 @@ public class TouchEvent extends Event {
|
||||
|
||||
public TouchEvent(Object nativeObject, long millis, int action, int modifiers) {
|
||||
super(nativeObject, millis, action, modifiers);
|
||||
this.flavor = TOUCH;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user