diff options
author | Jay Berkenbilt <ejb@ql.org> | 2021-02-12 10:44:15 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2021-02-13 08:30:00 +0100 |
commit | e2593e2efe140d47870b0c511cbf5160db080edd (patch) | |
tree | fe3879e2e4a916fe02b513f24e88ebca58331563 /include/qpdf/QPDFMatrix.hh | |
parent | 07f40bd25442f25c0af948ae1b0dac7fdff1688c (diff) | |
download | qpdf-e2593e2efe140d47870b0c511cbf5160db080edd.tar.zst |
Move QPDFMatrix into the public API
Diffstat (limited to 'include/qpdf/QPDFMatrix.hh')
-rw-r--r-- | include/qpdf/QPDFMatrix.hh | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/include/qpdf/QPDFMatrix.hh b/include/qpdf/QPDFMatrix.hh new file mode 100644 index 00000000..85f42af7 --- /dev/null +++ b/include/qpdf/QPDFMatrix.hh @@ -0,0 +1,95 @@ +// Copyright (c) 2005-2021 Jay Berkenbilt +// +// This file is part of qpdf. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Versions of qpdf prior to version 7 were released under the terms +// of version 2.0 of the Artistic License. At your option, you may +// continue to consider qpdf to be licensed under those terms. Please +// see the manual for additional information. + +#ifndef QPDFMATRIX_HH +#define QPDFMATRIX_HH + +#include <qpdf/QPDFObjectHandle.hh> +#include <qpdf/DLL.h> +#include <string> + +// This class represents a PDF transformation matrix using a tuple +// such that +// +// ┌ ┐ +// │ a b 0 │ +// (a, b, c, d, e, f) = │ c d 0 │ +// │ e f 1 │ +// └ ┘ + +class QPDFMatrix +{ + public: + QPDF_DLL + QPDFMatrix(); + QPDF_DLL + QPDFMatrix(double a, double b, double c, + double d, double e, double f); + QPDF_DLL + QPDFMatrix(QPDFObjectHandle::Matrix const&); + + // Returns the six values separated by spaces as real numbers with + // trimmed zeroes. + QPDF_DLL + std::string unparse() const; + + QPDF_DLL + QPDFObjectHandle::Matrix getAsMatrix() const; + + // Replace this with other * this + QPDF_DLL + void concat(QPDFMatrix const& other); + + // Same as concat(sx, 0, 0, sy, 0, 0) + QPDF_DLL + void scale(double sx, double sy); + + // Same as concat(1, 0, 0, 1, tx, ty); + QPDF_DLL + void translate(double tx, double ty); + + // Any value other than 90, 180, or 270 is ignored + QPDF_DLL + void rotatex90(int angle); + + // Transform a point. The underlying operation is to take + // [x y 1] * this + // and take the first and second rows of the result as xp and yp. + QPDF_DLL + void transform(double x, double y, double& xp, double& yp); + + // Transform a rectangle by creating a new rectangle that tightly + // bounds the polygon resulting from transforming the four + // corners. + QPDF_DLL + QPDFObjectHandle::Rectangle transformRectangle( + QPDFObjectHandle::Rectangle r); + + private: + double a; + double b; + double c; + double d; + double e; + double f; +}; + +#endif // QPDFMATRIX_HH |