[aseprite] 121/134: Fix get_cels_in_range() when range type != DocumentRange::kCels

Tobias Hansen thansen at moszumanska.debian.org
Sat Mar 14 17:10:16 UTC 2015


This is an automated email from the git hooks/post-receive script.

thansen pushed a commit to branch master
in repository aseprite.

commit 77c2fb57a71d0fc9af7af13ca0e1ff7c3c405dd0
Author: David Capello <davidcapello at gmail.com>
Date:   Thu Jan 29 12:08:29 2015 -0300

    Fix get_cels_in_range() when range type != DocumentRange::kCels
---
 src/app/ui/editor/moving_cel_state.cpp |  8 ++++++--
 src/app/util/range_utils.cpp           | 21 ++++++++++++++++++---
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/app/ui/editor/moving_cel_state.cpp b/src/app/ui/editor/moving_cel_state.cpp
index 72a7bd6..15e9e2c 100644
--- a/src/app/ui/editor/moving_cel_state.cpp
+++ b/src/app/ui/editor/moving_cel_state.cpp
@@ -101,8 +101,12 @@ bool MovingCelState::onMouseUp(Editor* editor, MouseMessage* msg)
 
       DocumentRange range = App::instance()->getMainWindow()->getTimeline()->range();
       if (range.enabled()) {
-        for (Cel* cel : get_cels_in_range(writer.sprite(), range))
-          api.setCelPosition(writer.sprite(), cel, cel->x()+deltaX, cel->y()+deltaY);
+        for (Cel* cel : get_cels_in_range(writer.sprite(), range)) {
+          Layer* layer = cel->layer();
+          ASSERT(layer);
+          if (layer && layer->isMoveable() && !layer->isBackground())
+            api.setCelPosition(writer.sprite(), cel, cel->x()+deltaX, cel->y()+deltaY);
+        }
       }
       else if (m_cel) {
         api.setCelPosition(writer.sprite(), m_cel, m_celNewX, m_celNewY);
diff --git a/src/app/util/range_utils.cpp b/src/app/util/range_utils.cpp
index 771e3e5..296b371 100644
--- a/src/app/util/range_utils.cpp
+++ b/src/app/util/range_utils.cpp
@@ -31,17 +31,32 @@ namespace app {
 using namespace raster;
 
 // TODO the DocumentRange should be "iteratable" to replace this function
-CelList get_cels_in_range(Sprite* sprite, const DocumentRange& range)
+CelList get_cels_in_range(Sprite* sprite, const DocumentRange& inrange)
 {
+  DocumentRange range = inrange;
   CelList cels;
 
+  switch (range.type()) {
+    case DocumentRange::kNone:
+      return cels;
+    case DocumentRange::kCels:
+      break;
+    case DocumentRange::kFrames:
+      range.startRange(LayerIndex(0), inrange.frameBegin(), DocumentRange::kCels);
+      range.endRange(LayerIndex(sprite->countLayers()-1), inrange.frameEnd());
+      break;
+    case DocumentRange::kLayers:
+      range.startRange(inrange.layerBegin(), FrameNumber(0), DocumentRange::kCels);
+      range.endRange(inrange.layerEnd(), sprite->lastFrame());
+      break;
+  }
+
   for (LayerIndex layerIdx = range.layerBegin(); layerIdx <= range.layerEnd(); ++layerIdx) {
     Layer* layer = sprite->indexToLayer(layerIdx);
-    if (!layer->isImage())
+    if (!layer || !layer->isImage())
       continue;
 
     LayerImage* layerImage = static_cast<LayerImage*>(layer);
-
     for (FrameNumber frame = range.frameEnd(),
            begin = range.frameBegin().previous();
          frame != begin;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git



More information about the Pkg-games-commits mailing list