vcl/Library_vcl.mk                |    1 
 vcl/inc/pdf/Matrix3.hxx           |   54 +++++++++++++++
 vcl/source/gdi/pdfwriter_impl.cxx |  130 --------------------------------------
 vcl/source/gdi/pdfwriter_impl.hxx |    2 
 vcl/source/pdf/Matrix3.cxx        |  117 ++++++++++++++++++++++++++++++++++
 5 files changed, 173 insertions(+), 131 deletions(-)

New commits:
commit 5a068e585429c9aabfbb36f7c9f028c0acc578aa
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Mon Dec 30 20:38:21 2019 +0100
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Tue Dec 31 00:10:00 2019 +0100

    pdf: extract Matrix3 to it's own files
    
    Change-Id: Ic855b01d8b812e4604b266427c4f646cd1625b86
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86036
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index d557ce3f0bc4..e2a3fc9fb889 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -317,6 +317,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
     vcl/source/gdi/CommonSalLayout \
     vcl/source/gdi/TypeSerializer \
     vcl/source/pdf/ResourceDict \
+    vcl/source/pdf/Matrix3 \
     vcl/source/graphic/GraphicLoader \
     vcl/source/graphic/GraphicObject \
     vcl/source/graphic/GraphicObject2 \
diff --git a/vcl/inc/pdf/Matrix3.hxx b/vcl/inc/pdf/Matrix3.hxx
new file mode 100644
index 000000000000..c36332015c13
--- /dev/null
+++ b/vcl/inc/pdf/Matrix3.hxx
@@ -0,0 +1,54 @@
+/* -*- 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/.
+ *
+ */
+
+#ifndef INCLUDED_VCL_INC_PDF_MATRIX3_HXX
+#define INCLUDED_VCL_INC_PDF_MATRIX3_HXX
+
+#include <vcl/dllapi.h>
+#include <tools/gen.hxx>
+
+namespace vcl::pdf
+{
+// matrix helper class
+// TODO: use basegfx matrix class instead or derive from it
+
+/*  for sparse matrices of the form (2D linear transformations)
+ *  f[0] f[1] 0
+ *  f[2] f[3] 0
+ *  f[4] f[5] 1
+ */
+class Matrix3
+{
+    double f[6];
+
+    void set(const double* pn)
+    {
+        for (int i = 0; i < 6; i++)
+            f[i] = pn[i];
+    }
+
+public:
+    Matrix3();
+
+    void skew(double alpha, double beta);
+    void scale(double sx, double sy);
+    void rotate(double angle);
+    void translate(double tx, double ty);
+    void invert();
+
+    double get(size_t i) const { return f[i]; }
+
+    Point transform(const Point& rPoint) const;
+};
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx 
b/vcl/source/gdi/pdfwriter_impl.cxx
index 1ec13034a9bf..c5078143874c 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -543,136 +543,6 @@ void PDFWriterImpl::appendNonStrokingColor( const Color& 
rColor, OStringBuffer&
     }
 }
 
