summaryrefslogtreecommitdiffstats
path: root/basicsuite/qt5-cinematicdemo/content/MainView.qml
diff options
context:
space:
mode:
Diffstat (limited to 'basicsuite/qt5-cinematicdemo/content/MainView.qml')
-rw-r--r--basicsuite/qt5-cinematicdemo/content/MainView.qml232
1 files changed, 232 insertions, 0 deletions
diff --git a/basicsuite/qt5-cinematicdemo/content/MainView.qml b/basicsuite/qt5-cinematicdemo/content/MainView.qml
new file mode 100644
index 0000000..73efe70
--- /dev/null
+++ b/basicsuite/qt5-cinematicdemo/content/MainView.qml
@@ -0,0 +1,232 @@
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+import QtGraphicalEffects 1.0
+
+Item {
+ id: root
+
+ // Set this to blur the mainView when showing something on top of it
+ property real blurAmount: 0
+
+ // Updates the blur shader source, best called right before adding blurAmount
+ function scheduleUpdate() {
+ mainContentSource.scheduleUpdate();
+ }
+
+ anchors.fill: parent
+
+ // Update blur shader source when width/height changes
+ onHeightChanged: {
+ root.scheduleUpdate();
+ }
+ onWidthChanged: {
+ root.scheduleUpdate();
+ }
+
+ Item {
+ id: mainViewArea
+ anchors.fill: parent
+
+ Background {
+ id: background
+ }
+
+ ListView {
+ id: listView
+
+ property real globalLightPosX: lightImage.x / root.width
+ property real globalLightPosY: lightImage.y / root.height
+
+ // Normal-mapped cover shared among delegates
+ ShaderEffectSource {
+ id: coverNmapSource
+ sourceItem: Image { source: "images/cover_nmap.png" }
+ hideSource: true
+ visible: false
+ }
+
+ anchors.fill: parent
+ spacing: -60
+ model: moviesModel
+ delegate: DelegateItem {
+ name: model.name
+ }
+ highlightFollowsCurrentItem: true
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ highlightMoveDuration: 400
+ preferredHighlightBegin: root.height * 0.5 - 140
+ preferredHighlightEnd: root.height * 0.5 - 140
+ cacheBuffer: 4000
+ }
+
+ Text {
+ id: titleText
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.verticalCenterOffset: -40
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: 180 + parent.width * 0.25
+ wrapMode: Text.WordWrap
+ horizontalAlignment: Text.AlignHCenter
+ text: listView.currentIndex+1 + ". " + listView.currentItem.name
+ color: "#ffffff"
+ style: Text.Outline
+ styleColor: "#b0a030"
+ font.pixelSize: settings.fontL
+ Behavior on text {
+ SequentialAnimation {
+ ParallelAnimation {
+ NumberAnimation { target: titleText; property: "opacity"; duration: 100; to: 0; easing.type: Easing.InOutQuad }
+ NumberAnimation { target: titleText; property: "scale"; duration: 100; to: 0.6; easing.type: Easing.InOutQuad }
+ }
+ PropertyAction { target: titleText; property: "text" }
+ ParallelAnimation {
+ NumberAnimation { target: titleText; property: "opacity"; duration: 100; to: 1; easing.type: Easing.InOutQuad }
+ NumberAnimation { target: titleText; property: "scale"; duration: 100; to: 1; easing.type: Easing.InOutQuad }
+ }
+ }
+ }
+ }
+
+ Image {
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 32
+ anchors.horizontalCenter: parent.horizontalCenter
+ source: "images/qt_logo.png"
+ opacity: listView.atYEnd
+ Behavior on opacity {
+ NumberAnimation { duration: 500; easing.type: Easing.InOutQuad }
+ }
+ }
+
+ // Shooting star + animation + particles
+ AnimatedSprite {
+ id: lightImage
+ width: 128
+ height: 128
+ frameWidth: 128
+ frameHeight: 128
+ frameCount: 16
+ frameRate: 15
+ source: "images/planet_sprite.png"
+ interpolate: true
+ loops: Animation.Infinite
+ visible: settings.showLighting || settings.showShootingStarParticles
+ running: !detailsView.isShown && !infoView.isShown && (settings.showLighting || settings.showShootingStarParticles)
+ }
+
+ PathAnimation {
+ target: lightImage
+ duration: 5000
+ orientation: PathAnimation.RightFirst
+ anchorPoint: Qt.point(lightImage.width/2, lightImage.height/2)
+ running: true
+ paused: detailsView.isShown || infoView.isShown || (!settings.showLighting && !settings.showShootingStarParticles)
+ loops: Animation.Infinite
+ path: Path {
+ id: lightAnimPath
+ property int w: root.width > 0 ? root.width : 1
+ property int h: root.height > 0 ? root.height : 1
+ startX: w*0.4; startY: h*0.3
+ PathCurve { x: lightAnimPath.w*0.8; y: lightAnimPath.h*0.2 }
+ PathCurve { x: lightAnimPath.w*0.8; y: lightAnimPath.h*0.7 }
+ PathCurve { x: lightAnimPath.w*0.1; y: lightAnimPath.h*0.6 }
+ PathCurve { x: lightAnimPath.w*0.4; y: lightAnimPath.h*0.3 }
+ }
+ }
+
+ ParticleSystem {
+ anchors.fill: parent
+ paused: detailsView.isShown || infoView.isShown
+
+ // Shooting star particles
+ ImageParticle {
+ source: "images/particle.png"
+ color: "#ffefaf"
+ colorVariation: settings.showColors ? 1.0 : 0.1
+ alpha: 0
+ }
+ Emitter {
+ id: shootingStarEmitter
+ emitRate: settings.showShootingStarParticles ? 100 : 0
+ lifeSpan: 2000
+ x: lightImage.x + lightImage.width/2
+ y: lightImage.y + lightImage.height/2
+ velocity: PointDirection {xVariation: 8; yVariation: 8;}
+ acceleration: PointDirection {xVariation: 12; yVariation: 12;}
+ size: 32
+ sizeVariation: 16
+ }
+ Emitter {
+ id: shootingStarBurst
+ emitRate: 0
+ lifeSpan: 2000
+ x: lightImage.x + lightImage.width/2
+ y: lightImage.y + lightImage.height/2
+ velocity: PointDirection {xVariation: 60; yVariation: 60;}
+ acceleration: PointDirection {xVariation: 40; yVariation: 40;}
+ size: 24
+ sizeVariation: 16
+ }
+
+ // Dust/Smoke particles
+ ImageParticle {
+ groups: ["smoke"]
+ source: "images/smoke.png"
+ color: "#ffffff"
+ alpha: 0.9
+ opacity: 0.8
+ colorVariation: settings.showColors ? 0.9 : 0.0
+ rotationVariation: 180
+ }
+ Emitter {
+ y: root.height * 0.85
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: 200 + parent.width * 0.1
+ height: root.height * 0.3
+ emitRate: settings.showFogParticles ? 8 : 0
+ lifeSpan: 2000
+ lifeSpanVariation: 1000
+ group: "smoke"
+ size: 192
+ sizeVariation: 64
+ acceleration: PointDirection { y: -80; xVariation: 20 }
+ }
+ Emitter {
+ y: root.height * 0.9
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: 200 + parent.width * 0.1
+ height: root.height * 0.2
+ emitRate: settings.showFogParticles ? 10 : 0
+ lifeSpan: 2000
+ group: "smoke"
+ size: 192
+ sizeVariation: 64
+ acceleration: PointDirection { y: -20; xVariation: 40 }
+ }
+ Turbulence {
+ groups: ["smoke"]
+ width: parent.width
+ height: parent.height * 0.8
+ strength: 60
+ }
+ }
+
+ SettingsView {
+ id: settingsView
+ }
+ }
+
+ FastBlur {
+ anchors.fill: mainViewArea
+ radius: root.blurAmount
+ visible: root.blurAmount
+ source: ShaderEffectSource {
+ id: mainContentSource
+ anchors.fill: parent
+ sourceItem: mainViewArea
+ hideSource: false
+ live: false
+ visible: root.blurAmount
+ }
+ }
+}