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

2020-06-06 Thread Tomaž Vajngerl (via logerrit)
 include/basegfx/matrix/Matrix.hxx |   25 +
 1 file changed, 17 insertions(+), 8 deletions(-)

New commits:
commit 560bfab85e0bd91a820c8c7dbe744628d807c1e6
Author: Tomaž Vajngerl 
AuthorDate: Sat Mar 28 20:21:12 2020 +0100
Commit: Tomaž Vajngerl 
CommitDate: Sat Jun 6 19:28:48 2020 +0200

basegfx: Fix the problem with Matrix Concatinate and Transform

In Concatinate and Transform methods we change the instance
variables during calculation (matrix multiplication), which leads
to the wrong result. This change fixes both calculations.

Change-Id: I9f7ef7323707df1ab4a764f97f9bae8593c42940
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91311
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl 
(cherry picked from commit d088b243cad18777f785abf704b0310f057f740b)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95639
Tested-by: Tomaž Vajngerl 

diff --git a/include/basegfx/matrix/Matrix.hxx 
b/include/basegfx/matrix/Matrix.hxx
index 9224e2784b60..e690216a3824 100644
--- a/include/basegfx/matrix/Matrix.hxx
+++ b/include/basegfx/matrix/Matrix.hxx
@@ -86,19 +86,28 @@ public:
 /// 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;
+double newA = ma * other.ma + mb * other.mc;
+double newB = ma * other.mb + mb * other.md;
+double newC = mc * other.ma + md * other.mc;
+double newD = mc * other.mb + md * other.md;
+double newE = me * other.ma + mf * other.mc + other.me;
+double newF = me * other.mb + mf * other.md + other.mf;
+
+ma = newA;
+mb = newB;
+mc = newC;
+md = newD;
+me = newE;
+mf = newF;
 }
 
 /// Transform the point (x, y) by this Matrix.
 template  void Transform(T& x, T& y)
 {
-x = ma * x + mc * y + me;
-y = mb * x + md * y + mf;
+T newX = v00 * x + v01 * y + v02;
+T newY = v10 * x + v11 * y + v12;
+x = newX;
+y = newY;
 }
 
 /// Transform the rectangle (left, right, top, bottom) by this Matrix.
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


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

2020-06-06 Thread Tomaž Vajngerl (via logerrit)
 include/basegfx/range/b2drange.hxx |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit 8aea19d95cef334f92d6f9858d7297b70a8dacab
Author: Tomaž Vajngerl 
AuthorDate: Sat Mar 28 19:21:10 2020 +0100
Commit: Tomaž Vajngerl 
CommitDate: Sat Jun 6 19:28:08 2020 +0200

basegfx: export B2DRange operator*=

Change-Id: Ia2e72e6650b14d5d024b65b1261876885cf1b05a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91308
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl 
(cherry picked from commit c44e2f95603866aca7c71ee9b066c5088745381c)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95637
Tested-by: Tomaž Vajngerl 

diff --git a/include/basegfx/range/b2drange.hxx 
b/include/basegfx/range/b2drange.hxx
index 00eab63d1472..a599fd03fe93 100644
--- a/include/basegfx/range/b2drange.hxx
+++ b/include/basegfx/range/b2drange.hxx
@@ -292,7 +292,7 @@ namespace basegfx
 This means that the range will grow evtl. when a shear and/or 
rotation
 is part of the transformation.
 */
-B2DRange& operator*=( const ::basegfx::B2DHomMatrix& rMat );
+BASEGFX_DLLPUBLIC B2DRange& operator*=( const ::basegfx::B2DHomMatrix& 
rMat );
 
 /** Get a range filled with (0.0, 0.0, 1.0, 1.0) */
 static const B2DRange& getUnitB2DRange();
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


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

2020-06-06 Thread Tomaž Vajngerl (via logerrit)
 include/basegfx/matrix/Matrix.hxx |   45 +-
 1 file changed, 44 insertions(+), 1 deletion(-)

New commits:
commit cbbc7fc27e24d624d1f4dac641be42e5c43821f1
Author: Tomaž Vajngerl 
AuthorDate: Sat Mar 28 20:11:48 2020 +0100
Commit: Tomaž Vajngerl 
CommitDate: Sat Jun 6 19:28:24 2020 +0200

add convenience accessors to Matrix.hxx

Change-Id: Ifaaff3b1526aed111725a46c6cc64c189909a904
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91309
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl 
(cherry picked from commit b53a9c552a30a3aaa2b26ef8b1a3e8cf0f011a5c)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95638
Tested-by: Tomaž Vajngerl 

diff --git a/include/basegfx/matrix/Matrix.hxx 
b/include/basegfx/matrix/Matrix.hxx
index b742d8cdf293..9224e2784b60 100644
--- a/include/basegfx/matrix/Matrix.hxx
+++ b/include/basegfx/matrix/Matrix.hxx
@@ -53,6 +53,29 @@ public:
 return *this;
 }
 
+double get(sal_uInt16 nRow, sal_uInt16 nColumn) const
+{
+if (nRow == 0)
+{
+if (nColumn == 0)
+return v00;
+else if (nColumn == 1)
+return v01;
+else if (nColumn == 2)
+return v02;
+}
+else if (nRow == 1)
+{
+if (nColumn == 0)
+return v10;
+else if (nColumn == 1)
+return v11;
+else if (nColumn == 2)
+return v12;
+}
+return 0.0;
+}
+
 double a() const { return ma; }
 double b() const { return mb; }
 double c() const { return mc; }
@@ -120,7 +143,27 @@ public:
 }
 
 private:
-double ma, mb, mc, md, me, mf;
+union {
+struct
+{
+double ma;
+double mb;
+double mc;
+double md;
+double me;
+double mf;
+};
+
+struct
+{
+double v00;
+double v10;
+double v01;
+double v11;
+double v02;
+double v12;
+};
+};
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
___
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits


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

2020-06-06 Thread Tomaž Vajngerl (via logerrit)
 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 
AuthorDate: Sat Mar 28 18:00:22 2020 +0100
Commit: Tomaž Vajngerl 
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 
(cherry picked from commit befd6880873cc3f63a0566b76246d2ae54f8a3c5)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95636
Tested-by: Tomaž Vajngerl 

diff --git a/include/basegfx/matrix/Matrix.hxx 
b/include/basegfx/matrix/Matrix.hxx
new file mode 100644
index ..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  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  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 
 #include 
 
+#include 
+
 // Prevent