/******************************************************************************* * 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 *******************************************************************************/ /* * * @author Toni Kalajainen */ package org.simantics.g2d.participant; import java.util.HashSet; import java.util.Set; import org.simantics.g2d.canvas.impl.AbstractCanvasParticipant; import org.simantics.scenegraph.g2d.events.KeyEvent; import org.simantics.scenegraph.g2d.events.EventHandlerReflection.EventHandler; import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent; import org.simantics.scenegraph.g2d.events.KeyEvent.KeyReleasedEvent; /** * KeyStatus monitors statuses of keys. * @see java.awt.event.KeyEvent */ public class KeyUtil extends AbstractCanvasParticipant { /** Key info */ private Set pressedByKeyCode = new HashSet(); private Set pressedByChar = new HashSet(); @EventHandler(priority = Integer.MAX_VALUE) public boolean handleClick(KeyEvent e) { if (e instanceof KeyPressedEvent) { pressedByKeyCode.add(e.keyCode); pressedByChar.add(e.character); } else if (e instanceof KeyReleasedEvent) { pressedByKeyCode.remove(e.keyCode); pressedByChar.remove(e.character); } return false; } public boolean isCharPressed(char c) { return pressedByChar.contains(c); } /** * See awt key event * @see java.awt.event.KeyEvent * @param keyCode * @return */ public boolean isKeyPressed(int keyCode) { return pressedByKeyCode.contains(keyCode); } }