summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@digia.com>2015-01-16 17:29:15 +0100
committerTor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>2015-01-21 19:11:39 +0100
commitbdab31166ca4b8abd4b78301f92862828a2b61e7 (patch)
tree6be963ae83d81df68b25c083c507acb8f008b563 /src
parentb9eab8984d482b7ffdab640b9d2aa53c5522bfba (diff)
Move static part of angleBetween/transformBetween/mapBetween to QPlatformScreen
Allows the helpers to be used at QPlatformScreen construction time, before it has been associated with a QScreen. Change-Id: Iab8f863ef5c9339ef6e88b3d844915c03cacda74 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qplatformscreen.cpp87
-rw-r--r--src/gui/kernel/qplatformscreen.h4
-rw-r--r--src/gui/kernel/qscreen.cpp62
3 files changed, 94 insertions, 59 deletions
diff --git a/src/gui/kernel/qplatformscreen.cpp b/src/gui/kernel/qplatformscreen.cpp
index fa6d785b04..7b53836ca0 100644
--- a/src/gui/kernel/qplatformscreen.cpp
+++ b/src/gui/kernel/qplatformscreen.cpp
@@ -32,6 +32,7 @@
****************************************************************************/
#include "qplatformscreen.h"
+#include <QtCore/qdebug.h>
#include <QtGui/qguiapplication.h>
#include <qpa/qplatformcursor.h>
#include <QtGui/private/qguiapplication_p.h>
@@ -306,4 +307,90 @@ void QPlatformScreen::resizeMaximizedWindows()
}
}
+// i must be power of two
+static int log2(uint i)
+{
+ if (i == 0)
+ return -1;
+
+ int result = 0;
+ while (!(i & 1)) {
+ ++result;
+ i >>= 1;
+ }
+ return result;
+}
+
+int QPlatformScreen::angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b)
+{
+ if (a == Qt::PrimaryOrientation || b == Qt::PrimaryOrientation) {
+ qWarning() << "Use QScreen version of" << __FUNCTION__ << "when passing Qt::PrimaryOrientation";
+ return 0;
+ }
+
+ if (a == b)
+ return 0;
+
+ int ia = log2(uint(a));
+ int ib = log2(uint(b));
+
+ int delta = ia - ib;
+
+ if (delta < 0)
+ delta = delta + 4;
+
+ int angles[] = { 0, 90, 180, 270 };
+ return angles[delta];
+}
+
+QTransform QPlatformScreen::transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &target)
+{
+ if (a == Qt::PrimaryOrientation || b == Qt::PrimaryOrientation) {
+ qWarning() << "Use QScreen version of" << __FUNCTION__ << "when passing Qt::PrimaryOrientation";
+ return QTransform();
+ }
+
+ if (a == b)
+ return QTransform();
+
+ int angle = angleBetween(a, b);
+
+ QTransform result;
+ switch (angle) {
+ case 90:
+ result.translate(target.width(), 0);
+ break;
+ case 180:
+ result.translate(target.width(), target.height());
+ break;
+ case 270:
+ result.translate(0, target.height());
+ break;
+ default:
+ Q_ASSERT(false);
+ }
+ result.rotate(angle);
+
+ return result;
+}
+
+QRect QPlatformScreen::mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &rect)
+{
+ if (a == Qt::PrimaryOrientation || b == Qt::PrimaryOrientation) {
+ qWarning() << "Use QScreen version of" << __FUNCTION__ << "when passing Qt::PrimaryOrientation";
+ return rect;
+ }
+
+ if (a == b)
+ return rect;
+
+ if ((a == Qt::PortraitOrientation || a == Qt::InvertedPortraitOrientation)
+ != (b == Qt::PortraitOrientation || b == Qt::InvertedPortraitOrientation))
+ {
+ return QRect(rect.y(), rect.x(), rect.height(), rect.width());
+ }
+
+ return rect;
+}
+
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformscreen.h b/src/gui/kernel/qplatformscreen.h
index 2ca12616b4..c3fbaea14b 100644
--- a/src/gui/kernel/qplatformscreen.h
+++ b/src/gui/kernel/qplatformscreen.h
@@ -108,6 +108,10 @@ public:
virtual QPlatformCursor *cursor() const;
+ static int angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b);
+ static QTransform transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &target);
+ static QRect mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, const QRect &rect);
+
protected:
void resizeMaximizedWindows();
diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp
index ed6e8ddccc..6594565c15 100644
--- a/src/gui/kernel/qscreen.cpp
+++ b/src/gui/kernel/qscreen.cpp
@@ -467,20 +467,6 @@ Qt::ScreenOrientation QScreen::nativeOrientation() const
return d->platformScreen->nativeOrientation();
}
-// i must be power of two
-static int log2(uint i)
-{
- if (i == 0)
- return -1;
-
- int result = 0;
- while (!(i & 1)) {
- ++result;
- i >>= 1;
- }
- return result;
-}
-
/*!
Convenience function to compute the angle of rotation to get from
rotation \a a to rotation \a b.
@@ -497,19 +483,7 @@ int QScreen::angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b) cons
if (b == Qt::PrimaryOrientation)
b = primaryOrientation();
- if (a == b)
- return 0;
-
- int ia = log2(uint(a));
- int ib = log2(uint(b));
-
- int delta = ia - ib;
-
- if (delta < 0)
- delta = delta + 4;
-
- int angles[] = { 0, 90, 180, 270 };
- return angles[delta];
+ return QPlatformScreen::angleBetween(a, b);
}
/*!
@@ -532,28 +506,7 @@ QTransform QScreen::transformBetween(Qt::ScreenOrientation a, Qt::ScreenOrientat
if (b == Qt::PrimaryOrientation)
b = primaryOrientation();
- if (a == b)
- return QTransform();
-
- int angle = angleBetween(a, b);
-
- QTransform result;
- switch (angle) {
- case 90:
- result.translate(target.width(), 0);
- break;
- case 180:
- result.translate(target.width(), target.height());
- break;
- case 270:
- result.translate(0, target.height());
- break;
- default:
- Q_ASSERT(false);
- }
- result.rotate(angle);
-
- return result;
+ return QPlatformScreen::transformBetween(a, b, target);
}
/*!
@@ -573,16 +526,7 @@ QRect QScreen::mapBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b, cons
if (b == Qt::PrimaryOrientation)
b = primaryOrientation();
- if (a == b)
- return rect;
-
- if ((a == Qt::PortraitOrientation || a == Qt::InvertedPortraitOrientation)
- != (b == Qt::PortraitOrientation || b == Qt::InvertedPortraitOrientation))
- {
- return QRect(rect.y(), rect.x(), rect.height(), rect.width());
- }
-
- return rect;
+ return QPlatformScreen::mapBetween(a, b, rect);
}
/*!