[cairo] pycairo matrix copy limitation

lloyd konneker bootch at nc.rr.com
Fri Jan 28 07:27:52 PST 2011

You can't copy (shallow or deep) a pycairo Matrix object using standard
Python idioms.  There is a workaround.

It just bit me.  A web search reveals one prior mention, hidden on the
pygtk mailing list.

I think copying transform matrices is common.  My app uses retained mode
(versus immediate mode) rendering and hierarchical modeling, which means
keeping a copy of a transformation matrix throughout the model tree.
Mostly use context.get_matrix(), but I also need to copy a retained
matrix.  (Or maybe my design is poor?)

Can I submit a patch to the pycairo documentation to warn of this?
(Or a fix to pycairo?)

This illustrates:

#!/usr/bin/env python

import cairo
import copy

foo = cairo.Matrix()
print foo
print copy.copy(foo)
print copy.deepcopy(foo)
print cairo.Matrix() * foo  # workaround

# output
# cairo.Matrix(1, 0, 0, 1, 2, 3)
# cairo.Matrix(1, 0, 0, 1, 0, 0)
# cairo.Matrix(1, 0, 0, 1, 0, 0)
# cairo.Matrix(1, 0, 0, 1, 2, 3)

More information about the cairo mailing list