[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.2' - include/basegfx svx/source

Tomaž Vajngerl (via logerrit) logerrit at kemper.freedesktop.org
Wed Apr 1 10:32:39 UTC 2020


 include/basegfx/matrix/Matrix.hxx |  126 ++++++++++++++++++++++++++++++++++++++
 svx/source/svdraw/svdpdf.hxx      |  106 -------------------------------
 2 files changed, 128 insertions(+), 104 deletions(-)

New commits:
commit f5d916fd8d399dafbf8ff6bd23ff74fb1dacf071
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sat Mar 28 18:00:22 2020 +0100
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Wed Apr 1 12:32:01 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 <quikee at gmail.com>
    (cherry picked from commit befd6880873cc3f63a0566b76246d2ae54f8a3c5)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91447
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at 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;


More information about the Libreoffice-commits mailing list