Rename DocumentRange -> DocRange

This commit is contained in:
David Capello 2018-07-07 10:07:21 -03:00
parent 432094f432
commit d00fc99138
31 changed files with 386 additions and 386 deletions

View File

@ -497,13 +497,13 @@ add_library(app-lib
context.cpp context.cpp
context_flags.cpp context_flags.cpp
doc_api.cpp doc_api.cpp
doc_range.cpp
doc_range_ops.cpp
doc_undo.cpp doc_undo.cpp
docs.cpp docs.cpp
document.cpp document.cpp
document_diff.cpp document_diff.cpp
document_exporter.cpp document_exporter.cpp
document_range.cpp
document_range_ops.cpp
extensions.cpp extensions.cpp
extra_cel.cpp extra_cel.cpp
file/file.cpp file/file.cpp

View File

@ -30,7 +30,7 @@ CmdTransaction::CmdTransaction(const std::string& label,
{ {
} }
void CmdTransaction::setNewDocumentRange(const DocumentRange& range) void CmdTransaction::setNewDocRange(const DocRange& range)
{ {
#ifdef ENABLE_UI #ifdef ENABLE_UI
if (m_ranges) if (m_ranges)
@ -47,7 +47,7 @@ void CmdTransaction::commit()
// commit/command (on Timeline::onAfterCommandExecution). // commit/command (on Timeline::onAfterCommandExecution).
// //
// So m_ranges->m_after is captured explicitly in // So m_ranges->m_after is captured explicitly in
// setNewDocumentRange(). // setNewDocRange().
} }
std::istream* CmdTransaction::documentRangeBeforeExecute() const std::istream* CmdTransaction::documentRangeBeforeExecute() const
@ -78,9 +78,9 @@ void CmdTransaction::onExecute()
// very beginning, just to save the current sprite position. // very beginning, just to save the current sprite position.
m_spritePositionBefore = calcSpritePosition(); m_spritePositionBefore = calcSpritePosition();
#ifdef ENABLE_UI #ifdef ENABLE_UI
if (isDocumentRangeEnabled()) { if (isDocRangeEnabled()) {
m_ranges.reset(new Ranges); m_ranges.reset(new Ranges);
calcDocumentRange().write(m_ranges->m_before); calcDocRange().write(m_ranges->m_before);
} }
#endif #endif
@ -125,7 +125,7 @@ SpritePosition CmdTransaction::calcSpritePosition() const
return SpritePosition(site.layer(), site.frame()); return SpritePosition(site.layer(), site.frame());
} }
bool CmdTransaction::isDocumentRangeEnabled() const bool CmdTransaction::isDocRangeEnabled() const
{ {
#ifdef ENABLE_UI #ifdef ENABLE_UI
if (App::instance()) { if (App::instance()) {
@ -137,11 +137,11 @@ bool CmdTransaction::isDocumentRangeEnabled() const
return false; return false;
} }
DocumentRange CmdTransaction::calcDocumentRange() const DocRange CmdTransaction::calcDocRange() const
{ {
#ifdef ENABLE_UI #ifdef ENABLE_UI
// TODO We cannot use Context::activeSite() because it losts // TODO We cannot use Context::activeSite() because it losts
// important information about the DocumentRange() (type and // important information about the DocRange() (type and
// flags). // flags).
if (App::instance()) { if (App::instance()) {
Timeline* timeline = App::instance()->timeline(); Timeline* timeline = App::instance()->timeline();
@ -149,7 +149,7 @@ DocumentRange CmdTransaction::calcDocumentRange() const
return timeline->range(); return timeline->range();
} }
#endif #endif
return DocumentRange(); return DocRange();
} }
} // namespace app } // namespace app

View File

@ -9,7 +9,7 @@
#pragma once #pragma once
#include "app/cmd_sequence.h" #include "app/cmd_sequence.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/sprite_position.h" #include "app/sprite_position.h"
#include <memory> #include <memory>
@ -24,7 +24,7 @@ namespace app {
CmdTransaction(const std::string& label, CmdTransaction(const std::string& label,
bool changeSavedState, int* savedCounter); bool changeSavedState, int* savedCounter);
void setNewDocumentRange(const DocumentRange& range); void setNewDocRange(const DocRange& range);
void commit(); void commit();
SpritePosition spritePositionBeforeExecute() const { return m_spritePositionBefore; } SpritePosition spritePositionBeforeExecute() const { return m_spritePositionBefore; }
@ -42,8 +42,8 @@ namespace app {
private: private:
SpritePosition calcSpritePosition() const; SpritePosition calcSpritePosition() const;
bool isDocumentRangeEnabled() const; bool isDocRangeEnabled() const;
DocumentRange calcDocumentRange() const; DocRange calcDocRange() const;
struct Ranges { struct Ranges {
std::stringstream m_before; std::stringstream m_before;

View File

@ -15,7 +15,7 @@
#include "app/console.h" #include "app/console.h"
#include "app/context_access.h" #include "app/context_access.h"
#include "app/doc_event.h" #include "app/doc_event.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/modules/gui.h" #include "app/modules/gui.h"
#include "app/transaction.h" #include "app/transaction.h"
#include "app/ui/timeline/timeline.h" #include "app/ui/timeline/timeline.h"
@ -169,11 +169,11 @@ private:
ContextWriter writer(UIContext::instance()); ContextWriter writer(UIContext::instance());
Transaction transaction(writer.context(), "Set Cel Properties"); Transaction transaction(writer.context(), "Set Cel Properties");
DocumentRange range; DocRange range;
if (m_range.enabled()) if (m_range.enabled())
range = m_range; range = m_range;
else { else {
range.startRange(m_cel->layer(), m_cel->frame(), DocumentRange::kCels); range.startRange(m_cel->layer(), m_cel->frame(), DocRange::kCels);
range.endRange(m_cel->layer(), m_cel->frame()); range.endRange(m_cel->layer(), m_cel->frame());
} }
@ -264,7 +264,7 @@ private:
Timer m_timer; Timer m_timer;
Document* m_document; Document* m_document;
Cel* m_cel; Cel* m_cel;
DocumentRange m_range; DocRange m_range;
bool m_selfUpdate; bool m_selfUpdate;
UserData m_userData; UserData m_userData;
bool m_newUserData; bool m_newUserData;

View File

@ -1,5 +1,5 @@
// Aseprite // Aseprite
// Copyright (C) 2001-2017 David Capello // Copyright (C) 2001-2018 David Capello
// //
// This program is distributed under the terms of // This program is distributed under the terms of
// the End-User License Agreement for Aseprite. // the End-User License Agreement for Aseprite.
@ -19,7 +19,7 @@
#include "app/commands/params.h" #include "app/commands/params.h"
#include "app/context_access.h" #include "app/context_access.h"
#include "app/doc_api.h" #include "app/doc_api.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/i18n/strings.h" #include "app/i18n/strings.h"
#include "app/modules/gui.h" #include "app/modules/gui.h"
#include "app/transaction.h" #include "app/transaction.h"

View File

@ -225,11 +225,11 @@ private:
ContextWriter writer(UIContext::instance()); ContextWriter writer(UIContext::instance());
Transaction transaction(writer.context(), "Set Layer Properties"); Transaction transaction(writer.context(), "Set Layer Properties");
DocumentRange range; DocRange range;
if (m_range.enabled()) if (m_range.enabled())
range = m_range; range = m_range;
else { else {
range.startRange(m_layer, -1, DocumentRange::kLayers); range.startRange(m_layer, -1, DocRange::kLayers);
range.endRange(m_layer, -1); range.endRange(m_layer, -1);
} }
@ -347,7 +347,7 @@ private:
Timer m_timer; Timer m_timer;
Document* m_document; Document* m_document;
Layer* m_layer; Layer* m_layer;
DocumentRange m_range; DocRange m_range;
bool m_selfUpdate; bool m_selfUpdate;
UserData m_userData; UserData m_userData;
}; };

View File

@ -1,5 +1,5 @@
// Aseprite // Aseprite
// Copyright (C) 2001-2017 David Capello // Copyright (C) 2001-2018 David Capello
// //
// This program is distributed under the terms of // This program is distributed under the terms of
// the End-User License Agreement for Aseprite. // the End-User License Agreement for Aseprite.
@ -113,7 +113,7 @@ void NewFrameCommand::onExecute(Context* context)
auto timeline = App::instance()->timeline(); auto timeline = App::instance()->timeline();
timeline->prepareToMoveRange(); timeline->prepareToMoveRange();
DocumentRange range = timeline->range(); DocRange range = timeline->range();
SelectedLayers selLayers; SelectedLayers selLayers;
if (site->inFrames()) if (site->inFrames())

View File

@ -1,5 +1,5 @@
// Aseprite // Aseprite
// Copyright (C) 2001-2017 David Capello // Copyright (C) 2001-2018 David Capello
// //
// This program is distributed under the terms of // This program is distributed under the terms of
// the End-User License Agreement for Aseprite. // the End-User License Agreement for Aseprite.
@ -54,8 +54,8 @@ void NewFrameTagCommand::onExecute(Context* context)
auto range = App::instance()->timeline()->range(); auto range = App::instance()->timeline()->range();
if (range.enabled() && if (range.enabled() &&
(range.type() == DocumentRange::kFrames || (range.type() == DocRange::kFrames ||
range.type() == DocumentRange::kCels)) { range.type() == DocRange::kCels)) {
from = range.selectedFrames().firstFrame(); from = range.selectedFrames().firstFrame();
to = range.selectedFrames().lastFrame(); to = range.selectedFrames().lastFrame();
} }

View File

@ -1,5 +1,5 @@
// Aseprite // Aseprite
// Copyright (C) 2001-2017 David Capello // Copyright (C) 2001-2018 David Capello
// //
// This program is distributed under the terms of // This program is distributed under the terms of
// the End-User License Agreement for Aseprite. // the End-User License Agreement for Aseprite.
@ -11,9 +11,9 @@
#include "app/app.h" #include "app/app.h"
#include "app/commands/command.h" #include "app/commands/command.h"
#include "app/context_access.h" #include "app/context_access.h"
#include "app/doc_range_ops.h"
#include "app/modules/gui.h" #include "app/modules/gui.h"
#include "app/ui/timeline/timeline.h" #include "app/ui/timeline/timeline.h"
#include "app/document_range_ops.h"
namespace app { namespace app {

View File

@ -1,5 +1,5 @@
// Aseprite // Aseprite
// Copyright (C) 2001-2017 David Capello // Copyright (C) 2001-2018 David Capello
// //
// This program is distributed under the terms of // This program is distributed under the terms of
// the End-User License Agreement for Aseprite. // the End-User License Agreement for Aseprite.
@ -14,7 +14,7 @@
#include "app/commands/params.h" #include "app/commands/params.h"
#include "app/context_access.h" #include "app/context_access.h"
#include "app/doc_api.h" #include "app/doc_api.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/i18n/strings.h" #include "app/i18n/strings.h"
#include "app/modules/editors.h" #include "app/modules/editors.h"
#include "app/modules/gui.h" #include "app/modules/gui.h"

View File

@ -102,9 +102,9 @@ void UndoCommand::onExecute(Context* context)
// range because there could be inexistent layers. // range because there could be inexistent layers.
std::istream* docRangeStream; std::istream* docRangeStream;
if (m_type == Undo) if (m_type == Undo)
docRangeStream = undo->nextUndoDocumentRange(); docRangeStream = undo->nextUndoDocRange();
else else
docRangeStream = undo->nextRedoDocumentRange(); docRangeStream = undo->nextRedoDocRange();
StatusBar* statusbar = StatusBar::instance(); StatusBar* statusbar = StatusBar::instance();
if (statusbar) { if (statusbar) {
@ -139,13 +139,13 @@ void UndoCommand::onExecute(Context* context)
} }
} }
// Update timeline range. We've to deserialize the DocumentRange at // Update timeline range. We've to deserialize the DocRange at
// this point when objects (possible layers) are re-created after // this point when objects (possible layers) are re-created after
// the undo and we can deserialize them. // the undo and we can deserialize them.
if (docRangeStream) { if (docRangeStream) {
Timeline* timeline = App::instance()->timeline(); Timeline* timeline = App::instance()->timeline();
if (timeline) { if (timeline) {
DocumentRange docRange; DocRange docRange;
if (docRange.read(*docRangeStream)) if (docRange.read(*docRangeStream))
timeline->setRange(docRange); timeline->setRange(docRange);
} }

View File

@ -8,7 +8,7 @@
#include "config.h" #include "config.h"
#endif #endif
#include "app/document_range.h" #include "app/doc_range.h"
#include "base/serialization.h" #include "base/serialization.h"
#include "doc/cel.h" #include "doc/cel.h"
@ -24,7 +24,7 @@ using namespace base::serialization;
using namespace base::serialization::little_endian; using namespace base::serialization::little_endian;
using namespace doc; using namespace doc;
DocumentRange::DocumentRange() DocRange::DocRange()
: m_type(kNone) : m_type(kNone)
, m_flags(m_type) , m_flags(m_type)
, m_selectingFromLayer(nullptr) , m_selectingFromLayer(nullptr)
@ -32,7 +32,7 @@ DocumentRange::DocumentRange()
{ {
} }
DocumentRange::DocumentRange(Cel* cel) DocRange::DocRange(Cel* cel)
: m_type(kCels) : m_type(kCels)
, m_flags(m_type) , m_flags(m_type)
, m_selectingFromLayer(nullptr) , m_selectingFromLayer(nullptr)
@ -42,7 +42,7 @@ DocumentRange::DocumentRange(Cel* cel)
m_selectedFrames.insert(cel->frame()); m_selectedFrames.insert(cel->frame());
} }
void DocumentRange::clearRange() void DocRange::clearRange()
{ {
m_type = kNone; m_type = kNone;
m_flags = kNone; m_flags = kNone;
@ -50,7 +50,7 @@ void DocumentRange::clearRange()
m_selectedFrames.clear(); m_selectedFrames.clear();
} }
void DocumentRange::startRange(Layer* fromLayer, frame_t fromFrame, Type type) void DocRange::startRange(Layer* fromLayer, frame_t fromFrame, Type type)
{ {
m_type = type; m_type = type;
m_flags |= type; m_flags |= type;
@ -63,7 +63,7 @@ void DocumentRange::startRange(Layer* fromLayer, frame_t fromFrame, Type type)
m_selectedFrames.insert(fromFrame); m_selectedFrames.insert(fromFrame);
} }
void DocumentRange::endRange(Layer* toLayer, frame_t toFrame) void DocRange::endRange(Layer* toLayer, frame_t toFrame)
{ {
ASSERT(enabled()); ASSERT(enabled());
@ -74,7 +74,7 @@ void DocumentRange::endRange(Layer* toLayer, frame_t toFrame)
selectFrameRange(m_selectingFromFrame, toFrame); selectFrameRange(m_selectingFromFrame, toFrame);
} }
void DocumentRange::selectLayer(Layer* layer) void DocRange::selectLayer(Layer* layer)
{ {
if (m_type == kNone) if (m_type == kNone)
m_type = kLayers; m_type = kLayers;
@ -83,7 +83,7 @@ void DocumentRange::selectLayer(Layer* layer)
m_selectedLayers.insert(layer); m_selectedLayers.insert(layer);
} }
void DocumentRange::selectLayers(const SelectedLayers& selLayers) void DocRange::selectLayers(const SelectedLayers& selLayers)
{ {
if (m_type == kNone) if (m_type == kNone)
m_type = kLayers; m_type = kLayers;
@ -93,7 +93,7 @@ void DocumentRange::selectLayers(const SelectedLayers& selLayers)
m_selectedLayers.insert(layer); m_selectedLayers.insert(layer);
} }
bool DocumentRange::contains(const Layer* layer) const bool DocRange::contains(const Layer* layer) const
{ {
if (enabled()) if (enabled())
return m_selectedLayers.contains(const_cast<Layer*>(layer)); return m_selectedLayers.contains(const_cast<Layer*>(layer));
@ -101,15 +101,15 @@ bool DocumentRange::contains(const Layer* layer) const
return false; return false;
} }
bool DocumentRange::contains(const Layer* layer, bool DocRange::contains(const Layer* layer,
const frame_t frame) const const frame_t frame) const
{ {
switch (m_type) { switch (m_type) {
case DocumentRange::kNone: case DocRange::kNone:
return false; return false;
case DocumentRange::kCels: case DocRange::kCels:
return contains(layer) && contains(frame); return contains(layer) && contains(frame);
case DocumentRange::kFrames: case DocRange::kFrames:
if (contains(frame)) { if (contains(frame)) {
if ((m_flags & (kCels | kLayers)) != 0) if ((m_flags & (kCels | kLayers)) != 0)
return contains(layer); return contains(layer);
@ -117,7 +117,7 @@ bool DocumentRange::contains(const Layer* layer,
return true; return true;
} }
break; break;
case DocumentRange::kLayers: case DocRange::kLayers:
if (contains(layer)) { if (contains(layer)) {
if ((m_flags & (kCels | kFrames)) != 0) if ((m_flags & (kCels | kFrames)) != 0)
return contains(frame); return contains(frame);
@ -129,37 +129,37 @@ bool DocumentRange::contains(const Layer* layer,
return false; return false;
} }
void DocumentRange::displace(layer_t layerDelta, frame_t frameDelta) void DocRange::displace(layer_t layerDelta, frame_t frameDelta)
{ {
m_selectedLayers.displace(layerDelta); m_selectedLayers.displace(layerDelta);
m_selectedFrames.displace(frameDelta); m_selectedFrames.displace(frameDelta);
} }
bool DocumentRange::convertToCels(const Sprite* sprite) bool DocRange::convertToCels(const Sprite* sprite)
{ {
switch (m_type) { switch (m_type) {
case DocumentRange::kNone: case DocRange::kNone:
return false; return false;
case DocumentRange::kCels: case DocRange::kCels:
break; break;
case DocumentRange::kFrames: { case DocRange::kFrames: {
if ((m_flags & (kCels | kLayers)) == 0) { if ((m_flags & (kCels | kLayers)) == 0) {
for (auto layer : sprite->allBrowsableLayers()) for (auto layer : sprite->allBrowsableLayers())
m_selectedLayers.insert(layer); m_selectedLayers.insert(layer);
} }
m_type = DocumentRange::kCels; m_type = DocRange::kCels;
break; break;
} }
case DocumentRange::kLayers: case DocRange::kLayers:
if ((m_flags & (kCels | kFrames)) == 0) if ((m_flags & (kCels | kFrames)) == 0)
selectFrameRange(0, sprite->lastFrame()); selectFrameRange(0, sprite->lastFrame());
m_type = DocumentRange::kCels; m_type = DocRange::kCels;
break; break;
} }
return true; return true;
} }
bool DocumentRange::write(std::ostream& os) const bool DocRange::write(std::ostream& os) const
{ {
write32(os, m_type); write32(os, m_type);
write32(os, m_flags); write32(os, m_flags);
@ -172,7 +172,7 @@ bool DocumentRange::write(std::ostream& os) const
return os.good(); return os.good();
} }
bool DocumentRange::read(std::istream& is) bool DocRange::read(std::istream& is)
{ {
clearRange(); clearRange();
@ -188,7 +188,7 @@ bool DocumentRange::read(std::istream& is)
return is.good(); return is.good();
} }
void DocumentRange::selectLayerRange(Layer* fromLayer, Layer* toLayer) void DocRange::selectLayerRange(Layer* fromLayer, Layer* toLayer)
{ {
ASSERT(fromLayer); ASSERT(fromLayer);
ASSERT(toLayer); ASSERT(toLayer);
@ -234,7 +234,7 @@ void DocumentRange::selectLayerRange(Layer* fromLayer, Layer* toLayer)
} while (it); } while (it);
} }
void DocumentRange::selectFrameRange(frame_t fromFrame, frame_t toFrame) void DocRange::selectFrameRange(frame_t fromFrame, frame_t toFrame)
{ {
m_selectedFrames.insert(fromFrame, toFrame); m_selectedFrames.insert(fromFrame, toFrame);
} }

View File

@ -4,8 +4,8 @@
// This program is distributed under the terms of // This program is distributed under the terms of
// the End-User License Agreement for Aseprite. // the End-User License Agreement for Aseprite.
#ifndef APP_DOCUMENT_RANGE_H_INCLUDED #ifndef APP_DOC_RANGE_H_INCLUDED
#define APP_DOCUMENT_RANGE_H_INCLUDED #define APP_DOC_RANGE_H_INCLUDED
#pragma once #pragma once
#include "doc/frame.h" #include "doc/frame.h"
@ -22,15 +22,15 @@ namespace doc {
namespace app { namespace app {
using namespace doc; using namespace doc;
class DocumentRange { class DocRange {
public: public:
enum Type { kNone = 0, enum Type { kNone = 0,
kCels = 1, kCels = 1,
kFrames = 2, kFrames = 2,
kLayers = 4 }; kLayers = 4 };
DocumentRange(); DocRange();
DocumentRange(Cel* cel); DocRange(Cel* cel);
Type type() const { return m_type; } Type type() const { return m_type; }
bool enabled() const { return m_type != kNone; } bool enabled() const { return m_type != kNone; }
@ -58,7 +58,7 @@ namespace app {
frame_t firstFrame() const { return m_selectedFrames.firstFrame(); } frame_t firstFrame() const { return m_selectedFrames.firstFrame(); }
frame_t lastFrame() const { return m_selectedFrames.lastFrame(); } frame_t lastFrame() const { return m_selectedFrames.lastFrame(); }
bool operator==(const DocumentRange& o) const { bool operator==(const DocRange& o) const {
return (m_type == o.m_type && return (m_type == o.m_type &&
m_selectedLayers == o.m_selectedLayers && m_selectedLayers == o.m_selectedLayers &&
m_selectedFrames == o.m_selectedFrames); m_selectedFrames == o.m_selectedFrames);

View File

@ -11,12 +11,12 @@
#include "config.h" #include "config.h"
#endif #endif
#include "app/document_range_ops.h" #include "app/doc_range_ops.h"
#include "app/app.h" #include "app/app.h"
#include "app/context_access.h" #include "app/context_access.h"
#include "app/doc_api.h" #include "app/doc_api.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/transaction.h" #include "app/transaction.h"
#include "app/ui/timeline/timeline.h" #include "app/ui/timeline/timeline.h"
#include "doc/layer.h" #include "doc/layer.h"
@ -75,12 +75,12 @@ static void move_or_copy_cels(
} }
} }
static DocumentRange move_or_copy_frames( static DocRange move_or_copy_frames(
DocApi& api, Op op, DocApi& api, Op op,
Sprite* sprite, Sprite* sprite,
const DocumentRange& srcRange, const DocRange& srcRange,
frame_t dstFrame, frame_t dstFrame,
const DocumentRangePlace place, const DocRangePlace place,
const TagsHandling tagsHandling) const TagsHandling tagsHandling)
{ {
const SelectedFrames& srcFrames = srcRange.selectedFrames(); const SelectedFrames& srcFrames = srcRange.selectedFrames();
@ -91,9 +91,9 @@ static DocumentRange move_or_copy_frames(
std::clog << srcFrame << ", "; std::clog << srcFrame << ", ";
} }
std::clog << "] " std::clog << "] "
<< (place == kDocumentRangeBefore ? "before": << (place == kDocRangeBefore ? "before":
place == kDocumentRangeAfter ? "after": place == kDocRangeAfter ? "after":
"as first child") "as first child")
<< " " << dstFrame << "\n"; << " " << dstFrame << "\n";
#endif #endif
@ -102,8 +102,8 @@ static DocumentRange move_or_copy_frames(
frame_t srcDelta = 0; frame_t srcDelta = 0;
frame_t firstCopiedBlock = 0; frame_t firstCopiedBlock = 0;
frame_t dstBeforeFrame = frame_t dstBeforeFrame =
(place == kDocumentRangeBefore ? dstFrame: (place == kDocRangeBefore ? dstFrame:
dstFrame+1); dstFrame+1);
for (; srcFrame != srcFrameEnd; ++srcFrame) { for (; srcFrame != srcFrameEnd; ++srcFrame) {
frame_t fromFrame = (*srcFrame)+srcDelta; frame_t fromFrame = (*srcFrame)+srcDelta;
@ -134,7 +134,7 @@ static DocumentRange move_or_copy_frames(
std::clog << "] => " std::clog << "] => "
<< (op == Move ? "Move": "Copy") << (op == Move ? "Move": "Copy")
<< " " << (*srcFrame) << "+" << (srcDelta) << " " << (*srcFrame) << "+" << (srcDelta)
<< (place == kDocumentRangeBefore ? " before ": " after ") << (place == kDocRangeBefore ? " before ": " after ")
<< dstFrame << " => "; << dstFrame << " => ";
#endif #endif
@ -142,8 +142,8 @@ static DocumentRange move_or_copy_frames(
case Move: case Move:
api.moveFrame(sprite, fromFrame, dstFrame, api.moveFrame(sprite, fromFrame, dstFrame,
(place == kDocumentRangeBefore ? kDropBeforeFrame: (place == kDocRangeBefore ? kDropBeforeFrame:
kDropAfterFrame), kDropAfterFrame),
tagsHandling); tagsHandling);
if (fromFrame < dstBeforeFrame-1) { if (fromFrame < dstBeforeFrame-1) {
@ -157,8 +157,8 @@ static DocumentRange move_or_copy_frames(
case Copy: case Copy:
api.copyFrame(sprite, fromFrame, dstFrame, api.copyFrame(sprite, fromFrame, dstFrame,
(place == kDocumentRangeBefore ? kDropBeforeFrame: (place == kDocRangeBefore ? kDropBeforeFrame:
kDropAfterFrame), kDropAfterFrame),
tagsHandling); tagsHandling);
if (fromFrame < dstBeforeFrame-1) { if (fromFrame < dstBeforeFrame-1) {
@ -181,10 +181,10 @@ static DocumentRange move_or_copy_frames(
#endif #endif
} }
DocumentRange result; DocRange result;
if (!srcRange.selectedLayers().empty()) if (!srcRange.selectedLayers().empty())
result.selectLayers(srcRange.selectedLayers()); result.selectLayers(srcRange.selectedLayers());
result.startRange(nullptr, dstBeforeFrame-srcFrames.size(), DocumentRange::kFrames); result.startRange(nullptr, dstBeforeFrame-srcFrames.size(), DocRange::kFrames);
result.endRange(nullptr, dstBeforeFrame-1); result.endRange(nullptr, dstBeforeFrame-1);
return result; return result;
} }
@ -201,25 +201,25 @@ static bool has_child(LayerGroup* parent, Layer* child)
return false; return false;
} }
static DocumentRange drop_range_op( static DocRange drop_range_op(
Document* doc, Document* doc,
const Op op, const Op op,
const DocumentRange& from, const DocRange& from,
DocumentRangePlace place, DocRangePlace place,
const TagsHandling tagsHandling, const TagsHandling tagsHandling,
DocumentRange to) DocRange to)
{ {
// Convert "first child" operation into a insert after last child. // Convert "first child" operation into a insert after last child.
LayerGroup* parent = nullptr; LayerGroup* parent = nullptr;
if (to.type() == DocumentRange::kLayers && if (to.type() == DocRange::kLayers &&
!to.selectedLayers().empty()) { !to.selectedLayers().empty()) {
if (place == kDocumentRangeFirstChild && if (place == kDocRangeFirstChild &&
(*to.selectedLayers().begin())->isGroup()) { (*to.selectedLayers().begin())->isGroup()) {
place = kDocumentRangeAfter; place = kDocRangeAfter;
parent = static_cast<LayerGroup*>((*to.selectedLayers().begin())); parent = static_cast<LayerGroup*>((*to.selectedLayers().begin()));
to.clearRange(); to.clearRange();
to.startRange(parent->lastLayer(), -1, DocumentRange::kLayers); to.startRange(parent->lastLayer(), -1, DocRange::kLayers);
to.endRange(parent->lastLayer(), -1); to.endRange(parent->lastLayer(), -1);
} }
else { else {
@ -235,8 +235,8 @@ static DocumentRange drop_range_op(
} }
} }
if (place != kDocumentRangeBefore && if (place != kDocRangeBefore &&
place != kDocumentRangeAfter) { place != kDocRangeAfter) {
ASSERT(false); ASSERT(false);
throw std::invalid_argument("Invalid 'place' argument"); throw std::invalid_argument("Invalid 'place' argument");
} }
@ -247,20 +247,20 @@ static DocumentRange drop_range_op(
// Also check invalid cases, like moving a Background layer. // Also check invalid cases, like moving a Background layer.
switch (from.type()) { switch (from.type()) {
case DocumentRange::kCels: case DocRange::kCels:
if (from == to) if (from == to)
return from; return from;
break; break;
case DocumentRange::kFrames: case DocRange::kFrames:
if (op == Move) { if (op == Move) {
// Simple cases with one continuos range of frames that are a // Simple cases with one continuos range of frames that are a
// no-op. // no-op.
if ((from.selectedFrames().ranges() == 1) && if ((from.selectedFrames().ranges() == 1) &&
((to.firstFrame() >= from.firstFrame() && ((to.firstFrame() >= from.firstFrame() &&
to.lastFrame() <= from.lastFrame()) || to.lastFrame() <= from.lastFrame()) ||
(place == kDocumentRangeBefore && to.firstFrame() == from.lastFrame()+1) || (place == kDocRangeBefore && to.firstFrame() == from.lastFrame()+1) ||
(place == kDocumentRangeAfter && to.lastFrame() == from.firstFrame()-1)) && (place == kDocRangeAfter && to.lastFrame() == from.firstFrame()-1)) &&
// If there are tags, this might not be a no-op // If there are tags, this might not be a no-op
(sprite->frameTags().empty() || (sprite->frameTags().empty() ||
tagsHandling == kDontAdjustTags)) { tagsHandling == kDontAdjustTags)) {
@ -269,7 +269,7 @@ static DocumentRange drop_range_op(
} }
break; break;
case DocumentRange::kLayers: case DocRange::kLayers:
if (op == Move) { if (op == Move) {
SelectedLayers srcSelLayers = from.selectedLayers(); SelectedLayers srcSelLayers = from.selectedLayers();
SelectedLayers dstSelLayers = to.selectedLayers(); SelectedLayers dstSelLayers = to.selectedLayers();
@ -294,9 +294,9 @@ static DocumentRange drop_range_op(
if (dstSelLayers.contains(srcLayer)) if (dstSelLayers.contains(srcLayer))
return from; return from;
if ((place == kDocumentRangeBefore if ((place == kDocRangeBefore
&& dstLayers.front() == srcLayers.back()->getNext()) || && dstLayers.front() == srcLayers.back()->getNext()) ||
(place == kDocumentRangeAfter (place == kDocRangeAfter
&& dstLayers.back() == srcLayers.front()->getPrevious())) && dstLayers.back() == srcLayers.front()->getPrevious()))
return from; return from;
} }
@ -308,7 +308,7 @@ static DocumentRange drop_range_op(
} }
// Before background // Before background
if (place == kDocumentRangeBefore) { if (place == kDocRangeBefore) {
for (Layer* background : to.selectedLayers()) { for (Layer* background : to.selectedLayers()) {
if (background && background->isBackground()) if (background && background->isBackground())
throw std::runtime_error("You cannot move or copy something below the background layer"); throw std::runtime_error("You cannot move or copy something below the background layer");
@ -325,7 +325,7 @@ static DocumentRange drop_range_op(
ASSERT(false); ASSERT(false);
throw std::invalid_argument("Invalid 'op' argument"); throw std::invalid_argument("Invalid 'op' argument");
} }
DocumentRange resultRange; DocRange resultRange;
{ {
const app::Context* context = static_cast<app::Context*>(doc->context()); const app::Context* context = static_cast<app::Context*>(doc->context());
@ -340,7 +340,7 @@ static DocumentRange drop_range_op(
switch (from.type()) { switch (from.type()) {
case DocumentRange::kCels: { case DocRange::kCels: {
LayerList allLayers = sprite->allBrowsableLayers(); LayerList allLayers = sprite->allBrowsableLayers();
if (allLayers.empty()) if (allLayers.empty())
break; break;
@ -374,9 +374,9 @@ static DocumentRange drop_range_op(
break; break;
} }
case DocumentRange::kFrames: { case DocRange::kFrames: {
frame_t dstFrame; frame_t dstFrame;
if (place == kDocumentRangeBefore) if (place == kDocRangeBefore)
dstFrame = to.firstFrame(); dstFrame = to.firstFrame();
else else
dstFrame = to.lastFrame(); dstFrame = to.lastFrame();
@ -387,7 +387,7 @@ static DocumentRange drop_range_op(
break; break;
} }
case DocumentRange::kLayers: { case DocRange::kLayers: {
LayerList allLayers = sprite->allBrowsableLayers(); LayerList allLayers = sprite->allBrowsableLayers();
if (allLayers.empty()) if (allLayers.empty())
break; break;
@ -399,7 +399,7 @@ static DocumentRange drop_range_op(
switch (op) { switch (op) {
case Move: case Move:
if (place == kDocumentRangeBefore) { if (place == kDocRangeBefore) {
Layer* beforeThis = (!dstLayers.empty() ? dstLayers.front(): nullptr); Layer* beforeThis = (!dstLayers.empty() ? dstLayers.front(): nullptr);
Layer* afterThis = nullptr; Layer* afterThis = nullptr;
@ -412,7 +412,7 @@ static DocumentRange drop_range_op(
afterThis = srcLayer; afterThis = srcLayer;
} }
} }
else if (place == kDocumentRangeAfter) { else if (place == kDocRangeAfter) {
Layer* afterThis = (!dstLayers.empty() ? dstLayers.back(): nullptr); Layer* afterThis = (!dstLayers.empty() ? dstLayers.back(): nullptr);
for (Layer* srcLayer : srcLayers) { for (Layer* srcLayer : srcLayers) {
api.restackLayerAfter(srcLayer, parent, afterThis); api.restackLayerAfter(srcLayer, parent, afterThis);
@ -425,17 +425,17 @@ static DocumentRange drop_range_op(
break; break;
case Copy: { case Copy: {
if (place == kDocumentRangeBefore) { if (place == kDocRangeBefore) {
Layer* beforeThis = (!dstLayers.empty() ? dstLayers.front(): nullptr); Layer* beforeThis = (!dstLayers.empty() ? dstLayers.front(): nullptr);
for (Layer* srcLayer : srcLayers) { for (Layer* srcLayer : srcLayers) {
Layer* copiedLayer = api.duplicateLayerBefore( Layer* copiedLayer = api.duplicateLayerBefore(
srcLayer, parent, beforeThis); srcLayer, parent, beforeThis);
resultRange.startRange(copiedLayer, -1, DocumentRange::kLayers); resultRange.startRange(copiedLayer, -1, DocRange::kLayers);
resultRange.endRange(copiedLayer, -1); resultRange.endRange(copiedLayer, -1);
} }
} }
else if (place == kDocumentRangeAfter) { else if (place == kDocRangeAfter) {
std::reverse(srcLayers.begin(), srcLayers.end()); std::reverse(srcLayers.begin(), srcLayers.end());
Layer* afterThis = (!dstLayers.empty() ? dstLayers.back(): nullptr); Layer* afterThis = (!dstLayers.empty() ? dstLayers.back(): nullptr);
@ -443,7 +443,7 @@ static DocumentRange drop_range_op(
Layer* copiedLayer = api.duplicateLayerAfter( Layer* copiedLayer = api.duplicateLayerAfter(
srcLayer, parent, afterThis); srcLayer, parent, afterThis);
resultRange.startRange(copiedLayer, -1, DocumentRange::kLayers); resultRange.startRange(copiedLayer, -1, DocRange::kLayers);
resultRange.endRange(copiedLayer, -1); resultRange.endRange(copiedLayer, -1);
} }
} }
@ -454,8 +454,8 @@ static DocumentRange drop_range_op(
} }
} }
if (resultRange.type() != DocumentRange::kNone) if (resultRange.type() != DocRange::kNone)
transaction.setNewDocumentRange(resultRange); transaction.setNewDocRange(resultRange);
transaction.commit(); transaction.commit();
} }
@ -463,27 +463,27 @@ static DocumentRange drop_range_op(
return resultRange; return resultRange;
} }
DocumentRange move_range(Document* doc, DocRange move_range(Document* doc,
const DocumentRange& from, const DocRange& from,
const DocumentRange& to, const DocRange& to,
const DocumentRangePlace place, const DocRangePlace place,
const TagsHandling tagsHandling) const TagsHandling tagsHandling)
{ {
return drop_range_op(doc, Move, from, place, return drop_range_op(doc, Move, from, place,
tagsHandling, DocumentRange(to)); tagsHandling, DocRange(to));
} }
DocumentRange copy_range(Document* doc, DocRange copy_range(Document* doc,
const DocumentRange& from, const DocRange& from,
const DocumentRange& to, const DocRange& to,
const DocumentRangePlace place, const DocRangePlace place,
const TagsHandling tagsHandling) const TagsHandling tagsHandling)
{ {
return drop_range_op(doc, Copy, from, place, return drop_range_op(doc, Copy, from, place,
tagsHandling, DocumentRange(to)); tagsHandling, DocRange(to));
} }
void reverse_frames(Document* doc, const DocumentRange& range) void reverse_frames(Document* doc, const DocRange& range)
{ {
const app::Context* context = static_cast<app::Context*>(doc->context()); const app::Context* context = static_cast<app::Context*>(doc->context());
const ContextReader reader(context); const ContextReader reader(context);
@ -497,19 +497,19 @@ void reverse_frames(Document* doc, const DocumentRange& range)
bool swapCels = false; bool swapCels = false;
switch (range.type()) { switch (range.type()) {
case DocumentRange::kCels: case DocRange::kCels:
frameBegin = range.firstFrame(); frameBegin = range.firstFrame();
frameEnd = range.lastFrame(); frameEnd = range.lastFrame();
layers = range.selectedLayers().toLayerList(); layers = range.selectedLayers().toLayerList();
swapCels = true; swapCels = true;
break; break;
case DocumentRange::kFrames: case DocRange::kFrames:
frameBegin = range.firstFrame(); frameBegin = range.firstFrame();
frameEnd = range.lastFrame(); frameEnd = range.lastFrame();
layers = sprite->allLayers(); layers = sprite->allLayers();
moveFrames = true; moveFrames = true;
break; break;
case DocumentRange::kLayers: case DocRange::kLayers:
frameBegin = frame_t(0); frameBegin = frame_t(0);
frameEnd = sprite->totalFrames()-1; frameEnd = sprite->totalFrames()-1;
layers = range.selectedLayers().toLayerList(); layers = range.selectedLayers().toLayerList();
@ -544,7 +544,7 @@ void reverse_frames(Document* doc, const DocumentRange& range)
} }
} }
transaction.setNewDocumentRange(range); transaction.setNewDocRange(range);
transaction.commit(); transaction.commit();
} }

43
src/app/doc_range_ops.h Normal file
View File

@ -0,0 +1,43 @@
// Aseprite
// Copyright (C) 2001-2018 David Capello
//
// This program is distributed under the terms of
// the End-User License Agreement for Aseprite.
#ifndef APP_DOC_RANGE_OPS_H_INCLUDED
#define APP_DOC_RANGE_OPS_H_INCLUDED
#pragma once
#include "app/tags_handling.h"
#include <vector>
namespace app {
class Document;
class DocRange;
enum DocRangePlace {
kDocRangeBefore,
kDocRangeAfter,
kDocRangeFirstChild,
};
// These functions returns the new location of the "from" range or
// throws an std::runtime_error() in case that the operation cannot
// be done. (E.g. the background layer cannot be moved.)
DocRange move_range(Document* doc,
const DocRange& from,
const DocRange& to,
const DocRangePlace place,
const TagsHandling tagsHandling = kDefaultTagsAdjustment);
DocRange copy_range(Document* doc,
const DocRange& from,
const DocRange& to,
const DocRangePlace place,
const TagsHandling tagsHandling = kDefaultTagsAdjustment);
void reverse_frames(Document* doc, const DocRange& range);
} // namespace app
#endif

View File

@ -7,11 +7,11 @@
#include "tests/test.h" #include "tests/test.h"
#include "app/context.h" #include "app/context.h"
#include "app/doc_api.h"
#include "app/doc_range.h"
#include "app/doc_range_ops.h"
#include "app/doc_undo.h" #include "app/doc_undo.h"
#include "app/document.h" #include "app/document.h"
#include "app/doc_api.h"
#include "app/document_range.h"
#include "app/document_range_ops.h"
#include "app/test_context.h" #include "app/test_context.h"
#include "app/transaction.h" #include "app/transaction.h"
#include "base/unique_ptr.h" #include "base/unique_ptr.h"
@ -30,7 +30,7 @@ std::ostream& operator<<(std::ostream& os, const doc::Layer* layer) {
return os; return os;
} }
std::ostream& operator<<(std::ostream& os, const app::DocumentRange& range) { std::ostream& operator<<(std::ostream& os, const app::DocRange& range) {
os << "{ layers: ["; os << "{ layers: [";
bool first = true; bool first = true;
@ -244,48 +244,48 @@ protected:
return (cel == NULL); return (cel == NULL);
} }
DocumentRange range(Layer* fromLayer, frame_t fromFrNum, Layer* toLayer, frame_t toFrNum, DocumentRange::Type type) { DocRange range(Layer* fromLayer, frame_t fromFrNum, Layer* toLayer, frame_t toFrNum, DocRange::Type type) {
DocumentRange r; DocRange r;
r.startRange(fromLayer, fromFrNum, type); r.startRange(fromLayer, fromFrNum, type);
r.endRange(toLayer, toFrNum); r.endRange(toLayer, toFrNum);
return r; return r;
} }
DocumentRange range(layer_t fromLayer, frame_t fromFrNum, DocRange range(layer_t fromLayer, frame_t fromFrNum,
layer_t toLayer, frame_t toFrNum, DocumentRange::Type type) { layer_t toLayer, frame_t toFrNum, DocRange::Type type) {
LayerList layers = sprite->allLayers(); LayerList layers = sprite->allLayers();
return range(layers[fromLayer], fromFrNum, layers[toLayer], toFrNum, type); return range(layers[fromLayer], fromFrNum, layers[toLayer], toFrNum, type);
} }
DocumentRange layers_range(Layer* fromLayer, Layer* toLayer) { DocRange layers_range(Layer* fromLayer, Layer* toLayer) {
return range(fromLayer, -1, toLayer, -1, DocumentRange::kLayers); return range(fromLayer, -1, toLayer, -1, DocRange::kLayers);
} }
DocumentRange layers_range(layer_t fromLayer, layer_t toLayer) { DocRange layers_range(layer_t fromLayer, layer_t toLayer) {
LayerList layers = sprite->allLayers(); LayerList layers = sprite->allLayers();
return layers_range(layers[fromLayer], layers[toLayer]); return layers_range(layers[fromLayer], layers[toLayer]);
} }
DocumentRange layers_range(Layer* layer) { DocRange layers_range(Layer* layer) {
return range(layer, -1, layer, -1, DocumentRange::kLayers); return range(layer, -1, layer, -1, DocRange::kLayers);
} }
DocumentRange layers_range(layer_t layer) { DocRange layers_range(layer_t layer) {
LayerList layers = sprite->allLayers(); LayerList layers = sprite->allLayers();
return layers_range(layers[layer]); return layers_range(layers[layer]);
} }
DocumentRange frames_range(frame_t fromFrame, frame_t toFrame) { DocRange frames_range(frame_t fromFrame, frame_t toFrame) {
return range(nullptr, fromFrame, nullptr, toFrame, DocumentRange::kFrames); return range(nullptr, fromFrame, nullptr, toFrame, DocRange::kFrames);
} }
DocumentRange frames_range(frame_t frame) { DocRange frames_range(frame_t frame) {
return range(nullptr, frame, nullptr, frame, DocumentRange::kFrames); return range(nullptr, frame, nullptr, frame, DocRange::kFrames);
} }
DocumentRange cels_range(layer_t fromLayer, frame_t fromFrNum, DocRange cels_range(layer_t fromLayer, frame_t fromFrNum,
layer_t toLayer, frame_t toFrNum) { layer_t toLayer, frame_t toFrNum) {
return range(fromLayer, fromFrNum, toLayer, toFrNum, DocumentRange::kCels); return range(fromLayer, fromFrNum, toLayer, toFrNum, DocRange::kCels);
} }
TestContextT<app::Context> ctx; TestContextT<app::Context> ctx;
@ -304,35 +304,35 @@ TEST_F(DocRangeOps, MoveLayersNoOp) {
EXPECT_EQ(layers_range(layer1), EXPECT_EQ(layers_range(layer1),
move_range(doc, move_range(doc,
layers_range(layer1), layers_range(layer1),
layers_range(layer1), kDocumentRangeAfter)); layers_range(layer1), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer1), EXPECT_EQ(layers_range(layer1),
move_range(doc, move_range(doc,
layers_range(layer1), layers_range(layer1),
layers_range(layer2), kDocumentRangeBefore)); layers_range(layer2), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer4), EXPECT_EQ(layers_range(layer4),
move_range(doc, move_range(doc,
layers_range(layer4), layers_range(layer4),
layers_range(layer4), kDocumentRangeAfter)); layers_range(layer4), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer4), EXPECT_EQ(layers_range(layer4),
move_range(doc, move_range(doc,
layers_range(layer4), layers_range(layer4),
layers_range(layer4), kDocumentRangeBefore)); layers_range(layer4), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer4), EXPECT_EQ(layers_range(layer4),
move_range(doc, move_range(doc,
layers_range(layer4), layers_range(layer4),
layers_range(layer3), kDocumentRangeAfter)); layers_range(layer3), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
@ -341,76 +341,76 @@ TEST_F(DocRangeOps, MoveLayersNoOp) {
EXPECT_EQ(layers_range(layer1, layer2), EXPECT_EQ(layers_range(layer1, layer2),
move_range(doc, move_range(doc,
layers_range(layer1, layer2), layers_range(layer1, layer2),
layers_range(layer1), kDocumentRangeBefore)); layers_range(layer1), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer1, layer2), EXPECT_EQ(layers_range(layer1, layer2),
move_range(doc, move_range(doc,
layers_range(layer1, layer2), layers_range(layer1, layer2),
layers_range(layer1), kDocumentRangeAfter)); layers_range(layer1), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer1, layer2), EXPECT_EQ(layers_range(layer1, layer2),
move_range(doc, move_range(doc,
layers_range(layer1, layer2), layers_range(layer1, layer2),
layers_range(layer2), kDocumentRangeBefore)); layers_range(layer2), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer1, layer2), EXPECT_EQ(layers_range(layer1, layer2),
move_range(doc, move_range(doc,
layers_range(layer1, layer2), layers_range(layer1, layer2),
layers_range(layer2), kDocumentRangeAfter)); layers_range(layer2), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer1, layer2), EXPECT_EQ(layers_range(layer1, layer2),
move_range(doc, move_range(doc,
layers_range(layer1, layer2), layers_range(layer1, layer2),
layers_range(layer3), kDocumentRangeBefore)); layers_range(layer3), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer3, layer4), EXPECT_EQ(layers_range(layer3, layer4),
move_range(doc, move_range(doc,
layers_range(layer3, layer4), layers_range(layer3, layer4),
layers_range(layer2), kDocumentRangeAfter)); layers_range(layer2), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer3, layer4), EXPECT_EQ(layers_range(layer3, layer4),
move_range(doc, move_range(doc,
layers_range(layer3, layer4), layers_range(layer3, layer4),
layers_range(layer3), kDocumentRangeBefore)); layers_range(layer3), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer3, layer4), EXPECT_EQ(layers_range(layer3, layer4),
move_range(doc, move_range(doc,
layers_range(layer3, layer4), layers_range(layer3, layer4),
layers_range(layer3), kDocumentRangeAfter)); layers_range(layer3), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer3, layer4), EXPECT_EQ(layers_range(layer3, layer4),
move_range(doc, move_range(doc,
layers_range(layer3, layer4), layers_range(layer3, layer4),
layers_range(layer4), kDocumentRangeBefore)); layers_range(layer4), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(layers_range(layer3, layer4), EXPECT_EQ(layers_range(layer3, layer4),
move_range(doc, move_range(doc,
layers_range(layer3, layer4), layers_range(layer3, layer4),
layers_range(layer4), kDocumentRangeAfter)); layers_range(layer4), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
// Move four layers // Move four layers
DocumentRangePlace places[] = { kDocumentRangeBefore, kDocumentRangeAfter }; DocRangePlace places[] = { kDocRangeBefore, kDocRangeAfter };
for (int i=0; i<2; ++i) { for (int i=0; i<2; ++i) {
for (int layer=0; layer<4; ++layer) { for (int layer=0; layer<4; ++layer) {
EXPECT_EQ(layers_range(layer1, layer4), EXPECT_EQ(layers_range(layer1, layer4),
@ -454,35 +454,35 @@ TEST_F(DocRangeOps, MoveFramesNoOp) {
EXPECT_EQ(frames_range(0), EXPECT_EQ(frames_range(0),
move_range(doc, move_range(doc,
frames_range(0), frames_range(0),
frames_range(0), kDocumentRangeAfter)); frames_range(0), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(0), EXPECT_EQ(frames_range(0),
move_range(doc, move_range(doc,
frames_range(0), frames_range(0),
frames_range(1), kDocumentRangeBefore)); frames_range(1), kDocRangeBefore));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(3), EXPECT_EQ(frames_range(3),
move_range(doc, move_range(doc,
frames_range(3), frames_range(3),
frames_range(3), kDocumentRangeAfter)); frames_range(3), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(3), EXPECT_EQ(frames_range(3),
move_range(doc, move_range(doc,
frames_range(3), frames_range(3),
frames_range(3), kDocumentRangeBefore)); frames_range(3), kDocRangeBefore));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(3), EXPECT_EQ(frames_range(3),
move_range(doc, move_range(doc,
frames_range(3), frames_range(3),
frames_range(2), kDocumentRangeAfter)); frames_range(2), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
@ -491,76 +491,76 @@ TEST_F(DocRangeOps, MoveFramesNoOp) {
EXPECT_EQ(frames_range(0, 1), EXPECT_EQ(frames_range(0, 1),
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(0), kDocumentRangeBefore)); frames_range(0), kDocRangeBefore));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(0, 1), EXPECT_EQ(frames_range(0, 1),
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(0), kDocumentRangeAfter)); frames_range(0), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(0, 1), EXPECT_EQ(frames_range(0, 1),
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(1), kDocumentRangeBefore)); frames_range(1), kDocRangeBefore));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(0, 1), EXPECT_EQ(frames_range(0, 1),
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(1), kDocumentRangeAfter)); frames_range(1), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(0, 1), EXPECT_EQ(frames_range(0, 1),
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(2), kDocumentRangeBefore)); frames_range(2), kDocRangeBefore));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(2, 3), EXPECT_EQ(frames_range(2, 3),
move_range(doc, move_range(doc,
frames_range(2, 3), frames_range(2, 3),
frames_range(1), kDocumentRangeAfter)); frames_range(1), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(2, 3), EXPECT_EQ(frames_range(2, 3),
move_range(doc, move_range(doc,
frames_range(2, 3), frames_range(2, 3),
frames_range(2), kDocumentRangeBefore)); frames_range(2), kDocRangeBefore));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(2, 3), EXPECT_EQ(frames_range(2, 3),
move_range(doc, move_range(doc,
frames_range(2, 3), frames_range(2, 3),
frames_range(2), kDocumentRangeAfter)); frames_range(2), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(2, 3), EXPECT_EQ(frames_range(2, 3),
move_range(doc, move_range(doc,
frames_range(2, 3), frames_range(2, 3),
frames_range(3), kDocumentRangeBefore)); frames_range(3), kDocRangeBefore));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
EXPECT_EQ(frames_range(2, 3), EXPECT_EQ(frames_range(2, 3),
move_range(doc, move_range(doc,
frames_range(2, 3), frames_range(2, 3),
frames_range(3), kDocumentRangeAfter)); frames_range(3), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_FALSE(doc->undoHistory()->canUndo()); EXPECT_FALSE(doc->undoHistory()->canUndo());
// Move four frames // Move four frames
DocumentRangePlace places[] = { kDocumentRangeBefore, kDocumentRangeAfter }; DocRangePlace places[] = { kDocRangeBefore, kDocRangeAfter };
for (int i=0; i<2; ++i) { for (int i=0; i<2; ++i) {
for (int frame=0; frame<4; ++frame) { for (int frame=0; frame<4; ++frame) {
EXPECT_EQ(frames_range(0, 3), EXPECT_EQ(frames_range(0, 3),
@ -602,7 +602,7 @@ TEST_F(DocRangeOps, MoveCelsNoOp) {
EXPECT_EQ(cels_range(0, 0, 1, 1), EXPECT_EQ(cels_range(0, 0, 1, 1),
move_range(doc, move_range(doc,
cels_range(0, 0, 1, 1), cels_range(0, 0, 1, 1),
cels_range(0, 0, 1, 1), kDocumentRangeAfter)); cels_range(0, 0, 1, 1), kDocRangeAfter));
EXPECT_CEL(0, 0, 0, 0); EXPECT_CEL(0, 0, 0, 0);
EXPECT_CEL(0, 1, 0, 1); EXPECT_CEL(0, 1, 0, 1);
EXPECT_CEL(1, 0, 1, 0); EXPECT_CEL(1, 0, 1, 0);
@ -619,7 +619,7 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_EQ(layers_range(layer1), EXPECT_EQ(layers_range(layer1),
move_range(doc, move_range(doc,
layers_range(layer1), layers_range(layer1),
layers_range(layer2), kDocumentRangeAfter)); layers_range(layer2), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer2, layer1, layer3, layer4); EXPECT_LAYER_ORDER(layer2, layer1, layer3, layer4);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
@ -628,7 +628,7 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_EQ(layers_range(layer2), EXPECT_EQ(layers_range(layer2),
move_range(doc, move_range(doc,
layers_range(layer2), layers_range(layer2),
layers_range(layer1), kDocumentRangeBefore)); layers_range(layer1), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer2, layer1, layer3, layer4); EXPECT_LAYER_ORDER(layer2, layer1, layer3, layer4);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
@ -638,7 +638,7 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_THROW({ EXPECT_THROW({
move_range(doc, move_range(doc,
layers_range(layer1), layers_range(layer1),
layers_range(layer2), kDocumentRangeAfter); layers_range(layer2), kDocRangeAfter);
}, std::exception); }, std::exception);
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
layer1->setBackground(false); layer1->setBackground(false);
@ -647,7 +647,7 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_EQ(layers_range(layer2), EXPECT_EQ(layers_range(layer2),
move_range(doc, move_range(doc,
layers_range(layer2), layers_range(layer2),
layers_range(layer4), kDocumentRangeAfter)); layers_range(layer4), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer3, layer4, layer2); EXPECT_LAYER_ORDER(layer1, layer3, layer4, layer2);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
@ -656,7 +656,7 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_EQ(layers_range(layer2), EXPECT_EQ(layers_range(layer2),
move_range(doc, move_range(doc,
layers_range(layer2), layers_range(layer2),
layers_range(layer4), kDocumentRangeBefore)); layers_range(layer4), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer1, layer3, layer2, layer4); EXPECT_LAYER_ORDER(layer1, layer3, layer2, layer4);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
@ -664,7 +664,7 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_EQ(layers_range(layer1), EXPECT_EQ(layers_range(layer1),
move_range(doc, move_range(doc,
layers_range(layer1), layers_range(layer1),
layers_range(layer3, layer4), kDocumentRangeBefore)); layers_range(layer3, layer4), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer2, layer1, layer3, layer4); EXPECT_LAYER_ORDER(layer2, layer1, layer3, layer4);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
@ -673,13 +673,13 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_EQ(layers_range(layer2, layer3), EXPECT_EQ(layers_range(layer2, layer3),
move_range(doc, move_range(doc,
layers_range(layer2, layer3), layers_range(layer2, layer3),
layers_range(layer4), kDocumentRangeAfter)); layers_range(layer4), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer4, layer2, layer3); EXPECT_LAYER_ORDER(layer1, layer4, layer2, layer3);
EXPECT_EQ(layers_range(layer2, layer3), EXPECT_EQ(layers_range(layer2, layer3),
move_range(doc, move_range(doc,
layers_range(layer2, layer3), layers_range(layer2, layer3),
layers_range(layer1), kDocumentRangeAfter)); layers_range(layer1), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
// Move three layers at the bottom (but we cannot because the bottom is a background layer) // Move three layers at the bottom (but we cannot because the bottom is a background layer)
@ -687,7 +687,7 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_THROW({ EXPECT_THROW({
move_range(doc, move_range(doc,
layers_range(layer2, layer4), layers_range(layer2, layer4),
layers_range(layer1), kDocumentRangeBefore); layers_range(layer1), kDocRangeBefore);
}, std::exception); }, std::exception);
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
layer1->setBackground(false); layer1->setBackground(false);
@ -696,7 +696,7 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_EQ(layers_range(layer1, layer3), EXPECT_EQ(layers_range(layer1, layer3),
move_range(doc, move_range(doc,
layers_range(layer1, layer3), layers_range(layer1, layer3),
layers_range(layer4), kDocumentRangeAfter)); layers_range(layer4), kDocRangeAfter));
EXPECT_LAYER_ORDER(layer4, layer1, layer2, layer3); EXPECT_LAYER_ORDER(layer4, layer1, layer2, layer3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
@ -705,7 +705,7 @@ TEST_F(DocRangeOps, MoveLayers) {
EXPECT_EQ(layers_range(layer2, layer4), EXPECT_EQ(layers_range(layer2, layer4),
move_range(doc, move_range(doc,
layers_range(layer2, layer4), layers_range(layer2, layer4),
layers_range(layer1), kDocumentRangeBefore)); layers_range(layer1), kDocRangeBefore));
EXPECT_LAYER_ORDER(layer2, layer3, layer4, layer1); EXPECT_LAYER_ORDER(layer2, layer3, layer4, layer1);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4);
@ -716,7 +716,7 @@ TEST_F(DocRangeOps, MoveFrames) {
EXPECT_EQ(frames_range(1), EXPECT_EQ(frames_range(1),
move_range(doc, move_range(doc,
frames_range(0), frames_range(0),
frames_range(1), kDocumentRangeAfter)); frames_range(1), kDocRangeAfter));
EXPECT_FRAME_ORDER(1, 0, 2, 3); EXPECT_FRAME_ORDER(1, 0, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -726,7 +726,7 @@ TEST_F(DocRangeOps, MoveFrames) {
EXPECT_EQ(frames_range(5), EXPECT_EQ(frames_range(5),
move_range(doc, move_range(doc,
frames_range(1), frames_range(1),
frames_range(5), kDocumentRangeAfter)); frames_range(5), kDocRangeAfter));
EXPECT_FRAME_ORDER6(0, 2, 3, 4, 5, 1); EXPECT_FRAME_ORDER6(0, 2, 3, 4, 5, 1);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -736,7 +736,7 @@ TEST_F(DocRangeOps, MoveFrames) {
move_range( move_range(
doc, doc,
frames_range(1, 2), frames_range(1, 2),
frames_range(5), kDocumentRangeAfter)); frames_range(5), kDocRangeAfter));
EXPECT_FRAME_ORDER6(0, 3, 4, 5, 1, 2); EXPECT_FRAME_ORDER6(0, 3, 4, 5, 1, 2);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -745,7 +745,7 @@ TEST_F(DocRangeOps, MoveFrames) {
EXPECT_EQ(frames_range(1, 2), EXPECT_EQ(frames_range(1, 2),
move_range(doc, move_range(doc,
frames_range(2, 3), frames_range(2, 3),
frames_range(0), kDocumentRangeAfter)); frames_range(0), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 2, 3, 1); EXPECT_FRAME_ORDER(0, 2, 3, 1);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -754,7 +754,7 @@ TEST_F(DocRangeOps, MoveFrames) {
EXPECT_EQ(frames_range(0, 2), EXPECT_EQ(frames_range(0, 2),
move_range(doc, move_range(doc,
frames_range(1, 3), frames_range(1, 3),
frames_range(0), kDocumentRangeBefore)); frames_range(0), kDocRangeBefore));
EXPECT_FRAME_ORDER(1, 2, 3, 0); EXPECT_FRAME_ORDER(1, 2, 3, 0);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -763,7 +763,7 @@ TEST_F(DocRangeOps, MoveFrames) {
EXPECT_EQ(frames_range(1, 3), EXPECT_EQ(frames_range(1, 3),
move_range(doc, move_range(doc,
frames_range(0, 2), frames_range(0, 2),
frames_range(3), kDocumentRangeAfter)); frames_range(3), kDocRangeAfter));
EXPECT_FRAME_ORDER(3, 0, 1, 2); EXPECT_FRAME_ORDER(3, 0, 1, 2);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -772,14 +772,14 @@ TEST_F(DocRangeOps, MoveFrames) {
TEST_F(DocRangeOps, MoveFramesNonAdjacent) { TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move frames 0,2... // Move frames 0,2...
DocumentRange from; DocRange from;
from.startRange(nullptr, 0, DocumentRange::kFrames); from.endRange(nullptr, 0); from.startRange(nullptr, 0, DocRange::kFrames); from.endRange(nullptr, 0);
from.startRange(nullptr, 2, DocumentRange::kFrames); from.endRange(nullptr, 2); from.startRange(nullptr, 2, DocRange::kFrames); from.endRange(nullptr, 2);
// Move frames 0,2 after 3... // Move frames 0,2 after 3...
EXPECT_EQ(frames_range(2, 3), EXPECT_EQ(frames_range(2, 3),
move_range(doc, from, frames_range(3), kDocumentRangeAfter)); move_range(doc, from, frames_range(3), kDocRangeAfter));
EXPECT_FRAME_ORDER(1, 3, 0, 2); EXPECT_FRAME_ORDER(1, 3, 0, 2);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -787,7 +787,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move frames 0,2 before 3... // Move frames 0,2 before 3...
EXPECT_EQ(frames_range(1, 2), EXPECT_EQ(frames_range(1, 2),
move_range(doc, from, frames_range(3), kDocumentRangeBefore)); move_range(doc, from, frames_range(3), kDocRangeBefore));
EXPECT_FRAME_ORDER(1, 0, 2, 3); EXPECT_FRAME_ORDER(1, 0, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -795,7 +795,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move frames 0,2 before 0... // Move frames 0,2 before 0...
EXPECT_EQ(frames_range(0, 1), EXPECT_EQ(frames_range(0, 1),
move_range(doc, from, frames_range(0), kDocumentRangeBefore)); move_range(doc, from, frames_range(0), kDocRangeBefore));
EXPECT_FRAME_ORDER(0, 2, 1, 3); EXPECT_FRAME_ORDER(0, 2, 1, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -803,7 +803,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move frames 0,2 after 0... // Move frames 0,2 after 0...
EXPECT_EQ(frames_range(0, 1), EXPECT_EQ(frames_range(0, 1),
move_range(doc, from, frames_range(0), kDocumentRangeAfter)); move_range(doc, from, frames_range(0), kDocRangeAfter));
EXPECT_FRAME_ORDER(0, 2, 1, 3); EXPECT_FRAME_ORDER(0, 2, 1, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -811,7 +811,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move frames 0,2 before 1... // Move frames 0,2 before 1...
EXPECT_EQ(frames_range(0, 1), EXPECT_EQ(frames_range(0, 1),
move_range(doc, from, frames_range(1), kDocumentRangeBefore)); move_range(doc, from, frames_range(1), kDocRangeBefore));
EXPECT_FRAME_ORDER(0, 2, 1, 3); EXPECT_FRAME_ORDER(0, 2, 1, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -819,7 +819,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move frames 0,2 after 1... // Move frames 0,2 after 1...
EXPECT_EQ(frames_range(1, 2), EXPECT_EQ(frames_range(1, 2),
move_range(doc, from, frames_range(1), kDocumentRangeAfter)); move_range(doc, from, frames_range(1), kDocRangeAfter));
EXPECT_FRAME_ORDER(1, 0, 2, 3); EXPECT_FRAME_ORDER(1, 0, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -827,16 +827,16 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move 1,2,5... // Move 1,2,5...
from.clearRange(); from.clearRange();
from.startRange(nullptr, 1, DocumentRange::kFrames); from.startRange(nullptr, 1, DocRange::kFrames);
from.endRange(nullptr, 2); from.endRange(nullptr, 2);
from.startRange(nullptr, 5, DocumentRange::kFrames); from.startRange(nullptr, 5, DocRange::kFrames);
from.endRange(nullptr, 5); from.endRange(nullptr, 5);
// Move 1,2,5 before 4... // Move 1,2,5 before 4...
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
EXPECT_EQ(frames_range(2, 4), EXPECT_EQ(frames_range(2, 4),
move_range(doc, from, frames_range(4), kDocumentRangeBefore)); move_range(doc, from, frames_range(4), kDocRangeBefore));
EXPECT_FRAME_ORDER6(0, 3, 1, 2, 5, 4); EXPECT_FRAME_ORDER6(0, 3, 1, 2, 5, 4);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -844,7 +844,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move 1,2,5 after 4... // Move 1,2,5 after 4...
EXPECT_EQ(frames_range(3, 5), EXPECT_EQ(frames_range(3, 5),
move_range(doc, from, frames_range(4), kDocumentRangeAfter)); move_range(doc, from, frames_range(4), kDocRangeAfter));
EXPECT_FRAME_ORDER6(0, 3, 4, 1, 2, 5); EXPECT_FRAME_ORDER6(0, 3, 4, 1, 2, 5);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -852,7 +852,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move 1,2,5 before 2... // Move 1,2,5 before 2...
EXPECT_EQ(frames_range(1, 3), EXPECT_EQ(frames_range(1, 3),
move_range(doc, from, frames_range(2), kDocumentRangeBefore)); move_range(doc, from, frames_range(2), kDocRangeBefore));
EXPECT_FRAME_ORDER6(0, 1, 2, 5, 3, 4); EXPECT_FRAME_ORDER6(0, 1, 2, 5, 3, 4);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -860,7 +860,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move 1,2,5 after 2... // Move 1,2,5 after 2...
EXPECT_EQ(frames_range(1, 3), EXPECT_EQ(frames_range(1, 3),
move_range(doc, from, frames_range(2), kDocumentRangeAfter)); move_range(doc, from, frames_range(2), kDocRangeAfter));
EXPECT_FRAME_ORDER6(0, 1, 2, 5, 3, 4); EXPECT_FRAME_ORDER6(0, 1, 2, 5, 3, 4);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -868,7 +868,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move 1,2,5 before 1... // Move 1,2,5 before 1...
EXPECT_EQ(frames_range(1, 3), EXPECT_EQ(frames_range(1, 3),
move_range(doc, from, frames_range(1), kDocumentRangeBefore)); move_range(doc, from, frames_range(1), kDocRangeBefore));
EXPECT_FRAME_ORDER6(0, 1, 2, 5, 3, 4); EXPECT_FRAME_ORDER6(0, 1, 2, 5, 3, 4);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -876,17 +876,17 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move 1,3,5... // Move 1,3,5...
from.clearRange(); from.clearRange();
from.startRange(nullptr, 1, DocumentRange::kFrames); from.startRange(nullptr, 1, DocRange::kFrames);
from.endRange(nullptr, 1); from.endRange(nullptr, 1);
from.startRange(nullptr, 3, DocumentRange::kFrames); from.startRange(nullptr, 3, DocRange::kFrames);
from.endRange(nullptr, 3); from.endRange(nullptr, 3);
from.startRange(nullptr, 5, DocumentRange::kFrames); from.startRange(nullptr, 5, DocRange::kFrames);
from.endRange(nullptr, 5); from.endRange(nullptr, 5);
// Move 1,3,5 before 4... // Move 1,3,5 before 4...
EXPECT_EQ(frames_range(2, 4), EXPECT_EQ(frames_range(2, 4),
move_range(doc, from, frames_range(4), kDocumentRangeBefore)); move_range(doc, from, frames_range(4), kDocRangeBefore));
EXPECT_FRAME_ORDER6(0, 2, 1, 3, 5, 4); EXPECT_FRAME_ORDER6(0, 2, 1, 3, 5, 4);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -894,7 +894,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move 1,3,5 after 4... // Move 1,3,5 after 4...
EXPECT_EQ(frames_range(3, 5), EXPECT_EQ(frames_range(3, 5),
move_range(doc, from, frames_range(4), kDocumentRangeAfter)); move_range(doc, from, frames_range(4), kDocRangeAfter));
EXPECT_FRAME_ORDER6(0, 2, 4, 1, 3, 5); EXPECT_FRAME_ORDER6(0, 2, 4, 1, 3, 5);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -902,7 +902,7 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move 1,3,5 before 5... // Move 1,3,5 before 5...
EXPECT_EQ(frames_range(3, 5), EXPECT_EQ(frames_range(3, 5),
move_range(doc, from, frames_range(5), kDocumentRangeBefore)); move_range(doc, from, frames_range(5), kDocRangeBefore));
EXPECT_FRAME_ORDER6(0, 2, 4, 1, 3, 5); EXPECT_FRAME_ORDER6(0, 2, 4, 1, 3, 5);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
@ -910,14 +910,14 @@ TEST_F(DocRangeOps, MoveFramesNonAdjacent) {
// Move 1,3,5 after 5... // Move 1,3,5 after 5...
EXPECT_EQ(frames_range(3, 5), EXPECT_EQ(frames_range(3, 5),
move_range(doc, from, frames_range(5), kDocumentRangeAfter)); move_range(doc, from, frames_range(5), kDocRangeAfter));
EXPECT_FRAME_ORDER6(0, 2, 4, 1, 3, 5); EXPECT_FRAME_ORDER6(0, 2, 4, 1, 3, 5);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
} }
TEST_F(DocRangeOps, MoveCels) { TEST_F(DocRangeOps, MoveCels) {
DocumentRangePlace ignore = kDocumentRangeBefore; DocRangePlace ignore = kDocRangeBefore;
move_range(doc, move_range(doc,
cels_range(0, 0, 0, 0), cels_range(0, 0, 0, 0),
@ -982,7 +982,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(2), EXPECT_EQ(frames_range(2),
copy_range(doc, copy_range(doc,
frames_range(0), frames_range(0),
frames_range(2, 3), kDocumentRangeBefore)); frames_range(2, 3), kDocRangeBefore));
EXPECT_FRAME_COPY1(0, 1, 0, 2, 3); EXPECT_FRAME_COPY1(0, 1, 0, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -990,7 +990,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(4), EXPECT_EQ(frames_range(4),
copy_range(doc, copy_range(doc,
frames_range(0), frames_range(0),
frames_range(2, 3), kDocumentRangeAfter)); frames_range(2, 3), kDocRangeAfter));
EXPECT_FRAME_COPY1(0, 1, 2, 3, 0); EXPECT_FRAME_COPY1(0, 1, 2, 3, 0);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -998,7 +998,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(0), EXPECT_EQ(frames_range(0),
copy_range(doc, copy_range(doc,
frames_range(3), frames_range(3),
frames_range(0, 1), kDocumentRangeBefore)); frames_range(0, 1), kDocRangeBefore));
EXPECT_FRAME_COPY1(3, 0, 1, 2, 3); EXPECT_FRAME_COPY1(3, 0, 1, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1006,7 +1006,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(2), EXPECT_EQ(frames_range(2),
copy_range(doc, copy_range(doc,
frames_range(3), frames_range(3),
frames_range(0, 1), kDocumentRangeAfter)); frames_range(0, 1), kDocRangeAfter));
EXPECT_FRAME_COPY1(0, 1, 3, 2, 3); EXPECT_FRAME_COPY1(0, 1, 3, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1016,7 +1016,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(3, 5), EXPECT_EQ(frames_range(3, 5),
copy_range(doc, copy_range(doc,
frames_range(0, 2), frames_range(0, 2),
frames_range(3), kDocumentRangeBefore)); frames_range(3), kDocRangeBefore));
EXPECT_FRAME_COPY3(0, 1, 2, 0, 1, 2, 3); EXPECT_FRAME_COPY3(0, 1, 2, 0, 1, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1024,7 +1024,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(4, 6), EXPECT_EQ(frames_range(4, 6),
copy_range(doc, copy_range(doc,
frames_range(0, 2), frames_range(0, 2),
frames_range(3), kDocumentRangeAfter)); frames_range(3), kDocRangeAfter));
EXPECT_FRAME_COPY3(0, 1, 2, 3, 0, 1, 2); EXPECT_FRAME_COPY3(0, 1, 2, 3, 0, 1, 2);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1032,7 +1032,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(0, 2), EXPECT_EQ(frames_range(0, 2),
copy_range(doc, copy_range(doc,
frames_range(1, 3), frames_range(1, 3),
frames_range(0), kDocumentRangeBefore)); frames_range(0), kDocRangeBefore));
EXPECT_FRAME_COPY3(1, 2, 3, 0, 1, 2, 3); EXPECT_FRAME_COPY3(1, 2, 3, 0, 1, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1040,7 +1040,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(1, 3), EXPECT_EQ(frames_range(1, 3),
copy_range(doc, copy_range(doc,
frames_range(1, 3), frames_range(1, 3),
frames_range(0), kDocumentRangeAfter)); frames_range(0), kDocRangeAfter));
EXPECT_FRAME_COPY3(0, 1, 2, 3, 1, 2, 3); EXPECT_FRAME_COPY3(0, 1, 2, 3, 1, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1048,7 +1048,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(0, 2), EXPECT_EQ(frames_range(0, 2),
copy_range(doc, copy_range(doc,
frames_range(0, 2), frames_range(0, 2),
frames_range(0, 2), kDocumentRangeBefore)); frames_range(0, 2), kDocRangeBefore));
EXPECT_FRAME_COPY3(0, 1, 2, 0, 1, 2, 3); EXPECT_FRAME_COPY3(0, 1, 2, 0, 1, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1056,7 +1056,7 @@ TEST_F(DocRangeOps, CopyFrames) {
EXPECT_EQ(frames_range(3, 5), EXPECT_EQ(frames_range(3, 5),
copy_range(doc, copy_range(doc,
frames_range(0, 2), frames_range(0, 2),
frames_range(0, 2), kDocumentRangeAfter)); frames_range(0, 2), kDocRangeAfter));
EXPECT_FRAME_COPY3(0, 1, 2, 0, 1, 2, 3); EXPECT_FRAME_COPY3(0, 1, 2, 0, 1, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1065,30 +1065,30 @@ TEST_F(DocRangeOps, CopyFrames) {
TEST_F(DocRangeOps, CopyFramesNonAdjacent) { TEST_F(DocRangeOps, CopyFramesNonAdjacent) {
// Copy frames 0 and 2... // Copy frames 0 and 2...
DocumentRange from; DocRange from;
from.startRange(nullptr, 0, DocumentRange::kFrames); from.endRange(nullptr, 0); from.startRange(nullptr, 0, DocRange::kFrames); from.endRange(nullptr, 0);
from.startRange(nullptr, 2, DocumentRange::kFrames); from.endRange(nullptr, 2); from.startRange(nullptr, 2, DocRange::kFrames); from.endRange(nullptr, 2);
EXPECT_EQ(frames_range(3, 4), EXPECT_EQ(frames_range(3, 4),
copy_range(doc, from, frames_range(3), kDocumentRangeBefore)); copy_range(doc, from, frames_range(3), kDocRangeBefore));
EXPECT_FRAME_COPY2(0, 1, 2, 0, 2, 3); EXPECT_FRAME_COPY2(0, 1, 2, 0, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_EQ(frames_range(4, 5), EXPECT_EQ(frames_range(4, 5),
copy_range(doc, from, frames_range(3), kDocumentRangeAfter)); copy_range(doc, from, frames_range(3), kDocRangeAfter));
EXPECT_FRAME_COPY2(0, 1, 2, 3, 0, 2); EXPECT_FRAME_COPY2(0, 1, 2, 3, 0, 2);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_EQ(frames_range(2, 3), EXPECT_EQ(frames_range(2, 3),
copy_range(doc, from, frames_range(1), kDocumentRangeAfter)); copy_range(doc, from, frames_range(1), kDocRangeAfter));
EXPECT_FRAME_COPY2(0, 1, 0, 2, 2, 3); EXPECT_FRAME_COPY2(0, 1, 0, 2, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_EQ(frames_range(1, 2), EXPECT_EQ(frames_range(1, 2),
copy_range(doc, from, frames_range(1), kDocumentRangeBefore)); copy_range(doc, from, frames_range(1), kDocRangeBefore));
EXPECT_FRAME_COPY2(0, 0, 2, 1, 2, 3); EXPECT_FRAME_COPY2(0, 0, 2, 1, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1096,17 +1096,17 @@ TEST_F(DocRangeOps, CopyFramesNonAdjacent) {
// Copy frames 1 and 3... // Copy frames 1 and 3...
from.clearRange(); from.clearRange();
from.startRange(nullptr, 1, DocumentRange::kFrames); from.endRange(nullptr, 1); from.startRange(nullptr, 1, DocRange::kFrames); from.endRange(nullptr, 1);
from.startRange(nullptr, 3, DocumentRange::kFrames); from.endRange(nullptr, 3); from.startRange(nullptr, 3, DocRange::kFrames); from.endRange(nullptr, 3);
EXPECT_EQ(frames_range(0, 1), EXPECT_EQ(frames_range(0, 1),
copy_range(doc, from, frames_range(0), kDocumentRangeBefore)); copy_range(doc, from, frames_range(0), kDocRangeBefore));
EXPECT_FRAME_COPY2(1, 3, 0, 1, 2, 3); EXPECT_FRAME_COPY2(1, 3, 0, 1, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
EXPECT_EQ(frames_range(1, 2), EXPECT_EQ(frames_range(1, 2),
copy_range(doc, from, frames_range(0), kDocumentRangeAfter)); copy_range(doc, from, frames_range(0), kDocRangeAfter));
EXPECT_FRAME_COPY2(0, 1, 3, 1, 2, 3); EXPECT_FRAME_COPY2(0, 1, 3, 1, 2, 3);
doc->undoHistory()->undo(); doc->undoHistory()->undo();
EXPECT_FRAME_ORDER(0, 1, 2, 3); EXPECT_FRAME_ORDER(0, 1, 2, 3);
@ -1169,10 +1169,10 @@ TEST(DocRangeOps2, DropInsideBugs) {
// layer3 --> layer1 // layer3 --> layer1
// layer2 layer3 // layer2 layer3
// layer1 layer2 // layer1 layer2
DocumentRange from, to; DocRange from, to;
from.selectLayer(layer1); from.selectLayer(layer1);
to.selectLayer(layer4); to.selectLayer(layer4);
move_range(doc, from, to, kDocumentRangeFirstChild); move_range(doc, from, to, kDocRangeFirstChild);
EXPECT_EQ(layer2, sprite->root()->layers()[0]); EXPECT_EQ(layer2, sprite->root()->layers()[0]);
EXPECT_EQ(layer3, sprite->root()->layers()[1]); EXPECT_EQ(layer3, sprite->root()->layers()[1]);
EXPECT_EQ(layer4, sprite->root()->layers()[2]); EXPECT_EQ(layer4, sprite->root()->layers()[2]);
@ -1184,7 +1184,7 @@ TEST(DocRangeOps2, DropInsideBugs) {
// layer2 layer2 // layer2 layer2
from.clearRange(); from.selectLayer(layer3); from.clearRange(); from.selectLayer(layer3);
to.clearRange(); to.selectLayer(layer1); to.clearRange(); to.selectLayer(layer1);
move_range(doc, from, to, kDocumentRangeBefore); move_range(doc, from, to, kDocRangeBefore);
EXPECT_EQ(layer2, sprite->root()->layers()[0]); EXPECT_EQ(layer2, sprite->root()->layers()[0]);
EXPECT_EQ(layer4, sprite->root()->layers()[1]); EXPECT_EQ(layer4, sprite->root()->layers()[1]);
EXPECT_EQ(layer3, layer4->layers()[0]); EXPECT_EQ(layer3, layer4->layers()[0]);
@ -1196,7 +1196,7 @@ TEST(DocRangeOps2, DropInsideBugs) {
// layer2 layer2 // layer2 layer2
from.clearRange(); from.selectLayer(layer1); from.clearRange(); from.selectLayer(layer1);
to.clearRange(); to.selectLayer(layer3); to.clearRange(); to.selectLayer(layer3);
move_range(doc, from, to, kDocumentRangeFirstChild); move_range(doc, from, to, kDocRangeFirstChild);
EXPECT_EQ(layer2, sprite->root()->layers()[0]); EXPECT_EQ(layer2, sprite->root()->layers()[0]);
EXPECT_EQ(layer4, sprite->root()->layers()[1]); EXPECT_EQ(layer4, sprite->root()->layers()[1]);
EXPECT_EQ(layer3, layer4->layers()[0]); EXPECT_EQ(layer3, layer4->layers()[0]);
@ -1205,7 +1205,7 @@ TEST(DocRangeOps2, DropInsideBugs) {
// move layer4 as first child of layer4 (invalid operation) // move layer4 as first child of layer4 (invalid operation)
from.clearRange(); from.selectLayer(layer4); from.clearRange(); from.selectLayer(layer4);
to.clearRange(); to.selectLayer(layer4); to.clearRange(); to.selectLayer(layer4);
move_range(doc, from, to, kDocumentRangeFirstChild); move_range(doc, from, to, kDocRangeFirstChild);
// Everything is exactly the same (no new undo operation) // Everything is exactly the same (no new undo operation)
EXPECT_EQ(layer2, sprite->root()->layers()[0]); EXPECT_EQ(layer2, sprite->root()->layers()[0]);
EXPECT_EQ(layer4, sprite->root()->layers()[1]); EXPECT_EQ(layer4, sprite->root()->layers()[1]);
@ -1215,7 +1215,7 @@ TEST(DocRangeOps2, DropInsideBugs) {
// move layer4 as first child of layer3 (invalid operation) // move layer4 as first child of layer3 (invalid operation)
from.clearRange(); from.selectLayer(layer4); from.clearRange(); from.selectLayer(layer4);
to.clearRange(); to.selectLayer(layer3); to.clearRange(); to.selectLayer(layer3);
move_range(doc, from, to, kDocumentRangeFirstChild); move_range(doc, from, to, kDocRangeFirstChild);
// Everything is exactly the same (no new undo operation) // Everything is exactly the same (no new undo operation)
EXPECT_EQ(layer2, sprite->root()->layers()[0]); EXPECT_EQ(layer2, sprite->root()->layers()[0]);
EXPECT_EQ(layer4, sprite->root()->layers()[1]); EXPECT_EQ(layer4, sprite->root()->layers()[1]);
@ -1225,7 +1225,7 @@ TEST(DocRangeOps2, DropInsideBugs) {
// move layer4 after layer1 (invalid operation) // move layer4 after layer1 (invalid operation)
from.clearRange(); from.selectLayer(layer4); from.clearRange(); from.selectLayer(layer4);
to.clearRange(); to.selectLayer(layer1); to.clearRange(); to.selectLayer(layer1);
move_range(doc, from, to, kDocumentRangeAfter); move_range(doc, from, to, kDocRangeAfter);
// Everything is exactly the same (no new undo operation) // Everything is exactly the same (no new undo operation)
EXPECT_EQ(layer2, sprite->root()->layers()[0]); EXPECT_EQ(layer2, sprite->root()->layers()[0]);
EXPECT_EQ(layer4, sprite->root()->layers()[1]); EXPECT_EQ(layer4, sprite->root()->layers()[1]);
@ -1235,7 +1235,7 @@ TEST(DocRangeOps2, DropInsideBugs) {
// move layer4 after layer1 (invalid operation) // move layer4 after layer1 (invalid operation)
from.clearRange(); from.selectLayer(layer4); from.clearRange(); from.selectLayer(layer4);
to.clearRange(); to.selectLayer(layer1); to.clearRange(); to.selectLayer(layer1);
move_range(doc, from, to, kDocumentRangeBefore); move_range(doc, from, to, kDocRangeBefore);
// Everything is exactly the same (no new undo operation) // Everything is exactly the same (no new undo operation)
EXPECT_EQ(layer2, sprite->root()->layers()[0]); EXPECT_EQ(layer2, sprite->root()->layers()[0]);
EXPECT_EQ(layer4, sprite->root()->layers()[1]); EXPECT_EQ(layer4, sprite->root()->layers()[1]);
@ -1245,7 +1245,7 @@ TEST(DocRangeOps2, DropInsideBugs) {
// move layer2 inside layer2 (invalid operation) // move layer2 inside layer2 (invalid operation)
from.clearRange(); from.selectLayer(layer2); from.clearRange(); from.selectLayer(layer2);
to.clearRange(); to.selectLayer(layer2); to.clearRange(); to.selectLayer(layer2);
move_range(doc, from, to, kDocumentRangeFirstChild); move_range(doc, from, to, kDocRangeFirstChild);
// Everything is exactly the same (no new undo operation) // Everything is exactly the same (no new undo operation)
EXPECT_EQ(layer2, sprite->root()->layers()[0]); EXPECT_EQ(layer2, sprite->root()->layers()[0]);
EXPECT_EQ(layer4, sprite->root()->layers()[1]); EXPECT_EQ(layer4, sprite->root()->layers()[1]);
@ -1301,7 +1301,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
frames_range(1, 2), frames_range(1, 2),
frames_range(0), frames_range(0),
kDocumentRangeBefore, kDocRangeBefore,
kFitOutsideTags)); kFitOutsideTags));
EXPECT_FRAME_ORDER6(1, 2, 0, 3, 4, 5); EXPECT_FRAME_ORDER6(1, 2, 0, 3, 4, 5);
EXPECT_EQ(2, a->fromFrame()); EXPECT_EQ(2, a->fromFrame());
@ -1321,7 +1321,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
frames_range(1, 2), frames_range(1, 2),
frames_range(0), frames_range(0),
kDocumentRangeBefore, kDocRangeBefore,
kFitInsideTags)); kFitInsideTags));
EXPECT_FRAME_ORDER6(1, 2, 0, 3, 4, 5); EXPECT_FRAME_ORDER6(1, 2, 0, 3, 4, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1336,7 +1336,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(2), frames_range(2),
kDocumentRangeAfter, kDocRangeAfter,
kFitInsideTags)); kFitInsideTags));
EXPECT_FRAME_ORDER6(2, 0, 1, 3, 4, 5); EXPECT_FRAME_ORDER6(2, 0, 1, 3, 4, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1351,7 +1351,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(2), frames_range(2),
kDocumentRangeAfter, kDocRangeAfter,
kFitOutsideTags)); kFitOutsideTags));
EXPECT_FRAME_ORDER6(2, 0, 1, 3, 4, 5); EXPECT_FRAME_ORDER6(2, 0, 1, 3, 4, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1365,7 +1365,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(3), frames_range(3),
kDocumentRangeBefore, kDocRangeBefore,
kFitOutsideTags)); kFitOutsideTags));
EXPECT_FRAME_ORDER6(2, 0, 1, 3, 4, 5); EXPECT_FRAME_ORDER6(2, 0, 1, 3, 4, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1379,7 +1379,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
frames_range(2, 3), frames_range(2, 3),
frames_range(2), frames_range(2),
kDocumentRangeAfter, kDocRangeAfter,
kFitOutsideTags)); kFitOutsideTags));
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1393,7 +1393,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
frames_range(2, 3), frames_range(2, 3),
frames_range(3), frames_range(3),
kDocumentRangeBefore, kDocRangeBefore,
kFitOutsideTags)); kFitOutsideTags));
EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5); EXPECT_FRAME_ORDER6(0, 1, 2, 3, 4, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1408,7 +1408,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(5), frames_range(5),
kDocumentRangeAfter, kDocRangeAfter,
kFitInsideTags)); kFitInsideTags));
EXPECT_FRAME_ORDER6(2, 3, 4, 5, 0, 1); EXPECT_FRAME_ORDER6(2, 3, 4, 5, 0, 1);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1423,7 +1423,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
frames_range(0, 1), frames_range(0, 1),
frames_range(5), frames_range(5),
kDocumentRangeAfter, kDocRangeAfter,
kFitOutsideTags)); kFitOutsideTags));
EXPECT_FRAME_ORDER6(2, 3, 4, 5, 0, 1); EXPECT_FRAME_ORDER6(2, 3, 4, 5, 0, 1);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1434,14 +1434,14 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
doc->undoHistory()->undo(); doc->undoHistory()->undo();
// Put frame 1 and 4 in the middle of both tags (outside) // Put frame 1 and 4 in the middle of both tags (outside)
DocumentRange from; DocRange from;
from.startRange(nullptr, 1, DocumentRange::kFrames); from.endRange(nullptr, 1); from.startRange(nullptr, 1, DocRange::kFrames); from.endRange(nullptr, 1);
from.startRange(nullptr, 4, DocumentRange::kFrames); from.endRange(nullptr, 4); from.startRange(nullptr, 4, DocRange::kFrames); from.endRange(nullptr, 4);
EXPECT_EQ(frames_range(2, 3), EXPECT_EQ(frames_range(2, 3),
move_range(doc, move_range(doc,
from, from,
frames_range(2), frames_range(2),
kDocumentRangeAfter, kDocRangeAfter,
kFitOutsideTags)); kFitOutsideTags));
EXPECT_FRAME_ORDER6(0, 2, 1, 4, 3, 5); EXPECT_FRAME_ORDER6(0, 2, 1, 4, 3, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1456,7 +1456,7 @@ TEST_F(DocRangeOps, MoveRangeWithTags) {
move_range(doc, move_range(doc,
from, from,
frames_range(3), frames_range(3),
kDocumentRangeBefore, kDocRangeBefore,
kFitInsideTags)); kFitInsideTags));
EXPECT_FRAME_ORDER6(0, 2, 1, 4, 3, 5); EXPECT_FRAME_ORDER6(0, 2, 1, 4, 3, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1483,7 +1483,7 @@ TEST_F(DocRangeOps, CopyRangeWithTags) {
copy_range(doc, copy_range(doc,
frames_range(1), frames_range(1),
frames_range(0), frames_range(0),
kDocumentRangeBefore, kDocRangeBefore,
kFitOutsideTags)); kFitOutsideTags));
EXPECT_FRAME_COPY3(1, 0, 1, 2, 3, 4, 5); EXPECT_FRAME_COPY3(1, 0, 1, 2, 3, 4, 5);
EXPECT_EQ(1, a->fromFrame()); EXPECT_EQ(1, a->fromFrame());
@ -1498,7 +1498,7 @@ TEST_F(DocRangeOps, CopyRangeWithTags) {
copy_range(doc, copy_range(doc,
frames_range(1), frames_range(1),
frames_range(0), frames_range(0),
kDocumentRangeBefore, kDocRangeBefore,
kFitInsideTags)); kFitInsideTags));
EXPECT_FRAME_COPY3(1, 0, 1, 2, 3, 4, 5); EXPECT_FRAME_COPY3(1, 0, 1, 2, 3, 4, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());
@ -1513,7 +1513,7 @@ TEST_F(DocRangeOps, CopyRangeWithTags) {
copy_range(doc, copy_range(doc,
frames_range(1), frames_range(1),
frames_range(2), frames_range(2),
kDocumentRangeAfter, kDocRangeAfter,
kFitOutsideTags)); kFitOutsideTags));
EXPECT_FRAME_COPY3(0, 1, 2, 1, 3, 4, 5); EXPECT_FRAME_COPY3(0, 1, 2, 1, 3, 4, 5);
EXPECT_EQ(0, a->fromFrame()); EXPECT_EQ(0, a->fromFrame());

View File

@ -187,7 +187,7 @@ SpritePosition DocUndo::nextRedoSpritePosition() const
return SpritePosition(); return SpritePosition();
} }
std::istream* DocUndo::nextUndoDocumentRange() const std::istream* DocUndo::nextUndoDocRange() const
{ {
const undo::UndoState* state = nextUndo(); const undo::UndoState* state = nextUndo();
if (state) if (state)
@ -196,7 +196,7 @@ std::istream* DocUndo::nextUndoDocumentRange() const
return nullptr; return nullptr;
} }
std::istream* DocUndo::nextRedoDocumentRange() const std::istream* DocUndo::nextRedoDocRange() const
{ {
const undo::UndoState* state = nextRedo(); const undo::UndoState* state = nextRedo();
if (state) if (state)

View File

@ -8,7 +8,7 @@
#define APP_DOCUMENT_UNDO_H_INCLUDED #define APP_DOCUMENT_UNDO_H_INCLUDED
#pragma once #pragma once
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/sprite_position.h" #include "app/sprite_position.h"
#include "base/disable_copying.h" #include "base/disable_copying.h"
#include "base/unique_ptr.h" #include "base/unique_ptr.h"
@ -53,8 +53,8 @@ namespace app {
SpritePosition nextUndoSpritePosition() const; SpritePosition nextUndoSpritePosition() const;
SpritePosition nextRedoSpritePosition() const; SpritePosition nextRedoSpritePosition() const;
std::istream* nextUndoDocumentRange() const; std::istream* nextUndoDocRange() const;
std::istream* nextRedoDocumentRange() const; std::istream* nextRedoDocRange() const;
Cmd* lastExecutedCmd() const; Cmd* lastExecutedCmd() const;

View File

@ -1,43 +0,0 @@
// Aseprite
// Copyright (C) 2001-2018 David Capello
//
// This program is distributed under the terms of
// the End-User License Agreement for Aseprite.
#ifndef APP_DOCUMENT_RANGE_OPS_H_INCLUDED
#define APP_DOCUMENT_RANGE_OPS_H_INCLUDED
#pragma once
#include "app/tags_handling.h"
#include <vector>
namespace app {
class Document;
class DocumentRange;
enum DocumentRangePlace {
kDocumentRangeBefore,
kDocumentRangeAfter,
kDocumentRangeFirstChild,
};
// These functions returns the new location of the "from" range or
// throws an std::runtime_error() in case that the operation cannot
// be done. (E.g. the background layer cannot be moved.)
DocumentRange move_range(Document* doc,
const DocumentRange& from,
const DocumentRange& to,
const DocumentRangePlace place,
const TagsHandling tagsHandling = kDefaultTagsAdjustment);
DocumentRange copy_range(Document* doc,
const DocumentRange& from,
const DocumentRange& to,
const DocumentRangePlace place,
const TagsHandling tagsHandling = kDefaultTagsAdjustment);
void reverse_frames(Document* doc, const DocumentRange& range);
} // namespace app
#endif

View File

@ -60,10 +60,10 @@ Transaction::~Transaction()
// Used to set the document range after all the transaction is // Used to set the document range after all the transaction is
// executed and before the commit. This range is stored in // executed and before the commit. This range is stored in
// CmdTransaction to recover it on Edit > Redo. // CmdTransaction to recover it on Edit > Redo.
void Transaction::setNewDocumentRange(const DocumentRange& range) void Transaction::setNewDocRange(const DocRange& range)
{ {
ASSERT(m_cmds); ASSERT(m_cmds);
m_cmds->setNewDocumentRange(range); m_cmds->setNewDocRange(range);
} }
void Transaction::commit() void Transaction::commit()

View File

@ -15,7 +15,7 @@ namespace app {
class Cmd; class Cmd;
class CmdTransaction; class CmdTransaction;
class Context; class Context;
class DocumentRange; class DocRange;
class DocUndo; class DocUndo;
enum Modification { enum Modification {
@ -49,7 +49,7 @@ namespace app {
// Can be used to change the new document range resulting from // Can be used to change the new document range resulting from
// executing this transaction. This range can be used then in // executing this transaction. This range can be used then in
// undo/redo operations to restore the Timeline selection/range. // undo/redo operations to restore the Timeline selection/range.
void setNewDocumentRange(const DocumentRange& range); void setNewDocRange(const DocRange& range);
// This must be called to commit all the changes, so the undo will // This must be called to commit all the changes, so the undo will
// be finally added in the sprite. // be finally added in the sprite.

View File

@ -1,5 +1,5 @@
// Aseprite // Aseprite
// Copyright (C) 2001-2017 David Capello // Copyright (C) 2001-2018 David Capello
// //
// This program is distributed under the terms of // This program is distributed under the terms of
// the End-User License Agreement for Aseprite. // the End-User License Agreement for Aseprite.
@ -14,7 +14,7 @@
#include "app/cmd/set_cel_bounds.h" #include "app/cmd/set_cel_bounds.h"
#include "app/context_access.h" #include "app/context_access.h"
#include "app/doc_api.h" #include "app/doc_api.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/transaction.h" #include "app/transaction.h"
#include "app/ui/editor/editor.h" #include "app/ui/editor/editor.h"
#include "app/ui/editor/editor_customization_delegate.h" #include "app/ui/editor/editor_customization_delegate.h"
@ -43,13 +43,13 @@ MovingCelCollect::MovingCelCollect(Editor* editor, Layer* layer)
if (layer && layer->isImage()) if (layer && layer->isImage())
m_mainCel = layer->cel(editor->frame()); m_mainCel = layer->cel(editor->frame());
DocumentRange range = App::instance()->timeline()->range(); DocRange range = App::instance()->timeline()->range();
if (!range.enabled()) { if (!range.enabled()) {
range.startRange(editor->layer(), editor->frame(), DocumentRange::kCels); range.startRange(editor->layer(), editor->frame(), DocRange::kCels);
range.endRange(editor->layer(), editor->frame()); range.endRange(editor->layer(), editor->frame());
} }
DocumentRange range2 = range; DocRange range2 = range;
for (Layer* layer : range.selectedLayers()) { for (Layer* layer : range.selectedLayers()) {
if (layer && layer->isGroup()) { if (layer && layer->isGroup()) {
LayerList childrenList; LayerList childrenList;

View File

@ -16,7 +16,7 @@
#include "app/commands/cmd_eyedropper.h" #include "app/commands/cmd_eyedropper.h"
#include "app/commands/commands.h" #include "app/commands/commands.h"
#include "app/commands/params.h" #include "app/commands/params.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/ini_file.h" #include "app/ini_file.h"
#include "app/pref/preferences.h" #include "app/pref/preferences.h"
#include "app/tools/active_tool.h" #include "app/tools/active_tool.h"

View File

@ -14,7 +14,7 @@
#include "app/context_access.h" #include "app/context_access.h"
#include "app/doc_event.h" #include "app/doc_event.h"
#include "app/document_access.h" #include "app/document_access.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/modules/editors.h" #include "app/modules/editors.h"
#include "app/modules/gfx.h" #include "app/modules/gfx.h"
#include "app/modules/gui.h" #include "app/modules/gui.h"

View File

@ -18,11 +18,11 @@
#include "app/commands/params.h" #include "app/commands/params.h"
#include "app/console.h" #include "app/console.h"
#include "app/context_access.h" #include "app/context_access.h"
#include "app/doc_api.h"
#include "app/doc_event.h" #include "app/doc_event.h"
#include "app/doc_range_ops.h"
#include "app/doc_undo.h" #include "app/doc_undo.h"
#include "app/document.h" #include "app/document.h"
#include "app/doc_api.h"
#include "app/document_range_ops.h"
#include "app/loop_tag.h" #include "app/loop_tag.h"
#include "app/modules/editors.h" #include "app/modules/editors.h"
#include "app/modules/gfx.h" #include "app/modules/gfx.h"
@ -593,7 +593,7 @@ bool Timeline::onProcessMessage(Message* msg)
case kTimerMessage: case kTimerMessage:
if (static_cast<TimerMessage*>(msg)->timer() == &m_clipboard_timer) { if (static_cast<TimerMessage*>(msg)->timer() == &m_clipboard_timer) {
Document* clipboard_document; Document* clipboard_document;
DocumentRange clipboard_range; DocRange clipboard_range;
clipboard::get_document_range_info( clipboard::get_document_range_info(
&clipboard_document, &clipboard_document,
&clipboard_range); &clipboard_range);
@ -1880,7 +1880,7 @@ void Timeline::drawPart(ui::Graphics* g, const gfx::Rect& bounds,
void Timeline::drawClipboardRange(ui::Graphics* g) void Timeline::drawClipboardRange(ui::Graphics* g)
{ {
Document* clipboard_document; Document* clipboard_document;
DocumentRange clipboard_range; DocRange clipboard_range;
clipboard::get_document_range_info( clipboard::get_document_range_info(
&clipboard_document, &clipboard_document,
&clipboard_range); &clipboard_range);
@ -2386,7 +2386,7 @@ void Timeline::drawFrameTags(ui::Graphics* g)
int dx = 0, dw = 0; int dx = 0, dw = 0;
if (m_dropTarget.outside && if (m_dropTarget.outside &&
m_dropTarget.hhit != DropTarget::HNone && m_dropTarget.hhit != DropTarget::HNone &&
m_dropRange.type() == DocumentRange::kFrames) { m_dropRange.type() == DocRange::kFrames) {
switch (m_dropTarget.hhit) { switch (m_dropTarget.hhit) {
case DropTarget::Before: case DropTarget::Before:
if (m_dropRange.firstFrame() == frameTag->fromFrame()) { if (m_dropRange.firstFrame() == frameTag->fromFrame()) {
@ -3613,7 +3613,7 @@ void Timeline::dropRange(DropOp op)
{ {
bool copy = (op == Timeline::kCopy); bool copy = (op == Timeline::kCopy);
Range newFromRange; Range newFromRange;
DocumentRangePlace place = kDocumentRangeAfter; DocRangePlace place = kDocRangeAfter;
Range dropRange = m_dropRange; Range dropRange = m_dropRange;
bool outside = m_dropTarget.outside; bool outside = m_dropTarget.outside;
@ -3621,19 +3621,19 @@ void Timeline::dropRange(DropOp op)
case Range::kFrames: case Range::kFrames:
if (m_dropTarget.hhit == DropTarget::Before) if (m_dropTarget.hhit == DropTarget::Before)
place = kDocumentRangeBefore; place = kDocRangeBefore;
break; break;
case Range::kLayers: case Range::kLayers:
switch (m_dropTarget.vhit) { switch (m_dropTarget.vhit) {
case DropTarget::Bottom: case DropTarget::Bottom:
place = kDocumentRangeBefore; place = kDocRangeBefore;
break; break;
case DropTarget::FirstChild: case DropTarget::FirstChild:
place = kDocumentRangeFirstChild; place = kDocRangeFirstChild;
break; break;
case DropTarget::VeryBottom: case DropTarget::VeryBottom:
place = kDocumentRangeBefore; place = kDocRangeBefore;
{ {
Layer* layer = m_sprite->root()->firstLayer(); Layer* layer = m_sprite->root()->firstLayer();
dropRange.clearRange(); dropRange.clearRange();
@ -3792,7 +3792,7 @@ void Timeline::updateDropRange(const gfx::Point& pt)
void Timeline::clearClipboardRange() void Timeline::clearClipboardRange()
{ {
Document* clipboard_document; Document* clipboard_document;
DocumentRange clipboard_range; DocRange clipboard_range;
clipboard::get_document_range_info( clipboard::get_document_range_info(
&clipboard_document, &clipboard_document,
&clipboard_range); &clipboard_range);
@ -3940,7 +3940,7 @@ bool Timeline::onCanCopy(Context* ctx)
bool Timeline::onCanPaste(Context* ctx) bool Timeline::onCanPaste(Context* ctx)
{ {
return return
(clipboard::get_current_format() == clipboard::ClipboardDocumentRange && (clipboard::get_current_format() == clipboard::ClipboardDocRange &&
ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable)); ctx->checkFlags(ContextFlags::ActiveDocumentIsWritable));
} }
@ -3968,7 +3968,7 @@ bool Timeline::onCopy(Context* ctx)
bool Timeline::onPaste(Context* ctx) bool Timeline::onPaste(Context* ctx)
{ {
if (clipboard::get_current_format() == clipboard::ClipboardDocumentRange) { if (clipboard::get_current_format() == clipboard::ClipboardDocRange) {
clipboard::paste(); clipboard::paste();
return true; return true;
} }
@ -3984,13 +3984,13 @@ bool Timeline::onClear(Context* ctx)
Command* cmd = nullptr; Command* cmd = nullptr;
switch (m_range.type()) { switch (m_range.type()) {
case DocumentRange::kCels: case DocRange::kCels:
cmd = Commands::instance()->byId(CommandId::ClearCel()); cmd = Commands::instance()->byId(CommandId::ClearCel());
break; break;
case DocumentRange::kFrames: case DocRange::kFrames:
cmd = Commands::instance()->byId(CommandId::RemoveFrame()); cmd = Commands::instance()->byId(CommandId::RemoveFrame());
break; break;
case DocumentRange::kLayers: case DocRange::kLayers:
cmd = Commands::instance()->byId(CommandId::RemoveLayer()); cmd = Commands::instance()->byId(CommandId::RemoveLayer());
break; break;
} }

View File

@ -10,7 +10,7 @@
#include "app/doc_observer.h" #include "app/doc_observer.h"
#include "app/docs_observer.h" #include "app/docs_observer.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/loop_tag.h" #include "app/loop_tag.h"
#include "app/pref/preferences.h" #include "app/pref/preferences.h"
#include "app/ui/editor/editor_observer.h" #include "app/ui/editor/editor_observer.h"
@ -62,7 +62,7 @@ namespace app {
public InputChainElement, public InputChainElement,
public FrameTagProvider { public FrameTagProvider {
public: public:
typedef DocumentRange Range; typedef DocRange Range;
enum State { enum State {
STATE_STANDBY, STATE_STANDBY,

View File

@ -225,9 +225,9 @@ void UIContext::onGetActiveSite(Site* site) const
if (timeline && if (timeline &&
timeline->range().enabled()) { timeline->range().enabled()) {
switch (timeline->range().type()) { switch (timeline->range().type()) {
case DocumentRange::kCels: site->focus(Site::InCels); break; case DocRange::kCels: site->focus(Site::InCels); break;
case DocumentRange::kFrames: site->focus(Site::InFrames); break; case DocRange::kFrames: site->focus(Site::InFrames); break;
case DocumentRange::kLayers: site->focus(Site::InLayers); break; case DocRange::kLayers: site->focus(Site::InLayers); break;
} }
site->selectedLayers(timeline->selectedLayers()); site->selectedLayers(timeline->selectedLayers());
site->selectedFrames(timeline->selectedFrames()); site->selectedFrames(timeline->selectedFrames());

View File

@ -14,10 +14,10 @@
#include "app/cmd/trim_cel.h" #include "app/cmd/trim_cel.h"
#include "app/console.h" #include "app/console.h"
#include "app/context_access.h" #include "app/context_access.h"
#include "app/document.h"
#include "app/doc_api.h" #include "app/doc_api.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "app/document_range_ops.h" #include "app/doc_range_ops.h"
#include "app/document.h"
#include "app/modules/editors.h" #include "app/modules/editors.h"
#include "app/modules/gfx.h" #include "app/modules/gfx.h"
#include "app/modules/gui.h" #include "app/modules/gui.h"
@ -68,13 +68,13 @@ namespace {
m_doc = nullptr; m_doc = nullptr;
} }
void setRange(Document* doc, const DocumentRange& range) { void setRange(Document* doc, const DocRange& range) {
m_doc = doc; m_doc = doc;
m_range = range; m_range = range;
} }
Document* document() const { return m_doc; } Document* document() const { return m_doc; }
DocumentRange range() const { return m_range; } DocRange range() const { return m_range; }
// DocsObserver impl // DocsObserver impl
void onRemoveDocument(Document* doc) override { void onRemoveDocument(Document* doc) override {
@ -84,7 +84,7 @@ namespace {
private: private:
Document* m_doc; Document* m_doc;
DocumentRange m_range; DocRange m_range;
}; };
} }
@ -216,14 +216,14 @@ ClipboardFormat get_current_format()
else if (clipboard_image) else if (clipboard_image)
return ClipboardImage; return ClipboardImage;
else if (clipboard_range.valid()) else if (clipboard_range.valid())
return ClipboardDocumentRange; return ClipboardDocRange;
else if (clipboard_palette && clipboard_picks.picks()) else if (clipboard_palette && clipboard_picks.picks())
return ClipboardPaletteEntries; return ClipboardPaletteEntries;
else else
return ClipboardNone; return ClipboardNone;
} }
void get_document_range_info(Document** document, DocumentRange* range) void get_document_range_info(Document** document, DocRange* range)
{ {
if (clipboard_range.valid()) { if (clipboard_range.valid()) {
*document = clipboard_range.document(); *document = clipboard_range.document();
@ -285,7 +285,7 @@ void copy_merged(const ContextReader& reader)
copy_from_document(*reader.site(), true); copy_from_document(*reader.site(), true);
} }
void copy_range(const ContextReader& reader, const DocumentRange& range) void copy_range(const ContextReader& reader, const DocRange& range)
{ {
ASSERT(reader.document() != NULL); ASSERT(reader.document() != NULL);
@ -376,19 +376,19 @@ void paste()
break; break;
} }
case clipboard::ClipboardDocumentRange: { case clipboard::ClipboardDocRange: {
DocumentRange srcRange = clipboard_range.range(); DocRange srcRange = clipboard_range.range();
Document* srcDoc = clipboard_range.document(); Document* srcDoc = clipboard_range.document();
Sprite* srcSpr = srcDoc->sprite(); Sprite* srcSpr = srcDoc->sprite();
switch (srcRange.type()) { switch (srcRange.type()) {
case DocumentRange::kCels: { case DocRange::kCels: {
Layer* dstLayer = editor->layer(); Layer* dstLayer = editor->layer();
frame_t dstFrameFirst = editor->frame(); frame_t dstFrameFirst = editor->frame();
DocumentRange dstRange; DocRange dstRange;
dstRange.startRange(dstLayer, dstFrameFirst, DocumentRange::kCels); dstRange.startRange(dstLayer, dstFrameFirst, DocRange::kCels);
for (layer_t i=1; i<srcRange.layers(); ++i) { for (layer_t i=1; i<srcRange.layers(); ++i) {
dstLayer = dstLayer->getPreviousBrowsable(); dstLayer = dstLayer->getPreviousBrowsable();
if (dstLayer == nullptr) if (dstLayer == nullptr)
@ -401,7 +401,7 @@ void paste()
if (srcDoc == dstDoc) { if (srcDoc == dstDoc) {
// This is the app::copy_range (not clipboard::copy_range()). // This is the app::copy_range (not clipboard::copy_range()).
if (srcRange.layers() == dstRange.layers()) if (srcRange.layers() == dstRange.layers())
app::copy_range(srcDoc, srcRange, dstRange, kDocumentRangeBefore); app::copy_range(srcDoc, srcRange, dstRange, kDocRangeBefore);
editor->invalidate(); editor->invalidate();
return; return;
} }
@ -485,16 +485,16 @@ void paste()
break; break;
} }
case DocumentRange::kFrames: { case DocRange::kFrames: {
frame_t dstFrame = editor->frame(); frame_t dstFrame = editor->frame();
// We use a DocumentRange operation to copy frames inside // We use a DocRange operation to copy frames inside
// the same sprite. // the same sprite.
if (srcSpr == dstSpr) { if (srcSpr == dstSpr) {
DocumentRange dstRange; DocRange dstRange;
dstRange.startRange(nullptr, dstFrame, DocumentRange::kFrames); dstRange.startRange(nullptr, dstFrame, DocRange::kFrames);
dstRange.endRange(nullptr, dstFrame); dstRange.endRange(nullptr, dstFrame);
app::copy_range(srcDoc, srcRange, dstRange, kDocumentRangeBefore); app::copy_range(srcDoc, srcRange, dstRange, kDocRangeBefore);
break; break;
} }
@ -537,7 +537,7 @@ void paste()
break; break;
} }
case DocumentRange::kLayers: { case DocRange::kLayers: {
if (srcDoc->colorMode() != dstDoc->colorMode()) if (srcDoc->colorMode() != dstDoc->colorMode())
throw std::runtime_error("You cannot copy layers of document with different color modes"); throw std::runtime_error("You cannot copy layers of document with different color modes");

View File

@ -24,7 +24,7 @@ namespace app {
class Document; class Document;
class ContextReader; class ContextReader;
class ContextWriter; class ContextWriter;
class DocumentRange; class DocRange;
namespace clipboard { namespace clipboard {
using namespace doc; using namespace doc;
@ -32,7 +32,7 @@ namespace app {
enum ClipboardFormat { enum ClipboardFormat {
ClipboardNone, ClipboardNone,
ClipboardImage, ClipboardImage,
ClipboardDocumentRange, ClipboardDocRange,
ClipboardPaletteEntries, ClipboardPaletteEntries,
}; };
@ -52,13 +52,13 @@ namespace app {
}; };
ClipboardFormat get_current_format(); ClipboardFormat get_current_format();
void get_document_range_info(Document** document, DocumentRange* range); void get_document_range_info(Document** document, DocRange* range);
void clear_content(); void clear_content();
void cut(ContextWriter& context); void cut(ContextWriter& context);
void copy(const ContextReader& context); void copy(const ContextReader& context);
void copy_merged(const ContextReader& context); void copy_merged(const ContextReader& context);
void copy_range(const ContextReader& context, const DocumentRange& range); void copy_range(const ContextReader& context, const DocRange& range);
void copy_image(const Image* image, const Mask* mask, const Palette* palette); void copy_image(const Image* image, const Mask* mask, const Palette* palette);
void copy_palette(const Palette* palette, const PalettePicks& picks); void copy_palette(const Palette* palette, const PalettePicks& picks);
void paste(); void paste();

View File

@ -1,5 +1,5 @@
// Aseprite // Aseprite
// Copyright (C) 2001-2017 David Capello // Copyright (C) 2001-2018 David Capello
// //
// This program is distributed under the terms of // This program is distributed under the terms of
// the End-User License Agreement for Aseprite. // the End-User License Agreement for Aseprite.
@ -12,7 +12,7 @@
#include "app/context_access.h" #include "app/context_access.h"
#include "app/document.h" #include "app/document.h"
#include "app/document_range.h" #include "app/doc_range.h"
#include "doc/cel.h" #include "doc/cel.h"
#include "doc/layer.h" #include "doc/layer.h"
#include "doc/sprite.h" #include "doc/sprite.h"
@ -23,10 +23,10 @@ namespace app {
using namespace doc; using namespace doc;
// TODO the DocumentRange should be "iteratable" to replace this function // TODO the DocRange should be "iteratable" to replace this function
CelList get_unlocked_unique_cels(Sprite* sprite, const DocumentRange& inrange) CelList get_unlocked_unique_cels(Sprite* sprite, const DocRange& inrange)
{ {
DocumentRange range = inrange; DocRange range = inrange;
CelList cels; CelList cels;
if (!range.convertToCels(sprite)) if (!range.convertToCels(sprite))
return cels; return cels;

View File

@ -1,5 +1,5 @@
// Aseprite // Aseprite
// Copyright (C) 2001-2017 David Capello // Copyright (C) 2001-2018 David Capello
// //
// This program is distributed under the terms of // This program is distributed under the terms of
// the End-User License Agreement for Aseprite. // the End-User License Agreement for Aseprite.
@ -19,9 +19,9 @@ namespace doc {
namespace app { namespace app {
using namespace doc; using namespace doc;
class DocumentRange; class DocRange;
doc::CelList get_unlocked_unique_cels(doc::Sprite* sprite, const DocumentRange& range); doc::CelList get_unlocked_unique_cels(doc::Sprite* sprite, const DocRange& range);
} // namespace app } // namespace app