Updated docs for slots related changes
[adg.git] / adg / adg-matrix.c
blobdfa142471773b1898a635adb53f3e462eed0a729
1 /* ADG - Automatic Drawing Generation
2 * Copyright (C) 2007-2008, Nicola Fontana <ntd at entidi.it>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
21 /**
22 * SECTION:matrix
23 * @title: AdgMatrix
24 * @short_description: A wrapper for the cairo_matrix_t struct
26 * The AdgMatrix is essentially a wrapper for #cairo_matrix_t structures.
29 #include "adg-matrix.h"
31 #include <string.h>
34 static AdgMatrix null_matrix = { 0., 0., 0., 0., 0., 0. };
35 static AdgMatrix identity_matrix = { 1., 0., 0., 1., 0., 0. };
38 GType
39 adg_matrix_get_type (void)
41 static int matrix_type = 0;
43 if G_UNLIKELY (matrix_type == 0)
44 matrix_type = g_boxed_type_register_static ("AdgMatrix", (GBoxedCopyFunc) adg_matrix_dup, g_free);
46 return matrix_type;
49 /**
50 * adg_matrix_dup:
51 * @matrix: an #AdgMatrix structure
53 * Duplicates @matrix.
55 * Return value: the duplicate of @matrix: must be freed with g_free()
56 * when no longer needed.
58 AdgMatrix *
59 adg_matrix_dup (const AdgMatrix *matrix)
61 g_return_val_if_fail (matrix != NULL, NULL);
63 return g_memdup (matrix, sizeof (AdgMatrix));
66 /**
67 * adg_matrix_get_fallback:
69 * Gets a fallback matrix. The fallback matrix is a statically allocated
70 * identity matrix.
72 * Return value: the fallback matrix
74 const AdgMatrix *
75 adg_matrix_get_fallback (void)
77 return &identity_matrix;
80 /**
81 * adg_matrix_init_null:
82 * @matrix: the #AdgMatrix to nullify
84 * Nullifies a matrix, setting all its components to 0.
86 void
87 adg_matrix_init_null (AdgMatrix *matrix)
89 memcpy (matrix, &null_matrix, sizeof (AdgMatrix));
92 /**
93 * adg_matrix_is_null:
94 * @matrix: the #AdgMatrix to check
96 * Checks if a matrix is a nullified matrix.
98 * Return value: %TRUE if the matrix is a null matrix, %FALSE otherwise
100 gboolean
101 adg_matrix_is_null (const AdgMatrix *matrix)
103 return memcmp (matrix, &null_matrix, sizeof (AdgMatrix)) == 0;
107 * adg_matrix_set:
108 * @matrix: the destination #AdgMatrix
109 * @src: the source #AdgMatrix
111 * Copies @matrix to @dst.
113 * Return value: @matrix
115 AdgMatrix *
116 adg_matrix_set (AdgMatrix *matrix,
117 const AdgMatrix *src)
119 g_return_val_if_fail (matrix != NULL, matrix);
120 g_return_val_if_fail (src != NULL, matrix);
122 memcpy (matrix, src, sizeof (AdgMatrix));
124 return matrix;
128 * adg_matrix_equal:
129 * @matrix1: an #AdgMatrix
130 * @matrix2: an #AdgMatrix
132 * Compares @matrix1 and @matrix2 and returns %TRUE if the matrices are equal.
134 * Return value: %TRUE if @matrix1 is equal to @matrix2, %FALSE otherwise
136 gboolean
137 adg_matrix_equal (const AdgMatrix *matrix1,
138 const AdgMatrix *matrix2)
140 g_return_val_if_fail (matrix1 != NULL, FALSE);
141 g_return_val_if_fail (matrix2 != NULL, FALSE);
143 return memcmp (matrix1, matrix2, sizeof (AdgMatrix)) == 0;