summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorChris Sherlock <chris.sherlock79@gmail.com>2014-11-01 21:33:09 +1100
committerChris Sherlock <chris.sherlock79@gmail.com>2014-11-01 22:18:00 +0000
commit06bde51ced10e9d2997157b91c85d80100b0dafb (patch)
treee06a948de09fdad966c39d04c86213f983c4a72a /tools
parent86725e3808c778e2d7bc11cbc6c02051ffbd5c5e (diff)
tools & vcl: move OutputDevice::ImplRotatePos() to Point::RotateAbout()
OutputDevice has a private function that rotates a point around another point. However, there is no real reason why OutputDevice should be responsible for this - it's really the responsibility of the Point class in the tools module. Therefore, I've moved this functionality out of OutputDevice and into Point, but I've renamed it from the rather confusing name "ImplRotatePos" to "RotateAround", which is what it actually does. Change-Id: If12fb40a7b476653224d4edfc01887bc91a80c7d Reviewed-on: https://gerrit.libreoffice.org/12171 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/Library_tl.mk1
-rw-r--r--tools/source/generic/point.cxx79
2 files changed, 80 insertions, 0 deletions
diff --git a/tools/Library_tl.mk b/tools/Library_tl.mk
index 856471bbf7ba..d399548cd874 100644
--- a/tools/Library_tl.mk
+++ b/tools/Library_tl.mk
@@ -59,6 +59,7 @@ $(eval $(call gb_Library_add_exception_objects,tl,\
tools/source/generic/gen \
tools/source/generic/line \
tools/source/generic/link \
+ tools/source/generic/point \
tools/source/generic/poly \
tools/source/generic/poly2 \
tools/source/generic/svborder \
diff --git a/tools/source/generic/point.cxx b/tools/source/generic/point.cxx
new file mode 100644
index 000000000000..7feaef6a2083
--- /dev/null
+++ b/tools/source/generic/point.cxx
@@ -0,0 +1,79 @@
+/* -*- 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 .
+ */
+
+#include <numeric>
+
+#include <tools/gen.hxx>
+#include <basegfx/numeric/ftools.hxx>
+
+void Point::RotateAround( long& rX, long& rY,
+ short nOrientation ) const
+{
+ const long nOriginX = X();
+ const long nOriginY = Y();
+
+ if ( (nOrientation >= 0) && !(nOrientation % 900) )
+ {
+ if ( (nOrientation >= 3600) )
+ nOrientation %= 3600;
+
+ if ( nOrientation )
+ {
+ rX -= nOriginX;
+ rY -= nOriginY;
+
+ if ( nOrientation == 900 )
+ {
+ long nTemp = rX;
+ rX = rY;
+ rY = -nTemp;
+ }
+ else if ( nOrientation == 1800 )
+ {
+ rX = -rX;
+ rY = -rY;
+ }
+ else /* ( nOrientation == 2700 ) */
+ {
+ long nTemp = rX;
+ rX = -rY;
+ rY = nTemp;
+ }
+
+ rX += nOriginX;
+ rY += nOriginY;
+ }
+ }
+ else
+ {
+ double nRealOrientation = nOrientation*F_PI1800;
+ double nCos = cos( nRealOrientation );
+ double nSin = sin( nRealOrientation );
+
+ // Translation...
+ long nX = rX-nOriginX;
+ long nY = rY-nOriginY;
+
+ // Rotation...
+ rX = +((long)(nCos*nX + nSin*nY)) + nOriginX;
+ rY = -((long)(nSin*nX - nCos*nY)) + nOriginY;
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */