diff options
author | Lasse Räihä <lasse.raiha@digia.com> | 2013-04-17 11:07:24 +0300 |
---|---|---|
committer | Lasse Räihä <lasse.raiha@digia.com> | 2013-04-17 11:18:55 +0300 |
commit | 1d454ee835695f14b438ce0e39e29b363ce1d58d (patch) | |
tree | 60959a7021603faf43b6b852a1df5d10004e3112 | |
parent | 42f2f5d7abe5ea0baa2fbad7b91c5c11629d2ded (diff) |
Fixed some little bit style bugs.
Change-Id: I6bddf1b627dbe60fc5f8d0df04758f370a00b7f4
Reviewed-by: Kimmo Ollila <kimmo.ollila@digia.com>
-rw-r--r-- | QtDemo/qml/QtDemo/engine.js | 42 | ||||
-rw-r--r-- | QtDemo/qml/QtDemo/main.qml | 136 |
2 files changed, 84 insertions, 94 deletions
diff --git a/QtDemo/qml/QtDemo/engine.js b/QtDemo/qml/QtDemo/engine.js index e0e629a..e978406 100644 --- a/QtDemo/qml/QtDemo/engine.js +++ b/QtDemo/qml/QtDemo/engine.js @@ -46,9 +46,7 @@ function createNew(x,y,angle,borderColor,scale,url,device){ object.device = device object.rotation = angle object.scale = scale - object.uid = objects.length+1 //TODO make unique - //in future objects will also - //get destroyed and re-created + object.uid = objects.length+1 object.borderColor = borderColor object.x = x-object.width/2 object.y = y-object.height/2 @@ -86,8 +84,17 @@ function lookForSlides(x,y,angle){ } function loadCurrentDemo(){ - if (currentDemoId != -1){ - objects[currentDemoId].loadDemo(); + + // Load current demo and release all others possible running demos + if (currentDemoId != -1) { + for (var i=0; i < objects.length; i++){ + if (currentDemoId == i){ + objects[currentDemoId].loadDemo(); + } + else { + objects[i].releaseDemo(); + } + } } } @@ -95,20 +102,17 @@ function selectTarget(uid){ var idx = -1; - for (var i=0; i < objects.length; i++){ - if (uid && objects[i].uid === uid){ - idx = i - } else { - objects[i].releaseDemo(); - } - } - if (idx !== -1){ - currentDemoId = idx - return {"x": positions[idx].x, "y": positions[idx].y, "angle": positions[idx].angle, "scale": positions[idx].scale} + for (var i=0; i < objects.length; i++){ + if (uid && objects[i].uid === uid){ + idx = i + } else { + objects[i].releaseDemo(); } + } + if (idx !== -1){ + currentDemoId = idx + return {"x": positions[idx].x, "y": positions[idx].y, "angle": positions[idx].angle, "scale": positions[idx].scale} + } - //randomly select new target for now - idx = Math.floor(Math.random()*positions.length) - currentDemoId = idx //objects[idx].loadDemo(); - return {"x": positions[idx].x, "y": positions[idx].y, "angle": positions[idx].angle, "scale": positions[idx].scale} + return null; } diff --git a/QtDemo/qml/QtDemo/main.qml b/QtDemo/qml/QtDemo/main.qml index 12296ff..80940cc 100644 --- a/QtDemo/qml/QtDemo/main.qml +++ b/QtDemo/qml/QtDemo/main.qml @@ -28,88 +28,59 @@ Rectangle{ MouseArea{ id: worldMouseArea - enabled: !zoomAnimation.running && !zoomFlyByAnimation.running - - property int startX: 0 - property int startY: 0 + anchors.fill: parent property int oldX: 0 property int oldY: 0 - property bool panning: false - //property bool flicking: false - - anchors.fill: parent - - onDoubleClicked: { - //to initial state - canvas.xOffset = 0 - canvas.yOffset = 0 - canvas.rotationOriginX = 0 - canvas.rotationOriginY = 0 - canvas.angle = 0 - canvas.zoomInTarget = 0.2 - zoomAnimation.restart() - } + onReleased: { + // Check the point only if we didn't move the mouse + if (!panning) { + var target = null; - onClicked: { - print ("MOUSEAREA CLICKED!: "+mouse.x +", "+mouse.y) - var target = null; - var velocity = 0; + // Check if there is target under mouse. + if (!target){ - panning = false; + var object = mapToItem(canvas, mouse.x, mouse.y) + var item = canvas.childAt(object.x,object.y) - if (!target){ - - var object = mapToItem(canvas, mouse.x, mouse.y) - var item = canvas.childAt(object.x,object.y) - - if (item && item.objectName === 'slide') { - target = Engine.selectTarget(item.uid) - } else { - //select random target for now... - //target = Engine.selectTarget(null) + if (item && item.objectName === 'slide') { + target = Engine.selectTarget(item.uid) + } } - } - - if (!target) return - canvas.xOffset = -target.x - canvas.yOffset = -target.y - canvas.rotationOriginX = target.x - canvas.rotationOriginY = target.y - canvas.angle = -target.angle - canvas.zoomOutTarget = .4 - - canvas.zoomInTarget = 1.0/(target.scale) - - //zoomFlyByAnimation.restart() - zoomAnimation.restart() + // If we found target, go to the target + if (target) + canvas.goTo(target) + else // If not target under mouse -> go home + canvas.goHome() + } + panning = false } onPressed: { - startX = mouse.x - startY = mouse.y + // Save mouse state oldX = mouse.x oldY = mouse.y - //flicking = true - //flickTimer.restart() } onPositionChanged: { - //if (!panning && (Math.abs(mouse.x-startX) >20 || Math.abs(mouse.x-startX) >20)){ - panning= true - //} + var dx = mouse.x - oldX; + var dy = mouse.y - oldY; - canvas.xOffset+=(mouse.x - oldX) - canvas.yOffset+=(mouse.y - oldY) + if (!panning && (Math.abs(dx) > 1 || Math.abs(dy) > 1)) + panning=true; - oldX = mouse.x - oldY = mouse.y - } + oldX = mouse.x; + oldY = mouse.y; - //onFlickingChanged: print ("Flicking changed to: "+flicking) + if (!zoomAnimation.running) + { + canvas.xOffset += dx; + canvas.yOffset += dy; + } + } } Item{ @@ -127,7 +98,7 @@ Rectangle{ pinch.maximumScale: 5 pinch.maximumRotation: 360 pinch.minimumRotation: -360 - enabled: !zoomAnimation.running && !zoomFlyByAnimation.running + enabled: !zoomAnimation.running property bool pinching: false @@ -137,10 +108,10 @@ Rectangle{ pinchProxy.scale = canvas.scalingFactor if (canvas.scalingFactor>1){ - var object = mapToItem(canvas, pinch.center.x, pinch.center.y) + var object = mapToItem(canvas, pinch.center.x, pinch.center.y) - canvas.rotationOriginX = object.x - canvas.rotationOriginY = object.y + canvas.rotationOriginX = object.x + canvas.rotationOriginY = object.y } } onPinchFinished: pinching = false; @@ -165,6 +136,30 @@ Rectangle{ property real rotationOriginX property real rotationOriginY + function goHome() + { + xOffset = 0 + yOffset = 0 + rotationOriginX = 0 + rotationOriginY = 0 + angle = 0 + zoomInTarget = 0.2 + + zoomAnimation.restart(); + } + function goTo(target) + { + xOffset = -target.x + yOffset = -target.y + rotationOriginX = target.x + rotationOriginY = target.y + angle = -target.angle + zoomOutTarget = .4 + zoomInTarget = 1.0/(target.scale) + + zoomAnimation.restart() + } + Behavior on angle { RotationAnimation{ duration: Style.APP_ANIMATION_DELAY @@ -214,7 +209,7 @@ Rectangle{ width: Style.LOGO_WIDTH height: Style.LOGO_HEIGHT sourceSize: Qt.size(Style.LOGO_WIDTH, Style.LOGO_HEIGHT) - smooth: !zoomFlyByAnimation.running + smooth: !zoomAnimation.running opacity: .0 Behavior on opacity { SequentialAnimation{ @@ -244,17 +239,8 @@ Rectangle{ } SequentialAnimation{ - id: zoomFlyByAnimation - NumberAnimation { target: canvas; property: "scalingFactor"; duration: Style.APP_ANIMATION_DELAY/2; to:canvas.zoomOutTarget; easing.type: Easing.OutCubic } - NumberAnimation { target: canvas; property: "scalingFactor"; duration: Style.APP_ANIMATION_DELAY/2; to:canvas.zoomInTarget; easing.type: Easing.InCubic } - //NumberAnimation { target: canvas; property: "scalingFactor"; duration: 600; to:canvas.zoomInTarget; easing.type: Easing.OutBounce } - } - - SequentialAnimation{ id: zoomAnimation - alwaysRunToEnd: true NumberAnimation { target: canvas; property: "scalingFactor"; duration: Style.APP_ANIMATION_DELAY; to:canvas.zoomInTarget } - onStarted: zoomFlyByAnimation.stop() onRunningChanged: { if (!running && canvas.zoomInTarget !== .2){ print ("zoomanimation calls loaddemo") |