DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUGĀ·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=37236>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED ANDĀ·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=37236





------- Additional Comments From [EMAIL PROTECTED]  2005-10-25 13:17 -------
(In reply to comment #3)
> (In reply to comment #1)
> <snip/>
> > 2) Patterns that contain gradients generate 'bad' PDF.      I suspect
> >    the problem is resource referencing.  Since I am fairly sure the
> >    problem existed before my fidling I'm going to leave it as is.
> 
> Do you have a test case to reproduce this?

   Yes, sorry this was generated by:
http://svn.apache.org/repos/asf/xmlgraphics/batik/trunk/samples/tests/spec/paints/patternRegions.svg

   Most of the document converts correctly but the
last test seems to generate a PDF error.  I took a quick
look at it but it basically looked believable to me...

> > A few notes on the patch.
> > 1) I simplified the PDFState.Data class, by removing the
> >    the 'concatenations' List.  It doesn't seem to be used
> >    by anything.
> 
> You're wrong. It is used by the PDF Renderer to handle "fixed" positioned
> block-containers. This can't just be removed. The concatenate() method 
> even has a proper javadoc comment that explains the purpose.

   Sorry about that.  It's a bit odd I thought was careful to delete 
all class files after this change to ensure that I hadn't missed anything, 
and everything still compiled (of course it doesn't now). Anyway
if this is needed it can stay, the real problem code was the way that
'PDFState.getTransform' was coded which was definately producing wrong 
results (transforms applied twice, see below).

> > 2) I changed PDFState.getTransform it now just returns the
> >    current transform as this already includes all the previous
> >    transforms. Perhaps I misunderstood the code but things work
> >    now and the transforms make sense where as they didn't before.
> 
> As you can see in my comment for 1) this can't be the solution.

   This part of the change is essentially independent from the first 
point.

> If you can give be the test cases that are involved here I can try 
> to help.

   You would hit this problem with any SVG file (try 
linearGradientOrientation.svg in the same directory as above).
The way I detected it was by tracking what is handed to 
'PDFState.setTransform' and what is returned by 
'PDFState.getTransform'.  The value returned by getTransform
has the transform applied twice.  

   The reason is pretty clear when you clone the Data object for a 
push you don't clear the transform of the new Data object (you did 
clear the concatenations list), thus you end up with two Data 
objects both of which have what ever the transform was.  Then the 
old getTransform code would then concatenate both of these 
resulting in a double transform. I think only the gradient code 
uses the transform returned by this method, so for most content
the bug wouldn't show up.

   There are two potential solutions, first clear the transform when
you clone the Data object, but leave the concatenation code in 
getTransform. Second have getTransform just return the current
Data.transform (as I did, but leave the concatenations List stuff 
alone).

   If you do the first I suspect the code in PDFRenderer could just 
use the transform from the Data object to restore state, and the 
concatenations list could go away, but I don't really know or 
understand the code in question - I'll just say that the current
system appears way more complex then it needs to be, you should be 
able to accomplish everything with the existing push/pop on PDFState.

   Finally, doesn't it bother you to have one class getting
an iterator from a raw member of an inner class belonging to 
another class?


-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

Reply via email to