Demos work again (also, the examples I missed).
Added an example launcher for particles.
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Flipable {
id: container
property int rating: 2
property variant prevScale: 1.0
+ property int flipDuration: 1600
+
signal closed
transform: Rotation {
slider.value = prevScale;
}
if (inBackState && bigImage.status == Image.Ready)
- particleBox.imageInAnim();
+ effectBox.imageInAnim();
}
property bool inBackState: false
onInBackStateChanged:{
if(inBackState && bigImage.status == Image.Ready)
- particleBox.imageInAnim();
+ effectBox.imageInAnim();
else if (!inBackState && bigImage.status == Image.Ready)
- particleBox.imageOutAnim();
+ effectBox.imageOutAnim();
}
}
+ ShaderEffectSource{
+ id: pictureSource
+ sourceItem: bigImage
+ smooth: true
+ //Workaround: Doesn't work below lines
+ width: bigImage.width
+ height: bigImage.width
+ visible: false
+ }
+ Turbulence{//only fill visible rect
+ id: turbulence
+ system: imageSystem
+ anchors.fill: parent
+ frequency: 100
+ strength: 250
+ active: false
+ }
Item{
- id: particleBox
+ id: effectBox
width: bigImage.width * bigImage.scale
height: bigImage.height * bigImage.scale
anchors.centerIn: parent
-
function imageInAnim(){
- cp.visible = true;
- pixAffect.onceOff = false;
bigImage.visible = false;
+ noiseIn.visible = true;
endEffectTimer.start();
- pixelEmitter.pulse(1);
}
function imageOutAnim(){
- cp.visible = true;
- pixAffect.onceOff = true;
bigImage.visible = false;
+ noiseIn.visible = false;
turbulence.active = true;
endEffectTimer.start();
pixelEmitter.burst(2048);
}
Timer{
id: endEffectTimer
- interval: 1000
+ interval: flipDuration
repeat: false
running: false
onTriggered:{
- bigImage.visible = true;
turbulence.active = false;
- cp.visible = false;
+ noiseIn.visible = false;
+ bigImage.visible = true;
}
}
- ParticleSystem{
- id: imageSystem
- }
- ColoredParticle{
- id: cp
- system: imageSystem
- color: "gray"
- alpha: 1
- image: "images/squareParticle.png"
- colorVariation: 0
- }
- Picture{
- id: pixAffect
- system: imageSystem
+ ShaderEffectItem{
+ id: noiseIn
anchors.fill: parent
- image: container.photoUrl;
- onceOff: true
- }
- Turbulence{
- id: turbulence
- system: imageSystem
- anchors.fill: parent
- frequency: 100
- strength: 250
- active: false
+ property real t: 0
+ visible: false
+ onVisibleChanged: tAnim.start()
+ NumberAnimation{
+ id: tAnim
+ target: noiseIn
+ property: "t"
+ from: 0.0
+ to: 1.0
+ duration: flipDuration
+ }
+ property variant source: pictureSource
+ property variant noise: ShaderEffectSource{
+ sourceItem:Image{
+ source: "images/noise.png"
+ }
+ hideSource: true
+ smooth: false
+ }
+ fragmentShader:"
+ uniform sampler2D noise;
+ uniform sampler2D source;
+ uniform highp float t;
+ uniform lowp float qt_Opacity;
+ varying highp vec2 qt_TexCoord0;
+ void main(){
+ //Want to use noise2, but it always returns (0,0)?
+ if(texture2D(noise, qt_TexCoord0).w <= t)
+ gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity;
+ else
+ gl_FragColor = vec4(0.,0.,0.,0.);
+ }
+ "
}
- TrailEmitter{
- id: pixelEmitter0
- system: imageSystem
- height: parent.height
- particleSize: 4
- particleDuration: 1000
- particlesPerSecond: 4096
- speed: PointVector{x: 360; xVariation: 8; yVariation: 4}
- emitting: false
+ ParticleSystem{
+ id: imageSystem
}
- TrailEmitter{
+ Emitter{
id: pixelEmitter
system: imageSystem
- anchors.fill: parent
+ //anchors.fill: parent
+ width: Math.min(bigImage.width * bigImage.scale, flickable.width);
+ height: Math.min(bigImage.height * bigImage.scale, flickable.height);
+ anchors.centerIn: parent
particleSize: 4
- particleDuration: 1000
+ particleDuration: flipDuration
particlesPerSecond: 2048
emitting: false
}
+ CustomParticle{
+ id: blowOut
+ system: imageSystem
+ property real maxWidth: effectBox.width
+ property real maxHeight: effectBox.height
+ vertexShader:"
+ attribute highp vec2 vPos;
+ attribute highp vec2 vTex;
+ attribute highp vec4 vData; // x = time, y = lifeSpan, z = size, w = endSize
+ attribute highp vec4 vVec; // x,y = constant speed, z,w = acceleration
+ attribute highp float r;
+
+ uniform highp float maxWidth;
+ uniform highp float maxHeight;
+
+ uniform highp mat4 qt_ModelViewProjectionMatrix;
+ uniform highp float timestamp;
+ uniform lowp float qt_Opacity;
+
+ varying highp vec2 fTex2;
+ varying lowp float fFade;
+
+ void main() {
+ fTex2 = vec2(vPos.x / maxWidth, vPos.y / maxHeight);
+ highp float size = vData.z;
+ highp float endSize = vData.w;
+
+ highp float t = (timestamp - vData.x) / vData.y;
+
+ highp float currentSize = mix(size, endSize, t * t);
+
+ if (t < 0. || t > 1.)
+ currentSize = 0.;
+
+ highp vec2 pos = vPos
+ - currentSize / 2. + currentSize * vTex // adjust size
+ + vVec.xy * t * vData.y // apply speed vector..
+ + 0.5 * vVec.zw * pow(t * vData.y, 2.);
+
+ gl_Position = qt_ModelViewProjectionMatrix * vec4(pos.x, pos.y, 0, 1);
+
+ highp float fadeIn = min(t * 10., 1.);
+ highp float fadeOut = 1. - max(0., min((t - 0.75) * 4., 1.));
+
+ fFade = 1.0;//fadeIn * fadeOut * qt_Opacity;
+ }
+ "
+ property variant pictureTexture: pictureSource
+ fragmentShader: "
+ uniform sampler2D pictureTexture;
+ varying highp vec2 fTex2;
+ varying highp float fFade;
+ void main() {
+ gl_FragColor = texture2D(pictureTexture, fTex2) * fFade;
+ }"
+ }
+
+
}
}
transitions: Transition {
SequentialAnimation {
PropertyAction { target: bigImage; property: "smooth"; value: false }
- NumberAnimation { easing.type: Easing.InOutQuad; properties: "angle"; duration: 1000 }
+ NumberAnimation { easing.type: Easing.InOutQuad; properties: "angle"; duration: flipDuration }
PropertyAction { target: bigImage; property: "smooth"; value: !flickable.movingVertically }
}
}
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item{
id: container
running: container.visible
id: barSys
}
- ColoredParticle{
+ ImageParticle{
color: "lightsteelblue"
alpha: 0.1
colorVariation: 0.05
image: "images/particle.png"
system: barSys
}
- TrailEmitter{
+ Emitter{
y: 2; height: parent.height-4;
x: 2; width: Math.max(parent.width * progress - 4, 0);
- speed: AngleVector{ angleVariation: 180; magnitudeVariation: 12 }
+ speed: AngledDirection{ angleVariation: 180; magnitudeVariation: 12 }
system: barSys
particlesPerSecond: width;
particleDuration: 1000
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item{
id: container
anchors.fill:parent
overwrite: false
}
- DataParticle{
+ ModelParticle{
id: mp
fade: false
system: sys
}
}
property real emitterSpacing: parent.width/3
- TrailEmitter{
+ Emitter{
system: sys
width: emitterSpacing - 64
x: emitterSpacing*0 + 32
y: -128
height: 32
- speed: PointVector{ y: (container.height + 128)/12 }
+ speed: PointDirection{ y: (container.height + 128)/12 }
particlesPerSecond: 0.4
particleDuration: 1000000//eventually -1 should mean a million seconds for neatness
maxParticles: 15
}
- TrailEmitter{
+ Emitter{
system: sys
width: emitterSpacing - 64
x: emitterSpacing*1 + 32
y: -128
height: 32
- speed: PointVector{ y: (container.height + 128)/12 }
+ speed: PointDirection{ y: (container.height + 128)/12 }
particlesPerSecond: 0.4
particleDuration: 1000000//eventually -1 should mean a million seconds for neatness
maxParticles: 15
}
- TrailEmitter{
+ Emitter{
system: sys
width: emitterSpacing - 64
x: emitterSpacing*2 + 32
y: -128
height: 32
- speed: PointVector{ y: (container.height + 128)/12 }
+ speed: PointDirection{ y: (container.height + 128)/12 }
particlesPerSecond: 0.4
particleDuration: 1000000//eventually -1 should mean a million seconds for neatness
maxParticles: 15
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Package {
function photoClicked() {
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
import "content"
Item {
id: bgParticles
startTime: 16000
}
- ColoredParticle {
+ ImageParticle {
particles: ["trail"]
image: "content/images/particle.png"
color: "#1A1A6F"
blueVariation: 0.8
system: bgParticles
}
- TrailEmitter {
+ Emitter {
particle: "drops"
width: parent.width
particlesPerSecond: 0.5
particleDuration: 20000
- speed: PointVector{
+ speed: PointDirection{
y: {screen.height/18}
}
system: bgParticles
anchors.fill: parent
emissionWidth: 16
emissionHeight: 16
- emissionShape: Ellipse{}
+ emissionShape: EllipseShape{}
}
VisualDataModel{
****************************************************************************/
import QtQuick 1.0
-import Qt.labs.particles 1.0
+import QtQuick.Particles 1.0
Item {
property bool explode : false
anchors.centerIn: parent; anchors.verticalCenterOffset: -30
path: Path {
PathAttribute { name: 'z'; value: 9999.0 }
- PathLine { x: 1; y: 1 }
+ PathLineShape { x: 1; y: 1 }
PathAttribute { name: 'z'; value: 0.0 }
}
}
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item {
id: container
width: 24
height: 24
- TrailEmitter{
+ Emitter{
id: visualization
particle: "blaster"
system: container.system
emitting: show
anchors.fill: parent
- shape: Ellipse{}
- speed: DirectedVector{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true}
+ shape: EllipseShape{}
+ speed: TargetedDirection{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true}
particleDuration: 1000
particlesPerSecond: 64
rofTimer.repeat = false;
}
}
- TrailEmitter{
+ Emitter{
id: emitter
particle: "blaster"
emitting: false
particleSize: 24
particleEndSize:16
particleSizeVariation: 8
- speed: DirectedVector{
+ speed: TargetedDirection{
id: blastVector
targetX: target.x; targetY: target.y; magnitude: 1.1; proportionalMagnitude: true
}
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item {
id: container
width: 24
height: 24
- TrailEmitter{
+ Emitter{
id: visualization
particle: "cannon"
emitting: container.show
}
emitter.burst(1);
}
- TrailEmitter{
+ Emitter{
id: emitter
particle: "cannon"
emitting: false
particlesPerSecond: 1
particleSize: 8
particleEndSize: 4
- speed: DirectedVector{
+ speed: TargetedDirection{
id: blastVector
targetX: target.x; targetY: target.y; magnitude: 1.1; proportionalMagnitude: true
}
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item{
id: container
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item {
id: container
property int gunType: 0
width: 128
height: 128
- TrailEmitter{
+ Emitter{
//TODO: Cooler would be an 'orbiting' affector
//TODO: On the subject, opacity and size should be grouped type 'overLife' if we can cram that in the particles
system: container.system
anchors.centerIn: parent
width: 64
height: 64
- shape: Ellipse{}
+ shape: EllipseShape{}
particlesPerSecond: hp > 0 ? hp * 1 + 20 : 0
particleDuration: 2400
particleSizeVariation: 16
particleEndSize: 16
- speed: AngleVector{angleVariation:360; magnitudeVariation: 32}
+ speed: AngledDirection{angleVariation:360; magnitudeVariation: 32}
}
- TrailEmitter{
+ Emitter{
system: container.system
particle: "cruiserArmor"
anchors.fill: parent
- shape: Ellipse{ fill: false }
+ shape: EllipseShape{ fill: false }
emitting: hp>0
particlesPerSecond: 16
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item {
id: container
property int gunType: 0
width: 128
height: 128
- TrailEmitter{
+ Emitter{
system: container.system
particle: "frigateShield"
anchors.centerIn: parent
particleDuration: 4800
emitting: hp > 0
}
- TrailEmitter{
+ Emitter{
system: container.system
particle: container.shipParticle
anchors.centerIn: parent
width: 64
height: 16
- shape: Ellipse{}
+ shape: EllipseShape{}
particleSize: 16
particleSizeVariation: 8
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item {
id: container
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
SequentialLoader {
id: hLdr
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item {
id: container
width: 24
height: 24
- TrailEmitter{
+ Emitter{
id: visualization
particle: "laser"
system: container.system
anchors.fill: parent
emitting: container.show
- shape: Ellipse{}
- speed: DirectedVector{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true }
+ shape: EllipseShape{}
+ speed: TargetedDirection{ targetX: width/2; targetY: width/2; magnitude: -1; proportionalMagnitude: true }
particleDuration: 1000
particlesPerSecond: 64
emitter.pulse(0.10);
// console.log("Fire box: " + Math.min(container.width/2, target.x) + "," + Math.min(container.height/2, target.y) + " " + (Math.max(container.width/2, target.x) - Math.min(container.width/2, target.x)) + "," + (Math.max(container.height/2, target.y) - Math.min(container.height/2, target.y)));
}
- TrailEmitter{
+ Emitter{
id: emitter
particle: "laser"
emitting: false
width: Math.max(container.width/2, target.x) - x;
y: Math.min(container.height/2, target.y);
height: Math.max(container.height/2, target.y) - y;
- shape: Line{
+ shape: LineShape{
mirrored: (emitter.y < 0 || emitter.x < 0) && !(emitter.y < 0 && emitter.x < 0 )//I just want XOR
}
particleSize: 16
particleEndSize: 0
- speed: PointVector{xVariation: 4; yVariation: 4}
+ speed: PointDirection{xVariation: 4; yVariation: 4}
}
}
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item{
property ParticleSystem sys
- ColoredParticle{
+ ImageParticle{
system: sys
particles: ["default"]
image: "pics/blur-circle3.png"
colorVariation: 0.1
z: 0
}
- ColoredParticle{
+ ImageParticle{
system: sys
particles: ["redTeam"]
image: "pics/blur-circle3.png"
colorVariation: 0.1
z: 0
}
- ColoredParticle{
+ ImageParticle{
system: sys
particles: ["greenTeam"]
image: "pics/blur-circle3.png"
colorVariation: 0.1
z: 0
}
- ColoredParticle{
+ ImageParticle{
system: sys
particles: ["blaster"]
image: "pics/star2.png"
colorVariation: 0.2
z: 2
}
- ColoredParticle{
+ ImageParticle{
system: sys
particles: ["laser"]
image: "pics/star3.png"
colorVariation: 0.2
z: 2
}
- ColoredParticle{
+ ImageParticle{
system: sys
particles: ["cannon"]
image: "pics/particle.png"
colorVariation: 0.1
z: 2
}
- ColoredParticle{
+ ImageParticle{
system: sys
particles: ["cannonCore"]
image: "pics/particle.png"
colorVariation: 0.8
z: 1
}
- ColoredParticle{
+ ImageParticle{
system: sys
particles: ["cannonWake"]
image: "pics/star.png"
colorVariation: 0.2
z: 1
}
- ColoredParticle{
+ ImageParticle{
system: sys
particles: ["frigateShield"]
image: "pics/blur-circle2.png"
greenVariation: 0.1
z: 3
}
- SpriteParticle{
+ ImageParticle{
system: sys
particles: ["cruiserArmor"]
z: 1
follow: "cannon"
particlesPerParticlePerSecond: 64
particleDuration: 600
- speed: AngleVector{ angleVariation: 360; magnitude: 48}
+ speed: AngledDirection{ angleVariation: 360; magnitude: 48}
particleSize: 16
particleEndSize: 8
particleSizeVariation: 2
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item {
id: me
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item {
id: container
property int gunType: 0
width: 128
height: 128
- TrailEmitter{
+ Emitter{
id: emitter
//TODO: Cooler would be an 'orbiting' affector
//TODO: On the subject, opacity and size should be grouped type 'overLife' if we can cram that in the particles
system: container.system
particle: container.shipParticle
- shape: Ellipse{}
+ shape: EllipseShape{}
particlesPerSecond: hp > 0 ? hp + 20 : 0
particleDuration: blinkInterval
maxParticles: (maxHP + 20)
- acceleration: AngleVector{angleVariation: 360; magnitude: 8}
+ acceleration: AngledDirection{angleVariation: 360; magnitude: 8}
particleSize: 24
particleEndSize: 4
**
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
import "content"
Rectangle {
id: title
width: root.width
height: 240
- TrailEmitter{
+ Emitter{
anchors.fill: parent
system: particles
emitting: true
particle: "default"
particlesPerSecond: 1200
particleDuration: 1200
- shape: Mask{source:"content/pics/TitleText.png"}
+ shape: MaskShape{source:"content/pics/TitleText.png"}
particleSize: 16
particleEndSize: 0
particleSizeVariation: 8
- speed: AngleVector{angleVariation:360; magnitudeVariation: 6}
+ speed: AngledDirection{angleVariation:360; magnitudeVariation: 6}
}
}
Button{
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
Item {
id: block
Behavior on opacity { NumberAnimation { duration: 200 } }
anchors.fill: parent
}
- TrailEmitter {
+ Emitter {
id: particles
system: particleSystem
particle: {
}
anchors.fill: parent
- speed: DirectedVector{targetX: block.width/2; targetY: block.height/2; magnitude: -60; magnitudeVariation: 60}
- shape: Ellipse{fill:true}
+ speed: TargetedDirection{targetX: block.width/2; targetY: block.height/2; magnitude: -60; magnitudeVariation: 60}
+ shape: EllipseShape{fill:true}
emitting: false;
particleDuration: 700; particleDurationVariation: 100
particlesPerSecond: 1000
- maxParticles: 100 //only fires 0.1s bursts (still 2x old number, ColoredParticle wants less than 16000 max though)
+ maxParticles: 100 //only fires 0.1s bursts (still 2x old number, ImageParticle wants less than 16000 max though)
particleSize: 28
particleEndSize: 14
}
****************************************************************************/
import QtQuick 2.0
-import Qt.labs.particles 2.0
+import QtQuick.Particles 2.0
import "SamegameCore"
import "SamegameCore/samegame.js" as Logic
}
Item{
ParticleSystem{ id: particleSystem; }
- ColoredParticle {
+ ImageParticle {
system: particleSystem
particles: ["red"]
color: Qt.darker("red");//Actually want desaturated...
colorVariation: 0.4
alpha: 0.1
}
- ColoredParticle {
+ ImageParticle {
system: particleSystem
particles: ["green"]
color: Qt.darker("green");//Actually want desaturated...
colorVariation: 0.4
alpha: 0.1
}
- ColoredParticle {
+ ImageParticle {
system: particleSystem
particles: ["blue"]
color: Qt.darker("blue");//Actually want desaturated...
****************************************************************************/
import QtQuick 1.0
-import Qt.labs.particles 1.0
+import QtQuick.Particles 1.0
Item {
id: root
****************************************************************************/
import QtQuick 1.0
-import Qt.labs.particles 1.0
+import QtQuick.Particles 1.0
Item { id:link
property bool dying: false
image: "content/star.png"
color: "white"
colorVariation: 0.1
+ alpha: 0
}
ImageParticle{
id: roids
colorVariation: 0.2
}
- GravitationalSingularity{
+ PointAttractor{
id: gs; x: root.width/2; y: root.height/2; strength: 4000000;
system: particles
+ physics: PointAttractor.Acceleration
+ proportionalToDistance: PointAttractor.Quadratic
}
Kill{
system: particles
--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtQuick.Particles 2.0
+import "launcherContent/launcher.js" as Util
+import "launcherContent"
+
+Rectangle{
+ color: "black"
+ width: 360
+ height: 600
+ Shell{
+ z: 1
+ id: shell
+ anchors.fill: parent
+ }
+ property string emissionMode: "Falling"
+ onEmissionModeChanged: workaround.active = true
+ VisualDataModel{//TODO: Transitions between modes
+ id: vdm
+ model: [
+ "../spaceexplorer/spaceexplorer.qml",
+ "../snow/snow.qml",
+ "../asteroid/asteroid.qml",
+ "../asteroid/blackhole.qml",
+ "../custom/blurparticles.qml",
+ "../modelparticles/bubbles.qml",
+ "../modelparticles/gridsplosion.qml",
+ "../modelparticles/package.qml",
+ "../modelparticles/stream.qml",
+ "../allsmiles/plain.qml",
+ "../allsmiles/smile.qml",
+ "../allsmiles/smilefactory.qml",
+ "../allsmiles/ultraparticles.qml",
+ "../allsmiles/spriteparticles.qml",
+ "../allsmiles/spritestateparticles.qml",
+ "../allsmiles/spritevariedparticles.qml",
+ "../trails/velocityfrommotion.qml",
+ "../trails/fireballs.qml",
+ "../trails/list.qml",
+ "../trails/portal.qml",
+ "../trails/rainbow.qml",
+ "../trails/dynamicemitters.qml",
+ "../trails/overburst.qml",
+ "../trails/layered.qml",
+ "../trails/shimmer.qml",
+ "../trails/turbulence.qml",
+ "../../../../demos/declarative/samegame/samegame.qml",
+ "../../../../demos/declarative/plasmapatrol/plasmapatrol.qml",
+ "../../../../demos/declarative/flickr/flickr.qml"
+ ]
+ delegate: Rectangle{
+ color: "white"
+ width: 96
+ height: 96
+ Image{
+ width: 72
+ height: 72
+ anchors.centerIn: parent
+ source: Util.iconFromPath(modelData)
+ }
+ Text{
+ text: Util.nameFromPath(modelData)
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ font.pixelSize: 8
+ }
+ MouseArea{
+ anchors.fill: parent
+ onClicked: shell.setDemo(modelData)
+ }
+ }
+ }
+ GridView{
+ anchors.fill: parent
+ anchors.bottomMargin: 128
+ model: vdm
+ visible: emissionMode == "Grid"
+ opacity: visible?1:0
+ Behavior on opacity{NumberAnimation{}}
+ }
+ ParticleSystem{ id: sys }
+ ModelParticle{
+ system: sys
+ model: vdm
+ }
+ Kill{
+ //TODO: File bug?
+ id: workaround
+ system: sys
+ active: false
+ onActiveChanged: timer.start()
+ Timer{
+ id: timer
+ interval: 32
+ running: false
+ repeat: false
+ onTriggered: workaround.active = false
+ }
+ }
+ Emitter{
+ system: sys
+ emitting: emissionMode == "Falling"
+ width: parent.width
+ particlesPerSecond: 2
+ particleDuration: 6000
+ speed: PointDirection{y:100;}
+ }
+ Emitter{
+ system: sys
+ emitting: emissionMode == "Bursting"
+ anchors.centerIn: parent
+ particlesPerSecond: 2
+ particleDuration: 6000
+ speed: AngledDirection{magnitude: 60; angleVariation: 360}
+ }
+ Emitter{
+ system: sys
+ emitting: emissionMode == "Shimmering"
+ anchors.fill: parent
+ particlesPerSecond: 4
+ particleDuration: 4000
+ }
+ Row{
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ Button{
+ text:"Grid"
+ onClicked: emissionMode = "Grid";
+ }
+ Button{
+ text:"Fall"
+ onClicked: emissionMode = "Falling";
+ }
+ Button{
+ text:"Burst"
+ onClicked: emissionMode = "Bursting";
+ }
+ Button{
+ text:"Shimmer"
+ onClicked: emissionMode = "Shimmering";
+ }
+ }
+}
import QtQuick 2.0
-Rectangle {
- id: container
+Loader{
+ id: ldr
+ visible: false
+ focus: visible
+ onVisibleChanged: source = ""
+ opacity: visible?1:0
+ Behavior on opacity{NumberAnimation{}}
- property string text: "Button"
- signal clicked
-
- width: buttonLabel.width + 20; height: buttonLabel.height + 20
- smooth: true
- property color myCol: "#999999"
- border { width: 1; color: Qt.darker(myCol) }
- radius: 8
-
- gradient: Gradient {
- GradientStop {
- position: 0.0
- color: {
- if (mouseArea.pressed)
- return Qt.darker(myCol)
- else
- return Qt.lighter(myCol)
- }
+ function setDemo(str){
+ visible = true;
+ source = str;
+ }
+ Image{//TODO: Augment with PARTICLES
+ z: 1
+ source: "icons/close.png"
+ MouseArea{
+ anchors.fill: parent
+ onClicked: ldr.visible = false;
}
- GradientStop { position: 1.0; color: myCol }
}
-
- MouseArea { id: mouseArea; anchors.fill: parent; onClicked: container.clicked() }
-
- Text {
- id: buttonLabel; text: container.text; anchors.centerIn: container; color: "black"; font.pixelSize: 24
+ Rectangle{
+ z: -1
+ anchors.fill: parent
+ color:"black"
+ Text{
+ color: "white"
+ anchors.centerIn: parent
+ text: ldr.Status == Loader.Error ? "Error :(" : "Loading..."
+ }
+ MouseArea{
+ id: graball
+ anchors.fill: parent
+ onClicked:;
+ }
}
}
--- /dev/null
+function nameFromPath(path){
+ var ret = path.split('/');
+ return ret[ret.length-1].split('.')[0];
+}
+function iconFromPath(path){
+ var ret = path.split('/');
+ return "launcherContent/icons/" + ret[ret.length-1].split('.')[0] + ".png";
+}
import QtQuick 2.0
import QtQuick.Particles 2.0
import "content"
+import "../launcherContent" as UI
Rectangle{
width: 360
Row{
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
- Button{
+ UI.Button{
text:"dx/dt"
onClicked: wanderer.physics = Wander.Position;
}
- Button{
+ UI.Button{
text:"dv/dt"
onClicked: wanderer.physics = Wander.Velocity;
}
- Button{
+ UI.Button{
text:"da/dt"
onClicked: wanderer.physics = Wander.Acceleration;
}