summaryrefslogtreecommitdiff
path: root/doc/public/xml/cairo-matrix.xml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/public/xml/cairo-matrix.xml')
-rw-r--r--doc/public/xml/cairo-matrix.xml588
1 files changed, 588 insertions, 0 deletions
diff --git a/doc/public/xml/cairo-matrix.xml b/doc/public/xml/cairo-matrix.xml
new file mode 100644
index 000000000..75aeb5a5a
--- /dev/null
+++ b/doc/public/xml/cairo-matrix.xml
@@ -0,0 +1,588 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
+<!ENTITY version SYSTEM "version.xml">
+]>
+<refentry id="cairo-cairo-matrix-t">
+<refmeta>
+<refentrytitle role="top_of_page" id="cairo-cairo-matrix-t.top_of_page">cairo_matrix_t</refentrytitle>
+<manvolnum>3</manvolnum>
+<refmiscinfo>
+ CAIRO Library
+</refmiscinfo>
+</refmeta>
+<refnamediv>
+<refname>cairo_matrix_t</refname>
+<refpurpose>Generic matrix operations</refpurpose>
+</refnamediv>
+
+<refsect1 id="cairo-cairo-matrix-t.functions" role="functions_proto">
+<title role="functions_proto.title">Functions</title>
+<informaltable pgwide="1" frame="none">
+<tgroup cols="2">
+<colspec colname="functions_return" colwidth="150px"/>
+<colspec colname="functions_name"/>
+<tbody>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-init">cairo_matrix_init</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-init-identity">cairo_matrix_init_identity</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-init-translate">cairo_matrix_init_translate</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-init-scale">cairo_matrix_init_scale</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-init-rotate">cairo_matrix_init_rotate</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-translate">cairo_matrix_translate</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-scale">cairo_matrix_scale</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-rotate">cairo_matrix_rotate</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-invert">cairo_matrix_invert</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-multiply">cairo_matrix_multiply</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-transform-distance">cairo_matrix_transform_distance</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+<row><entry role="function_type"><link linkend="void"><returnvalue>void</returnvalue></link>
+</entry><entry role="function_name"><link linkend="cairo-matrix-transform-point">cairo_matrix_transform_point</link>&#160;<phrase role="c_punctuation">()</phrase></entry></row>
+
+</tbody>
+</tgroup>
+</informaltable>
+</refsect1>
+<refsect1 id="cairo-cairo-matrix-t.other" role="other_proto">
+<title role="other_proto.title">Types and Values</title>
+<informaltable role="enum_members_table" pgwide="1" frame="none">
+<tgroup cols="2">
+<colspec colname="name" colwidth="150px"/>
+<colspec colname="description"/>
+<tbody>
+<row><entry role="datatype_keyword"></entry><entry role="function_name"><link linkend="cairo-matrix-t">cairo_matrix_t</link></entry></row>
+
+</tbody>
+</tgroup>
+</informaltable>
+</refsect1>
+<refsect1 id="cairo-cairo-matrix-t.object-hierarchy" role="object_hierarchy">
+<title role="object_hierarchy.title">Object Hierarchy</title>
+<screen>
+</screen>
+</refsect1>
+
+
+<refsect1 id="cairo-cairo-matrix-t.description" role="desc">
+<title role="desc.title">Description</title>
+<para><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> is used throughout cairo to convert between different
+coordinate spaces. A <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> holds an affine transformation,
+such as a scale, rotation, shear, or a combination of these.
+The transformation of a point (<literal>x</literal>,<literal>y</literal>)
+is given by:</para>
+<programlisting>
+x_new = xx * x + xy * y + x0;
+y_new = yx * x + yy * y + y0;
+</programlisting>
+<para>The current transformation matrix of a <link linkend="cairo-t"><type>cairo_t</type></link>, represented as a
+<link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link>, defines the transformation from user-space
+coordinates to device-space coordinates. See <link linkend="cairo-get-matrix"><function>cairo_get_matrix()</function></link> and
+<link linkend="cairo-set-matrix"><function>cairo_set_matrix()</function></link>.</para>
+
+</refsect1>
+<refsect1 id="cairo-cairo-matrix-t.functions_details" role="details">
+<title role="details.title">Functions</title>
+<refsect2 id="cairo-matrix-init" role="function" condition="since:1.0">
+<title>cairo_matrix_init&#160;()</title>
+<indexterm zone="cairo-matrix-init" role="1.0"><primary sortas="matrix_init">cairo_matrix_init</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_init (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> xx</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> yx</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> xy</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> yy</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> x0</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> y0</parameter>);</programlisting>
+<para>Sets <parameter>matrix</parameter>
+ to be the affine transformation given by
+<parameter>xx</parameter>
+, <parameter>yx</parameter>
+, <parameter>xy</parameter>
+, <parameter>yy</parameter>
+, <parameter>x0</parameter>
+, <parameter>y0</parameter>
+. The transformation is given
+by:</para>
+<programlisting>
+ x_new = xx * x + xy * y + x0;
+ y_new = yx * x + yy * y + y0;
+</programlisting>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>xx</para></entry>
+<entry role="parameter_description"><para>xx component of the affine transformation</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>yx</para></entry>
+<entry role="parameter_description"><para>yx component of the affine transformation</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>xy</para></entry>
+<entry role="parameter_description"><para>xy component of the affine transformation</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>yy</para></entry>
+<entry role="parameter_description"><para>yy component of the affine transformation</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>x0</para></entry>
+<entry role="parameter_description"><para>X translation component of the affine transformation</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>y0</para></entry>
+<entry role="parameter_description"><para>Y translation component of the affine transformation</para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-init-identity" role="function" condition="since:1.0">
+<title>cairo_matrix_init_identity&#160;()</title>
+<indexterm zone="cairo-matrix-init-identity" role="1.0"><primary sortas="matrix_init_identity">cairo_matrix_init_identity</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_init_identity (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>);</programlisting>
+<para>Modifies <parameter>matrix</parameter>
+ to be an identity transformation.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-init-translate" role="function" condition="since:1.0">
+<title>cairo_matrix_init_translate&#160;()</title>
+<indexterm zone="cairo-matrix-init-translate" role="1.0"><primary sortas="matrix_init_translate">cairo_matrix_init_translate</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_init_translate (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> tx</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> ty</parameter>);</programlisting>
+<para>Initializes <parameter>matrix</parameter>
+ to a transformation that translates by <parameter>tx</parameter>
+ and
+<parameter>ty</parameter>
+ in the X and Y dimensions, respectively.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>tx</para></entry>
+<entry role="parameter_description"><para>amount to translate in the X direction</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>ty</para></entry>
+<entry role="parameter_description"><para>amount to translate in the Y direction</para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-init-scale" role="function" condition="since:1.0">
+<title>cairo_matrix_init_scale&#160;()</title>
+<indexterm zone="cairo-matrix-init-scale" role="1.0"><primary sortas="matrix_init_scale">cairo_matrix_init_scale</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_init_scale (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> sx</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> sy</parameter>);</programlisting>
+<para>Initializes <parameter>matrix</parameter>
+ to a transformation that scales by <parameter>sx</parameter>
+ and <parameter>sy</parameter>
+
+in the X and Y dimensions, respectively.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>sx</para></entry>
+<entry role="parameter_description"><para>scale factor in the X direction</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>sy</para></entry>
+<entry role="parameter_description"><para>scale factor in the Y direction</para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-init-rotate" role="function" condition="since:1.0">
+<title>cairo_matrix_init_rotate&#160;()</title>
+<indexterm zone="cairo-matrix-init-rotate" role="1.0"><primary sortas="matrix_init_rotate">cairo_matrix_init_rotate</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_init_rotate (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> radians</parameter>);</programlisting>
+<para>Initialized <parameter>matrix</parameter>
+ to a transformation that rotates by <parameter>radians</parameter>
+.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>radians</para></entry>
+<entry role="parameter_description"><para>angle of rotation, in radians. The direction of rotation
+is defined such that positive angles rotate in the direction from
+the positive X axis toward the positive Y axis. With the default
+axis orientation of cairo, positive angles rotate in a clockwise
+direction.</para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-translate" role="function" condition="since:1.0">
+<title>cairo_matrix_translate&#160;()</title>
+<indexterm zone="cairo-matrix-translate" role="1.0"><primary sortas="matrix_translate">cairo_matrix_translate</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_translate (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> tx</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> ty</parameter>);</programlisting>
+<para>Applies a translation by <parameter>tx</parameter>
+, <parameter>ty</parameter>
+ to the transformation in
+<parameter>matrix</parameter>
+. The effect of the new transformation is to first translate
+the coordinates by <parameter>tx</parameter>
+ and <parameter>ty</parameter>
+, then apply the original transformation
+to the coordinates.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>tx</para></entry>
+<entry role="parameter_description"><para>amount to translate in the X direction</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>ty</para></entry>
+<entry role="parameter_description"><para>amount to translate in the Y direction</para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-scale" role="function" condition="since:1.0">
+<title>cairo_matrix_scale&#160;()</title>
+<indexterm zone="cairo-matrix-scale" role="1.0"><primary sortas="matrix_scale">cairo_matrix_scale</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_scale (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> sx</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> sy</parameter>);</programlisting>
+<para>Applies scaling by <parameter>sx</parameter>
+, <parameter>sy</parameter>
+ to the transformation in <parameter>matrix</parameter>
+. The
+effect of the new transformation is to first scale the coordinates
+by <parameter>sx</parameter>
+ and <parameter>sy</parameter>
+, then apply the original transformation to the coordinates.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>sx</para></entry>
+<entry role="parameter_description"><para>scale factor in the X direction</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>sy</para></entry>
+<entry role="parameter_description"><para>scale factor in the Y direction</para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-rotate" role="function" condition="since:1.0">
+<title>cairo_matrix_rotate&#160;()</title>
+<indexterm zone="cairo-matrix-rotate" role="1.0"><primary sortas="matrix_rotate">cairo_matrix_rotate</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_rotate (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> radians</parameter>);</programlisting>
+<para>Applies rotation by <parameter>radians</parameter>
+ to the transformation in
+<parameter>matrix</parameter>
+. The effect of the new transformation is to first rotate the
+coordinates by <parameter>radians</parameter>
+, then apply the original transformation
+to the coordinates.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>radians</para></entry>
+<entry role="parameter_description"><para>angle of rotation, in radians. The direction of rotation
+is defined such that positive angles rotate in the direction from
+the positive X axis toward the positive Y axis. With the default
+axis orientation of cairo, positive angles rotate in a clockwise
+direction.</para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-invert" role="function" condition="since:1.0">
+<title>cairo_matrix_invert&#160;()</title>
+<indexterm zone="cairo-matrix-invert" role="1.0"><primary sortas="matrix_invert">cairo_matrix_invert</primary></indexterm>
+<programlisting language="C"><link linkend="cairo-status-t"><returnvalue>cairo_status_t</returnvalue></link>
+cairo_matrix_invert (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>);</programlisting>
+<para>Changes <parameter>matrix</parameter>
+ to be the inverse of its original value. Not
+all transformation matrices have inverses; if the matrix
+collapses points together (it is <firstterm>degenerate</firstterm>),
+then it has no inverse and this function will fail.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><refsect3 role="returns">
+<title>Returns</title>
+<para> If <parameter>matrix</parameter>
+has an inverse, modifies <parameter>matrix</parameter>
+to
+be the inverse matrix and returns <link linkend="CAIRO-STATUS-SUCCESS:CAPS"><literal>CAIRO_STATUS_SUCCESS</literal></link>. Otherwise,
+returns <link linkend="CAIRO-STATUS-INVALID-MATRIX:CAPS"><literal>CAIRO_STATUS_INVALID_MATRIX</literal></link>.</para>
+<para></para>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-multiply" role="function" condition="since:1.0">
+<title>cairo_matrix_multiply&#160;()</title>
+<indexterm zone="cairo-matrix-multiply" role="1.0"><primary sortas="matrix_multiply">cairo_matrix_multiply</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_multiply (<parameter><link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *result</parameter>,
+ <parameter>const <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *a</parameter>,
+ <parameter>const <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *b</parameter>);</programlisting>
+<para>Multiplies the affine transformations in <parameter>a</parameter>
+ and <parameter>b</parameter>
+ together
+and stores the result in <parameter>result</parameter>
+. The effect of the resulting
+transformation is to first apply the transformation in <parameter>a</parameter>
+ to the
+coordinates and then apply the transformation in <parameter>b</parameter>
+ to the
+coordinates.</para>
+<para>It is allowable for <parameter>result</parameter>
+ to be identical to either <parameter>a</parameter>
+ or <parameter>b</parameter>
+.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>result</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> in which to store the result</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>a</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>b</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-transform-distance" role="function" condition="since:1.0">
+<title>cairo_matrix_transform_distance&#160;()</title>
+<indexterm zone="cairo-matrix-transform-distance" role="1.0"><primary sortas="matrix_transform_distance">cairo_matrix_transform_distance</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_transform_distance (<parameter>const <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> *dx</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> *dy</parameter>);</programlisting>
+<para>Transforms the distance vector (<parameter>dx</parameter>
+,<parameter>dy</parameter>
+) by <parameter>matrix</parameter>
+. This is
+similar to <link linkend="cairo-matrix-transform-point"><function>cairo_matrix_transform_point()</function></link> except that the translation
+components of the transformation are ignored. The calculation of
+the returned vector is as follows:</para>
+<programlisting>
+dx2 = dx1 * a + dy1 * c;
+dy2 = dx1 * b + dy1 * d;
+</programlisting>
+<para>Affine transformations are position invariant, so the same vector
+always transforms to the same vector. If (<parameter>x1</parameter>
+,<parameter>y1</parameter>
+) transforms
+to (<parameter>x2</parameter>
+,<parameter>y2</parameter>
+) then (<parameter>x1</parameter>
++<parameter>dx1</parameter>
+,<parameter>y1</parameter>
++<parameter>dy1</parameter>
+) will transform to
+(<parameter>x1</parameter>
++<parameter>dx2</parameter>
+,<parameter>y1</parameter>
++<parameter>dy2</parameter>
+) for all values of <parameter>x1</parameter>
+ and <parameter>x2</parameter>
+.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>dx</para></entry>
+<entry role="parameter_description"><para>X component of a distance vector. An in/out parameter</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>dy</para></entry>
+<entry role="parameter_description"><para>Y component of a distance vector. An in/out parameter</para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+<refsect2 id="cairo-matrix-transform-point" role="function" condition="since:1.0">
+<title>cairo_matrix_transform_point&#160;()</title>
+<indexterm zone="cairo-matrix-transform-point" role="1.0"><primary sortas="matrix_transform_point">cairo_matrix_transform_point</primary></indexterm>
+<programlisting language="C"><link linkend="void"><returnvalue>void</returnvalue></link>
+cairo_matrix_transform_point (<parameter>const <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> *matrix</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> *x</parameter>,
+ <parameter><link linkend="double"><type>double</type></link> *y</parameter>);</programlisting>
+<para>Transforms the point (<parameter>x</parameter>
+, <parameter>y</parameter>
+) by <parameter>matrix</parameter>
+.</para>
+<refsect3 role="parameters">
+<title>Parameters</title>
+<informaltable role="parameters_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="parameters_name" colwidth="150px"/>
+<colspec colname="parameters_description"/>
+<colspec colname="parameters_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="parameter_name"><para>matrix</para></entry>
+<entry role="parameter_description"><para>a <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link></para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>x</para></entry>
+<entry role="parameter_description"><para>X position. An in/out parameter</para></entry>
+<entry role="parameter_annotations"></entry></row>
+<row><entry role="parameter_name"><para>y</para></entry>
+<entry role="parameter_description"><para>Y position. An in/out parameter</para></entry>
+<entry role="parameter_annotations"></entry></row>
+</tbody></tgroup></informaltable>
+</refsect3><para role="since">Since 1.0</para></refsect2>
+
+</refsect1>
+<refsect1 id="cairo-cairo-matrix-t.other_details" role="details">
+<title role="details.title">Types and Values</title>
+<refsect2 id="cairo-matrix-t" role="struct" condition="since:1.0">
+<title>cairo_matrix_t</title>
+<indexterm zone="cairo-matrix-t" role="1.0"><primary sortas="matrix_t">cairo_matrix_t</primary></indexterm>
+<programlisting language="C">typedef struct {
+ double xx; double yx;
+ double xy; double yy;
+ double x0; double y0;
+} cairo_matrix_t;
+</programlisting>
+<para>A <link linkend="cairo-matrix-t"><type>cairo_matrix_t</type></link> holds an affine transformation, such as a scale,
+rotation, shear, or a combination of those. The transformation of
+a point (x, y) is given by:</para>
+<programlisting>
+ x_new = xx * x + xy * y + x0;
+ y_new = yx * x + yy * y + y0;
+</programlisting>
+<refsect3 role="struct_members">
+<title>Members</title>
+<informaltable role="struct_members_table" pgwide="1" frame="none">
+<tgroup cols="3">
+<colspec colname="struct_members_name" colwidth="300px"/>
+<colspec colname="struct_members_description"/>
+<colspec colname="struct_members_annotations" colwidth="200px"/>
+<tbody>
+<row><entry role="struct_member_name"><para><link linkend="double"><type>double</type></link>&#160;<structfield id="cairo-matrix-t.xx">xx</structfield>;</para></entry>
+<listitem><para>xx component of the affine transformation</para></listitem>
+<entry role="struct_member_description"><para>xx component of the affine transformation</para></entry>
+<entry role="struct_member_annotations"></entry>
+</row>
+<row><entry role="struct_member_name"><para><link linkend="double"><type>double</type></link>&#160;<structfield id="cairo-matrix-t.yx">yx</structfield>;</para></entry>
+<listitem><para>yx component of the affine transformation</para></listitem>
+<entry role="struct_member_description"><para>yx component of the affine transformation</para></entry>
+<entry role="struct_member_annotations"></entry>
+</row>
+<row><entry role="struct_member_name"><para><link linkend="double"><type>double</type></link>&#160;<structfield id="cairo-matrix-t.xy">xy</structfield>;</para></entry>
+<listitem><para>xy component of the affine transformation</para></listitem>
+<entry role="struct_member_description"><para>xy component of the affine transformation</para></entry>
+<entry role="struct_member_annotations"></entry>
+</row>
+<row><entry role="struct_member_name"><para><link linkend="double"><type>double</type></link>&#160;<structfield id="cairo-matrix-t.yy">yy</structfield>;</para></entry>
+<listitem><para>yy component of the affine transformation</para></listitem>
+<entry role="struct_member_description"><para>yy component of the affine transformation</para></entry>
+<entry role="struct_member_annotations"></entry>
+</row>
+<row><entry role="struct_member_name"><para><link linkend="double"><type>double</type></link>&#160;<structfield id="cairo-matrix-t.x0">x0</structfield>;</para></entry>
+<listitem><para>X translation component of the affine transformation</para></listitem>
+<entry role="struct_member_description"><para>X translation component of the affine transformation</para></entry>
+<entry role="struct_member_annotations"></entry>
+</row>
+<row><entry role="struct_member_name"><para><link linkend="double"><type>double</type></link>&#160;<structfield id="cairo-matrix-t.y0">y0</structfield>;</para></entry>
+<listitem><para>Y translation component of the affine transformation</para></listitem>
+<entry role="struct_member_description"><para>Y translation component of the affine transformation</para></entry>
+<entry role="struct_member_annotations"></entry>
+</row>
+</tbody></tgroup></informaltable>
+</refsect3>
+<para role="since">Since 1.0</para></refsect2>
+
+</refsect1>
+<refsect1 id="cairo-cairo-matrix-t.see-also">
+<title>See Also</title>
+<para><link linkend="cairo-t"><type>cairo_t</type></link></para>
+
+</refsect1>
+
+</refentry>