Denis Bohm wrote:
One other side effect of replacing the subtree is that listeners get called,
such as mouseout.

I think I'll try creating a rect subtree behind the text that highlights the
text areas next.

I just committed fixes for the clientX/Y parameters, and text selection. Let me know if they work for you.


----- Original Message ----- From: "Thomas DeWeese" <[EMAIL PROTECTED]>
To: "Batik Users" <[EMAIL PROTECTED]>
Sent: Thursday, August 21, 2003 12:54 PM
Subject: Re: tspan.setAttributeNS(null, "class", "normal") null pointer
exception




Denis Bohm wrote:

Thanks for the tips.  I'll try replacing the DOM subtree to avoid the
performance issue.  The only immediate downside to that seems to be that
text selections can get lost...

Well if you are willing to talk directly to the JSVGCanvas you can get the text selection from that and use it to restore it after you add the node back in (once I fix text selection DOM APIs - BTW don't

bother putting


togeather an example for that I'm going to rework some internal examples

to use this


API).


----- Original Message ----- From: "Thomas DeWeese" <[EMAIL PROTECTED]>
To: "Batik Users" <[EMAIL PROTECTED]>
Sent: Thursday, August 21, 2003 12:24 PM
Subject: Re: tspan.setAttributeNS(null, "class", "normal") null pointer
exception





Denis Bohm wrote:


I changed my sources so that if the old property value is null then it
considers it as a change (rather than throwing a null pointer

exception).



Now changing the attribute seems to work.

This is essentially the patch I was going to make.




However, it seems very very very
slow to refresh when changing class attributes that result in simple

style



changes.

In SVG there is no such thing as a 'simple style change'. So for

example



if the text uses an SVG font then the font now needs to inherit the

modified



fill color.  Also consider that your one element can in certain cases
be mapped into several disjoint pieces by BIDI reordering.  This is

really


amazingly complex stuff.  The text code in Batik is by a fair bit the
most complex piece, the code has been almost completely rewritten three

times



already and serveral weeks of effort have gone into trying to optimize

it


and still it sucks! :)



In my case, the class change only results in changing the fill
color - which shouldn't effect the bounds of the elements.  Changing

the


class for about 25 tspan elements (making up one short line of text)

takes



about 1.5 seconds. I ran OptimizeIt on the code and it appears that

each



time the class property is changed on one tspan element the glyphs go
through relayout down in the gvt layer.

I've just taken a look through the code and I may try and optimize

this


case a bit (although SVG Fonts are very problematic).



This results in the creation of
around 27,000 points during the process.

Hmm, thanks for pointing this out, not that I think this is the

bottle


neck


but it was easy to fix most of these :).



Any tips for speeding up changing the color of text runs? For example,

is



there some way to batch changes to the DOM?

The best you can do (and it is probably pretty good) is remove the

elements from



the rendering tree: text.parentNode.removeChild(text) Then make all

your


changes


and add it back in - this will keep Batik from trying to keep the

rendering tree



in sync with the modified elements.



Thanks,
Denis

----- Original Message ----- From: "Denis Bohm" <[EMAIL PROTECTED]>
To: "Batik Users" <[EMAIL PROTECTED]>
Sent: Thursday, August 21, 2003 8:26 AM
Subject: Re: tspan.setAttributeNS(null, "class", "normal") null pointer
exception






I've attached a standalone version that shows the problem.

----- Original Message ----- From: "Thomas DeWeese" <[EMAIL PROTECTED]>
To: "Batik Users" <[EMAIL PROTECTED]>
Sent: Thursday, August 21, 2003 5:19 AM
Subject: Re: tspan.setAttributeNS(null, "class", "normal") null

pointer


exception





Denis Bohm wrote:



Setting color to the Shadow?When I try to append a tspan to a text

element




and then set the tspan class:

     Element tspan = document.createElementNS(
         SVGDOMImplementation.SVG_NAMESPACE_URI, "tspan"
     );
     tspan.appendChild(document.createCDATASection(text));
     text.appendChild(tspan);
     tspan.setAttributeNS(null, "class", "normal");

I get a null pointer exception:

Can you provide a standalone version of this problem? Looking at the line indicated below it isn't real clear why you would get an NPE.




In Event
java.lang.NullPointerException
     at


org.apache.batik.css.engine.CSSEngine.invalidateProperties(CSSEngine.java:18

91)
     at


org.apache.batik.css.engine.CSSEngine$DOMAttrModifiedListener.handleEvent(CS

SEngine.java:2280)
     at


org.apache.batik.dom.events.EventSupport.fireEventListeners(EventSupport.jav

a:268)
     at


org.apache.batik.dom.events.EventSupport.dispatchEvent(EventSupport.java:240

)
     at

org.apache.batik.dom.AbstractNode.dispatchEvent(AbstractNode.java:455)

at


org.apache.batik.dom.AbstractElement.fireDOMAttrModifiedEvent(AbstractElemen

t.java:544)
     at


org.apache.batik.dom.AbstractElement$NamedNodeHashMap.setNamedItem(AbstractE

lement.java:725)
     at


org.apache.batik.dom.AbstractElement$NamedNodeHashMap.setNamedItemNS(Abstrac

tElement.java:672)
     at


org.apache.batik.dom.AbstractElement.setAttributeNS(AbstractElement.java:271

)
     at

com.hp.hpl.epc.evaluator.DemoUI.appendTSpan(DemoUI.java:209)




     at com.hp.hpl.epc.evaluator.DemoUI.mouseMove(DemoUI.java:409)
     at

com.hp.hpl.epc.evaluator.DemoUI$2.handleEvent(DemoUI.java:276)




at


org.apache.batik.dom.events.EventSupport.fireEventListeners(EventSupport.jav

a:268)
     at


org.apache.batik.dom.events.EventSupport.dispatchEvent(EventSupport.java:240

)
     at

org.apache.batik.dom.AbstractNode.dispatchEvent(AbstractNode.java:455)

at


org.apache.batik.bridge.BridgeEventSupport$Listener.dispatchMouseEvent(Bridg

eEventSupport.java:372)
     at


org.apache.batik.bridge.BridgeEventSupport$Listener.mouseMoved(BridgeEventSu

pport.java:286)
     at


org.apache.batik.gvt.event.AWTEventDispatcher.processMouseEvent(AWTEventDisp

atcher.java:538)
     at


org.apache.batik.gvt.event.AWTEventDispatcher.dispatchMouseEvent(AWTEventDis

patcher.java:502)
     at


org.apache.batik.gvt.event.AWTEventDispatcher.dispatchEvent(AWTEventDispatch

er.java:391)
     at


org.apache.batik.gvt.event.AWTEventDispatcher.mouseMoved(AWTEventDispatcher.

java:244)
     at


org.apache.batik.swing.svg.JSVGComponent$1MouseMovedRunnable.run(JSVGCompone

nt.java:1989)
     at

org.apache.batik.util.RunnableQueue.run(RunnableQueue.java:204)




at java.lang.Thread.run(Thread.java:534)


Am I doing something wrong?


Thanks,
Denis



---------------------------------------------------------------------

To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



--------------------------------------------------------------------------

--


----





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to