From b916b030e1db278bca84189cfe5cbf450d7aa29b Mon Sep 17 00:00:00 2001
From: Alan Alpert <alan.alpert@nokia.com>
Date: Fri, 11 May 2012 19:38:49 +1000
Subject: [PATCH] Flesh out the sprite documentation

Task-number: QTBUG-24770

Change-Id: I40c46aa29ffdcc5899bece46c4b6227ca29695cd
Reviewed-by: Martin Jones <martin.jones@nokia.com>
---
 src/particles/qquickimageparticle.cpp      |   2 +
 src/quick/doc/images/spritecutting.png     | Bin 0 -> 8946 bytes
 src/quick/doc/images/spriteenginegraph.png | Bin 0 -> 22478 bytes
 src/quick/doc/src/elements.qdoc            |   4 +-
 src/quick/doc/src/sprites.qdoc             | 176 +++++++++++++++++++++
 src/quick/items/qquickanimatedsprite.cpp   |   8 +
 src/quick/items/qquicksprite.cpp           |  11 +-
 src/quick/items/qquickspritesequence.cpp   |   4 +
 8 files changed, 194 insertions(+), 11 deletions(-)
 create mode 100644 src/quick/doc/images/spritecutting.png
 create mode 100644 src/quick/doc/images/spriteenginegraph.png
 create mode 100644 src/quick/doc/src/sprites.qdoc

diff --git a/src/particles/qquickimageparticle.cpp b/src/particles/qquickimageparticle.cpp
index c0b0e8e739..80420ee4c2 100644
--- a/src/particles/qquickimageparticle.cpp
+++ b/src/particles/qquickimageparticle.cpp
@@ -625,6 +625,8 @@ void fillUniformArrayFromImage(float* array, const QImage& img, int size)
 
     Note that the sprite image will be scaled to a square based on the size of
     the particle being rendered.
