You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-users@xmlgraphics.apache.org by Anubhav Tiwari <th...@yahoo.co.in> on 2012/11/05 12:15:48 UTC

updating on JSVGCanvas whithout updating the DOM...

 
I have a svg-file which has text tags <text>TRANSFORM</text>

Through Batik api i read the svg file and set the document in the canvas.

Now my requirement is to change the TRANSFORM text to TRANSFORM_CHANGED on
the canvas only. The change should not reflect in the DOM object/document. 

Firstly, is it possible to make any change on the JSVGCanvas only without
disturbing the SVG doc object.
If yes, i want a place where in Batik we read the text from the GraphicsNode
and render it on the Canvas.

Through all my code debugging i learnt that - There is a class
SVGTextElementBridge.java where the AttributedString is made in the method
fillAttributedStringBuffer() whenever a TextNode is encountered.
But this is done at the time of building (GVTTreeBuilder). 

There should be some place at the time of rendering (GVTTreeRenderer) in
DynamicRenderer.java where the text is again read from the GraphicsNode and
given to the canvas. 
Should that be the point i should target to change the text?

Thanks and Regards,
Anubhav 



--
View this message in context: http://batik.2283329.n4.nabble.com/updating-on-JSVGCanvas-whithout-updating-the-DOM-tp4655341.html
Sent from the Batik - Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org


Re: updating on JSVGCanvas whithout updating the DOM...

Posted by DeWeese Thomas <th...@gmail.com>.
Hi Anubhav,

On Nov 5, 2012, at 6:15 AM, Anubhav Tiwari <th...@yahoo.co.in> wrote:

> I have a svg-file which has text tags <text>TRANSFORM</text>
> 
> Through Batik api i read the svg file and set the document in the canvas.
> 
> Now my requirement is to change the TRANSFORM text to TRANSFORM_CHANGED on
> the canvas only. The change should not reflect in the DOM object/document. 
> 
> Firstly, is it possible to make any change on the JSVGCanvas only without
> disturbing the SVG doc object.

	This is software anything is possible...  That said this is an exceedingly bad
idea.  There is essentially no good reason I can think of to go this route rather than
say copying the DOM and using the copied and modified DOM for display.  If you
need some changes in the display DOM reflected in the source DOM it's fairly simple
to write a class that will listen to DOM mutation events and replicate the changes in 
the source DOM.  This also provides you one place to 'filter' your display only changes.

> If yes, i want a place where in Batik we read the text from the GraphicsNode
> and render it on the Canvas.

This is done in the org.apache.batik.gvt.TextNode.  The problem is that the SVGTextElementBridge
that is associated with it assumes that it is the only source of modifications to the TextNode so
anytime it decides it needs to change anything it will simply wack your changes out of existence.

> There should be some place at the time of rendering (GVTTreeRenderer) in
> DynamicRenderer.java where the text is again read from the GraphicsNode and
> given to the canvas. 

   This is the TextNode (and it's associated helper classes like StrokingTextPainter).
I'll also say that text rendering is far and away the most complex code in all of Batik,
doing anything with that code makes me nervous and I wrote most of it.  You will 
save yourself a lot of lost sleep by simply leaving it alone.

> Should that be the point i should target to change the text?

	No.  To repeat, trying to muck with the Graphics tree behind the back of the
UpdateManager and Bridges is only going to end in frustration.  The biggest problem
is that your early test code will work just fine, but once you get into more complex situations
you are going to encounter more and more places where you need to try and patch around
the Text Bridge breaking your changes in unexpected ways.  Going the Shadow DOM approach
I mention above is more work up front but will provide a much cleaner architecture for your work.

    Good luck, and please listen,
    Thomas


---------------------------------------------------------------------
To unsubscribe, e-mail: batik-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-help@xmlgraphics.apache.org