/*
 * fontconfig/doc/fcmatrix.fncs
 *
 * Copyright © 2003 Keith Packard
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of the author(s) not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  The authors make no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

@RET@           void
@FUNC@          FcMatrixInit
@PURPOSE@       initialize an FcMatrix structure
@TYPE1@         FcMatrix *
@ARG1@          matrix
@DESC@
<function>FcMatrixInit</function> initializes <parameter>matrix</parameter>
to the identity matrix.
@@

@FUNC@          FcMatrixCopy
@PURPOSE@       Copy a matrix
@TYPE1@         const FcMatrix *
@ARG1@          matrix
@DESC@
<function>FcMatrixCopy</function> allocates a new FcMatrix
and copies <parameter>mat</parameter> into it.
@@

@FUNC@          FcMatrixEqual
@PURPOSE@       Compare two matrices
@TYPE1@         const FcMatrix *
@ARG1@          matrix1
@TYPE2@         const FcMatrix *
@ARG2@          matrix2
@DESC@
<function>FcMatrixEqual</function> compares <parameter>matrix1</parameter>
and <parameter>matrix2</parameter> returning FcTrue when they are equal and
FcFalse when they are not.
@@

@FUNC@          FcMatrixMultiply
@PURPOSE@       Multiply matrices
@TYPE1@         FcMatrix *
@ARG1@          result
@TYPE2@         const FcMatrix *
@ARG2@          matrix1
@TYPE3@         const FcMatrix *
@ARG3@          matrix2
@DESC@
<function>FcMatrixMultiply</function> multiplies
<parameter>matrix1</parameter> and <parameter>matrix2</parameter> storing
the result in <parameter>result</parameter>.
@@

@FUNC@          FcMatrixRotate
@PURPOSE@       Rotate a matrix
@TYPE1@         FcMatrix *
@ARG1@          matrix
@TYPE2@         double%
@ARG2@          cos
@TYPE3@         double%
@ARG3@          sin
@DESC@
<function>FcMatrixRotate</function> rotates <parameter>matrix</parameter>
by the angle who's sine is <parameter>sin</parameter> and cosine is
<parameter>cos</parameter>.  This is done by multiplying by the
matrix:
<programlisting>
  cos -sin
  sin  cos
</programlisting>
@@

@FUNC@          FcMatrixScale
@PURPOSE@       Scale a matrix
@TYPE1@         FcMatrix *
@ARG1@          matrix
@TYPE2@         double%
@ARG2@          sx
@TYPE3@         double%
@ARG3@          dy
@DESC@
<function>FcMatrixScale</function> multiplies <parameter>matrix</parameter>
x values by <parameter>sx</parameter> and y values by
<parameter>dy</parameter>.  This is done by multiplying by
the matrix:
<programlisting>
   sx  0
   0   dy
</programlisting>
@@

@FUNC@          FcMatrixShear
@PURPOSE@       Shear a matrix
@TYPE1@         FcMatrix *
@ARG1@          matrix
@TYPE2@         double%
@ARG2@          sh
@TYPE3@         double%
@ARG3@          sv
@DESC@
<function>FcMatrixShare</function> shears <parameter>matrix</parameter>
horizontally by <parameter>sh</parameter> and vertically by
<parameter>sv</parameter>.  This is done by multiplying by
the matrix:
<programlisting>
  1  sh
  sv  1
</programlisting>
@@
