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
# << macros
Summary: A nice homescreen for Glacier experience
Version: 0.20
Version: 0.21
Release: 1
Group: System/GUI/Other
License: BSD
......
Name: lipstick-glacier-home-qt5
Summary: A nice homescreen for Glacier experience
Version: 0.20
Version: 0.21
Release: 1
Group: System/GUI/Other
License: BSD
......
......@@ -35,41 +35,45 @@ import org.nemomobile.lipstick 0.1
Item {
QtObject {
id: privateProperties
property int nativeRotation: Screen.angleBetween(nativeOrientation, Screen.primaryOrientation)
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 variant unrotatedItems: []
function rotationDiff(a, b) {
var r =_nativeRotation - rotationParent.rotation
if (r < 360)
r += 360
return r
}
function rotateRotationParent(o) {
rotateObject(rotationParent, o)
for(var i = 0; i < unrotatedItems.length; i++) {
rotateObjectToAngle(unrotatedItems[i], rotationDiff(_nativeRotation, rotationParent.rotation))
}
}
function rotateObject(obj, o) {
var r = Screen.angleBetween(o, Screen.primaryOrientation)
if (obj.rotation !== 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
if (obj.rotation !== r)
rotateObjectToAngle(obj, r)
}
function rotateObjectToAngle(obj, r) {
obj.width = Screen.width; obj.height = Screen.height; obj.x = 0; obj.y = 0
obj.rotation = r
if ((diff === 90) || (diff === 270)) {
var w = obj.width
obj.width = obj.height
obj.height = w
var res = obj.mapToItem((obj === rotationParent) ? rotationParent.parent : rotationParent, 0, 0, obj.width, obj.height)
if (obj !== rotationParent) {
if (_nativeIsPortrait) {
var i = res.x
res.x = res.y
res.y = i
}
obj.x = correction
obj.y = -correction
var res2 = rotationParent.mapToItem(rotationParent.parent, 0, 0, res.width, res.height)
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 {
GlacierRotation {
id: glacierRotation
rotationParent: desktop.parent
unrotatedItems: [lockScreen]
}
orientation: Lipstick.compositor.screenOrientation
......@@ -94,13 +95,10 @@ Page {
Connections {
target: LipstickSettings
onLockscreenVisibleChanged: {
if (lockscreenVisible()) {
glacierRotation.rotateRotationParent(nativeOrientation)
} else {
if (!lockscreenVisible())
glacierRotation.rotateRotationParent(desktop.orientation)
}
}
}
function lockscreenVisible() {
return LipstickSettings.lockscreenVisible === true
......
......@@ -131,6 +131,8 @@ Compositor {
property real swipeThreshold: 0.15
property real lockThreshold: 0.25
property int lockscreenX
property int lockscreenY
onGestureStarted: {
swipeAnimation.stop()
......@@ -139,6 +141,8 @@ Compositor {
if (root.appActive) {
state = "swipe"
} else if (root.homeActive) {
lockscreenX = Desktop.instance.lockscreen.x
lockscreenY = Desktop.instance.lockscreen.y
state = "lock"
}
}
......@@ -199,14 +203,22 @@ Compositor {
}
PropertyChanges {
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" ?
-Desktop.instance.lockscreen.width+Math.abs(gestureArea.value) :
Desktop.instance.lockscreen.width+gestureArea.value) ) : 0
y: gestureArea.horizontal ? 0 : (Desktop.instance.lockscreenVisible()?(gestureArea.value):
((Desktop.instance.lockscreen.width === topmostWindow.width) ?
-Desktop.instance.lockscreen.width :
-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" ?
-Desktop.instance.lockscreen.height+Math.abs(gestureArea.value) :
Desktop.instance.lockscreen.height+gestureArea.value) )
((Desktop.instance.lockscreen.width === topmostWindow.width) ?
-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