+
+    For full details, see the \l{Sprite Animation} overview.
 */
 /*!
     \qmlproperty url QtQuick.Particles2::ImageParticle::colorTable
diff --git a/src/quick/doc/images/spritecutting.png b/src/quick/doc/images/spritecutting.png
new file mode 100644
index 0000000000000000000000000000000000000000..1958ee222d1ff2939313bdfedfd708183f307e2d
GIT binary patch
literal 8946
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

literal 0
HcmV?d00001

diff --git a/src/quick/doc/images/spriteenginegraph.png b/src/quick/doc/images/spriteenginegraph.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef09df43ef1b70b1ac0922f5b7b81e998f42109b
GIT binary patch
literal 22478
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
Vr(?aD3h;nl22WQ%mvv4FO#l|jgZcmf

literal 0
HcmV?d00001

diff --git a/src/quick/doc/src/elements.qdoc b/src/quick/doc/src/elements.qdoc
index 63fcd1aa29..40533867df 100644
--- a/src/quick/doc/src/elements.qdoc
+++ b/src/quick/doc/src/elements.qdoc
@@ -50,11 +50,13 @@ two elements.
 \li \l {Rectangle} - A rectangle element
 \li \l {Image} - For incorporating bitmaps into a scene
 \li \l {BorderImage} - Allows the use of images as borders
-\li \l {AnimatedImage} - For playing animations stored in a series of frames
+\li \l {AnimatedSprite} - For playing animations stored as a series of frames
+\li \l {AnimatedImage} - For playing animations stored as an animated GIF
 \li \l {Gradient} - For defining a color gradient
 \li \l {GradientStop} - Used to define a color within a \l {Gradient}
 \li \l {SystemPalette} - Provides access to the Qt palettes
 \li \l {Canvas} - Provides a 2D canvas element
+\li \l {SpriteSequence} - For playing and transitioning between multiple animations stored as a series of frames
 \endlist
 
 \section1 Text Handling
diff --git a/src/quick/doc/src/sprites.qdoc b/src/quick/doc/src/sprites.qdoc
new file mode 100644
index 0000000000..e59b30855e
--- /dev/null
+++ b/src/quick/doc/src/sprites.qdoc
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** GNU Free Documentation License
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms
+** and conditions contained in a signed written agreement between you
+** and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+\page qtquick-spriteengine.html
+\ingroup qml-features
+\title Sprite Animations
+\brief Sprite-based animations with flexible transitioning
+
+\section1 Sprite Engine
+
+The QtQuick sprite engine is a stochastic state machine combined with the ability
+to chop up images containing multiple frames of an animation.
+
+\section2 State Machine
+
+A primary function of the sprite engine is its internal state machine. This is not the same as
+the states and transitions in Qt Quick, and is more like a conventional state machine. Sprites
+can have weighted transitions to other sprites, or back to themselves. When a sprite animation
+finishes, the sprite engine will choose the next sprite randomly, based on the weighted transitions
+available for the sprite that just finished.
+
+You can affect the currently playing sprite in two ways. You can arbitrarily force it to immediately
+start playing any sprite, or you can tell it to gradually transition to a given sprite. If you
+instruct it to gradually transition, then it will reach the target sprite by going through valid
+state transitions using the fewest number of intervening sprites (but ignoring relative weightings).
+This allows you to easily insert a transitional animation between two different sprites.
+
+\image spriteenginegraph.png
+
+As an example, consider the above diagram which illustrates the sprites for a hypothetical 2D
+platform game character. The character starts by displaying the standing state. From this state,
+barring external input, he will transition to either the waiting animation, the walking animation,
+or play the standing animation again. Because the weights for those transitions are one, zero and three
+respectively, he has a one in four chance of playing the waiting animation when the standing animation
+finishes, and a three in four chance of playing the standing animation again. This allows for a character
+who has a slightly animated and variable behavior while waiting.
+
+Because there is a zero weight transition to the walking animation, the standing animation will not normally
+transition there. But if you set the goal animation to be the walking animation, it would play the walking
+animation when it finished the standing animation. If it was previously in the waiting animation, it would
+finish playing that, then play the standing animation, then play the walking animation. It would then continue to
+play the walking animation until the goal animation is unset, at which point it would switch to the standing
+animation after finishing the walking animation.
+
+If you set the goal state then to the jumping animation, it would finish the walking animation before
+playing the jumping animation. Because the jumping animation does not transition to other states, it will still
+keep playing the jumping animation until the state is forced to change. In this example, you could set it back to
+walking and change to goal animation to walking or to nothing (which would lead it to play the standing animation
+after the walking animation). Note that by forcibly setting the animation, you can start playing the animation
+immediately.
+
+\section2 Input Format
+
+The file formats accepted by the sprite engine is the same as the file formats accepted by other QML elements,
+such as \l Image. In order to animate the image however, the sprite engine requires the image file to contain
+all of the frames of the animation. They should be arranged in a contiguous line, which may wrap from the right
+edge of the file to a lower row starting from the left edge of the file (and which is placed directly below the
+previous row).
+
+\image spritecutting.png
+
+As an example, take the above image. For now just consider the black numbers, and assume the squares are 40x40 pixels.
+Normally, the image is read from the top-left corner. If you specified the frame size as 40x40 pixels, and a frame count
+of 8, then it would read in the frames as they are numbered. The frame in the top left would be the first frame, the frame
+in the top right would be the fifth frame, and then it would wrap to the next row (at pixel location 0,40 in the file) to read
+the sixth frame. It would stop reading after the frame marked 8, and if there was any image data in the square below frame four
+then it would not be included in the animation.
+
+It is possible to load animations from an arbitrary offset, but they will still follow the same pattern.
+Consider now the red numbers. If we specify that the animation begins at pixel location 120,0, with a
+frame count of 5 and the same frame size as before, then it will load the frames as they are numbered in red.
+The first 120x40 of the image will not be used, as it starts reading 40x40 blocks from the location of 120,0.
+When it reaches the end of the file at 160,0, it then starts to read the next row from 0,40.
+
+The blue numbers show the frame numbers if you tried to load two frames of that size, starting from 40,40. Note
+that it is possible to load multiple sprites out of the one image file. The red, blue and black numbers can all
+be loaded as separate animations to the same sprite engine. The following code loads the animations as per the image.
+It also specifies that animations are to played at 20 frames per second.
+
+\code
+Sprite {
+    name: "black"
+    source: "image.png"
+    frameCount: 8
+    frameWidth: 40
+    frameHeight: 40
+    frameRate: 20
+}
+Sprite {
+    name: "red"
+    source: "image.png"
+    frameX: 120
+    frameCount: 5
+    frameWidth: 40
+    frameHeight: 40
+    frameRate: 20
+}
+Sprite {
+    name: "blue"
+    source: "image.png"
+    frameX: 40
+    frameX: 40
+    frameCount: 2
+    frameWidth: 40
+    frameHeight: 40
+    frameRate: 20
+}
+\endcode
+
+Frames within one animation must be the same size, however multiple animations within the same file
+do not. Sprites without a frameCount specified assume that they take the entire file, and you must specify
+the frame size. Sprites without a frame size assume that they are square and take the entire file without wrapping,
+and you must specify a frame count.
+
+The sprite engine internally copies and cuts up images to fit in an easier to read internal format, which leads
+to some graphics memory limitations. Because it requires all the sprites for a single engine to be in the same
+texture, attempting to load many different animations can run into texture memory limits on embedded devices. In
+these situations, a warning will be output to the console containing the maximum texture size.
+
+There are several software tools to help turn images into sprite sheets, here are some examples:
+Photoshop plugin:
+http://www.personal.psu.edu/zez1/blogs/my_blog/2011/05/scripts-4-photoshop-file-sequence-to-layers-to-sprite-sheet.html
+Gimp plugin:
+http://registry.gimp.org/node/20943
+Cmd-line tool:
+http://www.imagemagick.org/script/montage.php
+
+
+\section2 Elements Using the Sprite Engine
+
+Sprites for the sprite engine can be defined using the \l Sprite element. This element includes the input parameters
+as well as the length of the animation and weighted transitions to other animations. It is purely a data class, and
+does not render anything.
+
+\l SpriteSequence is an element which uses a sprite engine to draw the sprites defined in it. It is a single and
+self-contained sprite engine, and does not interact with other sprite engines. \l Sprite elements can be shared between
+sprite engine using elements, but this is not done automatically. So if you have defined a sprite in one \l SpriteSequence
+you will need to redefine it (or reference the same \l Sprite element) in the sprites property of another \l SpriteSequence
+in order to transition to that animation.
+
+Additionally, \l ImageParticle can use \l Sprite elements to define sprites for each particle. This is again a single
+sprite engine per element. This works similarly to SpriteSequence, but it also has the parametrized variability provided
+by the \l ImageParticle element.
+
+\section1 AnimatedSprite
+
+For use-cases which do not need to transition between animations, consider the \l AnimatedSprite element.
+This element displays sprite animations with the same input format, but only one at a time. It also provides more fine-grained
+manual control, as there is no sprite engine managing the timing and transitions behind the scenes.
+
+*/
diff --git a/src/quick/items/qquickanimatedsprite.cpp b/src/quick/items/qquickanimatedsprite.cpp
index 204900177c..a5e5d99bcd 100644
--- a/src/quick/items/qquickanimatedsprite.cpp
+++ b/src/quick/items/qquickanimatedsprite.cpp
@@ -215,6 +215,14 @@ struct AnimatedSpriteVertices {
     \inqmlmodule QtQuick 2
     \inherits Item
     \brief The AnimatedSprite element draws a sprite animation
+
+    AnimatedSprite provides rendering and control over animations which are provided
+    as multiple frames in the same image file. You can play it at a fixed speed, at the
+    frame rate of your display, or manually advance and control the progress.
+
+    For details of how a sprite animation is defined see the \l{Sprite Animation} overview.
+    Note that the AnimatedSprite element does not use Sprite elements to define multiple animations,
+    but instead encapsulates a single animation itself.
 */
 
 /*!
diff --git a/src/quick/items/qquicksprite.cpp b/src/quick/items/qquicksprite.cpp
index 724bf8fef1..8b77d23270 100644
--- a/src/quick/items/qquicksprite.cpp
+++ b/src/quick/items/qquicksprite.cpp
@@ -54,16 +54,7 @@ QT_BEGIN_NAMESPACE
     can be in the middle of an image file, or split along multiple rows, as long as they form
     a contiguous line wrapping to the next row of the file from the left edge of the file.
 
-    Sprites within one animation must be the same size, however sprites within the same file
-    do not. Sprites without a frameCount specified assume that they take the entire file.
-
-    There are several software tools to help turn images into sprite sheets, here are some examples:
-    Photoshop plugin:
-    http://www.personal.psu.edu/zez1/blogs/my_blog/2011/05/scripts-4-photoshop-file-sequence-to-layers-to-sprite-sheet.html
-    Gimp plugin:
-    http://registry.gimp.org/node/20943
-    Cmd-line tool:
-    http://www.imagemagick.org/script/montage.php
+    For full details, see the \l{Sprite Animation} overview.
 */
 /*!
     \qmlproperty int QtQuick2::Sprite::duration
diff --git a/src/quick/items/qquickspritesequence.cpp b/src/quick/items/qquickspritesequence.cpp
index 80dad16fe3..7f7d1ccecb 100644
--- a/src/quick/items/qquickspritesequence.cpp
+++ b/src/quick/items/qquickspritesequence.cpp
@@ -215,6 +215,10 @@ struct SpriteVertices {
     \inherits Item
     \brief The SpriteSequence element draws a sprite animation
 
+    SpriteSequence renders and controls a list of animations defined
+    by \l Sprite elements.
+
+    For full details, see the \l{Sprite Animation} overview.
 */
 /*!
     \qmlproperty bool QtQuick2::SpriteSequence::running
-- 
GitLab