package org.apache.batik.bridge.svg12;
import java.awt.Point;
import java.awt.event.KeyEvent;
import org.apache.batik.bridge.BridgeContext;
import org.apache.batik.bridge.BridgeEventSupport;
import org.apache.batik.bridge.FocusManager;
import org.apache.batik.bridge.UserAgent;
import org.apache.batik.dom.events.DOMKeyboardEvent;
import org.apache.batik.dom.events.DOMMouseEvent;
import org.apache.batik.dom.events.DOMTextEvent;
import org.apache.batik.dom.events.NodeEventTarget;
import org.apache.batik.dom.svg12.SVGOMWheelEvent;
import org.apache.batik.dom.util.DOMUtilities;
import org.apache.batik.gvt.GraphicsNode;
import org.apache.batik.gvt.event.EventDispatcher;
import org.apache.batik.gvt.event.GraphicsNodeKeyEvent;
import org.apache.batik.gvt.event.GraphicsNodeMouseEvent;
import org.apache.batik.gvt.event.GraphicsNodeMouseWheelEvent;
import org.apache.batik.gvt.event.GraphicsNodeMouseWheelListener;
import org.apache.batik.constants.XMLConstants;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.events.DocumentEvent;
import org.w3c.dom.events.EventListener;
import org.w3c.dom.events.EventTarget;
public abstract class SVG12BridgeEventSupport extends BridgeEventSupport {
protected SVG12BridgeEventSupport() {}
public static void addGVTListener(BridgeContext ctx, Document doc) {
UserAgent ua = ctx.getUserAgent();
if (ua != null) {
EventDispatcher dispatcher = ua.getEventDispatcher();
if (dispatcher != null) {
final Listener listener = new Listener(ctx, ua);
dispatcher.addGraphicsNodeMouseListener(listener);
dispatcher.addGraphicsNodeMouseWheelListener(listener);
dispatcher.addGraphicsNodeKeyListener(listener);
EventListener l = new GVTUnloadListener(dispatcher, listener);
NodeEventTarget target = (NodeEventTarget) doc;
target.addEventListenerNS
(XMLConstants.XML_EVENTS_NAMESPACE_URI,
"SVGUnload",
l, false, null);
storeEventListenerNS
(ctx, target,
XMLConstants.XML_EVENTS_NAMESPACE_URI,
"SVGUnload",
l, false);
}
}
}
protected static class Listener
extends BridgeEventSupport.Listener
implements GraphicsNodeMouseWheelListener {
protected SVG12BridgeContext ctx12;
public Listener(BridgeContext ctx, UserAgent u) {
super(ctx, u);
ctx12 = (SVG12BridgeContext) ctx;
}
public void keyPressed(GraphicsNodeKeyEvent evt) {
if (!isDown) {
isDown = true;
dispatchKeyboardEvent("keydown", evt);
}
if (evt.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
dispatchTextEvent(evt);
}
}
public void keyReleased(GraphicsNodeKeyEvent evt) {
dispatchKeyboardEvent("keyup", evt);
isDown = false;
}
public void keyTyped(GraphicsNodeKeyEvent evt) {
dispatchTextEvent(evt);
}
protected void dispatchKeyboardEvent(String eventType,
GraphicsNodeKeyEvent evt) {
FocusManager fmgr = context.getFocusManager();
if (fmgr == null) {
return;
}
Element targetElement = (Element) fmgr.getCurrentEventTarget();
if (targetElement == null) {
targetElement = context.getDocument().getDocumentElement();
}
DocumentEvent d = (DocumentEvent) targetElement.getOwnerDocument();
DOMKeyboardEvent keyEvt
= (DOMKeyboardEvent) d.createEvent("KeyboardEvent");
String modifiers
= DOMUtilities.getModifiersList(evt.getLockState(),
evt.getModifiers());
keyEvt.initKeyboardEventNS(XMLConstants.XML_EVENTS_NAMESPACE_URI,
eventType,
true,
true,
null,
mapKeyCodeToIdentifier(evt.getKeyCode()),
mapKeyLocation(evt.getKeyLocation()),
modifiers);
try {
((EventTarget)targetElement).dispatchEvent(keyEvt);
} catch (RuntimeException e) {
ua.displayError(e);
}
}
protected void dispatchTextEvent(GraphicsNodeKeyEvent evt) {
FocusManager fmgr = context.getFocusManager();
if (fmgr == null) {
return;
}
Element targetElement = (Element) fmgr.getCurrentEventTarget();
if (targetElement == null) {
targetElement = context.getDocument().getDocumentElement();
}
DocumentEvent d = (DocumentEvent) targetElement.getOwnerDocument();
DOMTextEvent textEvt = (DOMTextEvent) d.createEvent("TextEvent");
textEvt.initTextEventNS(XMLConstants.XML_EVENTS_NAMESPACE_URI,
"textInput",
true,
true,
null,
String.valueOf(evt.getKeyChar()));
try {
((EventTarget) targetElement).dispatchEvent(textEvt);
} catch (RuntimeException e) {
ua.displayError(e);
}
}
protected int mapKeyLocation(int location) {
return location - 1;
}
protected static String[][] IDENTIFIER_KEY_CODES = new String[256][];
static {
putIdentifierKeyCode(DOMKeyboardEvent.KEY_0,
KeyEvent.VK_0);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_1,
KeyEvent.VK_1);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_2,
KeyEvent.VK_2);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_3,
KeyEvent.VK_3);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_4,
KeyEvent.VK_4);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_5,
KeyEvent.VK_5);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_6,
KeyEvent.VK_6);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_7,
KeyEvent.VK_7);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_8,
KeyEvent.VK_8);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_9,
KeyEvent.VK_9);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ACCEPT,
KeyEvent.VK_ACCEPT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_AGAIN,
KeyEvent.VK_AGAIN);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_A,
KeyEvent.VK_A);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ALL_CANDIDATES,
KeyEvent.VK_ALL_CANDIDATES);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ALPHANUMERIC,
KeyEvent.VK_ALPHANUMERIC);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ALT_GRAPH,
KeyEvent.VK_ALT_GRAPH);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ALT,
KeyEvent.VK_ALT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_AMPERSAND,
KeyEvent.VK_AMPERSAND);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_APOSTROPHE,
KeyEvent.VK_QUOTE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ASTERISK,
KeyEvent.VK_ASTERISK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_AT,
KeyEvent.VK_AT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_BACKSLASH,
KeyEvent.VK_BACK_SLASH);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_BACKSPACE,
KeyEvent.VK_BACK_SPACE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_B,
KeyEvent.VK_B);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_CANCEL,
KeyEvent.VK_CANCEL);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_CAPS_LOCK,
KeyEvent.VK_CAPS_LOCK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_CIRCUMFLEX,
KeyEvent.VK_CIRCUMFLEX);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_C,
KeyEvent.VK_C);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_CLEAR,
KeyEvent.VK_CLEAR);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_CODE_INPUT,
KeyEvent.VK_CODE_INPUT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COLON,
KeyEvent.VK_COLON);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_ACUTE,
KeyEvent.VK_DEAD_ACUTE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_BREVE,
KeyEvent.VK_DEAD_BREVE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_CARON,
KeyEvent.VK_DEAD_CARON);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_CEDILLA,
KeyEvent.VK_DEAD_CEDILLA);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_CIRCUMFLEX,
KeyEvent.VK_DEAD_CIRCUMFLEX);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_DIERESIS,
KeyEvent.VK_DEAD_DIAERESIS);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_DOT_ABOVE,
KeyEvent.VK_DEAD_ABOVEDOT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_DOUBLE_ACUTE,
KeyEvent.VK_DEAD_DOUBLEACUTE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_GRAVE,
KeyEvent.VK_DEAD_GRAVE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_IOTA,
KeyEvent.VK_DEAD_IOTA);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_MACRON,
KeyEvent.VK_DEAD_MACRON);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_OGONEK,
KeyEvent.VK_DEAD_OGONEK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_RING_ABOVE,
KeyEvent.VK_DEAD_ABOVERING);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMBINING_TILDE,
KeyEvent.VK_DEAD_TILDE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMMA,
KeyEvent.VK_COMMA);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COMPOSE,
KeyEvent.VK_COMPOSE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_CONTROL,
KeyEvent.VK_CONTROL);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_CONVERT,
KeyEvent.VK_CONVERT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_COPY,
KeyEvent.VK_COPY);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_CUT,
KeyEvent.VK_CUT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_DELETE,
KeyEvent.VK_DELETE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_D,
KeyEvent.VK_D);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_DOLLAR,
KeyEvent.VK_DOLLAR);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_DOWN,
KeyEvent.VK_DOWN);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_E,
KeyEvent.VK_E);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_END,
KeyEvent.VK_END);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ENTER,
KeyEvent.VK_ENTER);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_EQUALS,
KeyEvent.VK_EQUALS);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ESCAPE,
KeyEvent.VK_ESCAPE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_EURO,
KeyEvent.VK_EURO_SIGN);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_EXCLAMATION,
KeyEvent.VK_EXCLAMATION_MARK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F10,
KeyEvent.VK_F10);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F11,
KeyEvent.VK_F11);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F12,
KeyEvent.VK_F12);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F13,
KeyEvent.VK_F13);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F14,
KeyEvent.VK_F14);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F15,
KeyEvent.VK_F15);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F16,
KeyEvent.VK_F16);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F17,
KeyEvent.VK_F17);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F18,
KeyEvent.VK_F18);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F19,
KeyEvent.VK_F19);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F1,
KeyEvent.VK_F1);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F20,
KeyEvent.VK_F20);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F21,
KeyEvent.VK_F21);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F22,
KeyEvent.VK_F22);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F23,
KeyEvent.VK_F23);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F24,
KeyEvent.VK_F24);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F2,
KeyEvent.VK_F2);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F3,
KeyEvent.VK_F3);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F4,
KeyEvent.VK_F4);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F5,
KeyEvent.VK_F5);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F6,
KeyEvent.VK_F6);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F7,
KeyEvent.VK_F7);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F8,
KeyEvent.VK_F8);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F9,
KeyEvent.VK_F9);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_FINAL_MODE,
KeyEvent.VK_FINAL);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_FIND,
KeyEvent.VK_FIND);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_F,
KeyEvent.VK_F);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_FULL_STOP,
KeyEvent.VK_PERIOD);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_FULL_WIDTH,
KeyEvent.VK_FULL_WIDTH);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_G,
KeyEvent.VK_G);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_GRAVE,
KeyEvent.VK_BACK_QUOTE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_GREATER_THAN,
KeyEvent.VK_GREATER);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_HALF_WIDTH,
KeyEvent.VK_HALF_WIDTH);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_HASH,
KeyEvent.VK_NUMBER_SIGN);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_HELP,
KeyEvent.VK_HELP);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_HIRAGANA,
KeyEvent.VK_HIRAGANA);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_H,
KeyEvent.VK_H);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_HOME,
KeyEvent.VK_HOME);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_I,
KeyEvent.VK_I);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_INSERT,
KeyEvent.VK_INSERT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_INVERTED_EXCLAMATION,
KeyEvent.VK_INVERTED_EXCLAMATION_MARK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_JAPANESE_HIRAGANA,
KeyEvent.VK_JAPANESE_HIRAGANA);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_JAPANESE_KATAKANA,
KeyEvent.VK_JAPANESE_KATAKANA);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_JAPANESE_ROMAJI,
KeyEvent.VK_JAPANESE_ROMAN);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_J,
KeyEvent.VK_J);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_KANA_MODE,
KeyEvent.VK_KANA_LOCK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_KANJI_MODE,
KeyEvent.VK_KANJI);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_KATAKANA,
KeyEvent.VK_KATAKANA);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_K,
KeyEvent.VK_K);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_LEFT_BRACE,
KeyEvent.VK_BRACELEFT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_LEFT,
KeyEvent.VK_LEFT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_LEFT_PARENTHESIS,
KeyEvent.VK_LEFT_PARENTHESIS);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_LEFT_SQUARE_BRACKET,
KeyEvent.VK_OPEN_BRACKET);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_LESS_THAN,
KeyEvent.VK_LESS);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_L,
KeyEvent.VK_L);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_META,
KeyEvent.VK_META);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_META,
KeyEvent.VK_META);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_MINUS,
KeyEvent.VK_MINUS);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_M,
KeyEvent.VK_M);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_MODE_CHANGE,
KeyEvent.VK_MODECHANGE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_N,
KeyEvent.VK_N);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_NONCONVERT,
KeyEvent.VK_NONCONVERT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_NUM_LOCK,
KeyEvent.VK_NUM_LOCK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_NUM_LOCK,
KeyEvent.VK_NUM_LOCK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_O,
KeyEvent.VK_O);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_PAGE_DOWN,
KeyEvent.VK_PAGE_DOWN);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_PAGE_UP,
KeyEvent.VK_PAGE_UP);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_PASTE,
KeyEvent.VK_PASTE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_PAUSE,
KeyEvent.VK_PAUSE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_P,
KeyEvent.VK_P);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_PLUS,
KeyEvent.VK_PLUS);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_PREVIOUS_CANDIDATE,
KeyEvent.VK_PREVIOUS_CANDIDATE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_PRINT_SCREEN,
KeyEvent.VK_PRINTSCREEN);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_PROPS,
KeyEvent.VK_PROPS);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_Q,
KeyEvent.VK_Q);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_QUOTE,
KeyEvent.VK_QUOTEDBL);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_RIGHT_BRACE,
KeyEvent.VK_BRACERIGHT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_RIGHT,
KeyEvent.VK_RIGHT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_RIGHT_PARENTHESIS,
KeyEvent.VK_RIGHT_PARENTHESIS);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_RIGHT_SQUARE_BRACKET,
KeyEvent.VK_CLOSE_BRACKET);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_R,
KeyEvent.VK_R);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ROMAN_CHARACTERS,
KeyEvent.VK_ROMAN_CHARACTERS);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_SCROLL,
KeyEvent.VK_SCROLL_LOCK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_SCROLL,
KeyEvent.VK_SCROLL_LOCK);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_SEMICOLON,
KeyEvent.VK_SEMICOLON);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_SEMIVOICED_SOUND,
KeyEvent.VK_DEAD_SEMIVOICED_SOUND);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_SHIFT,
KeyEvent.VK_SHIFT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_SHIFT,
KeyEvent.VK_SHIFT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_S,
KeyEvent.VK_S);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_SLASH,
KeyEvent.VK_SLASH);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_SPACE,
KeyEvent.VK_SPACE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_STOP,
KeyEvent.VK_STOP);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_TAB,
KeyEvent.VK_TAB);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_T,
KeyEvent.VK_T);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_U,
KeyEvent.VK_U);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_UNDERSCORE,
KeyEvent.VK_UNDERSCORE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_UNDO,
KeyEvent.VK_UNDO);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_UNIDENTIFIED,
KeyEvent.VK_UNDEFINED);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_UP,
KeyEvent.VK_UP);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_V,
KeyEvent.VK_V);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_VOICED_SOUND,
KeyEvent.VK_DEAD_VOICED_SOUND);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_W,
KeyEvent.VK_W);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_X,
KeyEvent.VK_X);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_Y,
KeyEvent.VK_Y);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_Z,
KeyEvent.VK_Z);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_0,
KeyEvent.VK_NUMPAD0);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_1,
KeyEvent.VK_NUMPAD1);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_2,
KeyEvent.VK_NUMPAD2);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_3,
KeyEvent.VK_NUMPAD3);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_4,
KeyEvent.VK_NUMPAD4);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_5,
KeyEvent.VK_NUMPAD5);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_6,
KeyEvent.VK_NUMPAD6);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_7,
KeyEvent.VK_NUMPAD7);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_8,
KeyEvent.VK_NUMPAD8);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_9,
KeyEvent.VK_NUMPAD9);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_ASTERISK,
KeyEvent.VK_MULTIPLY);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_DOWN,
KeyEvent.VK_KP_DOWN);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_FULL_STOP,
KeyEvent.VK_DECIMAL);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_LEFT,
KeyEvent.VK_KP_LEFT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_MINUS,
KeyEvent.VK_SUBTRACT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_PLUS,
KeyEvent.VK_ADD);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_RIGHT,
KeyEvent.VK_KP_RIGHT);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_SLASH,
KeyEvent.VK_DIVIDE);
putIdentifierKeyCode(DOMKeyboardEvent.KEY_UP,
KeyEvent.VK_KP_UP);
}
protected static void putIdentifierKeyCode(String keyIdentifier,
int keyCode) {
if (IDENTIFIER_KEY_CODES[keyCode / 256] == null) {
IDENTIFIER_KEY_CODES[keyCode / 256] = new String[256];
}
IDENTIFIER_KEY_CODES[keyCode / 256][keyCode % 256] = keyIdentifier;
}
protected String mapKeyCodeToIdentifier(int keyCode) {
String[] a = IDENTIFIER_KEY_CODES[keyCode / 256];
if (a == null) {
return DOMKeyboardEvent.KEY_UNIDENTIFIED;
}
return a[keyCode % 256];
}
public void mouseWheelMoved(GraphicsNodeMouseWheelEvent evt) {
Document doc = context.getPrimaryBridgeContext().getDocument();
Element targetElement = doc.getDocumentElement();
DocumentEvent d = (DocumentEvent) doc;
SVGOMWheelEvent wheelEvt
= (SVGOMWheelEvent) d.createEvent("WheelEvent");
wheelEvt.initWheelEventNS(XMLConstants.XML_EVENTS_NAMESPACE_URI,
"wheel",
true,
true,
null,
evt.getWheelDelta());
try {
((EventTarget)targetElement).dispatchEvent(wheelEvt);
} catch (RuntimeException e) {
ua.displayError(e);
}
}
public void mouseEntered(GraphicsNodeMouseEvent evt) {
Point clientXY = evt.getClientPoint();
GraphicsNode node = evt.getGraphicsNode();
Element targetElement = getEventTarget(node, evt.getPoint2D());
Element relatedElement = getRelatedElement(evt);
int n = 0;
if (relatedElement != null && targetElement != null) {
n = DefaultXBLManager.computeBubbleLimit(targetElement,
relatedElement);
}
dispatchMouseEvent("mouseover",
targetElement,
relatedElement,
clientXY,
evt,
true,
n);
}
public void mouseExited(GraphicsNodeMouseEvent evt) {
Point clientXY = evt.getClientPoint();
GraphicsNode node = evt.getRelatedNode();
Element targetElement = getEventTarget(node, evt.getPoint2D());
if (lastTargetElement != null) {
int n = 0;
if (targetElement != null) {
n = DefaultXBLManager.computeBubbleLimit(lastTargetElement,
targetElement);
}
dispatchMouseEvent("mouseout",
lastTargetElement,
targetElement,
clientXY,
evt,
true,
n);
lastTargetElement = null;
}
}
public void mouseMoved(GraphicsNodeMouseEvent evt) {
Point clientXY = evt.getClientPoint();
GraphicsNode node = evt.getGraphicsNode();
Element targetElement = getEventTarget(node, evt.getPoint2D());
Element holdLTE = lastTargetElement;
if (holdLTE != targetElement) {
if (holdLTE != null) {
int n = 0;
if (targetElement != null) {
n = DefaultXBLManager.computeBubbleLimit(holdLTE,
targetElement);
}
dispatchMouseEvent("mouseout",
holdLTE,
targetElement,
clientXY,
evt,
true,
n);
}
if (targetElement != null) {
int n = 0;
if (holdLTE != null) {
n = DefaultXBLManager.computeBubbleLimit(targetElement,
holdLTE);
}
dispatchMouseEvent("mouseover",
targetElement,
holdLTE,
clientXY,
evt,
true,
n);
}
}
dispatchMouseEvent("mousemove",
targetElement,
null,
clientXY,
evt,
false,
0);
}
protected void dispatchMouseEvent(String eventType,
Element targetElement,
Element relatedElement,
Point clientXY,
GraphicsNodeMouseEvent evt,
boolean cancelable) {
dispatchMouseEvent(eventType, targetElement, relatedElement,
clientXY, evt, cancelable, 0);
}
protected void dispatchMouseEvent(String eventType,
Element targetElement,
Element relatedElement,
Point clientXY,
GraphicsNodeMouseEvent evt,
boolean cancelable,
int bubbleLimit) {
if (ctx12.mouseCaptureTarget != null) {
NodeEventTarget net = null;
if (targetElement != null) {
net = (NodeEventTarget) targetElement;
while (net != null && net != ctx12.mouseCaptureTarget) {
net = net.getParentNodeEventTarget();
}
}
if (net == null) {
if (ctx12.mouseCaptureSendAll) {
targetElement = (Element) ctx12.mouseCaptureTarget;
} else {
targetElement = null;
}
}
}
if (targetElement != null) {
Point screenXY = evt.getScreenPoint();
DocumentEvent d
= (DocumentEvent) targetElement.getOwnerDocument();
DOMMouseEvent mouseEvt
= (DOMMouseEvent) d.createEvent("MouseEvents");
String modifiers
= DOMUtilities.getModifiersList(evt.getLockState(),
evt.getModifiers());
mouseEvt.initMouseEventNS(XMLConstants.XML_EVENTS_NAMESPACE_URI,
eventType,
true,
cancelable,
null,
evt.getClickCount(),
screenXY.x,
screenXY.y,
clientXY.x,
clientXY.y,
(short) (evt.getButton() - 1),
(EventTarget) relatedElement,
modifiers);
mouseEvt.setBubbleLimit(bubbleLimit);
try {
((EventTarget) targetElement).dispatchEvent(mouseEvt);
} catch (RuntimeException e) {
ua.displayError(e);
} finally {
lastTargetElement = targetElement;
}
}
if (ctx12.mouseCaptureTarget != null
&& ctx12.mouseCaptureAutoRelease
&& "mouseup".equals(eventType)) {
ctx12.stopMouseCapture();
}
}
}
}