/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.impl.protocol.jabber.extensions.inputevt; import java.awt.*; import java.awt.event.*; import org.jivesoftware.smack.packet.*; /** * This class implements input event extension. * * @author Sebastien Vincent */ public class RemoteControlExtension implements PacketExtension { /** * AWT event that represents our <tt>RemoteControlExtension</tt>. */ private final ComponentEvent event; /** * Size of the panel that contains video */ private final Dimension videoPanelSize; /** * Constructor. * */ public RemoteControlExtension() { videoPanelSize = null; event = null; } /** * Constructor. * * @param videoPanelSize size of the panel that contains video */ public RemoteControlExtension(Dimension videoPanelSize) { this.videoPanelSize = videoPanelSize; this.event = null; } /** * Constructor. * * @param event AWT event */ public RemoteControlExtension(ComponentEvent event) { this.event = event; this.videoPanelSize = null; } /** * Constructor. * * @param videoPanelSize size of the panel that contains video * @param event AWT event */ public RemoteControlExtension(InputEvent event, Dimension videoPanelSize) { this.videoPanelSize = videoPanelSize; this.event = event; } /** * Get <tt>ComponentEvent</tt> that represents our * <tt>InputExtensionItem</tt>. * * @return AWT <tt>ComponentEvent</tt> */ public ComponentEvent getEvent() { return event; } /** * Get the element name of the <tt>PacketExtension</tt>. * * @return "remote-control" */ public String getElementName() { return RemoteControlExtensionProvider.ELEMENT_REMOTE_CONTROL; } /** * Returns the XML namespace of the extension sub-packet root element. * The namespace is always "http://jitsi.org/protocol/inputevt". * * @return the XML namespace of the packet extension. */ public String getNamespace() { return RemoteControlExtensionProvider.NAMESPACE; } /** * Get the XML representation. * * @return XML representation of the item */ public String toXML() { String ret = null; if(event == null) { return null; } if(event instanceof MouseEvent) { MouseEvent e = (MouseEvent)event; switch(e.getID()) { case MouseEvent.MOUSE_DRAGGED: case MouseEvent.MOUSE_MOVED: if(videoPanelSize != null) { Point p = e.getPoint(); double x = (p.getX() / videoPanelSize.width); double y = (p.getY() / videoPanelSize.height); ret = RemoteControlExtensionProvider.getMouseMovedXML(x, y); } break; case MouseEvent.MOUSE_WHEEL: MouseWheelEvent ew = (MouseWheelEvent)e; ret = RemoteControlExtensionProvider.getMouseWheelXML( ew.getWheelRotation()); break; case MouseEvent.MOUSE_PRESSED: ret = RemoteControlExtensionProvider.getMousePressedXML( e.getModifiers()); break; case MouseEvent.MOUSE_RELEASED: ret = RemoteControlExtensionProvider.getMouseReleasedXML( e.getModifiers()); break; default: break; } } else if(event instanceof KeyEvent) { KeyEvent e = (KeyEvent)event; int keycode = e.getKeyCode(); int key = e.getKeyChar(); if(key != KeyEvent.CHAR_UNDEFINED) { keycode = e.getKeyChar(); } else { keycode = e.getKeyCode(); } if(keycode == 0) { return null; } switch(e.getID()) { case KeyEvent.KEY_PRESSED: ret = RemoteControlExtensionProvider.getKeyPressedXML(keycode); break; case KeyEvent.KEY_RELEASED: ret = RemoteControlExtensionProvider.getKeyReleasedXML(keycode); break; case KeyEvent.KEY_TYPED: ret = RemoteControlExtensionProvider.getKeyTypedXML(keycode); break; default: break; } } return ret; } }