Hi Anubhav,

On Nov 5, 2012, at 6:15 AM, Anubhav Tiwari <thecoolguy...@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-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: batik-users-h...@xmlgraphics.apache.org

Reply via email to