Cairo::Matrix#

📦 std

Cairo::Matrix - the affine transform every drawing operation goes through.

A matrix holds the six numbers (xx, yx, xy, yy, x0, y0) of a 2D affine transform. The Cairo::Matrix->init* constructors build one, translate/scale/rotate modify it in place, multiply combines two, invert inverts it in place, and transform_point / transform_distance apply it to a coordinate pair.

Unlike the other cairo objects a matrix is a plain value, not a shared reference-counted handle. Every method that hands one back - Context::get_matrix, Pattern::get_matrix, ScaledFont::get_font_matrix - returns a fresh copy, so changing the matrix you got back never changes the object it came from. The copy is released when Perl destroys it; nothing has to be freed by hand.

The matrix API is stable since cairo 1.0, so no method here depends on a particular libcairo version.

Functions#

Other Functions#

init#

Builds a new matrix from the six affine components, in cairo’s order: Cairo::Matrix->init($xx, $yx, $xy, $yy, $x0, $y0). All six are required; a shorter argument list croaks with a usage message.

init_identity#

Builds a new matrix set to the identity transform: Cairo::Matrix->init_identity.

init_translate#

Builds a new matrix that translates by ($tx, $ty): Cairo::Matrix->init_translate($tx, $ty).

init_scale#

Builds a new matrix that scales by $sx in x and $sy in y: Cairo::Matrix->init_scale($sx, $sy).

init_rotate#

Builds a new matrix that rotates by $radians: Cairo::Matrix->init_rotate($radians).

translate#

Applies a translation of ($tx, $ty) to $matrix in place (cairo_matrix_translate). Returns nothing.

scale#

Applies a scale of ($sx, $sy) to $matrix in place (cairo_matrix_scale). Returns nothing.

rotate#

Applies a rotation of $radians to $matrix in place (cairo_matrix_rotate). Returns nothing.

invert#

Inverts $matrix in place (cairo_matrix_invert) and returns the outcome as a status nickname: success, or invalid-matrix if the matrix is not invertible.

multiply#

Returns a new Cairo::Matrix holding the product of $a and $b.

transform_distance#

Transforms the distance vector ($dx, $dy) by $matrix and returns the transformed pair as a two-element list. Only the matrix’s linear part is applied - the translation is ignored, which is what makes this a distance rather than a point.

transform_point#

Transforms the point ($x, $y) by $matrix and returns the transformed pair as a two-element list. The full affine transform is applied, translation included.