You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by tk...@apache.org on 2002/04/22 19:08:56 UTC
cvs commit: xml-batik/sources/org/apache/batik/bridge FocusManager.java BridgeContext.java BridgeEventSupport.java ScriptingEnvironment.java
tkormann 02/04/22 10:08:56
Modified: sources/org/apache/batik/bridge BridgeContext.java
BridgeEventSupport.java ScriptingEnvironment.java
Added: sources/org/apache/batik/bridge FocusManager.java
Log:
- add a new class FocusManager that has the current element with focus
- add support for DOMFocusIn and DOMFocusOut event type
- bug fix in event dispatcher
next, add support for DOMActivate event type
Revision Changes Path
1.46 +17 -1 xml-batik/sources/org/apache/batik/bridge/BridgeContext.java
Index: BridgeContext.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeContext.java,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- BridgeContext.java 22 Apr 2002 14:59:44 -0000 1.45
+++ BridgeContext.java 22 Apr 2002 17:08:55 -0000 1.46
@@ -66,7 +66,7 @@
* a SVG DOM tree such as the current viewport or the user agent.
*
* @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
- * @version $Id: BridgeContext.java,v 1.45 2002/04/22 14:59:44 tkormann Exp $
+ * @version $Id: BridgeContext.java,v 1.46 2002/04/22 17:08:55 tkormann Exp $
*/
public class BridgeContext implements ErrorConstants, CSSContext {
@@ -331,6 +331,13 @@
}
/**
+ * Returns the focus manager.
+ */
+ public FocusManager getFocusManager() {
+ return focusManager;
+ }
+
+ /**
* Sets the interpreter pool used to handle scripts to the
* specified interpreter pool.
* @param interpreterPool the interpreter pool
@@ -729,6 +736,11 @@
protected CSSEngineListener cssPropertiesChangedListener;
/**
+ * The EventListener that is responsible of managing DOM focus event.
+ */
+ protected FocusManager focusManager;
+
+ /**
* Adds EventListeners to the DOM and CSSEngineListener to the
* CSSEngine to handle any modifications on the DOM tree or style
* properties and update the GVT tree in response.
@@ -757,6 +769,8 @@
domCharacterDataModifiedListener,
true);
+ focusManager = new FocusManager(document);
+
SVGOMDocument svgDocument = (SVGOMDocument)document;
CSSEngine cssEngine = svgDocument.getCSSEngine();
cssPropertiesChangedListener = new CSSPropertiesChangedListener();
@@ -784,6 +798,8 @@
SVGOMDocument svgDocument = (SVGOMDocument)document;
CSSEngine cssEngine = svgDocument.getCSSEngine();
cssEngine.removeCSSEngineListener(cssPropertiesChangedListener);
+
+ focusManager.dispose();
}
/**
1.31 +5 -9 xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java
Index: BridgeEventSupport.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- BridgeEventSupport.java 22 Apr 2002 14:24:57 -0000 1.30
+++ BridgeEventSupport.java 22 Apr 2002 17:08:55 -0000 1.31
@@ -49,20 +49,16 @@
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+
import org.w3c.dom.events.DocumentEvent;
import org.w3c.dom.events.Event;
import org.w3c.dom.events.EventListener;
import org.w3c.dom.events.EventTarget;
import org.w3c.dom.events.MouseEvent;
+
import org.w3c.dom.svg.SVGElement;
import org.w3c.dom.svg.SVGSVGElement;
- // <!> FIXME: TO BE REMOVED
- // <!> FIXME: TO BE REMOVED
- // <!> FIXME: TO BE REMOVED
- // <!> FIXME: TO BE REMOVED
- // <!> FIXME: TO BE REMOVED
-
/**
* A class to attach listeners on the <code>Document</code> to
* call pieces of script when necessary and to attach a listener
@@ -70,9 +66,9 @@
*
* @author <a href="mailto:cjolif@ilog.fr>Christophe Jolif</a>
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: BridgeEventSupport.java,v 1.30 2002/04/22 14:24:57 tkormann Exp $
+ * @version $Id: BridgeEventSupport.java,v 1.31 2002/04/22 17:08:55 tkormann Exp $
*/
-class BridgeEventSupport implements SVGConstants {
+public class BridgeEventSupport implements SVGConstants {
private BridgeEventSupport() {}
@@ -350,7 +346,7 @@
Element target = context.getElement(node);
// Lookup inside the text element children to see if the target
// is a tspan or textPath
- if (node instanceof TextNode) {
+ if (target != null && node instanceof TextNode) {
TextNode textNode = (TextNode)node;
List list = textNode.getTextRuns();
for (int i = 0 ; i < list.size(); i++) {
1.24 +5 -5 xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java
Index: ScriptingEnvironment.java
===================================================================
RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- ScriptingEnvironment.java 15 Apr 2002 10:16:12 -0000 1.23
+++ ScriptingEnvironment.java 22 Apr 2002 17:08:56 -0000 1.24
@@ -47,7 +47,7 @@
* This class contains the informations needed by the SVG scripting.
*
* @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
- * @version $Id: ScriptingEnvironment.java,v 1.23 2002/04/15 10:16:12 hillion Exp $
+ * @version $Id: ScriptingEnvironment.java,v 1.24 2002/04/22 17:08:56 tkormann Exp $
*/
public class ScriptingEnvironment extends BaseScriptingEnvironment {
@@ -329,10 +329,10 @@
// UI listeners
if (elt.hasAttributeNS(null, "onfocusin")) {
- target.addEventListener("focusin", focusinListener, false);
+ target.addEventListener("DOMFocusIn", focusinListener, false);
}
if (elt.hasAttributeNS(null, "onfocusout")) {
- target.addEventListener("focusout", focusoutListener, false);
+ target.addEventListener("DOMFocusOut", focusoutListener, false);
}
if (elt.hasAttributeNS(null, "onactivate")) {
target.addEventListener("activate", activateListener, false);
@@ -408,8 +408,8 @@
}
// UI listeners
- target.removeEventListener("focusin", focusinListener, false);
- target.removeEventListener("focusout", focusoutListener, false);
+ target.removeEventListener("DOMFocusIn", focusinListener, false);
+ target.removeEventListener("DOMFocusOut", focusoutListener, false);
target.removeEventListener("activate", activateListener, false);
target.removeEventListener("click", clickListener, false);
target.removeEventListener("mousedown", mousedownListener, false);
1.1 xml-batik/sources/org/apache/batik/bridge/FocusManager.java
Index: FocusManager.java
===================================================================
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.batik.bridge;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.events.DocumentEvent;
import org.w3c.dom.events.Event;
import org.w3c.dom.events.EventListener;
import org.w3c.dom.events.EventTarget;
import org.w3c.dom.events.UIEvent;
import org.w3c.dom.events.MouseEvent;
/**
* A class that manages focus on elements. Users of this class needs
* to attached this EventListener with the 'mouseover' event type.
*
* @author <a href="mailto:Thierry.Kormann@sophia.inria.fr">Thierry Kormann</a>
* @version $Id: FocusManager.java,v 1.1 2002/04/22 17:08:56 tkormann Exp $
*/
public class FocusManager {
/**
* The element that has the focus so far.
*/
protected EventTarget lastFocusEventTarget;
/**
* The document.
*/
protected Document document;
/**
* The EventListener that tracks 'DOMFocusIn' events.
*/
protected EventListener domFocusInListener;
/**
* The EventListener that tracks 'DOMFocusOut' events.
*/
protected EventListener domFocusOutListener;
/**
* The EventListener that tracks 'mouseover' events.
*/
protected EventListener mouseoverListener;
/**
* The EventListener that tracks 'mouseout' events.
*/
protected EventListener mouseoutListener;
/**
* Constructs a new <tt>FocusManager</tt> for the specified document.
*
* @param doc the document
*/
public FocusManager(Document doc) {
document = doc;
EventTarget target = (EventTarget)doc;
mouseoverListener = new MouseOverTacker();
target.addEventListener("mouseover", mouseoverListener, true);
mouseoutListener = new MouseOutTacker();
target.addEventListener("mouseout", mouseoutListener, true);
domFocusInListener = new DOMFocusInTracker();
target.addEventListener("DOMFocusIn", domFocusInListener, true);
domFocusOutListener = new DOMFocusOutTracker();
target.addEventListener("DOMFocusOut", domFocusOutListener, true);
}
/**
* Returns the current element that has the focus or null if any.
*/
public EventTarget getCurrentEventTarget() {
return lastFocusEventTarget;
}
/**
* Removes all listeners attached to the document and that manage focus.
*/
public void dispose() {
EventTarget target = (EventTarget)document;
target.removeEventListener("mouseover", mouseoverListener, true);
target.removeEventListener("mouseout", mouseoutListener, true);
target.removeEventListener("DOMFocusIn", domFocusInListener, true);
target.removeEventListener("DOMFocusOut", domFocusOutListener, true);
}
/**
* The class that is responsible for tracking 'DOMFocusIn' changes.
*/
protected class DOMFocusInTracker implements EventListener {
public void handleEvent(Event evt) {
if (lastFocusEventTarget != null &&
lastFocusEventTarget != evt.getTarget()) {
fireDOMFocusOutEvent(lastFocusEventTarget);
}
lastFocusEventTarget = evt.getTarget();
}
}
/**
* The class that is responsible for tracking 'DOMFocusOut' changes.
*/
protected class DOMFocusOutTracker implements EventListener {
public void handleEvent(Event evt) {
lastFocusEventTarget = null;
}
}
/**
* The class that is responsible to update the focus according to
* 'mouseover' event.
*/
protected class MouseOverTacker implements EventListener {
public void handleEvent(Event evt) {
EventTarget target = evt.getTarget();
fireDOMFocusInEvent(target);
}
}
/**
* The class that is responsible to update the focus according to
* 'mouseout' event.
*/
protected class MouseOutTacker implements EventListener {
public void handleEvent(Event evt) {
EventTarget target = evt.getTarget();
fireDOMFocusOutEvent(target);
}
}
/**
* Fires a 'DOMFocusIn' event to the specified target.
*
* @param target the event target
*/
protected void fireDOMFocusInEvent(EventTarget target) {
DocumentEvent docEvt =
(DocumentEvent)((Element)target).getOwnerDocument();
UIEvent uiEvt = (UIEvent)docEvt.createEvent("UIEvents");
uiEvt.initUIEvent("DOMFocusIn", true, false, null, 0);
target.dispatchEvent(uiEvt);
}
/**
* Fires a 'DOMFocusOut' event to the specified target.
*
* @param target the event target
*/
protected void fireDOMFocusOutEvent(EventTarget target) {
DocumentEvent docEvt =
(DocumentEvent)((Element)target).getOwnerDocument();
UIEvent uiEvt = (UIEvent)docEvt.createEvent("UIEvents");
uiEvt.initUIEvent("DOMFocusOut", true, false, null, 0);
target.dispatchEvent(uiEvt);
}
/**
* Fires a 'DOMActivate' event to the specified target.
*
* @param target the event target
* @param detailArg the detailArg parameter of the event
*/
protected void fireDOMActivateEvent(EventTarget target, int detailArg) {
DocumentEvent docEvt =
(DocumentEvent)((Element)target).getOwnerDocument();
UIEvent uiEvt = (UIEvent)docEvt.createEvent("UIEvents");
uiEvt.initUIEvent("DOMActivate", true, true, null, detailArg);
target.dispatchEvent(uiEvt);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org