1 package vtk.rendering.swt;
5 import vtk.rendering.vtkComponent;
6 import vtk.rendering.vtkInteractorForwarder;
8 import org.eclipse.swt.SWT;
9 import org.eclipse.swt.events.KeyEvent;
10 import org.eclipse.swt.events.KeyListener;
11 import org.eclipse.swt.events.MouseEvent;
12 import org.eclipse.swt.events.MouseListener;
13 import org.eclipse.swt.events.MouseMoveListener;
14 import org.eclipse.swt.events.MouseTrackListener;
15 import org.eclipse.swt.events.MouseWheelListener;
16 import org.eclipse.swt.internal.DPIUtil;
19 * Decorator class used to implement all Mouse/Key SWT listener and convert them
20 * into the vtkInteractorForwarder proper AWT event.
22 * @author Joachim Pouderoux - joachim.pouderoux@kitware.com, Kitware SAS 2012
23 * @copyright This work was supported by CEA/CESTA
24 * Commissariat a l'Energie Atomique et aux Energies Alternatives,
25 * 15 avenue des Sablieres, CS 60001, 33116 Le Barp, France.
27 public class vtkSwtInteractorForwarderDecorator extends vtkInteractorForwarder
28 implements MouseListener, MouseMoveListener, MouseTrackListener, MouseWheelListener, KeyListener {
30 vtkInteractorForwarder forwarder;
33 public vtkSwtInteractorForwarderDecorator(vtkComponent<?> component, vtkInteractorForwarder forwarder) {
35 dummyComponent = new Label();
36 this.forwarder = forwarder;
39 public static int convertModifiers(int button , int mods) {
41 if ((mods & SWT.SHIFT) != 0) modifiers |= java.awt.Event.SHIFT_MASK;
42 if ((mods & SWT.CTRL) != 0) modifiers |= java.awt.Event.CTRL_MASK;
43 if ((mods & SWT.ALT) != 0) modifiers |= java.awt.Event.ALT_MASK;
44 if ((mods & SWT.BUTTON1) != 0 || button == 1) modifiers |= java.awt.event.InputEvent.BUTTON1_MASK;
45 if ((mods & SWT.BUTTON2) != 0 || button == 2) modifiers |= java.awt.event.InputEvent.BUTTON2_MASK;
46 if ((mods & SWT.BUTTON3) != 0 || button == 3) modifiers |= java.awt.event.InputEvent.BUTTON3_MASK;
50 public java.awt.event.KeyEvent convertKeyEvent(org.eclipse.swt.events.KeyEvent e) {
51 return new java.awt.event.KeyEvent(dummyComponent, 0, (long)e.time, convertModifiers(0, e.stateMask), convertKeyCode(e.keyCode), e.character);
54 public java.awt.event.MouseEvent convertMouseEvent(org.eclipse.swt.events.MouseEvent e) {
56 if ((e.button == 1) || (e.stateMask & SWT.BUTTON1) != 0) button = java.awt.event.MouseEvent.BUTTON1;
57 else if ((e.button == 2) || (e.stateMask & SWT.BUTTON2) != 0) button = java.awt.event.MouseEvent.BUTTON2;
58 else if ((e.button == 3) || (e.stateMask & SWT.BUTTON3) != 0) button = java.awt.event.MouseEvent.BUTTON3;
59 return new java.awt.event.MouseEvent(dummyComponent, 0, (long)e.time, convertModifiers(e.button,e.stateMask), DPIUtil.autoScaleUp(e.x), DPIUtil.autoScaleUp(e.y), e.count, false, button);
62 public int convertKeyCode(int swtKeyCode) {
63 if (swtKeyCode >= 'a' && swtKeyCode <= 'z') {
64 return Character.toUpperCase(swtKeyCode);
69 public java.awt.event.MouseWheelEvent convertMouseWheelEvent(org.eclipse.swt.events.MouseEvent e) {
70 return new java.awt.event.MouseWheelEvent(dummyComponent, 0, e.time, convertModifiers(e.button,e.stateMask), DPIUtil.autoScaleUp(e.x), DPIUtil.autoScaleUp(e.y), 0, false, java.awt.event.MouseWheelEvent.WHEEL_UNIT_SCROLL, 1, e.count);
73 public void keyPressed(KeyEvent e) {
74 super.keyPressed(convertKeyEvent(e));
77 public void keyReleased(KeyEvent e) {
78 super.keyReleased(convertKeyEvent(e));
81 public void mouseEnter(MouseEvent e) {
82 super.mouseEntered(convertMouseEvent(e));
85 public void mouseExit(MouseEvent e) {
86 super.mouseExited(convertMouseEvent(e));
89 public void mouseMove(MouseEvent e) {
90 if (((e.stateMask & SWT.BUTTON1) == 0)
91 && ((e.stateMask & SWT.BUTTON2) == 0)
92 && ((e.stateMask & SWT.BUTTON3) == 0)) {
93 super.mouseMoved(convertMouseEvent(e));
95 super.mouseDragged(convertMouseEvent(e));
103 public void mouseDown(MouseEvent e) {
104 super.mousePressed(convertMouseEvent(e));
109 public void mouseUp(MouseEvent e) {
110 super.mouseReleased(convertMouseEvent(e));
111 // Emulate AWT mouse clicks
112 if (Math.abs(x-e.x) < d && Math.abs(y-e.y) < d)
113 super.mouseClicked(convertMouseEvent(e));
116 public void mouseScrolled(MouseEvent e) {
117 super.mouseWheelMoved(convertMouseWheelEvent(e));
120 public void mouseHover(MouseEvent e) {
123 public void mouseDoubleClick(MouseEvent e) {