diff options
author | Holger Zickner <[email protected]> | 2004-12-14 00:11:10 +0000 |
---|---|---|
committer | Holger Zickner <[email protected]> | 2004-12-14 00:11:10 +0000 |
commit | cadbb63200c0b4634ca2c323c1b8310ed64b90ab (patch) | |
tree | 080b0abe7f10ab75dfedab4f8f8cd078e3770e2f /src/jake2 | |
parent | a762a826574cb72f19ccbe1870688ff1b6010b77 (diff) |
merge LWJGL input system changes
Diffstat (limited to 'src/jake2')
-rw-r--r-- | src/jake2/client/VID.java | 24 | ||||
-rw-r--r-- | src/jake2/client/refexport_t.java | 5 | ||||
-rw-r--r-- | src/jake2/render/FastJoglRenderer.java | 10 | ||||
-rw-r--r-- | src/jake2/render/JoglBase.java | 13 | ||||
-rw-r--r-- | src/jake2/render/JoglRenderer.java | 14 | ||||
-rw-r--r-- | src/jake2/sys/IN.java | 51 | ||||
-rw-r--r-- | src/jake2/sys/InputListener.java | 4 | ||||
-rw-r--r-- | src/jake2/sys/JOGLKBD.java | 219 | ||||
-rw-r--r-- | src/jake2/sys/KBD.java | 204 | ||||
-rw-r--r-- | src/jake2/sys/LWJGLKBD.java | 186 | ||||
-rw-r--r-- | src/jake2/sys/Sys.java | 4 |
11 files changed, 489 insertions, 245 deletions
diff --git a/src/jake2/client/VID.java b/src/jake2/client/VID.java index b77128b..5dc39d5 100644 --- a/src/jake2/client/VID.java +++ b/src/jake2/client/VID.java @@ -2,7 +2,7 @@ * VID.java * Copyright (C) 2003 * - * $Id: VID.java,v 1.9 2004-08-23 20:49:12 hzi Exp $ + * $Id: VID.java,v 1.10 2004-12-14 00:11:10 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -33,7 +33,6 @@ import jake2.qcommon.*; import jake2.render.Renderer; import jake2.sound.S; import jake2.sys.IN; -import jake2.sys.KBD; import jake2.util.Vargs; import java.awt.Dimension; @@ -155,7 +154,7 @@ public class VID extends Globals { static void FreeReflib() { if (Globals.re != null) { - KBD.Close(); + Globals.re.getKeyboardHandler().Close(); IN.Shutdown(); } @@ -173,7 +172,7 @@ public class VID extends Globals { if ( reflib_active ) { - KBD.Close(); + Globals.re.getKeyboardHandler().Close(); IN.Shutdown(); Globals.re.Shutdown(); @@ -221,7 +220,7 @@ public class VID extends Globals { } /* Init KBD */ - KBD.Init(); + Globals.re.getKeyboardHandler().Init(); Com.Printf( "------------------------------------\n"); reflib_active = true; @@ -329,7 +328,7 @@ public class VID extends Globals { { if ( reflib_active ) { - KBD.Close(); + Globals.re.getKeyboardHandler().Close(); IN.Shutdown(); Globals.re.Shutdown(); @@ -345,6 +344,7 @@ public class VID extends Globals { static final int REF_OPENGL_JOGL = 0; static final int REF_OPENGL_FASTJOGL =1; + static final int REF_OPENGL_LWJGL =2; static cvar_t gl_mode; static cvar_t gl_driver; @@ -531,6 +531,12 @@ public class VID extends Globals { if (gl_driver.modified) vid_ref.modified = true; break; + case REF_OPENGL_LWJGL : + Cvar.Set( "vid_ref", "lwjgl" ); + Cvar.Set( "gl_driver", "lwjgl" ); + if (gl_driver.modified) + vid_ref.modified = true; + break; } Menu.ForceMenuOff(); @@ -565,6 +571,7 @@ public class VID extends Globals { // "[Mesa 3-D glX ]", "[OpenGL jogl ]", "[OpenGL fastjogl]", + "[OpenGL lwjgl]", null }; static final String[] yesno_names = @@ -658,6 +665,11 @@ public class VID extends Globals { s_current_menu_index = OPENGL_MENU; s_ref_list[0].curvalue = s_ref_list[1].curvalue = REF_OPENGL_FASTJOGL; } + else if ( vid_ref.string.equalsIgnoreCase("lwjgl")) + { + s_current_menu_index = OPENGL_MENU; + s_ref_list[0].curvalue = s_ref_list[1].curvalue = REF_OPENGL_LWJGL; + } // else if (strcmp( vid_ref->string, "softx" ) == 0 ) // { // s_current_menu_index = SOFTWARE_MENU; diff --git a/src/jake2/client/refexport_t.java b/src/jake2/client/refexport_t.java index 340a8c0..a5c3b25 100644 --- a/src/jake2/client/refexport_t.java +++ b/src/jake2/client/refexport_t.java @@ -2,7 +2,7 @@ * refexport_t.java * Copyright (C) 2003 * - * $Id: refexport_t.java,v 1.2 2004-07-15 14:37:35 hzi Exp $ + * $Id: refexport_t.java,v 1.3 2004-12-14 00:11:10 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -29,6 +29,7 @@ package jake2.client; import jake2.qcommon.xcommand_t; import jake2.render.image_t; import jake2.render.model_t; +import jake2.sys.KBD; import java.awt.Dimension; import java.awt.DisplayMode; @@ -107,4 +108,6 @@ public interface refexport_t { int apiVersion(); DisplayMode[] getModeList(); + + KBD getKeyboardHandler(); } diff --git a/src/jake2/render/FastJoglRenderer.java b/src/jake2/render/FastJoglRenderer.java index e333c10..7ec8d7e 100644 --- a/src/jake2/render/FastJoglRenderer.java +++ b/src/jake2/render/FastJoglRenderer.java @@ -2,7 +2,7 @@ * FastJoglRenderer.java * Copyright (C) 2003 * - * $Id: FastJoglRenderer.java,v 1.3 2004-07-16 10:11:34 cawe Exp $ + * $Id: FastJoglRenderer.java,v 1.4 2004-12-14 00:11:09 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -29,6 +29,8 @@ import jake2.Defines; import jake2.client.*; import jake2.qcommon.xcommand_t; import jake2.render.fastjogl.Misc; +import jake2.sys.JOGLKBD; +import jake2.sys.KBD; import java.awt.Dimension; @@ -39,6 +41,8 @@ import java.awt.Dimension; */ final class FastJoglRenderer extends Misc implements refexport_t, Ref { + private JOGLKBD kbd=new JOGLKBD(); + public static final String DRIVER_NAME = "fastjogl"; static { @@ -304,4 +308,8 @@ final class FastJoglRenderer extends Misc implements refexport_t, Ref { return this; } + public KBD getKeyboardHandler() + { + return kbd; + } }
\ No newline at end of file diff --git a/src/jake2/render/JoglBase.java b/src/jake2/render/JoglBase.java index 4388209..075e306 100644 --- a/src/jake2/render/JoglBase.java +++ b/src/jake2/render/JoglBase.java @@ -2,7 +2,7 @@ * JoglCommon.java * Copyright (C) 2004 * - * $Id: JoglBase.java,v 1.12 2004-11-03 08:53:27 hzi Exp $ + * $Id: JoglBase.java,v 1.13 2004-12-14 00:11:09 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -31,6 +31,7 @@ import jake2.client.*; import jake2.game.cvar_t; import jake2.qcommon.Cbuf; import jake2.qcommon.xcommand_t; +import jake2.sys.JOGLKBD; import jake2.sys.KBD; import java.awt.*; @@ -227,11 +228,11 @@ public abstract class JoglBase implements GLEventListener { }); // D I F F E R E N T J A K E 2 E V E N T P R O C E S S I N G - window.addComponentListener(KBD.listener); - canvas.addKeyListener(KBD.listener); - canvas.addMouseListener(KBD.listener); - canvas.addMouseMotionListener(KBD.listener); - canvas.addMouseWheelListener(KBD.listener); + window.addComponentListener(JOGLKBD.listener); + canvas.addKeyListener(JOGLKBD.listener); + canvas.addMouseListener(JOGLKBD.listener); + canvas.addMouseMotionListener(JOGLKBD.listener); + canvas.addMouseWheelListener(JOGLKBD.listener); if (fullscreen) { diff --git a/src/jake2/render/JoglRenderer.java b/src/jake2/render/JoglRenderer.java index 4aa619d..f381879 100644 --- a/src/jake2/render/JoglRenderer.java +++ b/src/jake2/render/JoglRenderer.java @@ -2,7 +2,7 @@ * JoglRenderer.java * Copyright (C) 2003 * - * $Id: JoglRenderer.java,v 1.5 2004-07-16 10:11:34 cawe Exp $ + * $Id: JoglRenderer.java,v 1.6 2004-12-14 00:11:03 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -26,9 +26,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. package jake2.render; import jake2.Defines; -import jake2.client.*; +import jake2.client.refdef_t; +import jake2.client.refexport_t; import jake2.qcommon.xcommand_t; import jake2.render.jogl.Misc; +import jake2.sys.JOGLKBD; +import jake2.sys.KBD; import java.awt.Dimension; @@ -39,6 +42,8 @@ import java.awt.Dimension; */ final class JoglRenderer extends Misc implements refexport_t, Ref { + private JOGLKBD kbd=new JOGLKBD(); + public static final String DRIVER_NAME = "jogl"; static { @@ -301,4 +306,9 @@ final class JoglRenderer extends Misc implements refexport_t, Ref { public refexport_t GetRefAPI() { return this; } + + public KBD getKeyboardHandler() + { + return kbd; + } }
\ No newline at end of file diff --git a/src/jake2/sys/IN.java b/src/jake2/sys/IN.java index 2c70d53..4723d3e 100644 --- a/src/jake2/sys/IN.java +++ b/src/jake2/sys/IN.java @@ -2,7 +2,7 @@ * IN.java * Copyright (C) 2003 * - * $Id: IN.java,v 1.5 2004-09-22 19:22:14 salomo Exp $ + * $Id: IN.java,v 1.6 2004-12-14 00:11:01 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -45,10 +45,6 @@ import javax.swing.ImageIcon; */ public final class IN extends Globals { - static Component c = null; - - static Cursor emptyCursor = null; - static boolean mouse_avail = true; static boolean mouse_active = false; @@ -66,7 +62,7 @@ public final class IN extends Globals { static boolean mlooking; public static void ActivateMouse() { - if (!mouse_avail || c == null) + if (!mouse_avail) return; if (!mouse_active) { KBD.mx = KBD.my = 0; // don't spazz @@ -84,19 +80,15 @@ public final class IN extends Globals { } private static void install_grabs() { - if (emptyCursor == null) { - ImageIcon emptyIcon = new ImageIcon(new byte[0]); - emptyCursor = c.getToolkit().createCustomCursor( - emptyIcon.getImage(), new Point(0, 0), "emptyCursor"); - } - c.setCursor(emptyCursor); - KBD.centerMouse(); - ignorefirst = true; + Globals.re.getKeyboardHandler().installGrabs(); + Globals.re.getKeyboardHandler().centerMouse(); + + ignorefirst = true; } private static void uninstall_grabs() { - c.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + Globals.re.getKeyboardHandler().uninstallGrabs(); } public static void toggleMouse() { @@ -157,21 +149,20 @@ public final class IN extends Globals { } public static void Commands() { - int i; - - if (!IN.mouse_avail) - return; - - for (i = 0; i < 3; i++) { - if ((IN.mouse_buttonstate & (1 << i)) != 0 - && (IN.mouse_oldbuttonstate & (1 << i)) == 0) - KBD.Do_Key_Event(Key.K_MOUSE1 + i, true); - - if ((IN.mouse_buttonstate & (1 << i)) == 0 - && (IN.mouse_oldbuttonstate & (1 << i)) != 0) - KBD.Do_Key_Event(Key.K_MOUSE1 + i, false); - } - IN.mouse_oldbuttonstate = IN.mouse_buttonstate; + int i; + + if (!IN.mouse_avail) + return; + + KBD kbd=Globals.re.getKeyboardHandler(); + for (i=0 ; i<3 ; i++) { + if ( (IN.mouse_buttonstate & (1<<i)) != 0 && (IN.mouse_oldbuttonstate & (1<<i)) == 0 ) + kbd.Do_Key_Event(Key.K_MOUSE1 + i, true); + + if ( (IN.mouse_buttonstate & (1<<i)) == 0 && (IN.mouse_oldbuttonstate & (1<<i)) != 0 ) + kbd.Do_Key_Event(Key.K_MOUSE1 + i, false); + } + IN.mouse_oldbuttonstate = IN.mouse_buttonstate; } public static void Frame() { diff --git a/src/jake2/sys/InputListener.java b/src/jake2/sys/InputListener.java index 2c60b38..2e2b57d 100644 --- a/src/jake2/sys/InputListener.java +++ b/src/jake2/sys/InputListener.java @@ -2,7 +2,7 @@ * InputListener.java * Copyright (C) 2004 * - * $Id: InputListener.java,v 1.3 2004-11-03 08:53:27 hzi Exp $ + * $Id: InputListener.java,v 1.4 2004-12-14 00:11:01 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -99,7 +99,7 @@ public final class InputListener implements KeyListener, MouseListener, } public void componentShown(ComponentEvent e) { - IN.c = e.getComponent(); + JOGLKBD.c = e.getComponent(); addEvent(new Jake2InputEvent(Jake2InputEvent.CreateNotify, e)); } 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)); + } +} diff --git a/src/jake2/sys/KBD.java b/src/jake2/sys/KBD.java index 3272090..426778d 100644 --- a/src/jake2/sys/KBD.java +++ b/src/jake2/sys/KBD.java @@ -2,7 +2,7 @@ * KBD.java * Copyright (C) 2004 * - * $Id: KBD.java,v 1.5 2004-11-03 10:16:42 hzi Exp $ + * $Id: KBD.java,v 1.6 2004-12-14 00:11:01 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -25,214 +25,28 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jake2.sys; -import jake2.client.Key; - -import java.awt.*; -import java.awt.event.*; /** * KBD */ -public final class KBD { +abstract public class KBD { static int win_x = 0; static int win_y = 0; - static int win_w2 = 0; - static int win_h2 = 0; // motion values public static int mx = 0; public static int my = 0; - static Robot robot; - public static InputListener listener = new InputListener(); - - static { - try { - robot = new Robot(); - } catch (AWTException e) { - System.exit(1); - } - } - - public static void Init() { - } - - public static void Update() { - // get events - HandleEvents(); - } - - public static void Close() { - } - - static 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.WheelMoved: - int dir = ((MouseWheelEvent)event.ev).getWheelRotation(); - if (dir > 0) { - Do_Key_Event(Key.K_MWHEELDOWN, true); - Do_Key_Event(Key.K_MWHEELDOWN, false); - } else { - Do_Key_Event(Key.K_MWHEELUP, true); - Do_Key_Event(Key.K_MWHEELUP, 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; + abstract public void Init(); -// 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; + abstract public void Update(); - case KeyEvent.VK_KP_DOWN: key = Key.K_KP_DOWNARROW; break; - case KeyEvent.VK_DOWN: key = Key.K_DOWNARROW; break; + abstract public void Close(); + abstract public void Do_Key_Event(int key, boolean down); - 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; - } - - static void Do_Key_Event(int key, boolean down) { - Key.Event(key, down, Sys.Milliseconds()); - } - - static void centerMouse() { - robot.mouseMove(win_x + win_w2, win_y + win_h2); - } - + abstract public void installGrabs(); + abstract public void uninstallGrabs(); + abstract public void centerMouse(); } diff --git a/src/jake2/sys/LWJGLKBD.java b/src/jake2/sys/LWJGLKBD.java new file mode 100644 index 0000000..1ef5935 --- /dev/null +++ b/src/jake2/sys/LWJGLKBD.java @@ -0,0 +1,186 @@ +package jake2.sys; + +import jake2.Defines; +import jake2.client.Key; +import jake2.qcommon.Cbuf; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; + +/** + * @author dsanders + */ +public class LWJGLKBD extends KBD { + + static private int win_w2; + static private int win_h2; + + public void Init() + { + try + { + if (!Keyboard.isCreated()) Keyboard.create(); + if (!Mouse.isCreated()) Mouse.create(); + + if (!Keyboard.isBuffered()) Keyboard.enableBuffer(); + if (!Mouse.isBuffered()) Mouse.enableBuffer(); + + win_w2=Display.getDisplayMode().getWidth()/2; + win_h2=Display.getDisplayMode().getHeight()/2; + + } catch (Exception e) {;} + } + + public void Update() { + // get events + HandleEvents(); + } + + public void Close() { + Keyboard.destroy(); + Mouse.destroy(); + } + + private void HandleEvents() + { + if (Display.isCloseRequested()) + { + Cbuf.ExecuteText(Defines.EXEC_APPEND, "quit"); + } + + for (int i=0; i<Keyboard.getNumKeyboardEvents(); i++) + { + Keyboard.next(); + + int key=Keyboard.getEventKey(); + char ch=Keyboard.getEventCharacter(); + Do_Key_Event(XLateKey(key,ch),Keyboard.getEventKeyState()); + } + + if (IN.mouse_active) + { + mx=(Mouse.getX()-win_w2)*2; + my=(Mouse.getY()-win_h2)*2; + } + else + { + mx=0; + my=0; + } + + while (Mouse.next()) + { + int button=Mouse.getEventButton(); + if (button>=0) + { + Do_Key_Event(Key.K_MOUSE1 + button, Mouse.getEventButtonState()); + } + } + } + + private static int XLateKey(int code, int ch) + { + int key = 0; + + switch(code) + { +// 00626 case XK_KP_Page_Up: key = K_KP_PGUP; break; + case Keyboard.KEY_PRIOR: key = Key.K_PGUP; break; + +// 00629 case XK_KP_Page_Down: key = K_KP_PGDN; break; + case Keyboard.KEY_NEXT: key = Key.K_PGDN; break; + +// 00632 case XK_KP_Home: key = K_KP_HOME; break; + case Keyboard.KEY_HOME: key = Key.K_HOME; break; + +// 00635 case XK_KP_End: key = K_KP_END; break; + case Keyboard.KEY_END: key = Key.K_END; break; + + // case Keyboard.KEY_LEFT: key = Key.K_KP_LEFTARROW; break; + case Keyboard.KEY_LEFT: key = Key.K_LEFTARROW; break; + + // case Keyboard.KEY_RIGHT: key = Key.K_KP_RIGHTARROW; break; + case Keyboard.KEY_RIGHT: key = Key.K_RIGHTARROW; break; + + // case Keyboard.KEY_DOWN: key = Key.K_KP_DOWNARROW; break; + case Keyboard.KEY_DOWN: key = Key.K_DOWNARROW; break; + + // case Keyboard.KEY_UP: key = Key.K_KP_UPARROW; break; + case Keyboard.KEY_UP: key = Key.K_UPARROW; break; + + case Keyboard.KEY_ESCAPE: key = Key.K_ESCAPE; break; + + + case Keyboard.KEY_RETURN: key = Key.K_ENTER; break; +// 00652 case XK_KP_Enter: key = K_KP_ENTER; break; + + case Keyboard.KEY_TAB: key = Key.K_TAB; break; + + case Keyboard.KEY_F1: key = Key.K_F1; break; + case Keyboard.KEY_F2: key = Key.K_F2; break; + case Keyboard.KEY_F3: key = Key.K_F3; break; + case Keyboard.KEY_F4: key = Key.K_F4; break; + case Keyboard.KEY_F5: key = Key.K_F5; break; + case Keyboard.KEY_F6: key = Key.K_F6; break; + case Keyboard.KEY_F7: key = Key.K_F7; break; + case Keyboard.KEY_F8: key = Key.K_F8; break; + case Keyboard.KEY_F9: key = Key.K_F9; break; + case Keyboard.KEY_F10: key = Key.K_F10; break; + case Keyboard.KEY_F11: key = Key.K_F11; break; + case Keyboard.KEY_F12: key = Key.K_F12; break; + + case Keyboard.KEY_BACK: key = Key.K_BACKSPACE; break; + + case Keyboard.KEY_DELETE: key = Key.K_DEL; break; +// 00683 case XK_KP_Delete: key = K_KP_DEL; break; + + case Keyboard.KEY_PAUSE: key = Key.K_PAUSE; break; + + case Keyboard.KEY_RSHIFT: + case Keyboard.KEY_LSHIFT: key = Key.K_SHIFT; break; + + case Keyboard.KEY_RCONTROL: + case Keyboard.KEY_LCONTROL: key = Key.K_CTRL; break; + + case Keyboard.KEY_LMENU: + case Keyboard.KEY_RMENU: key = Key.K_ALT; break; + +// 00700 case XK_KP_Begin: key = K_KP_5; break; +// 00701 + case Keyboard.KEY_INSERT: key = Key.K_INS; break; + // toggle console for DE and US keyboards + case Keyboard.KEY_CIRCUMFLEX: key = '`'; break; + + default: + key = ch; + 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() + { + Mouse.setPosition(win_x + win_w2,win_y + win_h2); + //Mouse.setGrabbed(true); + //Mouse.setTrackingEnabled(true); + } + + public void installGrabs() + { + Mouse.setGrabbed(true); + } + + public void uninstallGrabs() + { + Mouse.setGrabbed(false); + } +} diff --git a/src/jake2/sys/Sys.java b/src/jake2/sys/Sys.java index ba2a6c7..aeb30fc 100644 --- a/src/jake2/sys/Sys.java +++ b/src/jake2/sys/Sys.java @@ -2,7 +2,7 @@ * Sys.java * Copyright (C) 2003 * - * $Id: Sys.java,v 1.9 2004-09-22 19:22:14 salomo Exp $ + * $Id: Sys.java,v 1.10 2004-12-14 00:11:01 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -227,7 +227,7 @@ public final class Sys extends Defines { } public static void SendKeyEvents() { - KBD.Update(); + Globals.re.getKeyboardHandler().Update(); // grab frame time Globals.sys_frame_time = Sys.Milliseconds(); |