31
gimp_transform_matrix_flip (GimpOrientationType flip_type,
31
gimp_transform_matrix_flip (GimpMatrix3 *matrix,
32
GimpOrientationType flip_type,
35
g_return_if_fail (result != NULL);
37
gimp_matrix3_identity (result);
35
g_return_if_fail (matrix != NULL);
41
39
case GIMP_ORIENTATION_HORIZONTAL:
42
gimp_matrix3_translate (result, - axis, 0.0);
43
gimp_matrix3_scale (result, -1.0, 1.0);
44
gimp_matrix3_translate (result, axis, 0.0);
40
gimp_matrix3_translate (matrix, - axis, 0.0);
41
gimp_matrix3_scale (matrix, -1.0, 1.0);
42
gimp_matrix3_translate (matrix, axis, 0.0);
47
45
case GIMP_ORIENTATION_VERTICAL:
48
gimp_matrix3_translate (result, 0.0, - axis);
49
gimp_matrix3_scale (result, 1.0, -1.0);
50
gimp_matrix3_translate (result, 0.0, axis);
46
gimp_matrix3_translate (matrix, 0.0, - axis);
47
gimp_matrix3_scale (matrix, 1.0, -1.0);
48
gimp_matrix3_translate (matrix, 0.0, axis);
53
51
case GIMP_ORIENTATION_UNKNOWN:
59
gimp_transform_matrix_flip_free (gint x,
57
gimp_transform_matrix_flip_free (GimpMatrix3 *matrix,
71
g_return_if_fail (result != NULL);
65
g_return_if_fail (matrix != NULL);
73
67
angle = atan2 (y2 - y1, x2 - x1);
75
gimp_matrix3_identity (result);
76
gimp_matrix3_translate (result, -x1, -y1);
77
gimp_matrix3_rotate (result, -angle);
78
gimp_matrix3_scale (result, 1.0, -1.0);
79
gimp_matrix3_rotate (result, angle);
80
gimp_matrix3_translate (result, x1, y1);
84
gimp_transform_matrix_rotate (gint x,
69
gimp_matrix3_identity (matrix);
70
gimp_matrix3_translate (matrix, -x1, -y1);
71
gimp_matrix3_rotate (matrix, -angle);
72
gimp_matrix3_scale (matrix, 1.0, -1.0);
73
gimp_matrix3_rotate (matrix, angle);
74
gimp_matrix3_translate (matrix, x1, y1);
78
gimp_transform_matrix_rotate (GimpMatrix3 *matrix,
79
GimpRotationType rotate_type,
98
gimp_transform_matrix_rotate_center (matrix, center_x, center_y, angle);
102
gimp_transform_matrix_rotate_rect (GimpMatrix3 *matrix,
94
g_return_if_fail (result != NULL);
112
g_return_if_fail (matrix != NULL);
96
114
center_x = (gdouble) x + (gdouble) width / 2.0;
97
115
center_y = (gdouble) y + (gdouble) height / 2.0;
99
gimp_matrix3_identity (result);
100
gimp_matrix3_translate (result, -center_x, -center_y);
101
gimp_matrix3_rotate (result, angle);
102
gimp_matrix3_translate (result, +center_x, +center_y);
117
gimp_matrix3_translate (matrix, -center_x, -center_y);
118
gimp_matrix3_rotate (matrix, angle);
119
gimp_matrix3_translate (matrix, +center_x, +center_y);
106
gimp_transform_matrix_rotate_center (gdouble center_x,
123
gimp_transform_matrix_rotate_center (GimpMatrix3 *matrix,
107
125
gdouble center_y,
111
g_return_if_fail (result != NULL);
128
g_return_if_fail (matrix != NULL);
113
gimp_matrix3_identity (result);
114
gimp_matrix3_translate (result, -center_x, -center_y);
115
gimp_matrix3_rotate (result, angle);
116
gimp_matrix3_translate (result, +center_x, +center_y);
130
gimp_matrix3_translate (matrix, -center_x, -center_y);
131
gimp_matrix3_rotate (matrix, angle);
132
gimp_matrix3_translate (matrix, +center_x, +center_y);
120
gimp_transform_matrix_scale (gint x,
136
gimp_transform_matrix_scale (GimpMatrix3 *matrix,
130
146
gdouble scale_x = 1.0;
131
147
gdouble scale_y = 1.0;
133
g_return_if_fail (result != NULL);
149
g_return_if_fail (matrix != NULL);
136
152
scale_x = t_width / (gdouble) width;
139
155
scale_y = t_height / (gdouble) height;
141
gimp_matrix3_identity (result);
142
gimp_matrix3_translate (result, -x, -y);
143
gimp_matrix3_scale (result, scale_x, scale_y);
144
gimp_matrix3_translate (result, t_x, t_y);
157
gimp_matrix3_identity (matrix);
158
gimp_matrix3_translate (matrix, -x, -y);
159
gimp_matrix3_scale (matrix, scale_x, scale_y);
160
gimp_matrix3_translate (matrix, t_x, t_y);
148
gimp_transform_matrix_shear (gint x,
164
gimp_transform_matrix_shear (GimpMatrix3 *matrix,
152
169
GimpOrientationType orientation,
156
172
gdouble center_x;
157
173
gdouble center_y;
159
g_return_if_fail (result != NULL);
175
g_return_if_fail (matrix != NULL);
167
183
center_x = (gdouble) x + (gdouble) width / 2.0;
168
184
center_y = (gdouble) y + (gdouble) height / 2.0;
170
gimp_matrix3_identity (result);
171
gimp_matrix3_translate (result, -center_x, -center_y);
186
gimp_matrix3_identity (matrix);
187
gimp_matrix3_translate (matrix, -center_x, -center_y);
173
189
if (orientation == GIMP_ORIENTATION_HORIZONTAL)
174
gimp_matrix3_xshear (result, amount / height);
190
gimp_matrix3_xshear (matrix, amount / height);
176
gimp_matrix3_yshear (result, amount / width);
192
gimp_matrix3_yshear (matrix, amount / width);
178
gimp_matrix3_translate (result, +center_x, +center_y);
194
gimp_matrix3_translate (matrix, +center_x, +center_y);
182
gimp_transform_matrix_perspective (gint x,
198
gimp_transform_matrix_perspective (GimpMatrix3 *matrix,
224
243
/* Is the mapping affine? */
225
244
if ((dx3 == 0.0) && (dy3 == 0.0))
227
matrix.coeff[0][0] = t_x2 - t_x1;
228
matrix.coeff[0][1] = t_x4 - t_x2;
229
matrix.coeff[0][2] = t_x1;
230
matrix.coeff[1][0] = t_y2 - t_y1;
231
matrix.coeff[1][1] = t_y4 - t_y2;
232
matrix.coeff[1][2] = t_y1;
233
matrix.coeff[2][0] = 0.0;
234
matrix.coeff[2][1] = 0.0;
246
trafo.coeff[0][0] = t_x2 - t_x1;
247
trafo.coeff[0][1] = t_x4 - t_x2;
248
trafo.coeff[0][2] = t_x1;
249
trafo.coeff[1][0] = t_y2 - t_y1;
250
trafo.coeff[1][1] = t_y4 - t_y2;
251
trafo.coeff[1][2] = t_y1;
252
trafo.coeff[2][0] = 0.0;
253
trafo.coeff[2][1] = 0.0;
240
259
det1 = dx3 * dy2 - dy3 * dx2;
241
260
det2 = dx1 * dy2 - dy1 * dx2;
243
if (det1 == 0.0 && det2 == 0.0)
244
matrix.coeff[2][0] = 1.0;
246
matrix.coeff[2][0] = det1 / det2;
262
trafo.coeff[2][0] = (det2 == 0.0) ? 1.0 : det1 / det2;
248
264
det1 = dx1 * dy3 - dy1 * dx3;
250
if (det1 == 0.0 && det2 == 0.0)
251
matrix.coeff[2][1] = 1.0;
253
matrix.coeff[2][1] = det1 / det2;
255
matrix.coeff[0][0] = t_x2 - t_x1 + matrix.coeff[2][0] * t_x2;
256
matrix.coeff[0][1] = t_x3 - t_x1 + matrix.coeff[2][1] * t_x3;
257
matrix.coeff[0][2] = t_x1;
259
matrix.coeff[1][0] = t_y2 - t_y1 + matrix.coeff[2][0] * t_y2;
260
matrix.coeff[1][1] = t_y3 - t_y1 + matrix.coeff[2][1] * t_y3;
261
matrix.coeff[1][2] = t_y1;
266
trafo.coeff[2][1] = (det2 == 0.0) ? 1.0 : det1 / det2;
268
trafo.coeff[0][0] = t_x2 - t_x1 + trafo.coeff[2][0] * t_x2;
269
trafo.coeff[0][1] = t_x3 - t_x1 + trafo.coeff[2][1] * t_x3;
270
trafo.coeff[0][2] = t_x1;
272
trafo.coeff[1][0] = t_y2 - t_y1 + trafo.coeff[2][0] * t_y2;
273
trafo.coeff[1][1] = t_y3 - t_y1 + trafo.coeff[2][1] * t_y3;
274
trafo.coeff[1][2] = t_y1;
264
matrix.coeff[2][2] = 1.0;
277
trafo.coeff[2][2] = 1.0;
267
gimp_matrix3_identity (result);
268
gimp_matrix3_translate (result, -x, -y);
269
gimp_matrix3_scale (result, scalex, scaley);
270
gimp_matrix3_mult (&matrix, result);
280
gimp_matrix3_mult (&trafo, matrix);