diff options
Diffstat (limited to 'examples/declarative/snow')
-rw-r--r-- | examples/declarative/snow/ImageBatch.qml | 72 | ||||
-rw-r--r-- | examples/declarative/snow/Loading.qml | 8 | ||||
-rw-r--r-- | examples/declarative/snow/create.js | 12 | ||||
-rw-r--r-- | examples/declarative/snow/pics/loading.png | bin | 0 -> 761 bytes | |||
-rw-r--r-- | examples/declarative/snow/snow.qml | 69 |
5 files changed, 161 insertions, 0 deletions
diff --git a/examples/declarative/snow/ImageBatch.qml b/examples/declarative/snow/ImageBatch.qml new file mode 100644 index 0000000..1d738b2 --- /dev/null +++ b/examples/declarative/snow/ImageBatch.qml @@ -0,0 +1,72 @@ +import Qt 4.6 + +GridView { + id: grid + property int offset: 0 + property var ref + property bool isSelected: ref.selectedItemColumn >= offset && ref.selectedItemColumn < offset + 5 + + currentIndex: (ref.selectedItemColumn - offset) + ref.selectedItemRow * 5 + + property int imageWidth: ref.imageWidth + property int imageHeight: ref.imageHeight + + width: 5 * imageWidth + height: 4 * imageHeight + cellWidth: imageWidth + cellHeight: imageHeight + + states: State { + name: "selected"; when: grid.isSelected + PropertyChanges { target: grid; z: 150 } + } + transitions: Transition { + SequentialAnimation { + PauseAnimation { duration: 150 } + PropertyAction { matchProperties: "z" } + } + } + model: XmlListModel { + property string tags : "" + source: "http://api.flickr.com/services/feeds/photos_public.gne?"+(tags ? "tags="+tags+"&" : "")+"format=rss2" + query: "/rss/channel/item" + namespaceDeclarations: "declare namespace media=\"http://search.yahoo.com/mrss/\";" + + XmlRole { name: "url"; query: "media:content/@url/string()" } + } + + delegate: Item { + id: root + property bool isSelected: GridView.isCurrentItem && grid.isSelected + transformOrigin: Item.Center + width: grid.imageWidth; height: grid.imageHeight; + + Image { id: flickrImage; source: url; fillMode: Image.PreserveAspectFit; smooth: true; anchors.fill: parent; + opacity: (status == Image.Ready)?1:0; opacity: Behavior { NumberAnimation { } } } + Loading { anchors.centerIn: parent; visible: flickrImage.status!=1 } + + states: State { + name: "selected" + when: root.isSelected + PropertyChanges { target: root; scale: 3; z: 100 } + } + transitions: [ + Transition { + to: "selected" + SequentialAnimation { + PauseAnimation { duration: 150 } + PropertyAction { matchProperties: "z" } + NumberAnimation { matchProperties: "scale"; duration: 150; } + } + }, + Transition { + from: "selected" + SequentialAnimation { + NumberAnimation { matchProperties: "scale"; duration: 150 } + PropertyAction { matchProperties: "z" } + } + } + ] + } +} + diff --git a/examples/declarative/snow/Loading.qml b/examples/declarative/snow/Loading.qml new file mode 100644 index 0000000..238d9c7 --- /dev/null +++ b/examples/declarative/snow/Loading.qml @@ -0,0 +1,8 @@ +import Qt 4.6 + +Image { + id: loading; source: "pics/loading.png"; transformOrigin: Item.Center + rotation: NumberAnimation { + id: rotationAnimation; from: 0; to: 360; running: loading.visible == true; repeat: true; duration: 900 + } +} diff --git a/examples/declarative/snow/create.js b/examples/declarative/snow/create.js new file mode 100644 index 0000000..2bdae4a --- /dev/null +++ b/examples/declarative/snow/create.js @@ -0,0 +1,12 @@ +var myComponent = null; + +function createNewBlock() { + if (myComponent == null) + myComponent = createComponent("ImageBatch.qml"); + + var obj = myComponent.createObject(); + obj.parent = layout; + obj.offset = maximumColumn + 1; + obj.ref = imagePanel; + maximumColumn += 5; +} diff --git a/examples/declarative/snow/pics/loading.png b/examples/declarative/snow/pics/loading.png Binary files differnew file mode 100644 index 0000000..0296cfe --- /dev/null +++ b/examples/declarative/snow/pics/loading.png diff --git a/examples/declarative/snow/snow.qml b/examples/declarative/snow/snow.qml new file mode 100644 index 0000000..39c9c43 --- /dev/null +++ b/examples/declarative/snow/snow.qml @@ -0,0 +1,69 @@ +import Qt 4.6 + +Rectangle { + id: imagePanel + width: 1024 + height: 768 + color: "black" + + property int maximumColumn: 4 + property int selectedItemRow: 0 + property int selectedItemColumn: 0 + + Script { source: "create.js" } + + onSelectedItemColumnChanged: if (selectedItemColumn == maximumColumn) createNewBlock(); + + property int imageWidth: 200 + property int imageHeight: 200 + + property int selectedX: selectedItemColumn * imageWidth + property int selectedY: selectedItemRow * imageHeight + + Item { + anchors.centerIn: parent + Row { + id: layout + property real targetX: -(selectedX + imageWidth / 2) + + property real targetDeform: 0 + property bool slowDeform: true + + property real deform: 0 + deform: SpringFollow { + id: deformFollow; source: layout.targetDeform; velocity: layout.slowDeform?0.1:2 + onSyncChanged: if(inSync) { layout.slowDeform = true; layout.targetDeform = 0; } + } + + ImageBatch { offset: 0; ref: imagePanel } + + x: SpringFollow { source: layout.targetX; velocity: 1000 } + y: SpringFollow { source: -(selectedY + imageHeight / 2); velocity: 500 } + } + + transform: Rotation { + axis.y: 1; axis.z: 0 + angle: layout.deform * -100 + } + } + + Script { + function left() { + if (selectedItemColumn <= 0) return; + selectedItemColumn -= 1; + layout.slowDeform = false; + layout.targetDeform = Math.max(Math.min(layout.deform - 0.1, -0.1), -0.4); + } + function right() { + selectedItemColumn += 1; + layout.slowDeform = false; + layout.targetDeform = Math.min(Math.max(layout.deform + 0.1, 0.1), 0.4); + } + } + + focus: true + Keys.onLeftPressed: "left()" + Keys.onRightPressed: "right()" + Keys.onUpPressed: "if (selectedItemRow > 0) selectedItemRow = selectedItemRow - 1" + Keys.onDownPressed: "if (selectedItemRow < 3) selectedItemRow = selectedItemRow + 1" +} |