summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qscreen.cpp
diff options
context:
space:
mode:
authorSamuel Rødal <samuel.rodal@nokia.com>2011-11-22 17:16:11 +0100
committerQt by Nokia <qt-info@nokia.com>2011-11-23 22:23:55 +0100
commit5116a25a55384d42d6e2d7df0bdeb0fd35799769 (patch)
treeb04e01f9925c5e1d286bb8206b75d1f3fb1d6a15 /src/gui/kernel/qscreen.cpp
parentb851c764a61c0de781ef3447230a0a6a3f4a0ed9 (diff)
Fixed regression in tst_qscreen.
The ScreenOrientation enum was changed so that the values are power of twos, angleBetween() needed to be fixed in order to reflect this. Task-number: QTBUG-22554 Change-Id: Ia45dd6643b40b14204abf967b00c0d04834736a3 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/gui/kernel/qscreen.cpp')
-rw-r--r--src/gui/kernel/qscreen.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp
index 8c25bea285..7d83cebd2b 100644
--- a/src/gui/kernel/qscreen.cpp
+++ b/src/gui/kernel/qscreen.cpp
@@ -335,6 +335,20 @@ Qt::ScreenOrientation QScreen::currentOrientation() const
return d->platformScreen->currentOrientation();
}
+// 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.
@@ -346,7 +360,10 @@ int QScreen::angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b)
if (a == Qt::UnknownOrientation || b == Qt::UnknownOrientation || a == b)
return 0;
- int delta = int(b) - int(a);
+ int ia = log2(uint(a));
+ int ib = log2(uint(b));
+
+ int delta = ia - ib;
if (delta < 0)
delta = delta + 4;