diff options
Diffstat (limited to 'source/fitz/geometry.c')
-rw-r--r-- | source/fitz/geometry.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/source/fitz/geometry.c b/source/fitz/geometry.c index 81450246..c7c3d198 100644 --- a/source/fitz/geometry.c +++ b/source/fitz/geometry.c @@ -214,6 +214,25 @@ fz_invert_matrix(fz_matrix *dst, const fz_matrix *src) } int +fz_try_invert_matrix(fz_matrix *dst, const fz_matrix *src) +{ + /* Be careful to cope with dst == src */ + float a = src->a; + float det = a * src->d - src->b * src->c; + if (det >= -FLT_EPSILON && det <= FLT_EPSILON) + return 1; + det = 1 / det; + dst->a = src->d * det; + dst->b = -src->b * det; + dst->c = -src->c * det; + dst->d = a * det; + a = -src->e * dst->a - src->f * dst->c; + dst->f = -src->e * dst->b - src->f * dst->d; + dst->e = a; + return 0; +} + +int fz_is_rectilinear(const fz_matrix *m) { return (fabsf(m->b) < FLT_EPSILON && fabsf(m->c) < FLT_EPSILON) || |