Implement proper sprite sheet functionality
authorAlan Alpert <alan.alpert@nokia.com>
Wed, 18 Jan 2012 01:15:56 +0000 (11:15 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 27 Jan 2012 05:17:53 +0000 (06:17 +0100)
Uses frameX/frameY from the new Sprite API. You can now specify your
sprites as a single sprite sheet and just specify the offset for
individual animations.

Change-Id: I3a33d8329e6b9d65e5578669388e3115de992803
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
examples/declarative/imageelements/content/Bear0.png [deleted file]
examples/declarative/imageelements/content/Bear1.png [deleted file]
examples/declarative/imageelements/content/Bear2.png [deleted file]
examples/declarative/imageelements/content/Bear3.png [deleted file]
examples/declarative/imageelements/content/BearB.png [deleted file]
examples/declarative/imageelements/content/BearSheet.png [new file with mode: 0644]
examples/declarative/imageelements/spriteimage.qml
src/quick/items/qquicksprite.cpp
src/quick/items/qquicksprite_p.h
src/quick/items/qquickspriteengine.cpp

diff --git a/examples/declarative/imageelements/content/Bear0.png b/examples/declarative/imageelements/content/Bear0.png
deleted file mode 100644 (file)
index 64a02ce..0000000
Binary files a/examples/declarative/imageelements/content/Bear0.png and /dev/null differ
diff --git a/examples/declarative/imageelements/content/Bear1.png b/examples/declarative/imageelements/content/Bear1.png
deleted file mode 100644 (file)
index 3b88f3b..0000000
Binary files a/examples/declarative/imageelements/content/Bear1.png and /dev/null differ
diff --git a/examples/declarative/imageelements/content/Bear2.png b/examples/declarative/imageelements/content/Bear2.png
deleted file mode 100644 (file)
index 337b636..0000000
Binary files a/examples/declarative/imageelements/content/Bear2.png and /dev/null differ
diff --git a/examples/declarative/imageelements/content/Bear3.png b/examples/declarative/imageelements/content/Bear3.png
deleted file mode 100644 (file)
index f0e6859..0000000
Binary files a/examples/declarative/imageelements/content/Bear3.png and /dev/null differ
diff --git a/examples/declarative/imageelements/content/BearB.png b/examples/declarative/imageelements/content/BearB.png
deleted file mode 100644 (file)
index c9a84ae..0000000
Binary files a/examples/declarative/imageelements/content/BearB.png and /dev/null differ
diff --git a/examples/declarative/imageelements/content/BearSheet.png b/examples/declarative/imageelements/content/BearSheet.png
new file mode 100644 (file)
index 0000000..a084bf0
Binary files /dev/null and b/examples/declarative/imageelements/content/BearSheet.png differ
index bace7ef..d64589a 100644 (file)
@@ -62,7 +62,7 @@ Item {
         goalSprite: ""
         Sprite{
             name: "still"
-            source: "content/Bear0.png"
+            source: "content/BearSheet.png"
             frames: 1
             frameWidth: 256
             frameHeight: 256
@@ -71,8 +71,10 @@ Item {
         }
         Sprite{
             name: "blink"
-            source: "content/BearB.png"
+            source: "content/BearSheet.png"
             frames: 3
+            frameX: 256
+            frameY: 1536
             frameWidth: 256
             frameHeight: 256
             frameDuration: 100
@@ -80,8 +82,10 @@ Item {
         }
         Sprite{
             name: "floating"
-            source: "content/Bear1.png"
+            source: "content/BearSheet.png"
             frames: 9
+            frameX: 0
+            frameY: 0
             frameWidth: 256
             frameHeight: 256
             frameDuration: 160
@@ -89,8 +93,10 @@ Item {
         }
         Sprite{
             name: "flailing"
-            source: "content/Bear2.png"
+            source: "content/BearSheet.png"
             frames: 8
+            frameX: 0
+            frameY: 768
             frameWidth: 256
             frameHeight: 256
             frameDuration: 160
@@ -98,8 +104,9 @@ Item {
         }
         Sprite{
             name: "falling"
-            source: "content/Bear3.png"
+            source: "content/BearSheet.png"
             frames: 5
+            frameY: 1280
             frameWidth: 256
             frameHeight: 256
             frameDuration: 160
index 8b5369d..fc7f089 100644 (file)
@@ -191,6 +191,7 @@ QQuickSprite::QQuickSprite(QObject *parent)
     , m_generatedCount(0)
     , m_framesPerRow(0)
     , m_rowY(0)
+    , m_rowStartX(0)
     , m_reverse(false)
     , m_frameHeight(0)
     , m_frameWidth(0)
index 6aab74f..2ec2380 100644 (file)
@@ -280,6 +280,7 @@ private:
     int m_generatedCount;
     int m_framesPerRow;
     int m_rowY;
+    int m_rowStartX;
 
     QUrl m_source;
     bool m_reverse;
index 470aa6d..42904b2 100644 (file)
@@ -322,13 +322,14 @@ QImage QQuickSpriteEngine::assembledImage()
         if (img.height() == frameHeight && img.width() <  maxSize){//Simple case
             p.drawImage(0,y,img);
             state->m_rowY = y;
+            state->m_rowStartX = state->m_frameX;//In case it was offset, but we took the simple route of not chopping out the other bits
             y += frameHeight;
         }else{//Chopping up image case
             state->m_framesPerRow = image.width()/frameWidth;
             state->m_rowY = y;
             int x = 0;
-            int curX = 0;
-            int curY = 0;
+            int curX = state->m_frameX;
+            int curY = state->m_frameY;
             int framesLeft = state->frames();
             while (framesLeft > 0){
                 if (image.width() - x + curX <= img.width()){//finish a row in image (dest)