-// matrix helper class
-// TODO: use basegfx matrix class instead or derive from it
-namespace vcl // TODO: use anonymous namespace to keep this class local
-{
-/*  for sparse matrices of the form (2D linear transformations)
- *  f[0] f[1] 0
- *  f[2] f[3] 0
- *  f[4] f[5] 1
- */
-class Matrix3
-{
-    double f[6];
-
-    void set( const double *pn ) { for( int i = 0 ; i < 6; i++ ) f[i] = pn[i]; 
}
-public:
-    Matrix3();
-
-    void skew( double alpha, double beta );
-    void scale( double sx, double sy );
-    void rotate( double angle );
-    void translate( double tx, double ty );
-    void invert();
-
-    double get(size_t i) const
-    {
-        return f[i];
-    }
-
-    Point transform( const Point& rPoint ) const;
-};
-}
-
-Matrix3::Matrix3()
-{
-    // initialize to unity
-    f[0] = 1.0;
-    f[1] = 0.0;
-    f[2] = 0.0;
-    f[3] = 1.0;
-    f[4] = 0.0;
-    f[5] = 0.0;
-}
-
-Point Matrix3::transform( const Point& rOrig ) const
-{
-    double x = static_cast<double>(rOrig.X()), y = 
static_cast<double>(rOrig.Y());
-    return Point( static_cast<int>(x*f[0] + y*f[2] + f[4]), 
static_cast<int>(x*f[1] + y*f[3] + f[5]) );
-}
-
-void Matrix3::skew( double alpha, double beta )
-{
-    double fn[6];
-    double tb = tan( beta );
-    fn[0] = f[0] + f[2]*tb;
-    fn[1] = f[1];
-    fn[2] = f[2] + f[3]*tb;
-    fn[3] = f[3];
-    fn[4] = f[4] + f[5]*tb;
-    fn[5] = f[5];
-    if( alpha != 0.0 )
-    {
-        double ta = tan( alpha );
-        fn[1] += f[0]*ta;
-        fn[3] += f[2]*ta;
-        fn[5] += f[4]*ta;
-    }
-    set( fn );
-}
-
-void Matrix3::scale( double sx, double sy )
-{
-    double fn[6];
-    fn[0] = sx*f[0];
-    fn[1] = sy*f[1];
-    fn[2] = sx*f[2];
-    fn[3] = sy*f[3];
-    fn[4] = sx*f[4];
-    fn[5] = sy*f[5];
-    set( fn );
-}
-
-void Matrix3::rotate( double angle )
-{
-    double fn[6];
-    double fSin = sin(angle);
-    double fCos = cos(angle);
-    fn[0] = f[0]*fCos - f[1]*fSin;
-    fn[1] = f[0]*fSin + f[1]*fCos;
-    fn[2] = f[2]*fCos - f[3]*fSin;
-    fn[3] = f[2]*fSin + f[3]*fCos;
-    fn[4] = f[4]*fCos - f[5]*fSin;
-    fn[5] = f[4]*fSin + f[5]*fCos;
-    set( fn );
-}
-
-void Matrix3::translate( double tx, double ty )
-{
-    f[4] += tx;
-    f[5] += ty;
-}
-
-void Matrix3::invert()
-{
-    // short circuit trivial cases
-    if( f[1]==f[2] && f[1]==0.0 && f[0]==f[3] && f[0]==1.0 )
-    {
-        f[4] = -f[4];
-        f[5] = -f[5];
-        return;
-    }
-
-    // check determinant
-    const double fDet = f[0]*f[3]-f[1]*f[2];
-    if( fDet == 0.0 )
-        return;
-
-    // invert the matrix
-    double fn[6];
-    fn[0] = +f[3] / fDet;
-    fn[1] = -f[1] / fDet;
-    fn[2] = -f[2] / fDet;
-    fn[3] = +f[0] / fDet;
-
-    // apply inversion to translation
-    fn[4] = -(f[4]*fn[0] + f[5]*fn[2]);
-    fn[5] = -(f[4]*fn[1] + f[5]*fn[3]);
-
-    set( fn );
-}
-
 PDFPage::PDFPage( PDFWriterImpl* pWriter, double nPageWidth, double 
nPageHeight, PDFWriter::Orientation eOrientation )
         :
         m_pWriter( pWriter ),
diff --git a/vcl/source/gdi/pdfwriter_impl.hxx 
b/vcl/source/gdi/pdfwriter_impl.hxx
index be201c3be127..cccd38fe161f 100644
--- a/vcl/source/gdi/pdfwriter_impl.hxx
+++ b/vcl/source/gdi/pdfwriter_impl.hxx
@@ -27,6 +27,7 @@
 
 #include <pdf/ResourceDict.hxx>
 #include <pdf/BitmapID.hxx>
+#include <pdf/Matrix3.hxx>
 
 #include <com/sun/star/lang/Locale.hpp>
 #include <com/sun/star/util/XURLTransformer.hpp>
