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 "mitchell bass (JIRA)" <ji...@apache.org> on 2016/03/24 20:58:25 UTC
[jira] [Created] (BATIK-1144) a text animation faults with null
pointer exception, when scripting with java
mitchell bass created BATIK-1144:
------------------------------------
Summary: a text animation faults with null pointer exception, when scripting with java
Key: BATIK-1144
URL: https://issues.apache.org/jira/browse/BATIK-1144
Project: Batik
Issue Type: Bug
Components: Animation engine, Bridge, Scripting
Affects Versions: 1.8
Environment: first noticed on windows 7, jdk 1.8
Reporter: mitchell bass
when trying to dynamically animate a color change for a text element, got a null pointer exception in the SVGOMAnimationElement:beginElement() method because getSvgContext was returning null.
introspection with a debugger turned up the fact that in SVGTextElementBridge.handleDOMNodeInsertedEvent(MutationEvent evt) the setting of the svg context was not being done. this is called when the animation element is appended as a child to the text element.
SVGTextElementBridge extends AbstractGraphicsNodeBridge and in particular overrides handleDOMNodeInsertedEvent(MutationEvent evt) which would normally set the svg context.
as a local fix changing SVGTextElementBridge.handleDOMNodeInsertedEvent(MutationEvent evt) and how it handles an ELEMENT node from:
public void handleDOMNodeInsertedEvent(MutationEvent evt) {
Node childNode = (Node)evt.getTarget();
//check the type of the node inserted before discard the layout
//in the case of <title> or <desc> or <metadata>, the layout
//is unchanged
switch(childNode.getNodeType()) {
case Node.TEXT_NODE: // fall-through is intended
case Node.CDATA_SECTION_NODE:
laidoutText = null;
break;
case Node.ELEMENT_NODE: {
Element childElement = (Element)childNode;
if (isTextChild(childElement)) {
addContextToChild(ctx, childElement);
laidoutText = null;
}
break;
}
}
if (laidoutText == null) {
computeLaidoutText(ctx, e, getTextNode());
}
}
--
to fix, added else to isTextChild conditional, to:
public void handleDOMNodeInsertedEvent(MutationEvent evt) {
Node childNode = (Node)evt.getTarget();
//check the type of the node inserted before discard the layout
//in the case of <title> or <desc> or <metadata>, the layout
//is unchanged
switch(childNode.getNodeType()) {
case Node.TEXT_NODE: // fall-through is intended
case Node.CDATA_SECTION_NODE:
laidoutText = null;
break;
case Node.ELEMENT_NODE: {
Element childElement = (Element)childNode;
if (isTextChild(childElement)) {
addContextToChild(ctx, childElement);
laidoutText = null;
}
// ADDED ELSE so animation nodes get std treatment
else {
super.handleDOMNodeInsertedEvent(evt);
}
break;
}
}
if (laidoutText == null) {
computeLaidoutText(ctx, e, getTextNode());
}
}
--
not clear that this is a complete fix or not.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-help@xmlgraphics.apache.org