ink_extents() returns garbage for nested RecordingSurface

Daniel Nouri <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dear all,

I'm using cairo with Python via cairocffi and I'm trying to nest a
RecordingSurface into another.  Which works fine until I try to use
get_ink_extents() on a nesting RecordingSurface.

So in my little example, left and right are two recording surfaces,
which contain two recording surfaces each:

  +---------+---------+---------+---------+
  |         |         |         |         |
  | left1   | left2   | right1  | right2  |
  |         |         |         |         |
  |                   |                   |
  |       left        |       right       |
  |                   |                   |
  +---------+---------+---------+---------+

And here is the code example:

    surface = cairo.PSSurface('tut.eps', PAGE_WIDTH, PAGE_HEIGHT)
    surface.set_eps(True)
    context = cairo.Context(surface)

    surface_left = cairo.RecordingSurface(
        cairo.CONTENT_COLOR_ALPHA, None)
    context_left = cairo.Context(surface_left)

    surface_right = cairo.RecordingSurface(
        cairo.CONTENT_COLOR_ALPHA, None)
    context_right = cairo.Context(surface_right)

    surface_left1 = cairo.RecordingSurface(
        cairo.CONTENT_COLOR_ALPHA, None)
    context_left1 = cairo.Context(surface_left1)

    surface_left2 = cairo.RecordingSurface(
        cairo.CONTENT_COLOR_ALPHA, None)
    context_left2 = cairo.Context(surface_left2)

    surface_right1 = cairo.RecordingSurface(
        cairo.CONTENT_COLOR_ALPHA, None)
    context_right1 = cairo.Context(surface_right1)

    surface_right2 = cairo.RecordingSurface(
        cairo.CONTENT_COLOR_ALPHA, None)
    context_right2 = cairo.Context(surface_right2)

    context_left1.set_source_rgb(1.0, 0.0, 0.0)
    context_left1.rectangle(0, 0, 50, 50)
    context_left1.fill()

    context_left2.set_source_rgb(0.0, 1.0, 0.0)
    context_left2.rectangle(0, 0, 50, 50)
    context_left2.fill()

    context_right1.set_source_rgb(0.0, 0.0, 1.0)
    context_right1.rectangle(0, 0, 50, 50)
    context_right1.fill()

    context_right2.set_source_rgb(1.0, 1.0, 0.0)
    context_right2.rectangle(0, 0, 50, 50)
    context_right2.fill()

    context_left.set_source_surface(surface_left1)
    context_left.paint()

    x, y, width, height = surface_left1.ink_extents()
    context_left.translate(x + width, 0)
    context_left.set_source_surface(surface_left2)
    context_left.paint()

    context_right.set_source_surface(surface_right1)
    context_right.paint()

    x, y, width, height = surface_right1.ink_extents()
    context_right.translate(x + width, 0)
    context_right.set_source_surface(surface_right2)
    context_right.paint()

    context.set_source_surface(surface_left)
    context.paint()
    x, y, width, height = surface_left.ink_extents()
    context.translate(width, 0)  # width is -1 at this point

    context.set_source_surface(surface_right)
    context.paint()

Getting the ink_extents() from surface_left1 and surface_right1 works
fine.  But when I try to get the ink_extents() from surface_left
(which nests surface_left1 and surface_left2), I get:

    >>> surface_left.ink_extents()
    (-8388608.0, -8388608.0, -1.0, -1.0)

Anything I'm missing?  Maybe I'm not using the RecordingSurface the
way it's intended?


Thanks!
Daniel
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iEYEARECAAYFAlFmmsUACgkQi2kx5isbD8yUmQCcCBWmAufYDUN01ZojVtoWWuyd
dGsAmgOIy+LL0Q+1s4vUzUkkhQ+ZnOx+
=yV7p
-----END PGP SIGNATURE-----
-- 
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.