summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2020-03-28 18:00:22 +0100
committerTomaž Vajngerl <quikee@gmail.com>2020-04-01 12:32:01 +0200
commitf5d916fd8d399dafbf8ff6bd23ff74fb1dacf071 (patch)
treed550e46dbecd897e554ce61e7c809c09823a320d
parentbdfc08855324e71168e633fa579aa04add5c0957 (diff)
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@gmail.com> (cherry picked from commit befd6880873cc3f63a0566b76246d2ae54f8a3c5) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91447 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
-rw-r--r--include/basegfx/matrix/Matrix.hxx126
-rw-r--r--svx/source/svdraw/svdpdf.hxx106
2 files changed, 128 insertions, 104 deletions
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;