Re: Recording surface as source. Bug? Cairo 1.12.11/1.12.12

Edward Zimmermann <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
We are having some odd problems with recording surface "playback".

Background: We want to use nested recording surfaces.

Below is a very simple test: three recording surfaces.
We play each back onto another surface but alter the matrix.

Draw a rectangle into recording surface 1.
recording surface 1 into recording surface 2.
recording surface 2 into recording surface 3.
recording surface 3 into a final image surface. From this we write a PNG file.

In our example we set the matrix: 0,-1,1,0,0,40 for the first and 0,-1,1,0,0,80 for the second round.
The PNG file does not contain our rectangle.

If we use an identity matrix it works as we expect: rectangle in the PNG file.
If we rotate it only once it shows up if we rotate it twice we get an empty canvas.

The interesting thing is: If we do the last playback to a vector surface such as PDF it works! If we play it back to the image surface.. Nothing..

Bug? Our stupidity? Ideas?

Dump follows:

%!CairoScript - test4
//COLOR_ALPHA [ 0 0 40 40 ] record dup /s0 exch def
context % c0
10 10 20 20 rectangle
1 0 1 1 set-source-rgba
stroke
1 1 1 1 set-source-rgba
//COLOR_ALPHA [ 0 0 80 80 ] record dup /s1 exch def
context % c1
save
0 -1 1 0 0 40 matrix transform
s0 pattern set-source
/source get /p0 exch def
p0
//FILTER_NEAREST set-filter
exch paint
restore
exch pop % p0 destroyed
/p0 undef
//COLOR_ALPHA [ 0 0 160 160 ] record dup /s2 exch def
context % c2
save
0 -1 1 0 0 80 matrix transform
s1 pattern set-source
/source get /p0 exch def
p0
//FILTER_NEAREST set-filter
exch paint
dict
  /width 842 set
  /height 842 set
  /format //ARGB32 set
  /content //COLOR_ALPHA set
  image dup /s3 exch def
context % c3
s3 0 0 595 842 subsurface % s4
exch 1 1 1 1 set-source-rgba
//SOURCE set-operator
1 paint-with-alpha
//OVER set-operator
0.8 0 0 0.8 41 165 matrix transform
5 set-line-width
s2 pattern set-source
/source get /p1 exch def
p1
//FILTER_NEAREST set-filter
exch paint
% s4 (dummy.png) write-to-png pop
3 -1 roll pop % s4 destroyed
exch pop % p1 destroyed
/p1 undef
pop % c3 destroyed
exch pop % p0 destroyed
/p0 undef
pop % c2 destroyed
pop % c1 destroyed
pop % c0 destroyed


This has been tested with both 1.12.11 (Linux 64-bit built using gcc) and 1.12.12 (Win32 32-bit built using Studio 9) so its not a platform/compiler thing.

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.