+++ /dev/null
-/*******************************************************************************\r
- * Copyright (c) 2007- VTT Technical Research Centre of Finland.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.proconf.g3d.input;\r
-\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.FocusEvent;\r
-import org.eclipse.swt.events.FocusListener;\r
-import org.eclipse.swt.events.KeyEvent;\r
-import org.eclipse.swt.events.KeyListener;\r
-import org.eclipse.swt.events.MouseEvent;\r
-import org.eclipse.swt.events.MouseListener;\r
-import org.eclipse.swt.events.MouseMoveListener;\r
-import org.eclipse.swt.events.MouseTrackListener;\r
-\r
-public class SWTInputProvider implements KeyListener, MouseListener, MouseMoveListener, MouseTrackListener, InputProvider, FocusListener {\r
- \r
- private static final int PRESS_TIME = 200;\r
- \r
- private boolean keyPressed[] = new boolean[1024];\r
- private boolean keyTemp[] = new boolean[1024];\r
- private boolean keyDown[] = new boolean[1024];\r
- private boolean keyUp[] = new boolean[1024];\r
- \r
- private int awtMouseX = 0;\r
- private int awtMouseY = 0;\r
- private boolean awtPressed = false;\r
- private boolean awtDragged = false;\r
- private boolean awtReleased = false;\r
- private boolean awtMouseClicked = false;\r
- private boolean awtMouseMoved = false;\r
- \r
- private boolean swtMouse1Down = false;\r
- private boolean swtMouse2Down = false;\r
- private boolean swtMouse3Down = false;\r
- \r
- long mouse1DownTime = 0;\r
- long mouse2DownTime = 0;\r
- long mouse3DownTime = 0;\r
- \r
- private int awtPressModifiers = 0;\r
- private int awtDragModifiers = 0;\r
- private int awtClickModifiers = 0;\r
- private int awtMoveModifiers = 0;\r
- private int awtClickButton = 0;\r
- \r
- private int mouseX = 0;\r
- private int mouseY = 0;\r
- \r
- private int prevMouseX = 0;\r
- private int prevMouseY = 0;\r
- \r
- private boolean mousePressed = false;\r
- private boolean mouseDragged = false;\r
- private boolean mouseReleased = false;\r
- private boolean mouseClicked = false;\r
- private boolean mouseMoved = false;\r
- \r
- private int pressModifiers = 0;\r
- private int clickModifiers = 0;\r
- private int dragModifiers = 0;\r
- private int clickButton = 0;\r
- private int moveModifiers = 0;\r
- \r
- public SWTInputProvider() {\r
- reset();\r
- }\r
- \r
- private void reset() {\r
- for (int i = 0; i < keyDown.length; i++) {\r
- keyDown[i] = false;\r
- keyTemp[i] = false;\r
- keyPressed[i] = false; \r
- keyUp[i] = false;\r
- }\r
- mousePressed = false;\r
- mouseDragged = false;\r
- mouseReleased = false;\r
- mouseClicked = false;\r
- mouseMoved = false;\r
- \r
- pressModifiers = 0;\r
- clickModifiers = 0;\r
- dragModifiers = 0;\r
- clickButton = 0;\r
- moveModifiers = 0;\r
- }\r
- \r
- public boolean keyPressed(int i) {\r
- return keyPressed[i];\r
- }\r
- \r
- public boolean keyDown(int i) {\r
- return keyDown[i];\r
- }\r
- \r
- public boolean keyUp(int i) {\r
- return keyUp[i];\r
- }\r
- \r
- public int mouseX() {\r
- return mouseX;\r
- }\r
- \r
- public int mouseY() {\r
- return mouseY;\r
- }\r
- \r
- public int prevMouseX() {\r
- return prevMouseX;\r
- }\r
- \r
- public int prevMouseY() {\r
- return prevMouseY;\r
- }\r
- \r
- public boolean mousePressed() {\r
- return mousePressed;\r
- }\r
- \r
- public boolean mouseMoved() {\r
- return mouseMoved;\r
- }\r
- \r
- public boolean mouseReleased() {\r
- return mouseReleased;\r
- }\r
- \r
- public boolean mouseClicked() {\r
- return mouseClicked;\r
- }\r
- \r
- public boolean mouseDragged() {\r
- return mouseDragged;\r
- }\r
- \r
- public int pressModifiers() {\r
- return pressModifiers;\r
- }\r
- \r
- public int clickModifiers() {\r
- return clickModifiers;\r
- }\r
- \r
- public int dragModifiers() {\r
- return dragModifiers;\r
- }\r
- \r
- public int moveModifiers() {\r
- return moveModifiers;\r
- }\r
- \r
- public int clickButton() {\r
- return clickButton;\r
- }\r
- \r
- \r
- public void update() {\r
- prevMouseX = mouseX;\r
- prevMouseY = mouseY;\r
- mouseX = awtMouseX;\r
- mouseY = awtMouseY;\r
- //System.out.println(mouseX + " " + mouseY);\r
- mousePressed = awtPressed;\r
- awtPressed = false;\r
- mouseReleased = awtReleased;\r
- awtReleased = false;\r
- mouseMoved = awtMouseMoved;\r
- awtMouseMoved = false;\r
- mouseDragged = awtDragged;\r
- awtDragged = false;\r
- mouseClicked = awtMouseClicked;\r
- awtMouseClicked = false;\r
- pressModifiers = awtPressModifiers;\r
- // awtPressModifiers = 0;\r
- clickModifiers = awtClickModifiers;\r
- //awtClickModifiers = 0;\r
- dragModifiers = awtDragModifiers;\r
- // awtDragModifiers = 0;\r
- moveModifiers = awtMoveModifiers;\r
- //awtMoveModifiers = 0;\r
- clickButton = awtClickButton;\r
- awtClickButton = 0;\r
- for (int i = 0; i < keyDown.length; i++) {\r
- if (keyDown[i] && !keyTemp[i]) {\r
- keyTemp[i] = true;\r
- keyPressed[i] = true;\r
- }\r
- else if (keyDown[i] && keyTemp[i]) {\r
- keyPressed[i] = false;\r
- }\r
- else if (!keyDown[i] && keyTemp[i]) {\r
- keyUp[i] = true;\r
- keyTemp[i] = false;\r
- keyPressed[i] = false;\r
- }\r
- else if (!keyDown[i]) {\r
- keyTemp[i] = false;\r
- keyPressed[i] = false;\r
- keyUp[i] = false;\r
- }\r
- }\r
- \r
- }\r
- \r
- \r
-\r
-\r
- private int getAWTKeyCode(int swtKeyCode) {\r
- if(swtKeyCode > keyDown.length) {\r
- int keyCode = 0;\r
- switch (swtKeyCode) {\r
- case SWT.CTRL:\r
- keyCode = java.awt.event.KeyEvent.VK_CONTROL;\r
- break;\r
- case SWT.ALT:\r
- keyCode = java.awt.event.KeyEvent.VK_ALT;\r
- break;\r
- \r
- case SWT.SHIFT:\r
- keyCode = java.awt.event.KeyEvent.VK_SHIFT;\r
- break;\r
- case SWT.ARROW_LEFT:\r
- keyCode = java.awt.event.KeyEvent.VK_LEFT;\r
- break;\r
- case SWT.ARROW_RIGHT:\r
- keyCode = java.awt.event.KeyEvent.VK_RIGHT;\r
- break;\r
- case SWT.ARROW_UP:\r
- keyCode = java.awt.event.KeyEvent.VK_UP;\r
- break;\r
- case SWT.ARROW_DOWN:\r
- keyCode = java.awt.event.KeyEvent.VK_DOWN;\r
- break;\r
- case SWT.KEYPAD_0:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD0;\r
- break;\r
- case SWT.KEYPAD_1:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD1;\r
- break;\r
- case SWT.KEYPAD_2:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD2;\r
- break;\r
- case SWT.KEYPAD_3:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD3;\r
- break;\r
- case SWT.KEYPAD_4:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD4;\r
- break;\r
- case SWT.KEYPAD_5:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD5;\r
- break;\r
- case SWT.KEYPAD_6:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD6;\r
- break;\r
- case SWT.KEYPAD_7:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD7;\r
- break;\r
- case SWT.KEYPAD_8:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD8;\r
- break;\r
- case SWT.KEYPAD_9:\r
- keyCode = java.awt.event.KeyEvent.VK_NUMPAD9;\r
- break;\r
- case SWT.KEYPAD_CR:\r
- keyCode = java.awt.event.KeyEvent.VK_ENTER;\r
- break;\r
- case SWT.NUM_LOCK:\r
- keyCode = java.awt.event.KeyEvent.VK_NUM_LOCK;\r
- break;\r
- case SWT.SCROLL_LOCK:\r
- keyCode = java.awt.event.KeyEvent.VK_SCROLL_LOCK;\r
- break;\r
- case SWT.CAPS_LOCK:\r
- keyCode = java.awt.event.KeyEvent.VK_CAPS_LOCK;\r
- break;\r
- case SWT.INSERT:\r
- keyCode = java.awt.event.KeyEvent.VK_INSERT;\r
- break;\r
- case SWT.HOME:\r
- keyCode = java.awt.event.KeyEvent.VK_HOME;\r
- break;\r
- case SWT.END:\r
- keyCode = java.awt.event.KeyEvent.VK_END;\r
- break;\r
- case SWT.PAGE_UP:\r
- keyCode = java.awt.event.KeyEvent.VK_PAGE_UP;\r
- break;\r
- case SWT.PAGE_DOWN:\r
- keyCode = java.awt.event.KeyEvent.VK_PAGE_DOWN;\r
- break;\r
- case SWT.PAUSE:\r
- keyCode = java.awt.event.KeyEvent.VK_PAUSE; \r
- break;\r
- case SWT.BREAK:\r
- keyCode = java.awt.event.KeyEvent.VK_PAUSE; \r
- break;\r
- case SWT.PRINT_SCREEN:\r
- keyCode = java.awt.event.KeyEvent.VK_PRINTSCREEN; \r
- break; \r
- case SWT.HELP:\r
- keyCode = java.awt.event.KeyEvent.VK_HELP;\r
- break;\r
- default :\r
- keyCode = 0;\r
- break;\r
- }\r
- \r
- return keyCode;\r
- } else if (swtKeyCode == 8) {\r
- return java.awt.event.KeyEvent.VK_BACK_SPACE;\r
- }\r
- else if (swtKeyCode >= 97 )\r
- return swtKeyCode - 32;\r
- else\r
- return swtKeyCode;\r
- }\r
-\r
- \r
- /* (non-Javadoc)\r
- * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent)\r
- */\r
- public void keyPressed(KeyEvent arg0) {\r
- //System.out.println("KeyPressed " + arg0.character + " " + arg0.keyCode + " " + getAWTKeyCode(arg0.keyCode));\r
- keyDown[getAWTKeyCode(arg0.keyCode)] = true;\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)\r
- */\r
- public void keyReleased(KeyEvent arg0) {\r
- //System.out.println("KeyReleased " + arg0.character + " " + arg0.keyCode + " " + getAWTKeyCode(arg0.keyCode));\r
- \r
- keyDown[getAWTKeyCode(arg0.keyCode)] = false;\r
- }\r
-\r
- public void mouseMove(MouseEvent e) {\r
- awtMouseX = e.x;\r
- awtMouseY = e.y; \r
- if (swtMouse1Down || swtMouse2Down || swtMouse3Down) {\r
- // comparing times so that drag event won't be send at the time when mouse button was pressed\r
- long time = e.time & 0xFFFFFFFFL;\r
- boolean drag = false;\r
- if (swtMouse1Down) {\r
- drag = time > mouse1DownTime;\r
- } else if (swtMouse2Down) {\r
- drag = time > mouse2DownTime;\r
- } else {\r
- drag = time > mouse3DownTime;\r
- }\r
- if (drag) {\r
- awtDragged = true;\r
- awtDragModifiers = createButtonMask(e);\r
- }\r
- } else {\r
- awtMoveModifiers = createButtonMask(e);\r
- awtMouseMoved = true;\r
- }\r
- }\r
-\r
- public void mouseDoubleClick(MouseEvent e) {\r
- /*\r
- awtMouseClicked = true;\r
- awtClickModifiers = createButtonMask(e);\r
- switch (e.button) {\r
- case 1:\r
- awtClickButton = java.awt.event.MouseEvent.BUTTON1;\r
- break;\r
- case 2:\r
- awtClickButton = java.awt.event.MouseEvent.BUTTON2;\r
- break;\r
- case 3:\r
- awtClickButton = java.awt.event.MouseEvent.BUTTON3;\r
- break;\r
- \r
- }\r
- */\r
- }\r
- \r
- private int createButtonMask(MouseEvent e) {\r
- int mask = 0;\r
- if (swtMouse1Down)\r
- mask |= java.awt.event.MouseEvent.BUTTON1_DOWN_MASK | java.awt.event.MouseEvent.BUTTON1_MASK;\r
- if (swtMouse2Down)\r
- mask |= java.awt.event.MouseEvent.BUTTON2_DOWN_MASK | java.awt.event.MouseEvent.BUTTON2_MASK;\r
- if (swtMouse3Down)\r
- mask |= java.awt.event.MouseEvent.BUTTON3_DOWN_MASK | java.awt.event.MouseEvent.BUTTON3_MASK;\r
- if ((e.stateMask & SWT.CTRL) > 0) \r
- mask |= java.awt.event.MouseEvent.CTRL_DOWN_MASK | java.awt.event.MouseEvent.CTRL_MASK;\r
- if ((e.stateMask & SWT.CTRL) > 0) \r
- mask |= java.awt.event.MouseEvent.ALT_DOWN_MASK | java.awt.event.MouseEvent.ALT_MASK;\r
- \r
- \r
- return mask;\r
- }\r
-\r
- public void mouseDown(MouseEvent e) {\r
- switch (e.button) {\r
- case 1:\r
- swtMouse1Down = true;\r
- mouse1DownTime = e.time & 0xFFFFFFFFL;\r
- break;\r
- case 2:\r
- swtMouse2Down = true;\r
- mouse2DownTime = e.time & 0xFFFFFFFFL;\r
- break;\r
- case 3:\r
- swtMouse3Down = true;\r
- mouse3DownTime = e.time & 0xFFFFFFFFL;\r
- };\r
- \r
- awtPressed = true;\r
- awtPressModifiers = createButtonMask(e);\r
- }\r
-\r
- public void mouseUp(MouseEvent e) {\r
- long mouseUpTime = e.time & 0xFFFFFFFFL;\r
- long delta = 1000;\r
- switch (e.button) {\r
- case 1:\r
- swtMouse1Down = false;\r
- delta = mouseUpTime - mouse1DownTime;\r
- break;\r
- case 2:\r
- swtMouse2Down = false;\r
- delta = mouseUpTime - mouse2DownTime;\r
- break;\r
- case 3:\r
- swtMouse3Down = false;\r
- delta = mouseUpTime - mouse3DownTime;\r
- };\r
- awtReleased = true;\r
- \r
- if (delta < PRESS_TIME) {\r
- awtMouseClicked = true;\r
- awtClickModifiers = createButtonMask(e);\r
- switch (e.button) {\r
- case 1:\r
- awtClickButton = java.awt.event.MouseEvent.BUTTON1;\r
- break;\r
- case 2:\r
- awtClickButton = java.awt.event.MouseEvent.BUTTON2;\r
- break;\r
- case 3:\r
- awtClickButton = java.awt.event.MouseEvent.BUTTON3;\r
- break;\r
- \r
- }\r
- }\r
- }\r
- \r
- \r
- public void mouseEnter(MouseEvent e) {\r
- \r
- }\r
- \r
- public void mouseExit(MouseEvent e) {\r
- awtReleased = false;\r
- awtPressed = false;\r
- swtMouse1Down = false;\r
- swtMouse2Down = false;\r
- swtMouse3Down = false;\r
- \r
- \r
- }\r
- \r
- public void focusGained(FocusEvent e) {\r
-\r
- }\r
- \r
- public void focusLost(FocusEvent e) {\r
- reset();\r
- }\r
- \r
- public void mouseHover(MouseEvent e) {\r
-\r
- }\r
- \r
- public void setMouseMoved(boolean b) {\r
- awtMouseMoved = b;\r
- }\r
- \r
- public void setMouseX(int x) {\r
- awtMouseX = x;\r
- }\r
- \r
- public void setMouseY(int y) {\r
- awtMouseY = y;\r
- }\r
-\r
- public String toString() {\r
- String s = "";\r
- s += "(" + mouseX + "," + mouseY + ")\n";\r
- s += "Pressed " + mousePressed + "\n";\r
- s += "Released " + mouseReleased + "\n";\r
- s += "Moved " + mouseMoved + "\n";\r
- s += "Dragged " + mouseDragged + "\n";\r
- s += "Clicked " + mouseClicked + "\n";\r
- s += "DragModifiers " + dragModifiers + "\n";\r
- s += "ClickModifiers " + clickModifiers + "\n";\r
- s += "PressModifiers " + pressModifiers + "\n";\r
- return s;\r
- }\r
-}
\ No newline at end of file