aboutsummaryrefslogtreecommitdiffstats
path: root/src/jake2/sys/JOGLKBD.java
diff options
context:
space:
mode:
authorHolger Zickner <[email protected]>2004-12-14 00:11:10 +0000
committerHolger Zickner <[email protected]>2004-12-14 00:11:10 +0000
commitcadbb63200c0b4634ca2c323c1b8310ed64b90ab (patch)
tree080b0abe7f10ab75dfedab4f8f8cd078e3770e2f /src/jake2/sys/JOGLKBD.java
parenta762a826574cb72f19ccbe1870688ff1b6010b77 (diff)
merge LWJGL input system changes
Diffstat (limited to 'src/jake2/sys/JOGLKBD.java')
-rw-r--r--src/jake2/sys/JOGLKBD.java219
1 files changed, 219 insertions, 0 deletions
diff --git a/src/jake2/sys/JOGLKBD.java b/src/jake2/sys/JOGLKBD.java
new file mode 100644
index 0000000..18fccad
--- /dev/null
+++ b/src/jake2/sys/JOGLKBD.java
@@ -0,0 +1,219 @@
+package jake2.sys;
+
+import jake2.client.Key;
+
+import java.awt.AWTException;
+import java.awt.Component;
+import java.awt.Container;
+import java.awt.Cursor;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.event.ComponentEvent;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+
+import javax.swing.ImageIcon;
+
+final public class JOGLKBD extends KBD
+{
+ static Robot robot;
+ public static InputListener listener = new InputListener();
+ static Cursor emptyCursor = null;
+ static Component c = null;
+
+ static int win_w2 = 0;
+ static int win_h2 = 0;
+
+ static {
+ try {
+ robot = new Robot();
+ } catch (AWTException e) {
+ System.exit(1);
+ }
+ }
+
+ public void Init() {
+ }
+
+ public void Update() {
+ // get events
+ HandleEvents();
+ }
+
+ public void Close() {
+ }
+
+ private void HandleEvents()
+ {
+ int b;
+
+ Jake2InputEvent event;
+ while ( (event=InputListener.nextEvent()) != null ) {
+ switch(event.type) {
+ case Jake2InputEvent.KeyPress:
+ case Jake2InputEvent.KeyRelease:
+ Do_Key_Event(XLateKey((KeyEvent)event.ev), event.type == Jake2InputEvent.KeyPress);
+ break;
+
+ case Jake2InputEvent.MotionNotify:
+// if (IN.ignorefirst) {
+// IN.ignorefirst = false;
+// break;
+// }
+ if (IN.mouse_active) {
+ mx = (((MouseEvent)event.ev).getX() - win_w2) * 2;
+ my = (((MouseEvent)event.ev).getY() - win_h2) * 2;
+ } else {
+ mx = 0;
+ my = 0;
+ }
+ break;
+
+ case Jake2InputEvent.ButtonPress:
+ b=((MouseEvent)event.ev).getButton()-1;
+ Do_Key_Event(Key.K_MOUSE1 + b, true);
+ break;
+
+ case Jake2InputEvent.ButtonRelease:
+ b=((MouseEvent)event.ev).getButton()-1;
+ Do_Key_Event(Key.K_MOUSE1 + b, false);
+ break;
+
+ case Jake2InputEvent.CreateNotify :
+ case Jake2InputEvent.ConfigureNotify :
+ Component c = ((ComponentEvent)event.ev).getComponent();
+ win_x = 0;
+ win_y = 0;
+ win_w2 = c.getWidth() / 2;
+ win_h2 = c.getHeight() / 2;
+ while (c != null) {
+ if (c instanceof Container) {
+ Insets insets = ((Container)c).getInsets();
+ win_x += insets.left;
+ win_y += insets.top;
+ }
+ win_x += c.getX();
+ win_y += c.getY();
+ c = c.getParent();
+ }
+ break;
+ }
+ }
+
+ if (mx != 0 || my != 0) {
+ // move the mouse to the window center again
+ robot.mouseMove(win_x + win_w2, win_y + win_h2);
+ }
+ }
+
+ private static int XLateKey(KeyEvent ev) {
+
+ int key = 0;
+ int code = ev.getKeyCode();
+
+ switch(code) {
+// 00626 case XK_KP_Page_Up: key = K_KP_PGUP; break;
+ case KeyEvent.VK_PAGE_UP: key = Key.K_PGUP; break;
+
+// 00629 case XK_KP_Page_Down: key = K_KP_PGDN; break;
+ case KeyEvent.VK_PAGE_DOWN: key = Key.K_PGDN; break;
+
+// 00632 case XK_KP_Home: key = K_KP_HOME; break;
+ case KeyEvent.VK_HOME: key = Key.K_HOME; break;
+
+// 00635 case XK_KP_End: key = K_KP_END; break;
+ case KeyEvent.VK_END: key = Key.K_END; break;
+
+ case KeyEvent.VK_KP_LEFT: key = Key.K_KP_LEFTARROW; break;
+ case KeyEvent.VK_LEFT: key = Key.K_LEFTARROW; break;
+
+ case KeyEvent.VK_KP_RIGHT: key = Key.K_KP_RIGHTARROW; break;
+ case KeyEvent.VK_RIGHT: key = Key.K_RIGHTARROW; break;
+
+ case KeyEvent.VK_KP_DOWN: key = Key.K_KP_DOWNARROW; break;
+ case KeyEvent.VK_DOWN: key = Key.K_DOWNARROW; break;
+
+ case KeyEvent.VK_KP_UP: key = Key.K_KP_UPARROW; break;
+ case KeyEvent.VK_UP: key = Key.K_UPARROW; break;
+
+ case KeyEvent.VK_ESCAPE: key = Key.K_ESCAPE; break;
+
+
+ case KeyEvent.VK_ENTER: key = Key.K_ENTER; break;
+// 00652 case XK_KP_Enter: key = K_KP_ENTER; break;
+
+ case KeyEvent.VK_TAB: key = Key.K_TAB; break;
+
+ case KeyEvent.VK_F1: key = Key.K_F1; break;
+ case KeyEvent.VK_F2: key = Key.K_F2; break;
+ case KeyEvent.VK_F3: key = Key.K_F3; break;
+ case KeyEvent.VK_F4: key = Key.K_F4; break;
+ case KeyEvent.VK_F5: key = Key.K_F5; break;
+ case KeyEvent.VK_F6: key = Key.K_F6; break;
+ case KeyEvent.VK_F7: key = Key.K_F7; break;
+ case KeyEvent.VK_F8: key = Key.K_F8; break;
+ case KeyEvent.VK_F9: key = Key.K_F9; break;
+ case KeyEvent.VK_F10: key = Key.K_F10; break;
+ case KeyEvent.VK_F11: key = Key.K_F11; break;
+ case KeyEvent.VK_F12: key = Key.K_F12; break;
+
+ case KeyEvent.VK_BACK_SPACE: key = Key.K_BACKSPACE; break;
+
+ case KeyEvent.VK_DELETE: key = Key.K_DEL; break;
+// 00683 case XK_KP_Delete: key = K_KP_DEL; break;
+
+ case KeyEvent.VK_PAUSE: key = Key.K_PAUSE; break;
+
+ case KeyEvent.VK_SHIFT: key = Key.K_SHIFT; break;
+ case KeyEvent.VK_CONTROL: key = Key.K_CTRL; break;
+
+ case KeyEvent.VK_ALT:
+ case KeyEvent.VK_ALT_GRAPH: key = Key.K_ALT; break;
+
+// 00700 case XK_KP_Begin: key = K_KP_5; break;
+// 00701
+ case KeyEvent.VK_INSERT: key = Key.K_INS; break;
+ // toggle console for DE and US keyboards
+ case KeyEvent.VK_DEAD_ACUTE:
+ case KeyEvent.VK_CIRCUMFLEX:
+ case KeyEvent.VK_DEAD_CIRCUMFLEX: key = '`'; break;
+
+ default:
+ if ((ev.getModifiers() & (InputEvent.ALT_MASK | InputEvent.CTRL_MASK)) != 0) {
+ key = ev.getKeyCode();
+ } else {
+ key = ev.getKeyChar();
+ }
+ if (key >= 'A' && key <= 'Z')
+ key = key - 'A' + 'a';
+ break;
+ }
+ if (key > 255) key = 0;
+
+ return key;
+ }
+
+ public void Do_Key_Event(int key, boolean down) {
+ Key.Event(key, down, Sys.Milliseconds());
+ }
+
+ public void centerMouse() {
+ robot.mouseMove(win_x + win_w2, win_y + win_h2);
+ }
+
+ public void installGrabs()
+ {
+ if (emptyCursor == null) {
+ ImageIcon emptyIcon = new ImageIcon(new byte[0]);
+ emptyCursor = c.getToolkit().createCustomCursor(emptyIcon.getImage(), new Point(0, 0), "emptyCursor");
+ }
+ c.setCursor(emptyCursor);
+ }
+
+ public void uninstallGrabs()
+ {
+ c.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+ }
+}