@@ -97,7 +98,6 @@ namespace vcl
 using namespace vcl::pdf;
 
 class PDFStreamIf;
-class Matrix3;
 
 namespace filter
 {
diff --git a/vcl/source/pdf/Matrix3.cxx b/vcl/source/pdf/Matrix3.cxx
new file mode 100644
index 000000000000..22e5c4d73344
--- /dev/null
+++ b/vcl/source/pdf/Matrix3.cxx
@@ -0,0 +1,117 @@
+/* -*- 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/.
+ *
+ */
+
+#include <pdf/Matrix3.hxx>
+#include <cmath>
+
+namespace vcl::pdf
+{
+Matrix3::Matrix3()
+{
+    // initialize to unity
+    f[0] = 1.0;
+    f[1] = 0.0;
+    f[2] = 0.0;
+    f[3] = 1.0;
+    f[4] = 0.0;
+    f[5] = 0.0;
+}
+
+Point Matrix3::transform(const Point& rOrig) const
+{
+    double x = static_cast<double>(rOrig.X()), y = 
static_cast<double>(rOrig.Y());
+    return Point(static_cast<int>(x * f[0] + y * f[2] + f[4]),
+                 static_cast<int>(x * f[1] + y * f[3] + f[5]));
+}
+
+void Matrix3::skew(double alpha, double beta)
+{
+    double fn[6];
+    double tb = tan(beta);
+    fn[0] = f[0] + f[2] * tb;
+    fn[1] = f[1];
+    fn[2] = f[2] + f[3] * tb;
+    fn[3] = f[3];
+    fn[4] = f[4] + f[5] * tb;
+    fn[5] = f[5];
+    if (alpha != 0.0)
+    {
+        double ta = tan(alpha);
+        fn[1] += f[0] * ta;
+        fn[3] += f[2] * ta;
+        fn[5] += f[4] * ta;
+    }
+    set(fn);
+}
+
+void Matrix3::scale(double sx, double sy)
+{
+    double fn[6];
+    fn[0] = sx * f[0];
+    fn[1] = sy * f[1];
+    fn[2] = sx * f[2];
+    fn[3] = sy * f[3];
+    fn[4] = sx * f[4];
+    fn[5] = sy * f[5];
+    set(fn);
+}
+
+void Matrix3::rotate(double angle)
+{
+    double fn[6];
+    double fSin = sin(angle);
+    double fCos = cos(angle);
+    fn[0] = f[0] * fCos - f[1] * fSin;
+    fn[1] = f[0] * fSin + f[1] * fCos;
+    fn[2] = f[2] * fCos - f[3] * fSin;
+    fn[3] = f[2] * fSin + f[3] * fCos;
+    fn[4] = f[4] * fCos - f[5] * fSin;
+    fn[5] = f[4] * fSin + f[5] * fCos;
+    set(fn);
+}
+
+void Matrix3::translate(double tx, double ty)
+{
+    f[4] += tx;
+    f[5] += ty;
+}
+
+void Matrix3::invert()
+{
+    // short circuit trivial cases
+    if (f[1] == f[2] && f[1] == 0.0 && f[0] == f[3] && f[0] == 1.0)
+    {
+        f[4] = -f[4];
+        f[5] = -f[5];
+        return;
+    }
+
+    // check determinant
+    const double fDet = f[0] * f[3] - f[1] * f[2];
+    if (fDet == 0.0)
+        return;
+
+    // invert the matrix
+    double fn[6];
+    fn[0] = +f[3] / fDet;
+    fn[1] = -f[1] / fDet;
+    fn[2] = -f[2] / fDet;
+    fn[3] = +f[0] / fDet;
+
+    // apply inversion to translation
+    fn[4] = -(f[4] * fn[0] + f[5] * fn[2]);
+    fn[5] = -(f[4] * fn[1] + f[5] * fn[3]);
+
+    set(fn);
+}
+
+} // end vcl::pdf
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to