/* PIKA - Photo and Image Kooker Application * a rebranding of The GNU Image Manipulation Program (created with heckimp) * A derived work which may be trivial. However, any changes may be (C)2023 by Aldercone Studio * * Original copyright, applying to most contents (license remains unchanged): * Copyright (C) 1995-2001 Spencer Kimball, Peter Mattis, and others * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __PIKA_TRANSFORM_UTILS_H__ #define __PIKA_TRANSFORM_UTILS_H__ #define PIKA_TRANSFORM_NEAR_Z 0.02 void pika_transform_get_rotate_center (gint x, gint y, gint width, gint height, gboolean auto_center, gdouble *center_x, gdouble *center_y); void pika_transform_get_flip_axis (gint x, gint y, gint width, gint height, PikaOrientationType flip_type, gboolean auto_center, gdouble *axis); void pika_transform_matrix_flip (PikaMatrix3 *matrix, PikaOrientationType flip_type, gdouble axis); void pika_transform_matrix_flip_free (PikaMatrix3 *matrix, gdouble x1, gdouble y1, gdouble x2, gdouble y2); void pika_transform_matrix_rotate (PikaMatrix3 *matrix, PikaRotationType rotate_type, gdouble center_x, gdouble center_y); void pika_transform_matrix_rotate_rect (PikaMatrix3 *matrix, gint x, gint y, gint width, gint height, gdouble angle); void pika_transform_matrix_rotate_center (PikaMatrix3 *matrix, gdouble center_x, gdouble center_y, gdouble angle); void pika_transform_matrix_scale (PikaMatrix3 *matrix, gint x, gint y, gint width, gint height, gdouble t_x, gdouble t_y, gdouble t_width, gdouble t_height); void pika_transform_matrix_shear (PikaMatrix3 *matrix, gint x, gint y, gint width, gint height, PikaOrientationType orientation, gdouble amount); void pika_transform_matrix_perspective (PikaMatrix3 *matrix, gint x, gint y, gint width, gint height, gdouble t_x1, gdouble t_y1, gdouble t_x2, gdouble t_y2, gdouble t_x3, gdouble t_y3, gdouble t_x4, gdouble t_y4); gboolean pika_transform_matrix_generic (PikaMatrix3 *matrix, const PikaVector2 input_points[4], const PikaVector2 output_points[4]); gboolean pika_transform_polygon_is_convex (gdouble x1, gdouble y1, gdouble x2, gdouble y2, gdouble x3, gdouble y3, gdouble x4, gdouble y4); void pika_transform_polygon (const PikaMatrix3 *matrix, const PikaVector2 *vertices, gint n_vertices, gboolean closed, PikaVector2 *t_vertices, gint *n_t_vertices); void pika_transform_polygon_coords (const PikaMatrix3 *matrix, const PikaCoords *vertices, gint n_vertices, gboolean closed, PikaCoords *t_vertices, gint *n_t_vertices); void pika_transform_bezier_coords (const PikaMatrix3 *matrix, const PikaCoords bezier[4], GQueue *t_beziers[2], gint *n_t_beziers, gboolean *start_in, gboolean *end_in); #endif /* __PIKA_TRANSFORM_UTILS_H__ */