Update Affector folder of examples to guidelines
authorAlan Alpert <alan.alpert@nokia.com>
Wed, 6 Jun 2012 10:28:17 +0000 (20:28 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 8 Jun 2012 05:32:02 +0000 (07:32 +0200)
Change-Id: I1fa0e8424f94cf954098b7734ba25feab0790828
Reviewed-by: Bea Lam <bea.lam@nokia.com>

16 files changed:
doc/src/images/qml-affectors-example.png [new file with mode: 0644]
examples/particles/affectors/affectors.pro [new file with mode: 0644]
examples/particles/affectors/affectors.qml [new file with mode: 0644]
examples/particles/affectors/affectors.qmlproject [new file with mode: 0644]
examples/particles/affectors/content/age.qml [moved from examples/particles/affectors/age.qml with 97% similarity]
examples/particles/affectors/content/attractor.qml [moved from examples/particles/affectors/attractor.qml with 84% similarity]
examples/particles/affectors/content/customaffector.qml [moved from examples/particles/affectors/customaffector.qml with 93% similarity]
examples/particles/affectors/content/friction.qml [moved from examples/particles/affectors/friction.qml with 90% similarity]
examples/particles/affectors/content/gravity.qml [moved from examples/particles/affectors/gravity.qml with 94% similarity]
examples/particles/affectors/content/groupgoal.qml [moved from examples/particles/affectors/groupgoal.qml with 91% similarity]
examples/particles/affectors/content/move.qml [moved from examples/particles/affectors/move.qml with 94% similarity]
examples/particles/affectors/content/spritegoal.qml [moved from examples/particles/affectors/spritegoal.qml with 92% similarity]
examples/particles/affectors/content/turbulence.qml [moved from examples/particles/affectors/turbulence.qml with 90% similarity]
examples/particles/affectors/content/wander.qml [moved from examples/particles/affectors/wander.qml with 96% similarity]
examples/particles/affectors/main.cpp [new file with mode: 0644]
examples/shared/Button.qml

diff --git a/doc/src/images/qml-affectors-example.png b/doc/src/images/qml-affectors-example.png
new file mode 100644 (file)
index 0000000..748afa6
Binary files /dev/null and b/doc/src/images/qml-affectors-example.png differ
diff --git a/examples/particles/affectors/affectors.pro b/examples/particles/affectors/affectors.pro
new file mode 100644 (file)
index 0000000..52eb0dd
--- /dev/null
@@ -0,0 +1,10 @@
+TEMPLATE = app
+
+QT += quick qml
+SOURCES += main.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/particles/affectors
+qml.files = affectors.qml content
+qml.path = $$[QT_INSTALL_EXAMPLES]/qtdeclarative/particles/affectors
+INSTALLS += target qml
+
diff --git a/examples/particles/affectors/affectors.qml b/examples/particles/affectors/affectors.qml
new file mode 100644 (file)
index 0000000..08f1dfe
--- /dev/null
@@ -0,0 +1,149 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** 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 "../../shared" as Examples
+
+/*!
+    \title QtQuick.Particles Examples - Affectors
+    \example particles/affectors
+    \brief This is a collection of examples using Affectors in the QML particle system.
+    \image qml-affectors-example.png
+
+    This is a collection of small QML examples relating to using Affectors in the particle system.
+    Each example is a small QML file emphasizing a particular element or feature.
+
+    Age demonstrates using an Age affector to prematurely end the lives of particles.
+    \snippet examples/particles/affectors/content/age.qml 0
+
+    As you move the affector around the screen, the particles inside it
+    (which haven't already been affected) jump to a period near the end
+    of their life. This gives them a short period to finish fading out,
+    but changing lifeLeft to 0 (the default), would cause them to reach
+    the end of their life instantly.
+
+    Attractor demonstrates using an Attractor affector to simulate a black hole
+    \snippet examples/particles/affectors/content/attractor.qml 0
+
+    All particles in the scene, including the rocket ship's exhaust and pellets, are pulled
+    towards the black hole. This effect is stronger closer to the black hole, so the
+    asteroids near the top of the screen are barely affected at all, while the ones
+    towards the middle sometimes curve drastically. To complete the effect, an Age
+    affector covers the black hole to destroy particles which come in contact with it.
+
+    Custom Affector manipulates the properties of the particles directly in javascript.
+    One Affector is used to make the leaves rock back and forth as they fall, looking more
+    leaf-like than just spinning in circles:
+    \snippet examples/particles/affectors/content/customaffector.qml 0
+    Another is used to provide a slightly varying friction to the leaves as they 'land',
+    to look more natural:
+    \snippet examples/particles/affectors/content/customaffector.qml 1
+
+    Friction is similar to the falling leaves in the custom affector, except that it uses a
+    flat friction the whole way down instead of custom affectors.
+    \snippet examples/particles/affectors/content/friction.qml 0
+
+    Gravity is a convenience affector for applying a constant acceleration to particles inside it
+    \snippet examples/particles/affectors/content/gravity.qml 0
+
+    GroupGoal sets up two particle groups for flaming and non-flaming balls, and gives you various
+    ways to transition between them.
+    \snippet examples/particles/affectors/content/groupgoal.qml unlit
+    The non-flaming balls have a one in a hundred chance of lighting on their own each second, but they also
+    have a GroupGoal set on the whole group. This affector affects all particles of the unlit group, when colliding
+    with particles in the lit group, and cause them to move to the lighting group.
+    \snippet examples/particles/affectors/content/groupgoal.qml lighting
+    lighting is an intermediate group so that the glow builds up and the transition is less jarring. So it automatically
+    moves into the lit group after 100ms.
+    \snippet examples/particles/affectors/content/groupgoal.qml lit
+    The lit group also has TrailEmitters on it for additional fire and smoke, but does not transition anywhere.
+    There are two more GroupGoal elements that allow particles in the unlit group to transition to the lighting group
+    (and then to the lit group).
+    \snippet examples/particles/affectors/content/groupgoal.qml groupgoal-pilot
+    The first is just an area bound to the location of an image of a pilot flame. When unlit balls pass through the flame,
+    they go straight to lit because the pilot flame is so hot.
+    \snippet examples/particles/affectors/content/groupgoal.qml groupgoal-ma
+    The second is bound to the location of the last pointer interaction, so that touching or clicking on unlit balls (which
+    is hard due to their constant movement) causes them to move to the lighting group.
+
+    Move shows some simple effects you can get by altering trajectory midway.
+    The red particles have an affector that affects their position, jumping them forwards by 120px.
+    \snippet examples/particles/affectors/content/move.qml A
+    The green particles have an affector that affects their velocity, but with some angle variation. By adding some random direction
+    velocity to their existing forwards velocity, they begin to spray off in a cone.
+    \snippet examples/particles/affectors/content/move.qml B
+    The blue particles have an affector that affects their acceleration, and because it sets relative to false this resets the acceleration instead of
+    adding to it. Once the blue particles reach the affector, their horizontal velocity stops increasing as their vertical velocity decreases.
+    \snippet examples/particles/affectors/content/move.qml C
+
+    SpriteGoal has an affector which interacts with the sprite engine of particles, if they are being drawn as sprites by ImageParticle.
+    \snippet examples/particles/affectors/content/spritegoal.qml 0
+    The SpriteGoal follows the image of the rocket ship on screen, and when it interacts with particles drawn by ImageParticle as sprites,
+    it instructs them to move immediately to the "explode" state, which in this case is the animation of the asteroid breaking into many pieces.
+
+    Turbulence has a flame with smoke, and both sets of particles being affected by a Turbulence affector. This gives a faint wind effect.
+    \snippet examples/particles/affectors/content/turbulence.qml 0
+    To make the wind change direction, subsitute a black and white noise image in the noiseSource parameter (it currently uses a default noise source).
+
+    Wander uses a Wander affector to add some horizontal drift to snowflakes as they fall down.
+    \snippet examples/particles/affectors/content/wander.qml 0
+    There are different movements given by applying the Wander to different attributes of the trajectory, so the example makes it easy to play around and see the difference.
+*/
+
+Item {
+    height: 480
+    width: 320
+    Examples.LauncherList {
+        id: ll
+        anchors.fill: parent
+        Component.onCompleted: {
+            addExample("Age", "Kills off particles that enter the affector",  Qt.resolvedUrl("content/age.qml"));
+            addExample("Attractor", "Simulates a small black hole", Qt.resolvedUrl("content/attractor.qml"));
+            addExample("Custom Affector", "Custom falling leaves", Qt.resolvedUrl("content/customaffector.qml"));
+            addExample("Friction", "Leaves that slow down as they fall", Qt.resolvedUrl("content/friction.qml"));
+            addExample("Gravity", "Leaves that fall towards the earth as you move it", Qt.resolvedUrl("content/gravity.qml"));
+            addExample("GroupGoal", "Balls that can be set on fire various ways", Qt.resolvedUrl("content/groupgoal.qml"));
+            addExample("Move", "Some effects you can get by altering trajectory midway", Qt.resolvedUrl("content/move.qml"));
+            addExample("SpriteGoal", "A ship that makes asteroids explode", Qt.resolvedUrl("content/spritegoal.qml"));
+            addExample("Turbulence", "A candle with faint wind", Qt.resolvedUrl("content/turbulence.qml"));
+            addExample("Wander", "Drifting snow flakes", Qt.resolvedUrl("content/wander.qml"));
+        }
+    }
+}
diff --git a/examples/particles/affectors/affectors.qmlproject b/examples/particles/affectors/affectors.qmlproject
new file mode 100644 (file)
index 0000000..2bf3387
--- /dev/null
@@ -0,0 +1,16 @@
+import QmlProject 1.1
+
+Project {
+    mainFile: "affectors.qml"
+
+    /* Include .qml, .js, and image files from current directory and subdirectories */
+    QmlFiles {
+        directory: "."
+    }
+    JavaScriptFiles {
+        directory: "."
+    }
+    ImageFiles {
+        directory: "."
+    }
+}
similarity index 97%
rename from examples/particles/affectors/age.qml
rename to examples/particles/affectors/content/age.qml
index ea1b302..ba52ce2 100644 (file)
@@ -53,7 +53,7 @@ Rectangle {
         system: particles
         sprites: Sprite {
             name: "snow"
-            source: "../images/snowflake.png"
+            source: "../../images/snowflake.png"
             frameCount: 51
             frameDuration: 40
             frameDurationVariation: 8
@@ -86,6 +86,7 @@ Rectangle {
         y: ma.mouseY - 36
         width: 72
         height: 72
+        //! [0]
         Age {
             anchors.fill: parent
             system: particles
@@ -93,5 +94,6 @@ Rectangle {
             lifeLeft: 1200
             advancePosition: false
         }
+        //! [0]
     }
 }
@@ -46,25 +46,10 @@ Rectangle {
     width: 360
     height: 540
     color: "black"
-    property bool spacePressed: false
-    focus: true
     Image {
-        source: "../images/finalfrontier.png"
+        source: "../../images/finalfrontier.png"
         anchors.centerIn:parent
     }
-    Keys.onPressed: {
-        if (event.key == Qt.Key_Space) {
-            spacePressed = true;
-            event.accepted = true;
-        }
-    }
-    Keys.onReleased: {
-        if (event.key == Qt.Key_Space) {
-            spacePressed = false;
-            event.accepted = true;
-        }
-    }
-
     Emitter {
         group: "stars"
         system: particles
@@ -95,7 +80,7 @@ Rectangle {
         id: stars
         groups: ["stars"]
         system: particles
-        source: "../images/star.png"
+        source: "../../images/star.png"
         color: "white"
         colorVariation: 0.1
         alpha: 0
@@ -107,7 +92,7 @@ Rectangle {
         sprites: Sprite {
             id: spinState
             name: "spinning"
-            source: "../images/meteor.png"
+            source: "../../images/meteor.png"
             frameCount: 35
             frameDuration: 60
         }
@@ -116,7 +101,7 @@ Rectangle {
         id: shot
         groups: ["shot"]
         system: particles
-        source: "../images/star.png"
+        source: "../../images/star.png"
 
         color: "#0FF06600"
         colorVariation: 0.3
@@ -125,7 +110,7 @@ Rectangle {
         id: engine
         groups: ["engine"]
         system: particles
-        source: "../images/particle4.png"
+        source: "../../images/particle4.png"
 
         color: "orange"
         SequentialAnimation on color {
@@ -144,12 +129,14 @@ Rectangle {
 
         colorVariation: 0.2
     }
+    //! [0]
     Attractor {
         id: gs; pointX: root.width/2; pointY: root.height/2; strength: 4000000;
         system: particles
         affectedParameter: Attractor.Acceleration
         proportionalToDistance: Attractor.InverseQuadratic
     }
+    //! [0]
     Age {
         system: particles
         x: gs.pointX - 8;
@@ -167,15 +154,20 @@ Rectangle {
     }
 
     Image {
-        source:"../images/rocket2.png"
+        source:"../../images/rocket2.png"
         id: ship
         width: 45
         height: 22
-        MouseArea {
-            id: ma
-            anchors.fill: parent;
-            drag.axis: Drag.XandYAxis
-            drag.target: ship
+        //Automatic movement
+        SequentialAnimation on x {
+            loops: -1
+            NumberAnimation{to: root.width-45; easing.type: Easing.InOutQuad; duration: 2000}
+            NumberAnimation{to: 0; easing.type: Easing.OutInQuad; duration: 6000}
+        }
+        SequentialAnimation on y {
+            loops: -1
+            NumberAnimation{to: root.height-22; easing.type: Easing.OutInQuad; duration: 6000}
+            NumberAnimation{to: 0; easing.type: Easing.InOutQuad; duration: 2000}
         }
     }
     Emitter {
@@ -196,18 +188,12 @@ Rectangle {
         group: "shot"
         system: particles
         emitRate: 32
-        lifeSpan: 2000
-        enabled: spacePressed
+        lifeSpan: 1000
+        enabled: true
         size: 40
         speed: PointDirection { x: 256; }
         x: ship.x + ship.width
         y: ship.y + ship.height/2
     }
-
-    Text {
-        color: "white"
-        anchors.bottom: parent.bottom
-        text:"Drag the ship, Spacebar to fire."
-    }
 }
 
@@ -46,7 +46,7 @@ Item {
     height: 600
 
     Image {
-        source: "../images/backgroundLeaves.jpg"
+        source: "../../images/backgroundLeaves.jpg"
         anchors.fill: parent
     }
     ParticleSystem {
@@ -68,6 +68,7 @@ Item {
         pace: 60
     }
 
+    //! [0]
     Affector {
         system: sys
         property real coefficient: 0.1
@@ -102,10 +103,11 @@ Item {
             }
         }
     }
+    //! [0]
 
+    //! [1]
     Affector {//Custom Friction, adds some 'randomness'
         system: sys
-        //onceOff: true
         x: -60
         width: parent.width + 120
         height: 100
@@ -128,37 +130,38 @@ Item {
             }
         }
     }
+    //! [1]
 
     ImageParticle {
         anchors.fill: parent
         id: particles
         system: sys
         sprites: [Sprite {
-                source: "../images/realLeaf1.png"
+                source: "../../images/realLeaf1.png"
                 frameCount: 1
                 frameDuration: 1
                 to: {"a":1, "b":1, "c":1, "d":1}
             }, Sprite {
                 name: "a"
-                source: "../images/realLeaf1.png"
+                source: "../../images/realLeaf1.png"
                 frameCount: 1
                 frameDuration: 10000
             },
             Sprite {
                 name: "b"
-                source: "../images/realLeaf2.png"
+                source: "../../images/realLeaf2.png"
                 frameCount: 1
                 frameDuration: 10000
             },
             Sprite {
                 name: "c"
-                source: "../images/realLeaf3.png"
+                source: "../../images/realLeaf3.png"
                 frameCount: 1
                 frameDuration: 10000
             },
             Sprite {
                 name: "d"
-                source: "../images/realLeaf4.png"
+                source: "../../images/realLeaf4.png"
                 frameCount: 1
                 frameDuration: 10000
             }
@@ -46,7 +46,7 @@ Item {
     height: 600
 
     Image {
-        source: "../images/backgroundLeaves.jpg"
+        source: "../../images/backgroundLeaves.jpg"
         anchors.fill: parent
     }
     ParticleSystem { id: sys }
@@ -64,31 +64,31 @@ Item {
         id: particles
         system: sys
         sprites: [Sprite {
-                source: "../images/realLeaf1.png"
+                source: "../../images/realLeaf1.png"
                 frameCount: 1
                 frameDuration: 1
                 to: {"a":1, "b":1, "c":1, "d":1}
             }, Sprite {
                 name: "a"
-                source: "../images/realLeaf1.png"
+                source: "../../images/realLeaf1.png"
                 frameCount: 1
                 frameDuration: 10000
             },
             Sprite {
                 name: "b"
-                source: "../images/realLeaf2.png"
+                source: "../../images/realLeaf2.png"
                 frameCount: 1
                 frameDuration: 10000
             },
             Sprite {
                 name: "c"
-                source: "../images/realLeaf3.png"
+                source: "../../images/realLeaf3.png"
                 frameCount: 1
                 frameDuration: 10000
             },
             Sprite {
                 name: "d"
-                source: "../images/realLeaf4.png"
+                source: "../../images/realLeaf4.png"
                 frameCount: 1
                 frameDuration: 10000
             }
@@ -100,10 +100,13 @@ Item {
         y: 20
         z:4
     }
+
+    //! [0]
     Friction {
         anchors.fill: parent
         anchors.margins: -40
         system: sys
         factor: 0.4
     }
+    //! [0]
 }
similarity index 94%
rename from examples/particles/affectors/gravity.qml
rename to examples/particles/affectors/content/gravity.qml
index b90d83e..79debf7 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
-**
+*
 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
 ** Contact: http://www.qt-project.org/
 **
@@ -43,7 +43,7 @@ import QtQuick.Particles 2.0
 
 Item {
     id: window
-    width: 480; height: 480
+    width: 320; height: 480
     Rectangle {
         id: sky
         anchors.fill: parent
@@ -61,10 +61,10 @@ Item {
 
     Rectangle {
         id: ground
-        width: parent.width * 2
+        width: parent.height * 2
         height: parent.height
         y: parent.height/2
-        x: -parent.height/2
+        x: parent.width/2 - parent.height
         transformOrigin: Item.Top
         rotation: 0
         gradient: Gradient {
@@ -82,11 +82,13 @@ Item {
     }
 
     ParticleSystem { id: sys }
+    //! [0]
     Gravity {
         system: sys
         magnitude: 32
         angle: ground.rotation + 90
     }
+    //! [0]
     Emitter {
         system: sys
         anchors.centerIn: parent
@@ -97,7 +99,7 @@ Item {
     ImageParticle {
         anchors.fill: parent
         system: sys
-        source: "../images/realLeaf1.png"
+        source: "../../images/realLeaf1.png"
     }
 
 }
@@ -58,12 +58,13 @@ Rectangle {
     ParticleSystem {
         id: particles
         anchors.fill: parent
+        // ![unlit]
         ParticleGroup {
             name: "unlit"
             duration: 1000
             to: {"lighting":1, "unlit":99}
             ImageParticle {
-                source: "../images/particleA.png"
+                source: "../../images/particleA.png"
                 colorVariation: 0.1
                 color: "#2060160f"
             }
@@ -73,11 +74,15 @@ Rectangle {
                 jump: true
             }
         }
+        // ![unlit]
+        // ![lighting]
         ParticleGroup {
             name: "lighting"
             duration: 100
             to: {"lit":1}
         }
+        // ![lighting]
+        // ![lit]
         ParticleGroup {
             name: "lit"
             duration: 10000
@@ -99,6 +104,7 @@ Rectangle {
             TrailEmitter {
                 id: fireballSmoke
                 group: "smoke"
+        // ![lit]
 
                 emitRatePerParticle: 120
                 lifeSpan: 2000
@@ -118,7 +124,7 @@ Rectangle {
             id: smoke
             anchors.fill: parent
             groups: ["smoke"]
-            source: "../images/particle.png"
+            source: "../../images/particle.png"
             colorVariation: 0
             color: "#00111111"
         }
@@ -126,7 +132,7 @@ Rectangle {
             id: pilot
             anchors.fill: parent
             groups: ["pilot"]
-            source: "../images/particle.png"
+            source: "../../images/particle.png"
             redVariation: 0.01
             blueVariation: 0.4
             color: "#0010004f"
@@ -135,7 +141,7 @@ Rectangle {
             id: flame
             anchors.fill: parent
             groups: ["flame", "lit", "lighting"]
-            source: "../images/particleA.png"
+            source: "../../images/particleA.png"
             colorVariation: 0.1
             color: "#00ff400f"
         }
@@ -162,6 +168,7 @@ Rectangle {
             sizeVariation: 2
             endSize: 0
             speed: PointDirection { y:-100; yVariation: 4; xVariation: 4 }
+            // ![groupgoal-pilot]
             GroupGoal {
                 groups: ["unlit"]
                 goalState: "lit"
@@ -171,9 +178,11 @@ Rectangle {
                 y: -55
                 height: 75
                 width: 30
-                shape: MaskShape {source: "../images/matchmask.png"}
+                shape: MaskShape {source: "../../images/matchmask.png"}
             }
+            // ![groupgoal-pilot]
         }
+        // ![groupgoal-ma]
         //Click to enflame
         GroupGoal {
             groups: ["unlit"]
@@ -185,6 +194,7 @@ Rectangle {
             x: ma.mouseX - width/2
             y: ma.mouseY - height/2
         }
+        // ![groupgoal-ma]
         MouseArea {
             id: ma
             anchors.fill: parent
similarity index 94%
rename from examples/particles/affectors/move.qml
rename to examples/particles/affectors/content/move.qml
index f290173..8ffe8e2 100644 (file)
@@ -50,7 +50,7 @@ Rectangle {
         ImageParticle {
             groups: ["A"]
             anchors.fill: parent
-            source: "../images/star.png"
+            source: "../../images/star.png"
             color:"#FF1010"
             redVariation: 0.8
         }
@@ -66,6 +66,7 @@ Rectangle {
             height: 80
         }
 
+        //! [A]
         Affector {
             groups: ["A"]
             x: 120
@@ -74,11 +75,12 @@ Rectangle {
             once: true
             position: PointDirection { x: 120; }
         }
+        //! [A]
 
         ImageParticle {
             groups: ["B"]
             anchors.fill: parent
-            source: "../images/star.png"
+            source: "../../images/star.png"
             color:"#10FF10"
             greenVariation: 0.8
         }
@@ -95,6 +97,7 @@ Rectangle {
             height: 10
         }
 
+        //! [B]
         Affector {
             groups: ["B"]
             x: 120
@@ -104,11 +107,12 @@ Rectangle {
             once: true
             speed: AngleDirection { angleVariation:360; magnitude: 72 }
         }
+        //! [B]
 
         ImageParticle {
             groups: ["C"]
             anchors.fill: parent
-            source: "../images/star.png"
+            source: "../../images/star.png"
             color:"#1010FF"
             blueVariation: 0.8
         }
@@ -126,6 +130,7 @@ Rectangle {
             height: 80
         }
 
+        //! [C]
         Affector {
             groups: ["C"]
             x: 120
@@ -136,6 +141,7 @@ Rectangle {
             relative: false
             acceleration: PointDirection { y: -80; }
         }
+        //! [C]
 
     }
 }
@@ -52,7 +52,7 @@ Item {
 
     ParticleSystem { id: sys }
     Image {
-        source: "../images/finalfrontier.png"
+        source: "../../images/finalfrontier.png"
         transformOrigin: Item.Center
         anchors.centerIn: parent
         smooth: true
@@ -67,7 +67,7 @@ Item {
     ImageParticle {
         system: sys
         groups: ["starfield"]
-        source: "../images/star.png"
+        source: "../../images/star.png"
         colorVariation: 0.3
         color: "white"
     }
@@ -104,37 +104,39 @@ Item {
         sprites:[Sprite {
                 id: spinState
                 name: "spinning"
-                source: "../images/meteor.png"
+                source: "../../images/meteor.png"
                 frameCount: 35
                 frameDuration: 40
                 randomStart: true
                 to: {"explode":0, "spinning":1}
             },Sprite {
                 name: "explode"
-                source: "../images/_explo.png"
+                source: "../../images/_explo.png"
                 frameCount: 22
                 frameDuration: 40
                 to: {"nullFrame":1}
             },Sprite {//Not sure if this is needed, but seemed easiest
                 name: "nullFrame"
-                source: "../images/nullRock.png"
+                source: "../../images/nullRock.png"
                 frameCount: 1
                 frameDuration: 1000
             }
         ]
     }
+    //! [0]
     SpriteGoal {
         groups: ["meteor"]
         system: sys
         goalState: "explode"
         jump: true
-        anchors.centerIn: holder//A bug in affectors currently isn't compensating for relative x,y. when that's fixed this can just anchors.fill: rocketShip
+        anchors.fill: rocketShip
         width: 60
         height: 60
     }
+    //! [0]
     Image {
         id: rocketShip
-        source: "../images/rocket.png"
+        source: "../../images/rocket.png"
         smooth: true
         anchors.centerIn: holder
         rotation: (circle.percent+0.25) * 360
@@ -170,7 +172,7 @@ Item {
         z:0 
         system: sys
         groups: ["exhaust"]
-        source: "../images/particle4.png"
+        source: "../../images/particle4.png"
 
         color: "orange"
         SequentialAnimation on color {
@@ -42,15 +42,15 @@ import QtQuick 2.0
 import QtQuick.Particles 2.0
 
 Rectangle {
-    width: 360
-    height: 600
+    width: 320
+    height: 480
     color: "#222222"
     id: root
     Image {
-        source: "../images/candle.png"
+        source: "../../images/candle.png"
         anchors.bottom: parent.bottom
         anchors.horizontalCenter: parent.horizontalCenter
-        anchors.bottomMargin: -8
+        anchors.bottomMargin: -60
         anchors.horizontalCenterOffset: 2
     }
     ParticleSystem {
@@ -61,28 +61,31 @@ Rectangle {
         onClicked: turb.enabled = !turb.enabled
     }
 
+    //! [0]
     Turbulence {
         id: turb
         system: ps
         enabled: true
-        height: (parent.height / 2)
-        width: parent.width / 2
+        height: (parent.height / 2) - 4
+        width: parent.width
         x: parent. width / 4
         anchors.fill: parent
         strength: 32
+        NumberAnimation on strength{from: 16; to: 64; easing.type: Easing.InOutBounce; duration: 1800; loops: -1}
     }
+    //! [0]
 
     ImageParticle {
         groups: ["smoke"]
         system: ps
-        source: "../images/particle.png"
+        source: "../../images/particle.png"
         color: "#11111111"
         colorVariation: 0
     }
     ImageParticle {
         groups: ["flame"]
         system: ps
-        source: "../images/particle.png"
+        source: "../../images/particle.png"
         color: "#11ff400f"
         colorVariation: 0.1
     }
@@ -102,7 +105,7 @@ Rectangle {
     TrailEmitter {
         id: smoke1
         width: root.width
-        height: root.height/2 - 20
+        height: root.height/2
         system: ps
         group: "smoke"
         follow: "flame"
@@ -119,7 +122,7 @@ Rectangle {
     TrailEmitter {
         id: smoke2
         width: root.width
-        height: root.height/2 - 40
+        height: root.height/2 - 20
         system: ps
         group: "smoke"
         follow: "flame"
similarity index 96%
rename from examples/particles/affectors/wander.qml
rename to examples/particles/affectors/content/wander.qml
index ea00879..649bfc0 100644 (file)
@@ -40,7 +40,7 @@
 
 import QtQuick 2.0
 import QtQuick.Particles 2.0
-import "../exampleslauncher/content" as UI
+import "../../../shared" as UI //Has a shared UI element
 
 Rectangle {
     width: 360
@@ -50,13 +50,14 @@ Rectangle {
         system: particles
         sprites: Sprite {
             name: "snow"
-            source: "../images/snowflake.png"
+            source: "../../images/snowflake.png"
             frameCount: 51
             frameDuration: 40
             frameDurationVariation: 8
         }
     }
 
+    //! [0]
     Wander { 
         id: wanderer
         system: particles
@@ -64,6 +65,7 @@ Rectangle {
         xVariance: 360/(wanderer.affectedParameter+1);
         pace: 100*(wanderer.affectedParameter+1);
     }
+    //! [0]
 
     Emitter {
         system: particles
diff --git a/examples/particles/affectors/main.cpp b/examples/particles/affectors/main.cpp
new file mode 100644 (file)
index 0000000..a78cb69
--- /dev/null
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** 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$
+**
+****************************************************************************/
+#include "../../shared/shared.h"
+DECLARATIVE_EXAMPLE_MAIN(affectors)
index a899a14..e31b155 100644 (file)
@@ -44,7 +44,7 @@ Item {
     id: container
 
     property string text: "Button"
-    property string subText: "Just a button"
+    property string subText: ""
     signal clicked
 
     width: buttonLabel.width + 20; height: col.height + 12