include/basegfx/matrix/Matrix.hxx | 126 ++++++++++++++++++++++++++++++++++++++ svx/source/svdraw/svdpdf.hxx | 106 ------------------------------- 2 files changed, 128 insertions(+), 104 deletions(-)
New commits: commit 67437d2f41b4fab475c0351c6336968dff0c5103 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Sat Mar 28 18:00:22 2020 +0100 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Sat Jun 6 19:27:30 2020 +0200 svdpdf: move Matrix to basegfx just to get it separated Change-Id: I9d887dc7a2836b90151ef352b47a9b9ad3b6f12b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91280 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> (cherry picked from commit befd6880873cc3f63a0566b76246d2ae54f8a3c5) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95636 Tested-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/include/basegfx/matrix/Matrix.hxx b/include/basegfx/matrix/Matrix.hxx new file mode 100644 index 000000000000..b742d8cdf293 --- /dev/null +++ b/include/basegfx/matrix/Matrix.hxx @@ -0,0 +1,126 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you 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 . + */ + +#pragma once + +class Matrix +{ +public: + Matrix() + : Matrix(1, 0, 0, 1, 0, 0) + { + } + + Matrix(const Matrix& other) + : Matrix(other.ma, other.mb, other.mc, other.md, other.me, other.mf) + { + } + + Matrix(double da, double db, double dc, double dd, double de, double df) + : ma(da) + , mb(db) + , mc(dc) + , md(dd) + , me(de) + , mf(df) + { + } + + const Matrix& operator=(const Matrix& other) + { + ma = other.ma; + mb = other.mb; + mc = other.mc; + md = other.md; + me = other.me; + mf = other.mf; + return *this; + } + + double a() const { return ma; } + double b() const { return mb; } + double c() const { return mc; } + double d() const { return md; } + double e() const { return me; } + double f() const { return mf; } + + /// Multiply this * other. + void Concatinate(const Matrix& other) + { + ma = ma * other.ma + mb * other.mc; + mb = ma * other.mb + mb * other.md; + mc = mc * other.ma + md * other.mc; + md = mc * other.mb + md * other.md; + me = me * other.ma + mf * other.mc + other.me; + mf = me * other.mb + mf * other.md + other.mf; + } + + /// Transform the point (x, y) by this Matrix. + template <typename T> void Transform(T& x, T& y) + { + x = ma * x + mc * y + me; + y = mb * x + md * y + mf; + } + + /// Transform the rectangle (left, right, top, bottom) by this Matrix. + template <typename T> void Transform(T& left, T& right, T& top, T& bottom) + { + T leftTopX = left; + T leftTopY = top; + Transform(leftTopX, leftTopY); + + T leftBottomX = left; + T leftBottomY = bottom; + Transform(leftBottomX, leftBottomY); + + T rightTopX = right; + T rightTopY = top; + Transform(rightTopX, rightTopY); + + T rightBottomX = right; + T rightBottomY = bottom; + Transform(rightBottomX, rightBottomY); + + left = std::min(leftTopX, leftBottomX); + right = std::max(rightTopX, rightBottomX); + + if (top > bottom) + top = std::max(leftTopY, rightTopY); + else + top = std::min(leftTopY, rightTopY); + + if (top > bottom) + bottom = std::max(leftBottomY, rightBottomY); + else + bottom = std::min(leftBottomY, rightBottomY); + } + + std::string toString() const + { + std::ostringstream oss; + oss << '(' << ma << ", " << mb << ", " << mc << ", " << md << ", " << me << ", " << mf + << ')'; + return oss.str(); + } + +private: + double ma, mb, mc, md, me, mf; +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/svdraw/svdpdf.hxx b/svx/source/svdraw/svdpdf.hxx index 1005b081142a..40e835bb67a4 100644 --- a/svx/source/svdraw/svdpdf.hxx +++ b/svx/source/svdraw/svdpdf.hxx @@ -37,6 +37,8 @@ #include <svx/xdash.hxx> #include <com/sun/star/uno/Sequence.hxx> +#include <basegfx/matrix/Matrix.hxx> + // Prevent workdir/UnpackedTarball/pdfium/public/fpdfview.h from including windows.h in a way that // it will define e.g. Yield as a macro: #include <prewin.h> @@ -55,110 +57,6 @@ class SvdProgressInfo; // Helper Class to import PDF class ImpSdrPdfImport final { - class Matrix - { - public: - Matrix() - : Matrix(1, 0, 0, 1, 0, 0) - { - } - - Matrix(const Matrix& other) - : Matrix(other.ma, other.mb, other.mc, other.md, other.me, other.mf) - { - } - - Matrix(double da, double db, double dc, double dd, double de, double df) - : ma(da) - , mb(db) - , mc(dc) - , md(dd) - , me(de) - , mf(df) - { - } - - const Matrix& operator=(const Matrix& other) - { - ma = other.ma; - mb = other.mb; - mc = other.mc; - md = other.md; - me = other.me; - mf = other.mf; - return *this; - } - - double a() const { return ma; } - double b() const { return mb; } - double c() const { return mc; } - double d() const { return md; } - double e() const { return me; } - double f() const { return mf; } - - /// Multiply this * other. - void Concatinate(const Matrix& other) - { - ma = ma * other.ma + mb * other.mc; - mb = ma * other.mb + mb * other.md; - mc = mc * other.ma + md * other.mc; - md = mc * other.mb + md * other.md; - me = me * other.ma + mf * other.mc + other.me; - mf = me * other.mb + mf * other.md + other.mf; - } - - /// Transform the point (x, y) by this Matrix. - template <typename T> void Transform(T& x, T& y) - { - x = ma * x + mc * y + me; - y = mb * x + md * y + mf; - } - - /// Transform the rectangle (left, right, top, bottom) by this Matrix. - template <typename T> void Transform(T& left, T& right, T& top, T& bottom) - { - T leftTopX = left; - T leftTopY = top; - Transform(leftTopX, leftTopY); - - T leftBottomX = left; - T leftBottomY = bottom; - Transform(leftBottomX, leftBottomY); - - T rightTopX = right; - T rightTopY = top; - Transform(rightTopX, rightTopY); - - T rightBottomX = right; - T rightBottomY = bottom; - Transform(rightBottomX, rightBottomY); - - left = std::min(leftTopX, leftBottomX); - right = std::max(rightTopX, rightBottomX); - - if (top > bottom) - top = std::max(leftTopY, rightTopY); - else - top = std::min(leftTopY, rightTopY); - - if (top > bottom) - bottom = std::max(leftBottomY, rightBottomY); - else - bottom = std::min(leftBottomY, rightBottomY); - } - - std::string toString() const - { - std::ostringstream oss; - oss << '(' << ma << ", " << mb << ", " << mc << ", " << md << ", " << me << ", " << mf - << ')'; - return oss.str(); - } - - private: - double ma, mb, mc, md, me, mf; - }; - Graphic const& mrGraphic; std::vector<SdrObject*> maTmpList; ScopedVclPtr<VirtualDevice> mpVD; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits