javax.media.j3d.EventCatcher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java3d-core Show documentation
Show all versions of java3d-core Show documentation
Java3D Core And Java3D Util Libraries
The newest version!
/*
* Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*/
package javax.media.j3d;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
/**
* The EventCatcher class is used to track events on a Canvas3D using the
* 1.1 event model. Most events are sent to the canvas for processing.
*/
class EventCatcher extends Object implements ComponentListener, FocusListener,
KeyListener, MouseListener, MouseMotionListener, MouseWheelListener, WindowListener {
// The canvas associated with this event catcher
private Canvas3D canvas;
private static final boolean DEBUG = false;
private boolean stopped = false;
/**
* flags for event listeners
*/
private boolean focusEvents = false;
private boolean keyEvents = false;
private boolean mouseEvents = false;
private boolean mouseMotionEvents = false;
private boolean mouseWheelEvents = false;
private boolean mouseListenerAdded = false;
EventCatcher(Canvas3D c) {
canvas = c;
}
void enableFocusEvents() {
if (!focusEvents) {
canvas.addFocusListener(this);
focusEvents = true;
}
}
void disableFocusEvents() {
if (focusEvents) {
canvas.removeFocusListener(this);
focusEvents = false;
}
}
void enableKeyEvents() {
if (!keyEvents) {
canvas.addKeyListener(this);
keyEvents = true;
// listen for mouseEntered events for keyboard focusing
if (!mouseListenerAdded) {
canvas.addMouseListener(this);
mouseListenerAdded = true;
}
}
}
void disableKeyEvents() {
if (keyEvents) {
canvas.removeKeyListener(this);
keyEvents = false;
// listen for mouseEntered events for keyboard focusing
if (!mouseEvents) {
if (mouseListenerAdded) {
canvas.removeMouseListener(this);
mouseListenerAdded = false;
}
}
}
}
void enableMouseEvents() {
if (!mouseEvents) {
mouseEvents = true;
if (!mouseListenerAdded) {
canvas.addMouseListener(this);
mouseListenerAdded = true;
}
}
}
void disableMouseEvents() {
if (mouseEvents) {
mouseEvents = false;
if (!keyEvents) {
if (mouseListenerAdded) {
canvas.removeMouseListener(this);
mouseListenerAdded = false;
}
}
}
}
void enableMouseMotionEvents() {
if (!mouseMotionEvents) {
canvas.addMouseMotionListener(this);
mouseMotionEvents = true;
}
}
void disableMouseMotionEvents() {
if (mouseMotionEvents) {
canvas.removeMouseMotionListener(this);
mouseMotionEvents = false;
}
}
void enableMouseWheelEvents() {
if (!mouseWheelEvents) {
canvas.addMouseWheelListener(this);
mouseWheelEvents = true;
}
}
void disableMouseWheelEvents() {
if (mouseWheelEvents) {
canvas.removeMouseWheelListener(this);
mouseWheelEvents = false;
}
}
@Override
public void componentResized(ComponentEvent e) {
if (e.getSource() == canvas) {
if (DEBUG) {
System.err.println(e);
}
canvas.sendEventToBehaviorScheduler(e);
canvas.evaluateVisiblilty();
canvas.redraw();
}
}
@Override
public void componentMoved(ComponentEvent e) {
if (e.getSource() == canvas) {
if (DEBUG) {
System.err.println(e);
}
canvas.sendEventToBehaviorScheduler(e);
// Issue 458 - the following is not needed for a move
// if (VirtualUniverse.mc.isD3D()) {
// canvas.notifyD3DPeer(Canvas3D.RESIZE);
// }
// canvas.evaluateVisiblilty(true);
}
}
@Override
public void componentHidden(ComponentEvent e) {
if (DEBUG) {
System.err.println(e);
}
if (e.getSource() == canvas) {
canvas.sendEventToBehaviorScheduler(e);
}
canvas.evaluateVisiblilty();
}
@Override
public void componentShown(ComponentEvent e) {
if (DEBUG) {
System.err.println(e);
}
if (e.getSource() == canvas) {
canvas.sendEventToBehaviorScheduler(e);
}
canvas.evaluateVisiblilty();
}
@Override
public void focusGained(FocusEvent e) {
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void focusLost(FocusEvent e) {
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void keyTyped(KeyEvent e) {
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void keyPressed(KeyEvent e) {
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void keyReleased(KeyEvent e) {
canvas.sendEventToBehaviorScheduler(e);
if (stopped) {
stopped = false;
} else {
stopped = true;
}
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void mouseClicked(MouseEvent e) {
// if (keyEvents &&
// (VirtualUniverse.mc.getRenderingAPI() !=
// MasterControl.RENDER_OPENGL_SOLARIS)) {
// // bug 4362074
// canvas.requestFocus();
// }
if (mouseEvents) {
canvas.sendEventToBehaviorScheduler(e);
}
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void mouseEntered(MouseEvent e) {
// if (keyEvents &&
// (VirtualUniverse.mc.getRenderingAPI() ==
// MasterControl.RENDER_OPENGL_SOLARIS)) {
// // bug 4362074
// canvas.requestFocus();
// }
if (mouseEvents) {
canvas.sendEventToBehaviorScheduler(e);
}
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void mouseExited(MouseEvent e) {
if (mouseEvents)
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void mousePressed(MouseEvent e) {
if (mouseEvents)
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (mouseEvents)
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void mouseDragged(MouseEvent e) {
// Note : We don't have to test for mouseMotionEvent here because
// this routine will never be called unless mouseMotionEvent is enabled.
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void mouseMoved(MouseEvent e) {
// Note : We don't have to test for mouseMotionEvent here because
// this routine will never be called unless mouseMotionEvent is enabled.
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
// Note : We don't have to test for mouseWheelEvent here because
// this routine will never be called unless mouseWheelEvent is enabled.
canvas.sendEventToBehaviorScheduler(e);
if (DEBUG) {
System.err.println(e);
}
}
/*
* WindowListener methods
*/
@Override
public void windowClosed(WindowEvent e) {
if (DEBUG) {
System.err.println(e);
}
canvas.sendEventToBehaviorScheduler(e);
// Issue 458 - Don't set canvas visible to false
}
@Override
public void windowClosing(WindowEvent e) {
if (DEBUG) {
System.err.println(e);
}
canvas.sendEventToBehaviorScheduler(e);
// Issue 458 - Don't set canvas.visible to false
}
@Override
public void windowActivated(WindowEvent e) {
if (DEBUG) {
System.err.println(e);
}
canvas.sendEventToBehaviorScheduler(e);
}
@Override
public void windowDeactivated(WindowEvent e) {
if (DEBUG) {
System.err.println(e);
}
canvas.sendEventToBehaviorScheduler(e);
}
@Override
public void windowDeiconified(WindowEvent e) {
if (DEBUG) {
System.err.println(e);
}
canvas.sendEventToBehaviorScheduler(e);
if (canvas.view != null) {
canvas.view.sendEventToSoundScheduler(e);
}
canvas.evaluateVisiblilty();
}
@Override
public void windowIconified(WindowEvent e) {
if (DEBUG) {
System.err.println(e);
}
canvas.sendEventToBehaviorScheduler(e);
if (canvas.view != null) {
canvas.view.sendEventToSoundScheduler(e);
}
canvas.evaluateVisiblilty();
}
@Override
public void windowOpened(WindowEvent e) {
if (DEBUG) {
System.err.println(e);
}
canvas.sendEventToBehaviorScheduler(e);
canvas.evaluateVisiblilty();
}
void reset() {
focusEvents = false;
keyEvents = false;
mouseEvents = false;
mouseMotionEvents = false;
mouseWheelEvents = false;
mouseListenerAdded = false;
stopped = false;
}
}