X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fevents%2Fadapter%2FAWTRemoteEventAdapter.java;h=af9f713e1c38e52d261707796069ad4ba4d3766b;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=543c9771ed88d3cf1f8737b3df3ba795f6a20534;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTRemoteEventAdapter.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTRemoteEventAdapter.java index 543c9771e..af9f713e1 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTRemoteEventAdapter.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/adapter/AWTRemoteEventAdapter.java @@ -1,236 +1,236 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.scenegraph.g2d.events.adapter; - -import java.awt.AWTEvent; -import java.awt.event.AWTEventListener; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; -import java.awt.event.MouseWheelEvent; -import java.awt.event.MouseWheelListener; -import java.awt.geom.Point2D; -import org.simantics.scenegraph.g2d.events.IEventHandler; -import org.simantics.scenegraph.g2d.events.IEventQueue; -import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent; -import org.simantics.scenegraph.g2d.events.KeyEvent.KeyReleasedEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonReleasedEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDoubleClickedEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent.MouseEnterEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent.MouseExitEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent.MouseWheelMovedEvent; -import org.simantics.scenegraph.g2d.events.adapter.AbstractEventAdapter; - - -/** - * Listens to objectinput stream and reads AWT events - * Adapts AWT events into G2D events. - * - * Sends adapted events to IEventHandler - */ -public class AWTRemoteEventAdapter extends AbstractEventAdapter implements AWTEventListener, MouseListener, MouseMotionListener, MouseWheelListener, KeyListener { - - /** Mouse id of the default mouse */ - public static final int MOUSE_ID = 0; - - private long[] pressTime = new long[5]; - int buttonStatus = 0; - - /** - * create new adapter - * @param input the input stream where the events are read from - * @param sender the sender field in the events - * @param delegator the target of the adapted events - */ - public AWTRemoteEventAdapter(Object sender, IEventHandler delegator) { - super(sender, delegator); - } - - /** - * create new adapter - * @param sender the sender field in the events - * @param queue - */ - public AWTRemoteEventAdapter(Object sender, IEventQueue queue) { - super(sender, queue); - } - - private Point2D getControlPosition(MouseEvent e) - { - return new Point2D.Double(e.getX(), e.getY()); - } - - private Point2D getScreenPosition(MouseEvent e) - { - java.awt.Point p = e.getLocationOnScreen(); - return new Point2D.Double(p.x, p.y); - } - - private int getMouseButton(MouseEvent e) - { - int awtMouseButton = e.getButton(); - if (awtMouseButton == MouseEvent.BUTTON1) - return org.simantics.scenegraph.g2d.events.MouseEvent.LEFT_BUTTON; - if (awtMouseButton == MouseEvent.BUTTON2) - return org.simantics.scenegraph.g2d.events.MouseEvent.MIDDLE_BUTTON; - if (awtMouseButton == MouseEvent.BUTTON3) - return org.simantics.scenegraph.g2d.events.MouseEvent.RIGHT_BUTTON; - return awtMouseButton; - } - - private static int getStateMask(MouseEvent e) { - int modifiers = e.getModifiersEx(); - int stateMask = 0; - if((modifiers & InputEvent.CTRL_DOWN_MASK) != 0) - stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.CTRL_MASK; - if((modifiers & InputEvent.ALT_DOWN_MASK) != 0) - stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.ALT_MASK; - if((modifiers & InputEvent.ALT_GRAPH_DOWN_MASK) != 0) - stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.ALT_GRAPH_MASK; - if((modifiers & InputEvent.SHIFT_DOWN_MASK) != 0) - stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.SHIFT_MASK; - return stateMask; - } - - - public void mouseEntered(MouseEvent e) { - buttonStatus = 0; - MouseEnterEvent me = new MouseEnterEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e)); - handleEvent(me); - } - - - public void mouseExited(MouseEvent e) { - MouseExitEvent me = new MouseExitEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e)); - handleEvent(me); - } - - - public void mousePressed(MouseEvent e) { - //System.out.println("AWT mouse pressed: " + e); - int mouseButton = getMouseButton(e); - if (mouseButton<=pressTime.length) pressTime[mouseButton-1] = e.getWhen(); - buttonStatus |= 1 << (mouseButton-1); - - handleEvent(new MouseButtonPressedEvent(sender, e.getWhen(), MOUSE_ID, - buttonStatus, getStateMask(e), mouseButton, getControlPosition(e), getScreenPosition(e))); - if (e.getClickCount() == 2) { - handleEvent(new MouseDoubleClickedEvent(sender, e.getWhen(), - MOUSE_ID, buttonStatus, getStateMask(e), mouseButton, getControlPosition(e), getScreenPosition(e))); - } - } - - - public void mouseReleased(MouseEvent e) { - //System.out.println("AWT mouse released: " + e); - int mouseButton = getMouseButton(e); - long holdTime = Long.MAX_VALUE; - if (mouseButton<=pressTime.length) - holdTime = e.getWhen() - pressTime[mouseButton-1]; - - buttonStatus &=~ (1<<(mouseButton-1)); - MouseButtonReleasedEvent me = new MouseButtonReleasedEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), mouseButton, holdTime, getControlPosition(e), getScreenPosition(e)); - handleEvent(me); - } - - - public void mouseDragged(MouseEvent e) { - MouseMovedEvent me = new MouseMovedEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e)); - handleEvent(me); - } - - - public void mouseMoved(MouseEvent e) { - MouseMovedEvent me = new MouseMovedEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e)); - handleEvent(me); - } - - - public void mouseWheelMoved(MouseWheelEvent e) { - int wheelRotation = 0; - if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { - wheelRotation = -e.getUnitsToScroll(); - } else { - wheelRotation = -e.getWheelRotation(); - } - handleEvent(new MouseWheelMovedEvent( - sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e), - e.getScrollType(), e.getScrollAmount(), wheelRotation - )); - } - - - public void mouseClicked(MouseEvent e) { - } - - - public void keyPressed(KeyEvent e) { - handleEvent( - new KeyPressedEvent(sender, e.getWhen(), e.getKeyChar(), e.getKeyCode(), e.getModifiers())); - } - - - public void keyReleased(KeyEvent e) { - handleEvent( - new KeyReleasedEvent(sender, e.getWhen(), e.getKeyChar(), e.getKeyCode(), e.getModifiers())); - } - - - public void keyTyped(KeyEvent e) { -// System.out.println("keyTyped("+e+")"); -// handleEvent( -// new KeyTypedEvent(sender, e.getWhen(), e.getKeyChar(), e.getKeyCode(), e.getModifiers())); - } - - - public void eventDispatched(AWTEvent event) { - if(event.getID() == KeyEvent.KEY_PRESSED) { - keyPressed((KeyEvent)event); - } - if(event.getID() == KeyEvent.KEY_RELEASED) { - keyReleased((KeyEvent)event); - } - if(event.getID() == KeyEvent.KEY_TYPED) { - keyTyped((KeyEvent)event); - } - - if(event.getID() == MouseEvent.MOUSE_MOVED) { - mouseMoved((MouseEvent)event); - } - if(event.getID() == MouseEvent.MOUSE_DRAGGED) { - mouseDragged((MouseEvent)event); - } - if(event.getID() == MouseEvent.MOUSE_PRESSED) { - mousePressed((MouseEvent)event); - } - if(event.getID() == MouseEvent.MOUSE_RELEASED) { - mouseReleased((MouseEvent)event); - } - if(event.getID() == MouseEvent.MOUSE_CLICKED) { - mouseClicked((MouseEvent)event); - } - if(event.getID() == MouseEvent.MOUSE_WHEEL) { - mouseWheelMoved((MouseWheelEvent)event); - } - if(event.getID() == MouseEvent.MOUSE_ENTERED) { - mouseEntered((MouseEvent)event); - } - if(event.getID() == MouseEvent.MOUSE_EXITED) { - mouseExited((MouseEvent)event); - } - } -} +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.scenegraph.g2d.events.adapter; + +import java.awt.AWTEvent; +import java.awt.event.AWTEventListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; +import java.awt.geom.Point2D; +import org.simantics.scenegraph.g2d.events.IEventHandler; +import org.simantics.scenegraph.g2d.events.IEventQueue; +import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent; +import org.simantics.scenegraph.g2d.events.KeyEvent.KeyReleasedEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonReleasedEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDoubleClickedEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseEnterEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseExitEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseWheelMovedEvent; +import org.simantics.scenegraph.g2d.events.adapter.AbstractEventAdapter; + + +/** + * Listens to objectinput stream and reads AWT events + * Adapts AWT events into G2D events. + * + * Sends adapted events to IEventHandler + */ +public class AWTRemoteEventAdapter extends AbstractEventAdapter implements AWTEventListener, MouseListener, MouseMotionListener, MouseWheelListener, KeyListener { + + /** Mouse id of the default mouse */ + public static final int MOUSE_ID = 0; + + private long[] pressTime = new long[5]; + int buttonStatus = 0; + + /** + * create new adapter + * @param input the input stream where the events are read from + * @param sender the sender field in the events + * @param delegator the target of the adapted events + */ + public AWTRemoteEventAdapter(Object sender, IEventHandler delegator) { + super(sender, delegator); + } + + /** + * create new adapter + * @param sender the sender field in the events + * @param queue + */ + public AWTRemoteEventAdapter(Object sender, IEventQueue queue) { + super(sender, queue); + } + + private Point2D getControlPosition(MouseEvent e) + { + return new Point2D.Double(e.getX(), e.getY()); + } + + private Point2D getScreenPosition(MouseEvent e) + { + java.awt.Point p = e.getLocationOnScreen(); + return new Point2D.Double(p.x, p.y); + } + + private int getMouseButton(MouseEvent e) + { + int awtMouseButton = e.getButton(); + if (awtMouseButton == MouseEvent.BUTTON1) + return org.simantics.scenegraph.g2d.events.MouseEvent.LEFT_BUTTON; + if (awtMouseButton == MouseEvent.BUTTON2) + return org.simantics.scenegraph.g2d.events.MouseEvent.MIDDLE_BUTTON; + if (awtMouseButton == MouseEvent.BUTTON3) + return org.simantics.scenegraph.g2d.events.MouseEvent.RIGHT_BUTTON; + return awtMouseButton; + } + + private static int getStateMask(MouseEvent e) { + int modifiers = e.getModifiersEx(); + int stateMask = 0; + if((modifiers & InputEvent.CTRL_DOWN_MASK) != 0) + stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.CTRL_MASK; + if((modifiers & InputEvent.ALT_DOWN_MASK) != 0) + stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.ALT_MASK; + if((modifiers & InputEvent.ALT_GRAPH_DOWN_MASK) != 0) + stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.ALT_GRAPH_MASK; + if((modifiers & InputEvent.SHIFT_DOWN_MASK) != 0) + stateMask |= org.simantics.scenegraph.g2d.events.MouseEvent.SHIFT_MASK; + return stateMask; + } + + + public void mouseEntered(MouseEvent e) { + buttonStatus = 0; + MouseEnterEvent me = new MouseEnterEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e)); + handleEvent(me); + } + + + public void mouseExited(MouseEvent e) { + MouseExitEvent me = new MouseExitEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e)); + handleEvent(me); + } + + + public void mousePressed(MouseEvent e) { + //System.out.println("AWT mouse pressed: " + e); + int mouseButton = getMouseButton(e); + if (mouseButton<=pressTime.length) pressTime[mouseButton-1] = e.getWhen(); + buttonStatus |= 1 << (mouseButton-1); + + handleEvent(new MouseButtonPressedEvent(sender, e.getWhen(), MOUSE_ID, + buttonStatus, getStateMask(e), mouseButton, getControlPosition(e), getScreenPosition(e))); + if (e.getClickCount() == 2) { + handleEvent(new MouseDoubleClickedEvent(sender, e.getWhen(), + MOUSE_ID, buttonStatus, getStateMask(e), mouseButton, getControlPosition(e), getScreenPosition(e))); + } + } + + + public void mouseReleased(MouseEvent e) { + //System.out.println("AWT mouse released: " + e); + int mouseButton = getMouseButton(e); + long holdTime = Long.MAX_VALUE; + if (mouseButton<=pressTime.length) + holdTime = e.getWhen() - pressTime[mouseButton-1]; + + buttonStatus &=~ (1<<(mouseButton-1)); + MouseButtonReleasedEvent me = new MouseButtonReleasedEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), mouseButton, holdTime, getControlPosition(e), getScreenPosition(e)); + handleEvent(me); + } + + + public void mouseDragged(MouseEvent e) { + MouseMovedEvent me = new MouseMovedEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e)); + handleEvent(me); + } + + + public void mouseMoved(MouseEvent e) { + MouseMovedEvent me = new MouseMovedEvent(sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e)); + handleEvent(me); + } + + + public void mouseWheelMoved(MouseWheelEvent e) { + int wheelRotation = 0; + if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) { + wheelRotation = -e.getUnitsToScroll(); + } else { + wheelRotation = -e.getWheelRotation(); + } + handleEvent(new MouseWheelMovedEvent( + sender, e.getWhen(), MOUSE_ID, buttonStatus, getStateMask(e), getControlPosition(e), getScreenPosition(e), + e.getScrollType(), e.getScrollAmount(), wheelRotation + )); + } + + + public void mouseClicked(MouseEvent e) { + } + + + public void keyPressed(KeyEvent e) { + handleEvent( + new KeyPressedEvent(sender, e.getWhen(), e.getKeyChar(), e.getKeyCode(), e.getModifiers())); + } + + + public void keyReleased(KeyEvent e) { + handleEvent( + new KeyReleasedEvent(sender, e.getWhen(), e.getKeyChar(), e.getKeyCode(), e.getModifiers())); + } + + + public void keyTyped(KeyEvent e) { +// System.out.println("keyTyped("+e+")"); +// handleEvent( +// new KeyTypedEvent(sender, e.getWhen(), e.getKeyChar(), e.getKeyCode(), e.getModifiers())); + } + + + public void eventDispatched(AWTEvent event) { + if(event.getID() == KeyEvent.KEY_PRESSED) { + keyPressed((KeyEvent)event); + } + if(event.getID() == KeyEvent.KEY_RELEASED) { + keyReleased((KeyEvent)event); + } + if(event.getID() == KeyEvent.KEY_TYPED) { + keyTyped((KeyEvent)event); + } + + if(event.getID() == MouseEvent.MOUSE_MOVED) { + mouseMoved((MouseEvent)event); + } + if(event.getID() == MouseEvent.MOUSE_DRAGGED) { + mouseDragged((MouseEvent)event); + } + if(event.getID() == MouseEvent.MOUSE_PRESSED) { + mousePressed((MouseEvent)event); + } + if(event.getID() == MouseEvent.MOUSE_RELEASED) { + mouseReleased((MouseEvent)event); + } + if(event.getID() == MouseEvent.MOUSE_CLICKED) { + mouseClicked((MouseEvent)event); + } + if(event.getID() == MouseEvent.MOUSE_WHEEL) { + mouseWheelMoved((MouseWheelEvent)event); + } + if(event.getID() == MouseEvent.MOUSE_ENTERED) { + mouseEntered((MouseEvent)event); + } + if(event.getID() == MouseEvent.MOUSE_EXITED) { + mouseExited((MouseEvent)event); + } + } +}