X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=inline;f=vtk.rendering%2Fsrc%2Fvtk%2Frendering%2Fswt%2FvtkSwtInteractorForwarderDecorator.java;h=562595640f4b2262f7687178c8cd3d3e0e3ddae8;hb=58b68ec134db6382f4c401ee7374a74d0aa6cd78;hp=28178862d983c8f974f13685c72bac61e6051617;hpb=d40911aa559213f660ac87c9bbd9f98fe81fba28;p=simantics%2F3d.git diff --git a/vtk.rendering/src/vtk/rendering/swt/vtkSwtInteractorForwarderDecorator.java b/vtk.rendering/src/vtk/rendering/swt/vtkSwtInteractorForwarderDecorator.java index 28178862..56259564 100644 --- a/vtk.rendering/src/vtk/rendering/swt/vtkSwtInteractorForwarderDecorator.java +++ b/vtk.rendering/src/vtk/rendering/swt/vtkSwtInteractorForwarderDecorator.java @@ -13,6 +13,7 @@ import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.events.MouseTrackListener; import org.eclipse.swt.events.MouseWheelListener; +import org.eclipse.swt.internal.DPIUtil; /** * Decorator class used to implement all Mouse/Key SWT listener and convert them @@ -35,16 +36,19 @@ implements MouseListener, MouseMoveListener, MouseTrackListener, MouseWheelListe this.forwarder = forwarder; } - public static int convertModifiers(int mods) { + public static int convertModifiers(int button , int mods) { int modifiers = 0; if ((mods & SWT.SHIFT) != 0) modifiers |= java.awt.Event.SHIFT_MASK; if ((mods & SWT.CTRL) != 0) modifiers |= java.awt.Event.CTRL_MASK; if ((mods & SWT.ALT) != 0) modifiers |= java.awt.Event.ALT_MASK; + if ((mods & SWT.BUTTON1) != 0 || button == 1) modifiers |= java.awt.event.InputEvent.BUTTON1_MASK; + if ((mods & SWT.BUTTON2) != 0 || button == 2) modifiers |= java.awt.event.InputEvent.BUTTON2_MASK; + if ((mods & SWT.BUTTON3) != 0 || button == 3) modifiers |= java.awt.event.InputEvent.BUTTON3_MASK; return modifiers; } public java.awt.event.KeyEvent convertKeyEvent(org.eclipse.swt.events.KeyEvent e) { - return new java.awt.event.KeyEvent(dummyComponent, 0, (long)e.time, convertModifiers(e.stateMask), e.keyCode, e.character); + return new java.awt.event.KeyEvent(dummyComponent, 0, (long)e.time, convertModifiers(0, e.stateMask), convertKeyCode(e.keyCode), e.character); } public java.awt.event.MouseEvent convertMouseEvent(org.eclipse.swt.events.MouseEvent e) { @@ -52,11 +56,18 @@ implements MouseListener, MouseMoveListener, MouseTrackListener, MouseWheelListe if ((e.button == 1) || (e.stateMask & SWT.BUTTON1) != 0) button = java.awt.event.MouseEvent.BUTTON1; else if ((e.button == 2) || (e.stateMask & SWT.BUTTON2) != 0) button = java.awt.event.MouseEvent.BUTTON2; else if ((e.button == 3) || (e.stateMask & SWT.BUTTON3) != 0) button = java.awt.event.MouseEvent.BUTTON3; - return new java.awt.event.MouseEvent(dummyComponent, 0, (long)e.time, convertModifiers(e.stateMask), e.x, e.y, e.count, false, button); + 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); + } + + public int convertKeyCode(int swtKeyCode) { + if (swtKeyCode >= 'a' && swtKeyCode <= 'z') { + return Character.toUpperCase(swtKeyCode); + } + return swtKeyCode; } public java.awt.event.MouseWheelEvent convertMouseWheelEvent(org.eclipse.swt.events.MouseEvent e) { - return new java.awt.event.MouseWheelEvent(dummyComponent, 0, e.time, convertModifiers(e.stateMask), e.x, e.y, 0, false, java.awt.event.MouseWheelEvent.WHEEL_UNIT_SCROLL, 1, e.count); + 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); } public void keyPressed(KeyEvent e) { @@ -85,12 +96,21 @@ implements MouseListener, MouseMoveListener, MouseTrackListener, MouseWheelListe } } + int x = 0; + int y = 0; + int d = 4; + public void mouseDown(MouseEvent e) { super.mousePressed(convertMouseEvent(e)); + x = e.x; + y = e.y; } public void mouseUp(MouseEvent e) { super.mouseReleased(convertMouseEvent(e)); + // Emulate AWT mouse clicks + if (Math.abs(x-e.x) < d && Math.abs(y-e.y) < d) + super.mouseClicked(convertMouseEvent(e)); } public void mouseScrolled(MouseEvent e) {