Commit 7ce1e5f7 authored by Aleksi Suomalainen's avatar Aleksi Suomalainen

Merge pull request #35 from filippz/master

Keep lockscreen in native orientation by applying rotaton to it
parents 9bbe3191 65fbabfa
...@@ -9,7 +9,7 @@ Name: lipstick-glacier-home-qt5 ...@@ -9,7 +9,7 @@ Name: lipstick-glacier-home-qt5
# << macros # << macros
Summary: A nice homescreen for Glacier experience Summary: A nice homescreen for Glacier experience
Version: 0.20 Version: 0.21
Release: 1 Release: 1
Group: System/GUI/Other Group: System/GUI/Other
License: BSD License: BSD
......
Name: lipstick-glacier-home-qt5 Name: lipstick-glacier-home-qt5
Summary: A nice homescreen for Glacier experience Summary: A nice homescreen for Glacier experience
Version: 0.20 Version: 0.21
Release: 1 Release: 1
Group: System/GUI/Other Group: System/GUI/Other
License: BSD License: BSD
......
...@@ -35,41 +35,45 @@ import org.nemomobile.lipstick 0.1 ...@@ -35,41 +35,45 @@ import org.nemomobile.lipstick 0.1
Item { Item {
QtObject { property int _nativeRotation: Screen.angleBetween(nativeOrientation, Screen.primaryOrientation)
id: privateProperties property bool _nativeIsPortrait: ((_nativeRotation === 0) || (_nativeRotation === 180))
property int nativeRotation: Screen.angleBetween(nativeOrientation, Screen.primaryOrientation)
property bool nativeIsPortrait: ((nativeRotation === 0) || (nativeRotation === 180))
}
property Item rotationParent property Item rotationParent
property variant unrotatedItems: []
function rotationDiff(a, b) {
var r =_nativeRotation - rotationParent.rotation
if (r < 360)
r += 360
return r
}
function rotateRotationParent(o) { function rotateRotationParent(o) {
rotateObject(rotationParent, o) rotateObject(rotationParent, o)
for(var i = 0; i < unrotatedItems.length; i++) {
rotateObjectToAngle(unrotatedItems[i], rotationDiff(_nativeRotation, rotationParent.rotation))
}
} }
function rotateObject(obj, o) { function rotateObject(obj, o) {
var r = Screen.angleBetween(o, Screen.primaryOrientation) var r = Screen.angleBetween(o, Screen.primaryOrientation)
if (obj.rotation !== r) { if (obj.rotation !== r)
rotateObjectToAngle(obj, r)
var isPortrait = ((r === 0) || (r === 180))
var correction = 0
var isNative=((privateProperties.nativeIsPortrait || isPortrait) && !(privateProperties.nativeIsPortrait && isPortrait)) //xor
var diff = Math.abs(r - obj.rotation)
//xor
if ((isNative || !privateProperties.nativeIsPortrait) && !(isNative && !privateProperties.nativeIsPortrait)) {
correction = obj.width / 2 - obj.height / 2
if (diff === 180)
correction = -correction
} }
function rotateObjectToAngle(obj, r) {
obj.width = Screen.width; obj.height = Screen.height; obj.x = 0; obj.y = 0
obj.rotation = r obj.rotation = r
if ((diff === 90) || (diff === 270)) { var res = obj.mapToItem((obj === rotationParent) ? rotationParent.parent : rotationParent, 0, 0, obj.width, obj.height)
var w = obj.width if (obj !== rotationParent) {
obj.width = obj.height if (_nativeIsPortrait) {
obj.height = w var i = res.x
res.x = res.y
res.y = i
} }
obj.x = correction var res2 = rotationParent.mapToItem(rotationParent.parent, 0, 0, res.width, res.height)
obj.y = -correction res.width = res2.width; res.height = res2.height
} }
obj.x = res.x; obj.y = res.y; obj.width = res.width; obj.height = res.height
} }
} }
...@@ -73,6 +73,7 @@ Page { ...@@ -73,6 +73,7 @@ Page {
GlacierRotation { GlacierRotation {
id: glacierRotation id: glacierRotation
rotationParent: desktop.parent rotationParent: desktop.parent
unrotatedItems: [lockScreen]
} }
orientation: Lipstick.compositor.screenOrientation orientation: Lipstick.compositor.screenOrientation
...@@ -94,13 +95,10 @@ Page { ...@@ -94,13 +95,10 @@ Page {
Connections { Connections {
target: LipstickSettings target: LipstickSettings
onLockscreenVisibleChanged: { onLockscreenVisibleChanged: {
if (lockscreenVisible()) { if (!lockscreenVisible())
glacierRotation.rotateRotationParent(nativeOrientation)
} else {
glacierRotation.rotateRotationParent(desktop.orientation) glacierRotation.rotateRotationParent(desktop.orientation)
} }
} }
}
function lockscreenVisible() { function lockscreenVisible() {
return LipstickSettings.lockscreenVisible === true return LipstickSettings.lockscreenVisible === true
......
...@@ -131,6 +131,8 @@ Compositor { ...@@ -131,6 +131,8 @@ Compositor {
property real swipeThreshold: 0.15 property real swipeThreshold: 0.15
property real lockThreshold: 0.25 property real lockThreshold: 0.25
property int lockscreenX
property int lockscreenY
onGestureStarted: { onGestureStarted: {
swipeAnimation.stop() swipeAnimation.stop()
...@@ -139,6 +141,8 @@ Compositor { ...@@ -139,6 +141,8 @@ Compositor {
if (root.appActive) { if (root.appActive) {
state = "swipe" state = "swipe"
} else if (root.homeActive) { } else if (root.homeActive) {
lockscreenX = Desktop.instance.lockscreen.x
lockscreenY = Desktop.instance.lockscreen.y
state = "lock" state = "lock"
} }
} }
...@@ -199,14 +203,22 @@ Compositor { ...@@ -199,14 +203,22 @@ Compositor {
} }
PropertyChanges { PropertyChanges {
target: Desktop.instance.lockscreen target: Desktop.instance.lockscreen
x: gestureArea.horizontal ? (Desktop.instance.lockscreenVisible()?(gestureArea.value): x: gestureArea.lockscreenX + ((gestureArea.horizontal) ? (Desktop.instance.lockscreenVisible()?(gestureArea.value) :
(gestureArea.gesture == "right" ? (gestureArea.gesture == "right" ?
-Desktop.instance.lockscreen.width+Math.abs(gestureArea.value) : ((Desktop.instance.lockscreen.width === topmostWindow.width) ?
Desktop.instance.lockscreen.width+gestureArea.value) ) : 0 -Desktop.instance.lockscreen.width :
y: gestureArea.horizontal ? 0 : (Desktop.instance.lockscreenVisible()?(gestureArea.value): -Desktop.instance.lockscreen.height)+Math.abs(gestureArea.value) :
((Desktop.instance.lockscreen.width === topmostWindow.width) ?
Desktop.instance.lockscreen.width :
Desktop.instance.lockscreen.height)+gestureArea.value) ) : 0 )
y: gestureArea.lockscreenY + ((gestureArea.horizontal) ? 0 : (Desktop.instance.lockscreenVisible()?(gestureArea.value) :
(gestureArea.gesture == "down" ? (gestureArea.gesture == "down" ?
-Desktop.instance.lockscreen.height+Math.abs(gestureArea.value) : ((Desktop.instance.lockscreen.width === topmostWindow.width) ?
Desktop.instance.lockscreen.height+gestureArea.value) ) -Desktop.instance.lockscreen.height :
-Desktop.instance.lockscreen.width)+Math.abs(gestureArea.value) :
((Desktop.instance.lockscreen.width === topmostWindow.width) ?
Desktop.instance.lockscreen.height :
Desktop.instance.lockscreen.width)+gestureArea.value) ) )
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment