]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/EventTypes.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / events / EventTypes.java
index adb8489ff45eea1c9cfa7619bbefdfdbf9f77526..29fc5a9bf249c289d20f54227d81f06abf38d59c 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
- * Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.scenegraph.g2d.events;\r
-\r
-import java.util.concurrent.ConcurrentHashMap;\r
-import java.util.concurrent.ConcurrentMap;\r
-\r
-import org.simantics.scenegraph.g2d.events.FocusEvent.FocusGainedEvent;\r
-import org.simantics.scenegraph.g2d.events.FocusEvent.FocusLostEvent;\r
-import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent;\r
-import org.simantics.scenegraph.g2d.events.KeyEvent.KeyReleasedEvent;\r
-import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonPressedEvent;\r
-import org.simantics.scenegraph.g2d.events.MouseEvent.MouseButtonReleasedEvent;\r
-import org.simantics.scenegraph.g2d.events.MouseEvent.MouseClickEvent;\r
-import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDoubleClickedEvent;\r
-import org.simantics.scenegraph.g2d.events.MouseEvent.MouseEnterEvent;\r
-import org.simantics.scenegraph.g2d.events.MouseEvent.MouseExitEvent;\r
-import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent;\r
-import org.simantics.scenegraph.g2d.events.MouseEvent.MouseWheelMovedEvent;\r
-import org.simantics.scenegraph.g2d.events.command.CommandEvent;\r
-\r
-/**\r
- * Event type masks are used for specifying the kinds of events an\r
- * {@link IEventHandler} wishes to receive.\r
- * \r
- * @author Tuukka Lehtonen\r
- */\r
-public final class EventTypes {\r
-\r
-    /**\r
-     * @see CommandEvent\r
-     */\r
-    public static final int Command                 = 1;\r
-    public static final int CommandMask             = toMask(Command);\r
-\r
-    /**\r
-     * @see FocusGainedEvent\r
-     */\r
-    public static final int FocusGained             = 2;\r
-    public static final int FocusGainedMask         = toMask(FocusGained);\r
-\r
-    /**\r
-     * @see FocusLostEvent\r
-     */\r
-    public static final int FocusLost               = 3;\r
-    public static final int FocusLostMask           = toMask(FocusLost);\r
-\r
-    /**\r
-     * One of: {@link #FocusGained}, {@link #FocusLost}.\r
-     */\r
-    public static final int FocusMask               = FocusGainedMask | FocusLostMask;\r
-\r
-    /**\r
-     * @see KeyPressedEvent\r
-     */\r
-    public static final int KeyPressed              = 4;\r
-    public static final int KeyPressedMask          = toMask(KeyPressed);\r
-\r
-    /**\r
-     * @see KeyReleasedEvent\r
-     */\r
-    public static final int KeyReleased             = 5;\r
-    public static final int KeyReleasedMask         = toMask(KeyReleased);\r
-\r
-    /**\r
-     * One of: {@link #KeyPressed}, {@link #KeyReleased}\r
-     */\r
-    public static final int KeyMask                 = KeyPressedMask | KeyReleasedMask;\r
-\r
-    /**\r
-     * @see MouseButtonPressedEvent\r
-     */\r
-    public static final int MouseButtonPressed      = 6;\r
-    public static final int MouseButtonPressedMask  = toMask(MouseButtonPressed);\r
-\r
-    /**\r
-     * @see MouseButtonReleasedEvent\r
-     */\r
-    public static final int MouseButtonReleased     = 7;\r
-    public static final int MouseButtonReleasedMask = toMask(MouseButtonReleased);\r
-\r
-    /**\r
-     * @see MouseClickEvent\r
-     */\r
-    public static final int MouseClick              = 8;\r
-    public static final int MouseClickMask          = toMask(MouseClick);\r
-\r
-    /**\r
-     * @see MouseDoubleClickedEvent\r
-     */\r
-    public static final int MouseDoubleClick        = 9;\r
-    public static final int MouseDoubleClickMask    = toMask(MouseDoubleClick);\r
-\r
-    /**\r
-     * @see org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin\r
-     */\r
-    public static final int MouseDragBegin          = 10;\r
-    public static final int MouseDragBeginMask      = toMask(MouseDragBegin);\r
-\r
-    /**\r
-     * One of: {@link #MouseButtonPressed}, {@link #MouseButtonReleased},\r
-     * {@link #MouseClick}, {@link #MouseDoubleClick}, {@link #MouseDragBegin}\r
-     */\r
-    public static final int MouseButtonMask         = MouseButtonPressedMask | MouseButtonReleasedMask | MouseClickMask\r
-                                                      | MouseDoubleClickMask | MouseDragBeginMask;\r
-\r
-    /**\r
-     * @see MouseEnterEvent\r
-     */\r
-    public static final int MouseEnter              = 11;\r
-    public static final int MouseEnterMask          = toMask(MouseEnter);\r
-\r
-    /**\r
-     * @see MouseExitEvent\r
-     */\r
-    public static final int MouseExit               = 12;\r
-    public static final int MouseExitMask           = toMask(MouseExit);\r
-\r
-    /**\r
-     * @see MouseMovedEvent\r
-     */\r
-    public static final int MouseMoved              = 13;\r
-    public static final int MouseMovedMask          = toMask(MouseMoved);\r
-\r
-    public static final int MouseMoveMask           = MouseEnterMask | MouseExitMask | MouseMovedMask;\r
-\r
-    /**\r
-     * @see MouseWheelMovedEvent\r
-     */\r
-    public static final int MouseWheel              = 14;\r
-    public static final int MouseWheelMask          = toMask(MouseWheel);\r
-\r
-    /**\r
-     * One of: {@link #MouseButton}, {@link #MouseMove}, {@link #MouseWheel}\r
-     */\r
-    public static final int MouseMask               = MouseButtonMask | MouseMoveMask | MouseWheelMask;\r
-\r
-    /**\r
-     * @see TimeEvent\r
-     */\r
-    public static final int Time                    = 15;\r
-    public static final int TimeMask                = toMask(Time);\r
-\r
-    /**\r
-     * One of: {@link #Command}, {@link #Focus}, {@link #Key}, {@link #Mouse},\r
-     * {@link #Time}\r
-     */\r
-    public static final int AnyMask                 = CommandMask | FocusMask | KeyMask | MouseMask | TimeMask;\r
-\r
-    /**\r
-     * For testing whether the specified event mask passes the specified event.\r
-     * \r
-     * @param eventMask\r
-     * @param event\r
-     * @return\r
-     */\r
-    public static boolean passes(IEventHandler handler, Event event) {\r
-        int mask = handler.getEventMask();\r
-        return passes(mask, event);\r
-    }\r
-\r
-    /**\r
-     * For testing whether the specified event mask passes the specified event.\r
-     * \r
-     * @param mask\r
-     * @param event\r
-     * @return\r
-     */\r
-    public static boolean passes(int mask, Event event) {\r
-        int et = toTypeMask(event);\r
-        return (et & mask) != 0;\r
-    }\r
-\r
-    /**\r
-     * For testing whether the specified event mask passes the specified event.\r
-     * \r
-     * @param eventMask\r
-     * @param event\r
-     * @return\r
-     */\r
-    public static boolean passes(IEventHandler handler, int eventTypeMask) {\r
-        return (eventTypeMask & handler.getEventMask()) != 0;\r
-    }\r
-\r
-    /**\r
-     * For testing whether the specified event type passes the specified event mask.\r
-     * \r
-     * @param mask\r
-     * @param event\r
-     * @return\r
-     */\r
-    public static boolean passes(int mask, int eventTypeMask) {\r
-        return (eventTypeMask & mask) != 0;\r
-    }\r
-\r
-    /**\r
-     * Converts the specified event instance to an event type mask representing the event.\r
-     * \r
-     * @param event\r
-     * @return\r
-     */\r
-    public static int toTypeMask(Event event) {\r
-        return event != null ? toTypeMask(event.getClass()) : 0;\r
-    }\r
-\r
-    /**\r
-     * Converts the specified event instance to an integer describing the event.\r
-     * \r
-     * @param event\r
-     * @return\r
-     */\r
-    public static int toType(Event event) {\r
-        return event != null ? toType(event.getClass()) : 0;\r
-    }\r
-\r
-    /**\r
-     * Converts the specified event class to an event type mask representing the event.\r
-     * \r
-     * @param event\r
-     * @return\r
-     */\r
-    public static int toTypeMask(Class<? extends Event> clazz) {\r
-        if (clazz == null)\r
-            return 0;\r
-        Integer type = maskCache.get(clazz);\r
-        if (type != null)\r
-            return type;\r
-        type = calculateTypeMask(clazz);\r
-        maskCache.putIfAbsent(clazz, type);\r
-        return type;\r
-    }\r
-\r
-    /**\r
-     * Converts the specified event class to an integer representing that specific event type.\r
-     * \r
-     * @param event\r
-     * @return\r
-     */\r
-    public static int toType(Class<? extends Event> clazz) {\r
-        if (clazz == null)\r
-            return 0;\r
-        Integer type = typeCache.get(clazz);\r
-        if (type != null)\r
-            return type;\r
-        type = calculateType(clazz);\r
-        typeCache.putIfAbsent(clazz, type);\r
-        return type;\r
-    }\r
-\r
-    /**\r
-     * Converts the specified event instance to an event type mask representing\r
-     * the event.\r
-     * \r
-     * @param clazz class of event to get type for\r
-     * @return event type mask\r
-     * @throws IllegalArgumentException if event class is not recognized\r
-     */\r
-    private static int calculateTypeMask(Class<? extends Event> clazz) {\r
-        if (Event.class.isAssignableFrom(clazz)) {\r
-            if (MouseEvent.class.isAssignableFrom(clazz)) {\r
-                if (MouseMovedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseMovedMask;\r
-                if (MouseButtonPressedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseButtonPressedMask;\r
-                if (MouseButtonReleasedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseButtonReleasedMask;\r
-                if (MouseClickEvent.class.isAssignableFrom(clazz))\r
-                    return MouseClickMask;\r
-                if (MouseWheelMovedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseWheelMask;\r
-                if (MouseDoubleClickedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseDoubleClickMask;\r
-                if (org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin.class.isAssignableFrom(clazz))\r
-                    return MouseDragBeginMask;\r
-                if (MouseEnterEvent.class.isAssignableFrom(clazz))\r
-                    return MouseEnterMask;\r
-                if (MouseExitEvent.class.isAssignableFrom(clazz))\r
-                    return MouseExitMask;\r
-                return MouseMask;\r
-            }\r
-\r
-            if (KeyEvent.class.isAssignableFrom(clazz)) {\r
-                if (KeyPressedEvent.class.isAssignableFrom(clazz))\r
-                    return KeyPressedMask;\r
-                if (KeyReleasedEvent.class.isAssignableFrom(clazz))\r
-                    return KeyReleasedMask;\r
-                return KeyMask;\r
-            }\r
-\r
-            if (FocusEvent.class.isAssignableFrom(clazz)) {\r
-                if (FocusGainedEvent.class.isAssignableFrom(clazz))\r
-                    return FocusGainedMask;\r
-                if (FocusLostEvent.class.isAssignableFrom(clazz))\r
-                    return FocusLostMask;\r
-                return FocusMask;\r
-            }\r
-\r
-            if (CommandEvent.class.isAssignableFrom(clazz))\r
-                return CommandMask;\r
-\r
-            if (TimeEvent.class.isAssignableFrom(clazz))\r
-                return TimeMask;\r
-\r
-            return AnyMask;\r
-        }\r
-        throw new IllegalArgumentException("unrecognized event class: " + clazz);\r
-    }\r
-\r
-\r
-    /**\r
-     * Converts the specified event instance to an event type mask representing\r
-     * the event.\r
-     * \r
-     * @param clazz class of event to get type for\r
-     * @return event type mask\r
-     * @throws IllegalArgumentException if event class is not recognized\r
-     */\r
-    private static int calculateType(Class<? extends Event> clazz) {\r
-        if (Event.class.isAssignableFrom(clazz)) {\r
-            if (MouseEvent.class.isAssignableFrom(clazz)) {\r
-                if (MouseMovedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseMoved;\r
-                if (MouseButtonPressedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseButtonPressed;\r
-                if (MouseButtonReleasedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseButtonReleased;\r
-                if (MouseClickEvent.class.isAssignableFrom(clazz))\r
-                    return MouseClick;\r
-                if (MouseWheelMovedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseWheel;\r
-                if (MouseDoubleClickedEvent.class.isAssignableFrom(clazz))\r
-                    return MouseDoubleClick;\r
-                if (org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin.class.isAssignableFrom(clazz))\r
-                    return MouseDragBegin;\r
-                if (MouseEnterEvent.class.isAssignableFrom(clazz))\r
-                    return MouseEnter;\r
-                if (MouseExitEvent.class.isAssignableFrom(clazz))\r
-                    return MouseExit;\r
-            }\r
-\r
-            if (KeyEvent.class.isAssignableFrom(clazz)) {\r
-                if (KeyPressedEvent.class.isAssignableFrom(clazz))\r
-                    return KeyPressed;\r
-                if (KeyReleasedEvent.class.isAssignableFrom(clazz))\r
-                    return KeyReleased;\r
-            }\r
-\r
-            if (FocusEvent.class.isAssignableFrom(clazz)) {\r
-                if (FocusGainedEvent.class.isAssignableFrom(clazz))\r
-                    return FocusGained;\r
-                if (FocusLostEvent.class.isAssignableFrom(clazz))\r
-                    return FocusLost;\r
-            }\r
-\r
-            if (CommandEvent.class.isAssignableFrom(clazz))\r
-                return Command;\r
-\r
-            if (TimeEvent.class.isAssignableFrom(clazz))\r
-                return Time;\r
-        }\r
-        throw new IllegalArgumentException("unrecognized event class: " + clazz);\r
-    }\r
-\r
-    private static ConcurrentMap<Class<?>, Integer> maskCache = new ConcurrentHashMap<Class<?>, Integer>();\r
-    private static ConcurrentMap<Class<?>, Integer> typeCache = new ConcurrentHashMap<Class<?>, Integer>();\r
-\r
-    private static int toMask(int eventType) {\r
-        return (1 << eventType);\r
-    }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 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;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.simantics.scenegraph.g2d.events.FocusEvent.FocusGainedEvent;
+import org.simantics.scenegraph.g2d.events.FocusEvent.FocusLostEvent;
+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.MouseClickEvent;
+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.command.CommandEvent;
+
+/**
+ * Event type masks are used for specifying the kinds of events an
+ * {@link IEventHandler} wishes to receive.
+ * 
+ * @author Tuukka Lehtonen
+ */
+public final class EventTypes {
+
+    /**
+     * @see CommandEvent
+     */
+    public static final int Command                 = 1;
+    public static final int CommandMask             = toMask(Command);
+
+    /**
+     * @see FocusGainedEvent
+     */
+    public static final int FocusGained             = 2;
+    public static final int FocusGainedMask         = toMask(FocusGained);
+
+    /**
+     * @see FocusLostEvent
+     */
+    public static final int FocusLost               = 3;
+    public static final int FocusLostMask           = toMask(FocusLost);
+
+    /**
+     * One of: {@link #FocusGained}, {@link #FocusLost}.
+     */
+    public static final int FocusMask               = FocusGainedMask | FocusLostMask;
+
+    /**
+     * @see KeyPressedEvent
+     */
+    public static final int KeyPressed              = 4;
+    public static final int KeyPressedMask          = toMask(KeyPressed);
+
+    /**
+     * @see KeyReleasedEvent
+     */
+    public static final int KeyReleased             = 5;
+    public static final int KeyReleasedMask         = toMask(KeyReleased);
+
+    /**
+     * One of: {@link #KeyPressed}, {@link #KeyReleased}
+     */
+    public static final int KeyMask                 = KeyPressedMask | KeyReleasedMask;
+
+    /**
+     * @see MouseButtonPressedEvent
+     */
+    public static final int MouseButtonPressed      = 6;
+    public static final int MouseButtonPressedMask  = toMask(MouseButtonPressed);
+
+    /**
+     * @see MouseButtonReleasedEvent
+     */
+    public static final int MouseButtonReleased     = 7;
+    public static final int MouseButtonReleasedMask = toMask(MouseButtonReleased);
+
+    /**
+     * @see MouseClickEvent
+     */
+    public static final int MouseClick              = 8;
+    public static final int MouseClickMask          = toMask(MouseClick);
+
+    /**
+     * @see MouseDoubleClickedEvent
+     */
+    public static final int MouseDoubleClick        = 9;
+    public static final int MouseDoubleClickMask    = toMask(MouseDoubleClick);
+
+    /**
+     * @see org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin
+     */
+    public static final int MouseDragBegin          = 10;
+    public static final int MouseDragBeginMask      = toMask(MouseDragBegin);
+
+    /**
+     * One of: {@link #MouseButtonPressed}, {@link #MouseButtonReleased},
+     * {@link #MouseClick}, {@link #MouseDoubleClick}, {@link #MouseDragBegin}
+     */
+    public static final int MouseButtonMask         = MouseButtonPressedMask | MouseButtonReleasedMask | MouseClickMask
+                                                      | MouseDoubleClickMask | MouseDragBeginMask;
+
+    /**
+     * @see MouseEnterEvent
+     */
+    public static final int MouseEnter              = 11;
+    public static final int MouseEnterMask          = toMask(MouseEnter);
+
+    /**
+     * @see MouseExitEvent
+     */
+    public static final int MouseExit               = 12;
+    public static final int MouseExitMask           = toMask(MouseExit);
+
+    /**
+     * @see MouseMovedEvent
+     */
+    public static final int MouseMoved              = 13;
+    public static final int MouseMovedMask          = toMask(MouseMoved);
+
+    public static final int MouseMoveMask           = MouseEnterMask | MouseExitMask | MouseMovedMask;
+
+    /**
+     * @see MouseWheelMovedEvent
+     */
+    public static final int MouseWheel              = 14;
+    public static final int MouseWheelMask          = toMask(MouseWheel);
+
+    /**
+     * One of: {@link #MouseButton}, {@link #MouseMove}, {@link #MouseWheel}
+     */
+    public static final int MouseMask               = MouseButtonMask | MouseMoveMask | MouseWheelMask;
+
+    /**
+     * @see TimeEvent
+     */
+    public static final int Time                    = 15;
+    public static final int TimeMask                = toMask(Time);
+
+    /**
+     * One of: {@link #Command}, {@link #Focus}, {@link #Key}, {@link #Mouse},
+     * {@link #Time}
+     */
+    public static final int AnyMask                 = CommandMask | FocusMask | KeyMask | MouseMask | TimeMask;
+
+    /**
+     * For testing whether the specified event mask passes the specified event.
+     * 
+     * @param eventMask
+     * @param event
+     * @return
+     */
+    public static boolean passes(IEventHandler handler, Event event) {
+        int mask = handler.getEventMask();
+        return passes(mask, event);
+    }
+
+    /**
+     * For testing whether the specified event mask passes the specified event.
+     * 
+     * @param mask
+     * @param event
+     * @return
+     */
+    public static boolean passes(int mask, Event event) {
+        int et = toTypeMask(event);
+        return (et & mask) != 0;
+    }
+
+    /**
+     * For testing whether the specified event mask passes the specified event.
+     * 
+     * @param eventMask
+     * @param event
+     * @return
+     */
+    public static boolean passes(IEventHandler handler, int eventTypeMask) {
+        return (eventTypeMask & handler.getEventMask()) != 0;
+    }
+
+    /**
+     * For testing whether the specified event type passes the specified event mask.
+     * 
+     * @param mask
+     * @param event
+     * @return
+     */
+    public static boolean passes(int mask, int eventTypeMask) {
+        return (eventTypeMask & mask) != 0;
+    }
+
+    /**
+     * Converts the specified event instance to an event type mask representing the event.
+     * 
+     * @param event
+     * @return
+     */
+    public static int toTypeMask(Event event) {
+        return event != null ? toTypeMask(event.getClass()) : 0;
+    }
+
+    /**
+     * Converts the specified event instance to an integer describing the event.
+     * 
+     * @param event
+     * @return
+     */
+    public static int toType(Event event) {
+        return event != null ? toType(event.getClass()) : 0;
+    }
+
+    /**
+     * Converts the specified event class to an event type mask representing the event.
+     * 
+     * @param event
+     * @return
+     */
+    public static int toTypeMask(Class<? extends Event> clazz) {
+        if (clazz == null)
+            return 0;
+        Integer type = maskCache.get(clazz);
+        if (type != null)
+            return type;
+        type = calculateTypeMask(clazz);
+        maskCache.putIfAbsent(clazz, type);
+        return type;
+    }
+
+    /**
+     * Converts the specified event class to an integer representing that specific event type.
+     * 
+     * @param event
+     * @return
+     */
+    public static int toType(Class<? extends Event> clazz) {
+        if (clazz == null)
+            return 0;
+        Integer type = typeCache.get(clazz);
+        if (type != null)
+            return type;
+        type = calculateType(clazz);
+        typeCache.putIfAbsent(clazz, type);
+        return type;
+    }
+
+    /**
+     * Converts the specified event instance to an event type mask representing
+     * the event.
+     * 
+     * @param clazz class of event to get type for
+     * @return event type mask
+     * @throws IllegalArgumentException if event class is not recognized
+     */
+    private static int calculateTypeMask(Class<? extends Event> clazz) {
+        if (Event.class.isAssignableFrom(clazz)) {
+            if (MouseEvent.class.isAssignableFrom(clazz)) {
+                if (MouseMovedEvent.class.isAssignableFrom(clazz))
+                    return MouseMovedMask;
+                if (MouseButtonPressedEvent.class.isAssignableFrom(clazz))
+                    return MouseButtonPressedMask;
+                if (MouseButtonReleasedEvent.class.isAssignableFrom(clazz))
+                    return MouseButtonReleasedMask;
+                if (MouseClickEvent.class.isAssignableFrom(clazz))
+                    return MouseClickMask;
+                if (MouseWheelMovedEvent.class.isAssignableFrom(clazz))
+                    return MouseWheelMask;
+                if (MouseDoubleClickedEvent.class.isAssignableFrom(clazz))
+                    return MouseDoubleClickMask;
+                if (org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin.class.isAssignableFrom(clazz))
+                    return MouseDragBeginMask;
+                if (MouseEnterEvent.class.isAssignableFrom(clazz))
+                    return MouseEnterMask;
+                if (MouseExitEvent.class.isAssignableFrom(clazz))
+                    return MouseExitMask;
+                return MouseMask;
+            }
+
+            if (KeyEvent.class.isAssignableFrom(clazz)) {
+                if (KeyPressedEvent.class.isAssignableFrom(clazz))
+                    return KeyPressedMask;
+                if (KeyReleasedEvent.class.isAssignableFrom(clazz))
+                    return KeyReleasedMask;
+                return KeyMask;
+            }
+
+            if (FocusEvent.class.isAssignableFrom(clazz)) {
+                if (FocusGainedEvent.class.isAssignableFrom(clazz))
+                    return FocusGainedMask;
+                if (FocusLostEvent.class.isAssignableFrom(clazz))
+                    return FocusLostMask;
+                return FocusMask;
+            }
+
+            if (CommandEvent.class.isAssignableFrom(clazz))
+                return CommandMask;
+
+            if (TimeEvent.class.isAssignableFrom(clazz))
+                return TimeMask;
+
+            return AnyMask;
+        }
+        throw new IllegalArgumentException("unrecognized event class: " + clazz);
+    }
+
+
+    /**
+     * Converts the specified event instance to an event type mask representing
+     * the event.
+     * 
+     * @param clazz class of event to get type for
+     * @return event type mask
+     * @throws IllegalArgumentException if event class is not recognized
+     */
+    private static int calculateType(Class<? extends Event> clazz) {
+        if (Event.class.isAssignableFrom(clazz)) {
+            if (MouseEvent.class.isAssignableFrom(clazz)) {
+                if (MouseMovedEvent.class.isAssignableFrom(clazz))
+                    return MouseMoved;
+                if (MouseButtonPressedEvent.class.isAssignableFrom(clazz))
+                    return MouseButtonPressed;
+                if (MouseButtonReleasedEvent.class.isAssignableFrom(clazz))
+                    return MouseButtonReleased;
+                if (MouseClickEvent.class.isAssignableFrom(clazz))
+                    return MouseClick;
+                if (MouseWheelMovedEvent.class.isAssignableFrom(clazz))
+                    return MouseWheel;
+                if (MouseDoubleClickedEvent.class.isAssignableFrom(clazz))
+                    return MouseDoubleClick;
+                if (org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin.class.isAssignableFrom(clazz))
+                    return MouseDragBegin;
+                if (MouseEnterEvent.class.isAssignableFrom(clazz))
+                    return MouseEnter;
+                if (MouseExitEvent.class.isAssignableFrom(clazz))
+                    return MouseExit;
+            }
+
+            if (KeyEvent.class.isAssignableFrom(clazz)) {
+                if (KeyPressedEvent.class.isAssignableFrom(clazz))
+                    return KeyPressed;
+                if (KeyReleasedEvent.class.isAssignableFrom(clazz))
+                    return KeyReleased;
+            }
+
+            if (FocusEvent.class.isAssignableFrom(clazz)) {
+                if (FocusGainedEvent.class.isAssignableFrom(clazz))
+                    return FocusGained;
+                if (FocusLostEvent.class.isAssignableFrom(clazz))
+                    return FocusLost;
+            }
+
+            if (CommandEvent.class.isAssignableFrom(clazz))
+                return Command;
+
+            if (TimeEvent.class.isAssignableFrom(clazz))
+                return Time;
+        }
+        throw new IllegalArgumentException("unrecognized event class: " + clazz);
+    }
+
+    private static ConcurrentMap<Class<?>, Integer> maskCache = new ConcurrentHashMap<Class<?>, Integer>();
+    private static ConcurrentMap<Class<?>, Integer> typeCache = new ConcurrentHashMap<Class<?>, Integer>();
+
+    private static int toMask(int eventType) {
+        return (1 << eventType);
+    }
+
+}