diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 5697c8ce8..e17727fd6 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -503,6 +503,7 @@ add_library(app-lib document_range.cpp document_range_ops.cpp document_undo.cpp + documents.cpp extensions.cpp extra_cel.cpp file/file.cpp @@ -534,6 +535,7 @@ add_library(app-lib resource_finder.cpp restore_visible_layers.cpp shade.cpp + site.cpp snap_to_grid.cpp sprite_job.cpp thumbnail_generator.cpp diff --git a/src/app/app.cpp b/src/app/app.cpp index b5558cb2a..f056771a9 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -35,6 +35,7 @@ #include "app/recent_files.h" #include "app/resource_finder.h" #include "app/send_crash.h" +#include "app/site.h" #include "app/tools/active_tool.h" #include "app/tools/tool_box.h" #include "app/ui/backup_indicator.h" @@ -56,7 +57,6 @@ #include "base/scoped_lock.h" #include "base/split_string.h" #include "base/unique_ptr.h" -#include "doc/site.h" #include "doc/sprite.h" #include "fmt/format.h" #include "render/render.h" @@ -361,9 +361,9 @@ void App::run() #endif // ENABLE_SCRIPTING // Destroy all documents in the UIContext. - const doc::Documents& docs = m_modules->m_context.documents(); + const Documents& docs = m_modules->m_context.documents(); while (!docs.empty()) { - doc::Document* doc = docs.back(); + Document* doc = docs.back(); // First we close the document. In this way we receive recent // notifications related to the document as an app::Document. If diff --git a/src/app/cmd.h b/src/app/cmd.h index 45f873cef..6af33ab35 100644 --- a/src/app/cmd.h +++ b/src/app/cmd.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2015 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -9,12 +9,12 @@ #pragma once #include "base/disable_copying.h" -#include "doc/sprite_position.h" #include "undo/undo_command.h" #include namespace app { + class Context; class Cmd : public undo::UndoCommand { diff --git a/src/app/cmd/add_cel.cpp b/src/app/cmd/add_cel.cpp index c02363fe8..5e061a534 100644 --- a/src/app/cmd/add_cel.cpp +++ b/src/app/cmd/add_cel.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,12 +10,12 @@ #include "app/cmd/add_cel.h" +#include "app/doc_event.h" +#include "app/document.h" #include "base/serialization.h" #include "doc/cel.h" #include "doc/cel_data_io.h" #include "doc/cel_io.h" -#include "doc/doc_event.h" -#include "doc/document.h" #include "doc/image_io.h" #include "doc/layer.h" #include "doc/subobjects_io.h" @@ -93,7 +93,7 @@ void AddCel::addCel(Layer* layer, Cel* cel) static_cast(layer)->addCel(cel); layer->incrementVersion(); - Document* doc = cel->document(); + auto doc = static_cast(cel->document()); DocEvent ev(doc); ev.sprite(layer->sprite()); ev.layer(layer); @@ -103,7 +103,7 @@ void AddCel::addCel(Layer* layer, Cel* cel) void AddCel::removeCel(Layer* layer, Cel* cel) { - Document* doc = cel->document(); + auto doc = static_cast(cel->document()); DocEvent ev(doc); ev.sprite(layer->sprite()); ev.layer(layer); diff --git a/src/app/cmd/add_frame.cpp b/src/app/cmd/add_frame.cpp index 8ee837b27..ee3b1b6ae 100644 --- a/src/app/cmd/add_frame.cpp +++ b/src/app/cmd/add_frame.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -11,9 +11,9 @@ #include "app/cmd/add_frame.h" #include "app/cmd/add_cel.h" +#include "app/doc_event.h" #include "app/document.h" #include "doc/cel.h" -#include "doc/doc_event.h" #include "doc/layer.h" #include "doc/primitives.h" #include "doc/sprite.h" diff --git a/src/app/cmd/add_frame_tag.cpp b/src/app/cmd/add_frame_tag.cpp index 55b59cf64..c59be0726 100644 --- a/src/app/cmd/add_frame_tag.cpp +++ b/src/app/cmd/add_frame_tag.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/add_frame_tag.h" -#include "doc/doc_event.h" -#include "doc/document.h" +#include "app/doc_event.h" +#include "app/document.h" #include "doc/frame_tag.h" #include "doc/frame_tag_io.h" #include "doc/sprite.h" @@ -37,7 +37,7 @@ void AddFrameTag::onExecute() sprite->incrementVersion(); // Notify observers about the new frame. - Document* doc = sprite->document(); + auto doc = static_cast(sprite->document()); DocEvent ev(doc); ev.sprite(sprite); ev.frameTag(frameTag); @@ -53,7 +53,7 @@ void AddFrameTag::onUndo() // Notify observers about the new frame. { - Document* doc = sprite->document(); + auto doc = static_cast(sprite->document()); DocEvent ev(doc); ev.sprite(sprite); ev.frameTag(frameTag); @@ -78,7 +78,7 @@ void AddFrameTag::onRedo() m_size = 0; // Notify observers about the new frame. - Document* doc = sprite->document(); + Document* doc = static_cast(sprite->document()); DocEvent ev(doc); ev.sprite(sprite); ev.frameTag(frameTag); diff --git a/src/app/cmd/add_layer.cpp b/src/app/cmd/add_layer.cpp index 51b047d6e..829c9f43d 100644 --- a/src/app/cmd/add_layer.cpp +++ b/src/app/cmd/add_layer.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/add_layer.h" -#include "doc/doc_event.h" -#include "doc/document.h" +#include "app/doc_event.h" +#include "app/document.h" #include "doc/layer.h" #include "doc/layer_io.h" #include "doc/subobjects_io.h" @@ -69,7 +69,7 @@ void AddLayer::addLayer(Layer* group, Layer* newLayer, Layer* afterThis) group->incrementVersion(); group->sprite()->incrementVersion(); - Document* doc = group->sprite()->document(); + auto doc = static_cast(group->sprite()->document()); DocEvent ev(doc); ev.sprite(group->sprite()); ev.layer(newLayer); @@ -78,7 +78,7 @@ void AddLayer::addLayer(Layer* group, Layer* newLayer, Layer* afterThis) void AddLayer::removeLayer(Layer* group, Layer* layer) { - Document* doc = group->sprite()->document(); + auto doc = static_cast(group->sprite()->document()); DocEvent ev(doc); ev.sprite(layer->sprite()); ev.layer(layer); diff --git a/src/app/cmd/clear_cel.cpp b/src/app/cmd/clear_cel.cpp index 4143dc165..f8c1b38a2 100644 --- a/src/app/cmd/clear_cel.cpp +++ b/src/app/cmd/clear_cel.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2015 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -24,7 +24,7 @@ using namespace doc; ClearCel::ClearCel(Cel* cel) : WithCel(cel) { - app::Document* doc = static_cast(cel->document()); + Document* doc = static_cast(cel->document()); if (cel->layer()->isBackground()) { Image* image = cel->image(); diff --git a/src/app/cmd/clear_mask.cpp b/src/app/cmd/clear_mask.cpp index 491a3ff08..10caebacf 100644 --- a/src/app/cmd/clear_mask.cpp +++ b/src/app/cmd/clear_mask.cpp @@ -27,7 +27,7 @@ using namespace doc; ClearMask::ClearMask(Cel* cel) : WithCel(cel) { - app::Document* doc = static_cast(cel->document()); + Document* doc = static_cast(cel->document()); // If the mask is empty or is not visible then we have to clear the // entire image in the cel. @@ -86,7 +86,7 @@ void ClearMask::clear() { Cel* cel = this->cel(); Image* image = m_dstImage->image(); - app::Document* doc = static_cast(cel->document()); + Document* doc = static_cast(cel->document()); Mask* mask = doc->mask(); doc::algorithm::fill_selection(image, m_offset, mask, m_bgcolor); diff --git a/src/app/cmd/clear_rect.cpp b/src/app/cmd/clear_rect.cpp index 73042686c..0be5dbd8f 100644 --- a/src/app/cmd/clear_rect.cpp +++ b/src/app/cmd/clear_rect.cpp @@ -42,7 +42,7 @@ ClearRect::ClearRect(Cel* cel, const gfx::Rect& bounds) m_dstImage.reset(new WithImage(image)); - app::Document* doc = static_cast(cel->document()); + Document* doc = static_cast(cel->document()); m_bgcolor = doc->bgColor(cel->layer()); m_copy.reset(crop_image(image, diff --git a/src/app/cmd/flip_masked_cel.cpp b/src/app/cmd/flip_masked_cel.cpp index d5f57b6fc..a2fbdc9ae 100644 --- a/src/app/cmd/flip_masked_cel.cpp +++ b/src/app/cmd/flip_masked_cel.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2015 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -24,7 +24,7 @@ namespace cmd { FlipMaskedCel::FlipMaskedCel(Cel* cel, doc::algorithm::FlipType flipType) { - app::Document* doc = static_cast(cel->document()); + Document* doc = static_cast(cel->document()); color_t bgcolor = doc->bgColor(cel->layer()); Image* image = cel->image(); Mask* mask = doc->mask(); diff --git a/src/app/cmd/move_layer.cpp b/src/app/cmd/move_layer.cpp index 82fadba1f..976a65e05 100644 --- a/src/app/cmd/move_layer.cpp +++ b/src/app/cmd/move_layer.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/move_layer.h" -#include "doc/doc_event.h" -#include "doc/document.h" +#include "app/doc_event.h" +#include "app/document.h" #include "doc/layer.h" #include "doc/sprite.h" @@ -92,7 +92,7 @@ void MoveLayer::onUndo() void MoveLayer::onFireNotifications() { Layer* layer = m_layer.layer(); - doc::Document* doc = layer->sprite()->document(); + Document* doc = static_cast(layer->sprite()->document()); DocEvent ev(doc); ev.sprite(layer->sprite()); ev.layer(layer); diff --git a/src/app/cmd/remove_frame.cpp b/src/app/cmd/remove_frame.cpp index 9fb8f5790..a6c148480 100644 --- a/src/app/cmd/remove_frame.cpp +++ b/src/app/cmd/remove_frame.cpp @@ -11,9 +11,9 @@ #include "app/cmd/remove_frame.h" #include "app/cmd/remove_cel.h" +#include "app/doc_event.h" +#include "app/document.h" #include "doc/cels_range.h" -#include "doc/doc_event.h" -#include "doc/document.h" #include "doc/sprite.h" namespace app { @@ -35,7 +35,7 @@ RemoveFrame::RemoveFrame(Sprite* sprite, frame_t frame) void RemoveFrame::onExecute() { Sprite* sprite = this->sprite(); - Document* doc = sprite->document(); + auto doc = static_cast(sprite->document()); if (m_firstTime) { m_firstTime = false; @@ -64,7 +64,7 @@ void RemoveFrame::onExecute() void RemoveFrame::onUndo() { Sprite* sprite = this->sprite(); - Document* doc = sprite->document(); + Document* doc = static_cast(sprite->document()); if (m_frameRemoved) sprite->addFrame(m_frame); diff --git a/src/app/cmd/set_cel_bounds.cpp b/src/app/cmd/set_cel_bounds.cpp index 3195bfc2b..dc5838745 100644 --- a/src/app/cmd/set_cel_bounds.cpp +++ b/src/app/cmd/set_cel_bounds.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2016 David Capello +// Copyright (C) 2016-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,9 +10,9 @@ #include "app/cmd/set_cel_bounds.h" +#include "app/doc_event.h" #include "app/document.h" #include "doc/cel.h" -#include "doc/doc_event.h" namespace app { namespace cmd { @@ -41,10 +41,11 @@ void SetCelBoundsF::onUndo() void SetCelBoundsF::onFireNotifications() { Cel* cel = this->cel(); - DocEvent ev(cel->document()); + Document* doc = static_cast(cel->document()); + DocEvent ev(doc); ev.sprite(cel->sprite()); ev.cel(cel); - cel->document()->notify_observers(&DocObserver::onCelPositionChanged, ev); + doc->notify_observers(&DocObserver::onCelPositionChanged, ev); } } // namespace cmd diff --git a/src/app/cmd/set_cel_frame.cpp b/src/app/cmd/set_cel_frame.cpp index 4984aa297..b73fb8adc 100644 --- a/src/app/cmd/set_cel_frame.cpp +++ b/src/app/cmd/set_cel_frame.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,9 +10,9 @@ #include "app/cmd/set_cel_frame.h" +#include "app/doc_event.h" +#include "app/document.h" #include "doc/cel.h" -#include "doc/doc_event.h" -#include "doc/document.h" #include "doc/layer.h" #include "doc/sprite.h" @@ -45,7 +45,7 @@ void SetCelFrame::onUndo() void SetCelFrame::onFireNotifications() { Cel* cel = this->cel(); - doc::Document* doc = cel->sprite()->document(); + auto doc = static_cast(cel->sprite()->document()); DocEvent ev(doc); ev.sprite(cel->layer()->sprite()); ev.layer(cel->layer()); diff --git a/src/app/cmd/set_cel_frame.h b/src/app/cmd/set_cel_frame.h index 14311e238..4b8a06826 100644 --- a/src/app/cmd/set_cel_frame.h +++ b/src/app/cmd/set_cel_frame.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2015 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,6 +10,7 @@ #include "app/cmd.h" #include "app/cmd/with_cel.h" +#include "doc/frame.h" namespace app { namespace cmd { diff --git a/src/app/cmd/set_cel_opacity.cpp b/src/app/cmd/set_cel_opacity.cpp index d419a5d6f..85a1be2a4 100644 --- a/src/app/cmd/set_cel_opacity.cpp +++ b/src/app/cmd/set_cel_opacity.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,9 +10,9 @@ #include "app/cmd/set_cel_opacity.h" +#include "app/doc_event.h" #include "app/document.h" #include "doc/cel.h" -#include "doc/doc_event.h" namespace app { namespace cmd { @@ -41,10 +41,11 @@ void SetCelOpacity::onUndo() void SetCelOpacity::onFireNotifications() { Cel* cel = this->cel(); - DocEvent ev(cel->document()); + Document* doc = static_cast(cel->document()); + DocEvent ev(doc); ev.sprite(cel->sprite()); ev.cel(cel); - cel->document()->notify_observers(&DocObserver::onCelOpacityChange, ev); + doc->notify_observers(&DocObserver::onCelOpacityChange, ev); } } // namespace cmd diff --git a/src/app/cmd/set_cel_position.cpp b/src/app/cmd/set_cel_position.cpp index f96528d41..863c0ae01 100644 --- a/src/app/cmd/set_cel_position.cpp +++ b/src/app/cmd/set_cel_position.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,9 +10,9 @@ #include "app/cmd/set_cel_position.h" +#include "app/doc_event.h" #include "app/document.h" #include "doc/cel.h" -#include "doc/doc_event.h" namespace app { namespace cmd { @@ -43,10 +43,11 @@ void SetCelPosition::onUndo() void SetCelPosition::onFireNotifications() { Cel* cel = this->cel(); - DocEvent ev(cel->document()); + Document* doc = static_cast(cel->document()); + DocEvent ev(doc); ev.sprite(cel->sprite()); ev.cel(cel); - cel->document()->notify_observers(&DocObserver::onCelPositionChanged, ev); + doc->notify_observers(&DocObserver::onCelPositionChanged, ev); } } // namespace cmd diff --git a/src/app/cmd/set_frame_duration.cpp b/src/app/cmd/set_frame_duration.cpp index 0e67ee2db..1188f7db3 100644 --- a/src/app/cmd/set_frame_duration.cpp +++ b/src/app/cmd/set_frame_duration.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/set_frame_duration.h" +#include "app/doc_event.h" #include "app/document.h" -#include "doc/doc_event.h" #include "doc/sprite.h" namespace app { @@ -40,7 +40,7 @@ void SetFrameDuration::onUndo() void SetFrameDuration::onFireNotifications() { Sprite* sprite = this->sprite(); - doc::Document* doc = sprite->document(); + auto doc = static_cast(sprite->document()); DocEvent ev(doc); ev.sprite(sprite); ev.frame(m_frame); diff --git a/src/app/cmd/set_layer_blend_mode.cpp b/src/app/cmd/set_layer_blend_mode.cpp index 8eb8d7d2a..e7950a809 100644 --- a/src/app/cmd/set_layer_blend_mode.cpp +++ b/src/app/cmd/set_layer_blend_mode.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/set_layer_blend_mode.h" -#include "doc/doc_event.h" -#include "doc/document.h" +#include "app/doc_event.h" +#include "app/document.h" #include "doc/layer.h" #include "doc/sprite.h" @@ -40,7 +40,7 @@ void SetLayerBlendMode::onUndo() void SetLayerBlendMode::onFireNotifications() { Layer* layer = this->layer(); - doc::Document* doc = layer->sprite()->document(); + auto doc = static_cast(layer->sprite()->document()); DocEvent ev(doc); ev.sprite(layer->sprite()); ev.layer(layer); diff --git a/src/app/cmd/set_layer_name.cpp b/src/app/cmd/set_layer_name.cpp index 56aab5575..d770bda21 100644 --- a/src/app/cmd/set_layer_name.cpp +++ b/src/app/cmd/set_layer_name.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/set_layer_name.h" -#include "doc/doc_event.h" -#include "doc/document.h" +#include "app/doc_event.h" +#include "app/document.h" #include "doc/layer.h" #include "doc/sprite.h" @@ -40,7 +40,7 @@ void SetLayerName::onUndo() void SetLayerName::onFireNotifications() { Layer* layer = this->layer(); - doc::Document* doc = layer->sprite()->document(); + Document* doc = static_cast(layer->sprite()->document()); DocEvent ev(doc); ev.sprite(layer->sprite()); ev.layer(layer); diff --git a/src/app/cmd/set_layer_opacity.cpp b/src/app/cmd/set_layer_opacity.cpp index c49eb20c0..7a6f4336e 100644 --- a/src/app/cmd/set_layer_opacity.cpp +++ b/src/app/cmd/set_layer_opacity.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/set_layer_opacity.h" -#include "doc/doc_event.h" -#include "doc/document.h" +#include "app/doc_event.h" +#include "app/document.h" #include "doc/layer.h" #include "doc/sprite.h" @@ -40,7 +40,7 @@ void SetLayerOpacity::onUndo() void SetLayerOpacity::onFireNotifications() { Layer* layer = this->layer(); - doc::Document* doc = layer->sprite()->document(); + auto doc = static_cast(layer->sprite()->document()); DocEvent ev(doc); ev.sprite(layer->sprite()); ev.layer(layer); diff --git a/src/app/cmd/set_pixel_format.cpp b/src/app/cmd/set_pixel_format.cpp index 9a520f535..f9cae5d42 100644 --- a/src/app/cmd/set_pixel_format.cpp +++ b/src/app/cmd/set_pixel_format.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -14,11 +14,11 @@ #include "app/cmd/replace_image.h" #include "app/cmd/set_cel_opacity.h" #include "app/cmd/set_palette.h" +#include "app/doc_event.h" #include "app/document.h" #include "base/unique_ptr.h" #include "doc/cel.h" #include "doc/cels_range.h" -#include "doc/doc_event.h" #include "doc/document.h" #include "doc/layer.h" #include "doc/palette.h" @@ -148,13 +148,13 @@ void SetPixelFormat::setFormat(PixelFormat format) sprite->incrementVersion(); // Regenerate extras - static_cast(sprite->document()) - ->setExtraCel(ExtraCelRef(nullptr)); + auto doc = static_cast(sprite->document()); + doc->setExtraCel(ExtraCelRef(nullptr)); // Generate notification - DocEvent ev(sprite->document()); + DocEvent ev(doc); ev.sprite(sprite); - sprite->document()->notify_observers(&DocObserver::onPixelFormatChanged, ev); + doc->notify_observers(&DocObserver::onPixelFormatChanged, ev); } } // namespace cmd diff --git a/src/app/cmd/set_pixel_ratio.cpp b/src/app/cmd/set_pixel_ratio.cpp index 2c051654f..541ddd80a 100644 --- a/src/app/cmd/set_pixel_ratio.cpp +++ b/src/app/cmd/set_pixel_ratio.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2016 David Capello +// Copyright (C) 2016-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,9 +10,9 @@ #include "app/cmd/set_pixel_ratio.h" -#include "doc/doc_event.h" -#include "doc/doc_observer.h" -#include "doc/document.h" +#include "app/doc_event.h" +#include "app/doc_observer.h" +#include "app/document.h" #include "doc/sprite.h" namespace app { @@ -44,9 +44,10 @@ void SetPixelRatio::onUndo() void SetPixelRatio::onFireNotifications() { Sprite* sprite = this->sprite(); - DocEvent ev(sprite->document()); + auto doc = static_cast(sprite->document()); + DocEvent ev(doc); ev.sprite(sprite); - sprite->document()->notify_observers(&DocObserver::onSpritePixelRatioChanged, ev); + doc->notify_observers(&DocObserver::onSpritePixelRatioChanged, ev); } } // namespace cmd diff --git a/src/app/cmd/set_slice_name.cpp b/src/app/cmd/set_slice_name.cpp index 8fe0761e9..105bcc23b 100644 --- a/src/app/cmd/set_slice_name.cpp +++ b/src/app/cmd/set_slice_name.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2017 David Capello +// Copyright (C) 2017-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,7 +10,7 @@ #include "app/cmd/set_slice_name.h" -#include "doc/doc_event.h" +#include "app/doc_event.h" #include "doc/document.h" #include "doc/slice.h" #include "doc/sprite.h" diff --git a/src/app/cmd/set_sprite_size.cpp b/src/app/cmd/set_sprite_size.cpp index 4ed3c8f42..65a9dd208 100644 --- a/src/app/cmd/set_sprite_size.cpp +++ b/src/app/cmd/set_sprite_size.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/set_sprite_size.h" +#include "app/doc_event.h" #include "app/document.h" -#include "doc/doc_event.h" #include "doc/sprite.h" namespace app { @@ -45,9 +45,10 @@ void SetSpriteSize::onUndo() void SetSpriteSize::onFireNotifications() { Sprite* sprite = this->sprite(); - DocEvent ev(sprite->document()); + auto doc = static_cast(sprite->document()); + DocEvent ev(doc); ev.sprite(sprite); - sprite->document()->notify_observers(&DocObserver::onSpriteSizeChanged, ev); + doc->notify_observers(&DocObserver::onSpriteSizeChanged, ev); } } // namespace cmd diff --git a/src/app/cmd/set_total_frames.cpp b/src/app/cmd/set_total_frames.cpp index b871014e3..dbd22ccd1 100644 --- a/src/app/cmd/set_total_frames.cpp +++ b/src/app/cmd/set_total_frames.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/set_total_frames.h" +#include "app/doc_event.h" #include "app/document.h" -#include "doc/doc_event.h" #include "doc/sprite.h" namespace app { @@ -41,7 +41,7 @@ void SetTotalFrames::onUndo() void SetTotalFrames::onFireNotifications() { Sprite* sprite = this->sprite(); - doc::Document* doc = sprite->document(); + auto doc = static_cast(sprite->document()); DocEvent ev(doc); ev.sprite(sprite); ev.frame(sprite->totalFrames()); diff --git a/src/app/cmd/set_transparent_color.cpp b/src/app/cmd/set_transparent_color.cpp index 90cc753d5..baf82d36e 100644 --- a/src/app/cmd/set_transparent_color.cpp +++ b/src/app/cmd/set_transparent_color.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,8 +10,8 @@ #include "app/cmd/set_transparent_color.h" +#include "app/doc_event.h" #include "app/document.h" -#include "doc/doc_event.h" #include "doc/sprite.h" namespace app { @@ -41,9 +41,10 @@ void SetTransparentColor::onUndo() void SetTransparentColor::onFireNotifications() { Sprite* sprite = this->sprite(); - DocEvent ev(sprite->document()); + auto doc = static_cast(sprite->document()); + DocEvent ev(doc); ev.sprite(sprite); - sprite->document()->notify_observers(&DocObserver::onSpriteTransparentColorChanged, ev); + doc->notify_observers(&DocObserver::onSpriteTransparentColorChanged, ev); } } // namespace cmd diff --git a/src/app/cmd/shift_masked_cel.cpp b/src/app/cmd/shift_masked_cel.cpp index a22014694..eac5df414 100644 --- a/src/app/cmd/shift_masked_cel.cpp +++ b/src/app/cmd/shift_masked_cel.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2015 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -41,7 +41,7 @@ void ShiftMaskedCel::shift(int dx, int dy) { Cel* cel = this->cel(); Image* image = cel->image(); - Mask* mask = static_cast(cel->document())->mask(); + Mask* mask = static_cast(cel->document())->mask(); ASSERT(mask->bitmap()); if (!mask->bitmap()) return; diff --git a/src/app/cmd_transaction.cpp b/src/app/cmd_transaction.cpp index fdebea8a8..1addb0be7 100644 --- a/src/app/cmd_transaction.cpp +++ b/src/app/cmd_transaction.cpp @@ -11,7 +11,7 @@ #include "app/cmd_transaction.h" #include "app/context.h" -#include "doc/site.h" +#include "app/site.h" #ifdef ENABLE_UI #include "app/app.h" @@ -119,10 +119,10 @@ size_t CmdTransaction::onMemSize() const return size; } -doc::SpritePosition CmdTransaction::calcSpritePosition() const +SpritePosition CmdTransaction::calcSpritePosition() const { - doc::Site site = context()->activeSite(); - return doc::SpritePosition(site.layer(), site.frame()); + Site site = context()->activeSite(); + return SpritePosition(site.layer(), site.frame()); } bool CmdTransaction::isDocumentRangeEnabled() const diff --git a/src/app/cmd_transaction.h b/src/app/cmd_transaction.h index ce5c317e1..b3e56a8b4 100644 --- a/src/app/cmd_transaction.h +++ b/src/app/cmd_transaction.h @@ -10,6 +10,7 @@ #include "app/cmd_sequence.h" #include "app/document_range.h" +#include "app/sprite_position.h" #include #include @@ -26,8 +27,8 @@ namespace app { void setNewDocumentRange(const DocumentRange& range); void commit(); - doc::SpritePosition spritePositionBeforeExecute() const { return m_spritePositionBefore; } - doc::SpritePosition spritePositionAfterExecute() const { return m_spritePositionAfter; } + SpritePosition spritePositionBeforeExecute() const { return m_spritePositionBefore; } + SpritePosition spritePositionAfterExecute() const { return m_spritePositionAfter; } std::istream* documentRangeBeforeExecute() const; std::istream* documentRangeAfterExecute() const; @@ -40,7 +41,7 @@ namespace app { size_t onMemSize() const override; private: - doc::SpritePosition calcSpritePosition() const; + SpritePosition calcSpritePosition() const; bool isDocumentRangeEnabled() const; DocumentRange calcDocumentRange() const; @@ -49,8 +50,8 @@ namespace app { std::stringstream m_after; }; - doc::SpritePosition m_spritePositionBefore; - doc::SpritePosition m_spritePositionAfter; + SpritePosition m_spritePositionBefore; + SpritePosition m_spritePositionAfter; std::unique_ptr m_ranges; std::string m_label; bool m_changeSavedState; diff --git a/src/app/color_picker.cpp b/src/app/color_picker.cpp index 9379e989a..2e44cc041 100644 --- a/src/app/color_picker.cpp +++ b/src/app/color_picker.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -12,11 +12,11 @@ #include "app/document.h" #include "app/pref/preferences.h" +#include "app/site.h" #include "app/util/wrap_point.h" #include "doc/cel.h" #include "doc/image.h" #include "doc/primitives.h" -#include "doc/site.h" #include "doc/sprite.h" #include "gfx/point.h" #include "render/get_sprite_pixel.h" @@ -60,7 +60,7 @@ ColorPicker::ColorPicker() { } -void ColorPicker::pickColor(const doc::Site& site, +void ColorPicker::pickColor(const Site& site, const gfx::PointF& _pos, const render::Projection& proj, const Mode mode) diff --git a/src/app/color_picker.h b/src/app/color_picker.h index c3ddc5441..4fdb34fdc 100644 --- a/src/app/color_picker.h +++ b/src/app/color_picker.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -12,15 +12,12 @@ #include "doc/layer.h" #include "gfx/point.h" -namespace doc { - class Site; -} - namespace render { class Projection; } namespace app { + class Site; class ColorPicker { public: @@ -32,7 +29,7 @@ namespace app { ColorPicker(); - void pickColor(const doc::Site& site, + void pickColor(const Site& site, const gfx::PointF& pos, const render::Projection& proj, const Mode mode); diff --git a/src/app/commands/cmd_cel_properties.cpp b/src/app/commands/cmd_cel_properties.cpp index 57a7a3c21..e1874548b 100644 --- a/src/app/commands/cmd_cel_properties.cpp +++ b/src/app/commands/cmd_cel_properties.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -14,6 +14,7 @@ #include "app/commands/command.h" #include "app/console.h" #include "app/context_access.h" +#include "app/doc_event.h" #include "app/document_api.h" #include "app/document_range.h" #include "app/modules/gui.h" @@ -26,7 +27,6 @@ #include "base/scoped_value.h" #include "doc/cel.h" #include "doc/cels_range.h" -#include "doc/doc_event.h" #include "doc/image.h" #include "doc/layer.h" #include "doc/sprite.h" @@ -41,9 +41,9 @@ using namespace ui; class CelPropertiesWindow; static CelPropertiesWindow* g_window = nullptr; -class CelPropertiesWindow : public app::gen::CelProperties - , public doc::ContextObserver - , public doc::DocObserver { +class CelPropertiesWindow : public app::gen::CelProperties, + public ContextObserver, + public DocObserver { public: CelPropertiesWindow() : m_timer(250, this) @@ -224,7 +224,7 @@ private: // ContextObserver impl void onActiveSiteChange(const Site& site) override { if (isVisible()) - setCel(static_cast(const_cast(site.document())), + setCel(const_cast(site.document()), const_cast(site.cel())); else if (m_document) setCel(nullptr, nullptr); diff --git a/src/app/commands/cmd_eyedropper.cpp b/src/app/commands/cmd_eyedropper.cpp index 79efb0ff5..b08854996 100644 --- a/src/app/commands/cmd_eyedropper.cpp +++ b/src/app/commands/cmd_eyedropper.cpp @@ -16,13 +16,13 @@ #include "app/commands/params.h" #include "app/modules/editors.h" #include "app/pref/preferences.h" +#include "app/site.h" #include "app/tools/tool.h" #include "app/tools/tool_box.h" #include "app/ui/color_bar.h" #include "app/ui/editor/editor.h" #include "app/ui_context.h" #include "doc/image.h" -#include "doc/site.h" #include "doc/sprite.h" #include "ui/manager.h" #include "ui/system.h" @@ -37,7 +37,7 @@ EyedropperCommand::EyedropperCommand() m_background = false; } -void EyedropperCommand::pickSample(const doc::Site& site, +void EyedropperCommand::pickSample(const Site& site, const gfx::PointF& pixelPos, const render::Projection& proj, app::Color& color) diff --git a/src/app/commands/cmd_eyedropper.h b/src/app/commands/cmd_eyedropper.h index ee3cf1145..f8a05e91f 100644 --- a/src/app/commands/cmd_eyedropper.h +++ b/src/app/commands/cmd_eyedropper.h @@ -12,16 +12,13 @@ #include "app/commands/command.h" #include "gfx/point.h" -namespace doc { - class Site; -} - namespace render { class Projection; } namespace app { class Editor; + class Site; class EyedropperCommand : public Command { public: @@ -29,7 +26,7 @@ namespace app { Command* clone() const override { return new EyedropperCommand(*this); } // Returns the color in the given sprite pos. - void pickSample(const doc::Site& site, + void pickSample(const Site& site, const gfx::PointF& pixelPos, const render::Projection& proj, app::Color& color); diff --git a/src/app/commands/cmd_layer_opacity.cpp b/src/app/commands/cmd_layer_opacity.cpp index 92927d169..e4c4b6aba 100644 --- a/src/app/commands/cmd_layer_opacity.cpp +++ b/src/app/commands/cmd_layer_opacity.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2016-2017 David Capello +// Copyright (C) 2016-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -70,7 +70,7 @@ void LayerOpacityCommand::onExecute(Context* context) { Transaction transaction(writer.context(), "Set Layer Opacity"); - // TODO the range of selected frames should be in doc::Site. + // TODO the range of selected frames should be in app::Site. SelectedLayers selLayers; auto range = App::instance()->timeline()->range(); if (range.enabled()) { diff --git a/src/app/commands/cmd_layer_properties.cpp b/src/app/commands/cmd_layer_properties.cpp index 2efa0e7de..21a3fe142 100644 --- a/src/app/commands/cmd_layer_properties.cpp +++ b/src/app/commands/cmd_layer_properties.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -16,6 +16,8 @@ #include "app/commands/command.h" #include "app/console.h" #include "app/context_access.h" +#include "app/doc_event.h" +#include "app/document.h" #include "app/modules/gui.h" #include "app/transaction.h" #include "app/ui/separator_in_view.h" @@ -24,8 +26,6 @@ #include "app/ui_context.h" #include "base/bind.h" #include "base/scoped_value.h" -#include "doc/doc_event.h" -#include "doc/document.h" #include "doc/image.h" #include "doc/layer.h" #include "doc/sprite.h" @@ -51,9 +51,9 @@ protected: class LayerPropertiesWindow; static LayerPropertiesWindow* g_window = nullptr; -class LayerPropertiesWindow : public app::gen::LayerProperties - , public doc::ContextObserver - , public doc::DocObserver { +class LayerPropertiesWindow : public app::gen::LayerProperties, + public ContextObserver, + public DocObserver { public: class BlendModeItem : public ListItem { public: diff --git a/src/app/commands/cmd_new_sprite_from_selection.cpp b/src/app/commands/cmd_new_sprite_from_selection.cpp index 3b7ca157a..6e528bbb9 100644 --- a/src/app/commands/cmd_new_sprite_from_selection.cpp +++ b/src/app/commands/cmd_new_sprite_from_selection.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -11,6 +11,7 @@ #include "app/commands/command.h" #include "app/context.h" #include "app/document.h" +#include "app/site.h" #include "app/util/new_image_from_mask.h" #include "base/fs.h" #include "doc/cel.h" @@ -18,7 +19,6 @@ #include "doc/layer.h" #include "doc/mask.h" #include "doc/palette.h" -#include "doc/site.h" #include "doc/sprite.h" #include diff --git a/src/app/commands/cmd_undo_history.cpp b/src/app/commands/cmd_undo_history.cpp index 85577bae2..4235304d2 100644 --- a/src/app/commands/cmd_undo_history.cpp +++ b/src/app/commands/cmd_undo_history.cpp @@ -12,17 +12,17 @@ #include "app/commands/command.h" #include "app/console.h" #include "app/context.h" +#include "app/context_observer.h" #include "app/document.h" #include "app/document_access.h" #include "app/document_undo.h" #include "app/document_undo_observer.h" +#include "app/documents_observer.h" #include "app/modules/gui.h" #include "app/modules/palettes.h" +#include "app/site.h" #include "base/bind.h" #include "base/mem_utils.h" -#include "doc/context_observer.h" -#include "doc/documents_observer.h" -#include "doc/site.h" #include "ui/listitem.h" #include "ui/message.h" #include "undo/undo_state.h" @@ -32,9 +32,9 @@ namespace app { class UndoHistoryWindow : public app::gen::UndoHistory, - public doc::ContextObserver, - public doc::DocumentsObserver, - public app::DocumentUndoObserver { + public ContextObserver, + public DocumentsObserver, + public DocumentUndoObserver { public: class Item : public ui::ListItem { public: @@ -117,19 +117,17 @@ private: } // ContextObserver - void onActiveSiteChange(const doc::Site& site) override { + void onActiveSiteChange(const Site& site) override { m_frame = site.frame(); if (m_document == site.document()) return; - attachDocument( - static_cast( - const_cast(site.document()))); + attachDocument(const_cast(site.document())); } // DocumentsObserver - void onRemoveDocument(doc::Document* doc) override { + void onRemoveDocument(Document* doc) override { if (m_document && m_document == doc) detachDocument(); } @@ -171,7 +169,7 @@ private: updateTitle(); } - void attachDocument(app::Document* document) { + void attachDocument(Document* document) { detachDocument(); m_document = document; diff --git a/src/app/commands/command.h b/src/app/commands/command.h index a7569b181..0f00f8310 100644 --- a/src/app/commands/command.h +++ b/src/app/commands/command.h @@ -14,6 +14,7 @@ #include namespace app { + class Context; class Params; diff --git a/src/app/commands/filters/cmd_replace_color.cpp b/src/app/commands/filters/cmd_replace_color.cpp index 4a32e32fa..f6ef4e06f 100644 --- a/src/app/commands/filters/cmd_replace_color.cpp +++ b/src/app/commands/filters/cmd_replace_color.cpp @@ -21,6 +21,7 @@ #include "app/find_widget.h" #include "app/ini_file.h" #include "app/load_widget.h" +#include "app/site.h" #include "app/ui/color_bar.h" #include "app/ui/color_button.h" #include "app/ui/keyboard_shortcuts.h" @@ -28,7 +29,6 @@ #include "base/bind.h" #include "doc/image.h" #include "doc/mask.h" -#include "doc/site.h" #include "doc/sprite.h" #include "filters/replace_color_filter.h" #include "ui/ui.h" diff --git a/src/app/commands/filters/filter_manager_impl.cpp b/src/app/commands/filters/filter_manager_impl.cpp index 37b7ae7ae..9af9ca6a6 100644 --- a/src/app/commands/filters/filter_manager_impl.cpp +++ b/src/app/commands/filters/filter_manager_impl.cpp @@ -20,6 +20,7 @@ #include "app/ini_file.h" #include "app/modules/editors.h" #include "app/modules/palettes.h" +#include "app/site.h" #include "app/transaction.h" #include "app/ui/color_bar.h" #include "app/ui/editor/editor.h" @@ -32,7 +33,6 @@ #include "doc/image.h" #include "doc/layer.h" #include "doc/mask.h" -#include "doc/site.h" #include "doc/sprite.h" #include "filters/filter.h" #include "ui/manager.h" diff --git a/src/app/commands/filters/filter_manager_impl.h b/src/app/commands/filters/filter_manager_impl.h index 135b78bc1..8594fb647 100644 --- a/src/app/commands/filters/filter_manager_impl.h +++ b/src/app/commands/filters/filter_manager_impl.h @@ -9,12 +9,12 @@ #pragma once #include "app/commands/filters/cels_target.h" +#include "app/site.h" #include "base/exception.h" #include "base/unique_ptr.h" #include "doc/image_impl.h" #include "doc/image_ref.h" #include "doc/pixel_format.h" -#include "doc/site.h" #include "filters/filter_indexed_data.h" #include "filters/filter_manager.h" #include "gfx/rect.h" @@ -35,6 +35,7 @@ namespace filters { } namespace app { + class Context; class Document; class Transaction; @@ -132,7 +133,7 @@ namespace app { void redrawColorPalette(); Context* m_context; - doc::Site m_site; + Site m_site; Filter* m_filter; doc::Cel* m_cel; doc::ImageRef m_src; diff --git a/src/app/context.cpp b/src/app/context.cpp index f29cb44eb..5d2d33a31 100644 --- a/src/app/context.cpp +++ b/src/app/context.cpp @@ -15,7 +15,8 @@ #include "app/commands/commands.h" #include "app/console.h" #include "app/document.h" -#include "doc/site.h" +#include "app/site.h" +#include "doc/layer.h" #include #include @@ -23,25 +24,41 @@ namespace app { Context::Context() - : m_lastSelectedDoc(nullptr) + : m_docs(this) + , m_lastSelectedDoc(nullptr) { + m_docs.add_observer(this); } -void Context::sendDocumentToTop(doc::Document* document) +Context::~Context() +{ + m_docs.remove_observer(this); +} + +void Context::sendDocumentToTop(Document* document) { ASSERT(document != NULL); documents().move(document, 0); } -void Context::setActiveDocument(doc::Document* document) +Site Context::activeSite() const { - onSetActiveDocument(document); + Site site; + onGetActiveSite(&site); + return site; } -app::Document* Context::activeDocument() const +Document* Context::activeDocument() const { - return static_cast(doc::Context::activeDocument()); + Site site; + onGetActiveSite(&site); + return site.document(); +} + +void Context::setActiveDocument(Document* document) +{ + onSetActiveDocument(document); } bool Context::hasModifiedDocuments() const @@ -52,6 +69,12 @@ bool Context::hasModifiedDocuments() const return false; } +void Context::notifyActiveSiteChanged() +{ + Site site = activeSite(); + notify_observers(&ContextObserver::onActiveSiteChange, site); +} + void Context::executeCommand(const char* commandName) { Command* cmd = Commands::instance()->byId(commandName); @@ -122,23 +145,23 @@ void Context::executeCommand(Command* command, const Params& params) #endif } -void Context::onCreateDocument(doc::CreateDocumentArgs* args) +void Context::onCreateDocument(CreateDocumentArgs* args) { - args->setDocument(new app::Document(NULL)); + args->setDocument(new app::Document(nullptr)); } -void Context::onAddDocument(doc::Document* doc) +void Context::onAddDocument(Document* doc) { - m_lastSelectedDoc = static_cast(doc); + m_lastSelectedDoc = doc; } -void Context::onRemoveDocument(doc::Document* doc) +void Context::onRemoveDocument(Document* doc) { if (doc == m_lastSelectedDoc) m_lastSelectedDoc = nullptr; } -void Context::onGetActiveSite(doc::Site* site) const +void Context::onGetActiveSite(Site* site) const { // Default/dummy site (maybe for batch/command line mode) if (Document* doc = m_lastSelectedDoc) { @@ -149,9 +172,9 @@ void Context::onGetActiveSite(doc::Site* site) const } } -void Context::onSetActiveDocument(doc::Document* doc) +void Context::onSetActiveDocument(Document* doc) { - m_lastSelectedDoc = static_cast(doc); + m_lastSelectedDoc = doc; } } // namespace app diff --git a/src/app/context.h b/src/app/context.h index b0676efac..3f85bfbb9 100644 --- a/src/app/context.h +++ b/src/app/context.h @@ -10,9 +10,12 @@ #include "app/commands/params.h" #include "app/context_flags.h" +#include "app/context_observer.h" +#include "app/documents.h" +#include "app/documents_observer.h" #include "base/disable_copying.h" #include "base/exception.h" -#include "doc/context.h" +#include "obs/observable.h" #include "obs/signal.h" #include @@ -48,9 +51,14 @@ namespace app { bool m_canceled; }; - class Context : public doc::Context { + class Context : public obs::observable, + public DocumentsObserver { public: Context(); + virtual ~Context(); + + const Documents& documents() const { return m_docs; } + Documents& documents() { return m_docs; } virtual bool isUIAvailable() const { return false; } virtual bool isRecordingMacro() const { return false; } @@ -60,16 +68,18 @@ namespace app { bool checkFlags(uint32_t flags) const { return m_flags.check(flags); } void updateFlags() { m_flags.update(this); } - void sendDocumentToTop(doc::Document* document); + void sendDocumentToTop(Document* document); - void setActiveDocument(doc::Document* document); - app::Document* activeDocument() const; + Site activeSite() const; + Document* activeDocument() const; + void setActiveDocument(Document* document); bool hasModifiedDocuments() const; + void notifyActiveSiteChanged(); void executeCommand(const char* commandName); virtual void executeCommand(Command* command, const Params& params = Params()); - virtual DocumentView* getFirstDocumentView(doc::Document* document) const { + virtual DocumentView* getFirstDocumentView(Document* document) const { return nullptr; } @@ -77,17 +87,19 @@ namespace app { obs::signal AfterCommandExecution; protected: - void onCreateDocument(doc::CreateDocumentArgs* args) override; - void onAddDocument(doc::Document* doc) override; - void onRemoveDocument(doc::Document* doc) override; - void onGetActiveSite(doc::Site* site) const override; - virtual void onSetActiveDocument(doc::Document* doc); + // DocumentsObserver impl + void onCreateDocument(CreateDocumentArgs* args) override; + void onAddDocument(Document* doc) override; + void onRemoveDocument(Document* doc) override; + + virtual void onGetActiveSite(Site* site) const; + virtual void onSetActiveDocument(Document* doc); Document* lastSelectedDoc() { return m_lastSelectedDoc; } private: - // Last updated flags. - ContextFlags m_flags; + Documents m_docs; + ContextFlags m_flags; // Last updated flags. Document* m_lastSelectedDoc; DISABLE_COPYING(Context); diff --git a/src/app/context_access.h b/src/app/context_access.h index 7e3511fcd..5769e8489 100644 --- a/src/app/context_access.h +++ b/src/app/context_access.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2015 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -9,7 +9,7 @@ #pragma once #include "app/document_access.h" -#include "doc/site.h" +#include "app/site.h" namespace app { diff --git a/src/app/context_flags.cpp b/src/app/context_flags.cpp index 84686565d..639224e16 100644 --- a/src/app/context_flags.cpp +++ b/src/app/context_flags.cpp @@ -13,10 +13,10 @@ #include "app/context.h" #include "app/document.h" #include "app/modules/editors.h" +#include "app/site.h" #include "app/ui/editor/editor.h" #include "doc/cel.h" #include "doc/layer.h" -#include "doc/site.h" #include "doc/sprite.h" namespace app { diff --git a/src/app/context_flags.h b/src/app/context_flags.h index f71233257..1fef91bb0 100644 --- a/src/app/context_flags.h +++ b/src/app/context_flags.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,13 +10,10 @@ #include "base/ints.h" -namespace doc { - class Site; -} - namespace app { class Context; + class Site; class ContextFlags { public: @@ -43,7 +40,7 @@ namespace app { void update(Context* context); private: - void updateFlagsFromSite(const doc::Site& site); + void updateFlagsFromSite(const Site& site); uint32_t m_flags; }; diff --git a/src/app/context_observer.h b/src/app/context_observer.h new file mode 100644 index 000000000..597ab37f7 --- /dev/null +++ b/src/app/context_observer.h @@ -0,0 +1,24 @@ +// Aseprite +// Copyright (c) 2001-2018 David Capello +// +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. + +#ifndef APP_CONTEXT_OBSERVER_H_INCLUDED +#define APP_CONTEXT_OBSERVER_H_INCLUDED +#pragma once + +namespace app { + + class Document; + class Site; + + class ContextObserver { + public: + virtual ~ContextObserver() { } + virtual void onActiveSiteChange(const Site& site) { } + }; + +} // namespace app + +#endif diff --git a/src/doc/context_tests.cpp b/src/app/context_tests.cpp similarity index 65% rename from src/doc/context_tests.cpp rename to src/app/context_tests.cpp index 826339eee..68ec18a9d 100644 --- a/src/doc/context_tests.cpp +++ b/src/app/context_tests.cpp @@ -1,18 +1,15 @@ -// Aseprite Document Library -// Copyright (c) 2001-2014 David Capello +// Aseprite +// Copyright (c) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#include "tests/test.h" -#include - -#include "doc/context.h" -#include "doc/document.h" +#include "app/context.h" +#include "app/document.h" +using namespace app; using namespace doc; namespace doc { @@ -20,13 +17,13 @@ namespace doc { std::ostream& operator<<(std::ostream& os, ColorMode mode) { return os << (int)mode; } - + } // namespace doc TEST(Context, AddDocument) { Context ctx; - Document* doc = ctx.documents().add(32, 28); + auto doc = ctx.documents().add(32, 28); ASSERT_TRUE(doc != NULL); EXPECT_EQ(32, doc->width()); @@ -37,8 +34,8 @@ TEST(Context, AddDocument) TEST(Context, DeleteDocuments) { Context ctx; - Document* doc1 = ctx.documents().add(2, 2); - Document* doc2 = ctx.documents().add(4, 4); + auto doc1 = ctx.documents().add(2, 2); + auto doc2 = ctx.documents().add(4, 4); EXPECT_EQ(2, ctx.documents().size()); delete doc1; @@ -52,8 +49,8 @@ TEST(Context, CloseAndDeleteDocuments) Context ctx; EXPECT_EQ(0, ctx.documents().size()); - Document* doc1 = ctx.documents().add(2, 2); - Document* doc2 = ctx.documents().add(4, 4); + auto doc1 = ctx.documents().add(2, 2); + auto doc2 = ctx.documents().add(4, 4); EXPECT_EQ(2, ctx.documents().size()); doc1->close(); @@ -67,8 +64,8 @@ TEST(Context, CloseAndDeleteDocuments) TEST(Context, SwitchContext) { Context ctx1, ctx2; - Document* doc1 = new Document(); - Document* doc2 = new Document(); + auto doc1 = new app::Document(nullptr); + auto doc2 = new app::Document(nullptr); doc1->setContext(&ctx1); doc2->setContext(&ctx2); EXPECT_EQ(&ctx1, doc1->context()); @@ -86,9 +83,3 @@ TEST(Context, SwitchContext) EXPECT_EQ(&ctx1, doc1->context()); EXPECT_EQ(&ctx2, doc2->context()); } - -int main(int argc, char** argv) -{ - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/src/app/crash/backup_observer.cpp b/src/app/crash/backup_observer.cpp index 4509ce9e0..cfb545c60 100644 --- a/src/app/crash/backup_observer.cpp +++ b/src/app/crash/backup_observer.cpp @@ -18,6 +18,7 @@ #include "app/crash/backup_observer.h" #include "app/app.h" +#include "app/context.h" #include "app/crash/session.h" #include "app/document.h" #include "app/document_access.h" @@ -27,7 +28,6 @@ #include "base/chrono.h" #include "base/remove_from_container.h" #include "base/scoped_lock.h" -#include "doc/context.h" #ifdef TEST_BACKUP_INTEGRITY #include "ui/system.h" @@ -54,7 +54,7 @@ public: } -BackupObserver::BackupObserver(Session* session, doc::Context* ctx) +BackupObserver::BackupObserver(Session* session, Context* ctx) : m_session(session) , m_ctx(ctx) , m_done(false) @@ -76,14 +76,14 @@ void BackupObserver::stop() m_done = true; } -void BackupObserver::onAddDocument(doc::Document* document) +void BackupObserver::onAddDocument(Document* document) { TRACE("RECO: Observe document %p\n", document); base::scoped_lock hold(m_mutex); m_documents.push_back(static_cast(document)); } -void BackupObserver::onRemoveDocument(doc::Document* document) +void BackupObserver::onRemoveDocument(Document* document) { TRACE("RECO: Remove document %p\n", document); { diff --git a/src/app/crash/backup_observer.h b/src/app/crash/backup_observer.h index f3eb179e2..682894fcb 100644 --- a/src/app/crash/backup_observer.h +++ b/src/app/crash/backup_observer.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2015 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -8,42 +8,39 @@ #define APP_CRASH_BACKUP_OBSERVER_H_INCLUDED #pragma once +#include "app/context_observer.h" +#include "app/doc_observer.h" +#include "app/documents_observer.h" #include "base/mutex.h" #include "base/thread.h" -#include "doc/context_observer.h" -#include "doc/doc_observer.h" -#include "doc/documents_observer.h" #include -namespace doc { - class Context; -} - namespace app { +class Context; class Document; namespace crash { class Session; - class BackupObserver : public doc::ContextObserver - , public doc::DocumentsObserver - , public doc::DocObserver { + class BackupObserver : public ContextObserver + , public DocumentsObserver + , public DocObserver { public: - BackupObserver(Session* session, doc::Context* ctx); + BackupObserver(Session* session, Context* ctx); ~BackupObserver(); void stop(); - void onAddDocument(doc::Document* document) override; - void onRemoveDocument(doc::Document* document) override; + void onAddDocument(Document* document) override; + void onRemoveDocument(Document* document) override; private: void backgroundThread(); Session* m_session; base::mutex m_mutex; - doc::Context* m_ctx; - std::vector m_documents; + Context* m_ctx; + std::vector m_documents; bool m_done; base::thread m_thread; }; diff --git a/src/app/crash/data_recovery.cpp b/src/app/crash/data_recovery.cpp index 5b8e59a93..6ba484e54 100644 --- a/src/app/crash/data_recovery.cpp +++ b/src/app/crash/data_recovery.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -21,7 +21,7 @@ namespace app { namespace crash { -DataRecovery::DataRecovery(doc::Context* ctx) +DataRecovery::DataRecovery(Context* ctx) : m_inProgress(nullptr) , m_backup(nullptr) { diff --git a/src/app/crash/data_recovery.h b/src/app/crash/data_recovery.h index 51a2924e3..12cbbde42 100644 --- a/src/app/crash/data_recovery.h +++ b/src/app/crash/data_recovery.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -13,11 +13,8 @@ #include -namespace doc { - class Context; -} - namespace app { +class Context; namespace crash { class BackupObserver; @@ -25,7 +22,7 @@ namespace crash { public: typedef std::vector Sessions; - DataRecovery(doc::Context* context); + DataRecovery(Context* context); ~DataRecovery(); Session* activeSession() { return m_inProgress.get(); } diff --git a/src/doc/doc_event.h b/src/app/doc_event.h similarity index 89% rename from src/doc/doc_event.h rename to src/app/doc_event.h index 7c90866e9..5bb6d3f61 100644 --- a/src/doc/doc_event.h +++ b/src/app/doc_event.h @@ -1,11 +1,11 @@ -// Aseprite Document Library -// Copyright (c) 2001-2017 David Capello +// Aseprite +// Copyright (c) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. -#ifndef DOC_DOC_EVENT_H_INCLUDED -#define DOC_DOC_EVENT_H_INCLUDED +#ifndef APP_DOC_EVENT_H_INCLUDED +#define APP_DOC_EVENT_H_INCLUDED #pragma once #include "gfx/region.h" @@ -20,7 +20,7 @@ namespace doc { class Sprite; } -namespace doc { +namespace app { class Document; using namespace doc; diff --git a/src/doc/doc_observer.h b/src/app/doc_observer.h similarity index 89% rename from src/doc/doc_observer.h rename to src/app/doc_observer.h index 4c0dbfd69..912937c64 100644 --- a/src/doc/doc_observer.h +++ b/src/app/doc_observer.h @@ -1,14 +1,14 @@ -// Aseprite Document Library -// Copyright (c) 2001-2017 David Capello +// Aseprite +// Copyright (c) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. -#ifndef DOC_DOC_OBSERVER_H_INCLUDED -#define DOC_DOC_OBSERVER_H_INCLUDED +#ifndef APP_DOC_OBSERVER_H_INCLUDED +#define APP_DOC_OBSERVER_H_INCLUDED #pragma once -namespace doc { +namespace app { class Document; class DocEvent; @@ -70,6 +70,6 @@ namespace doc { virtual void dispose() { } }; -} // namespace doc +} // namespace app #endif diff --git a/src/app/document.cpp b/src/app/document.cpp index ad7671159..4ea7c8889 100644 --- a/src/app/document.cpp +++ b/src/app/document.cpp @@ -14,6 +14,9 @@ #include "app/color_target.h" #include "app/color_utils.h" #include "app/context.h" +#include "app/context.h" +#include "app/doc_event.h" +#include "app/doc_observer.h" #include "app/document_api.h" #include "app/document_undo.h" #include "app/file/format_options.h" @@ -23,9 +26,6 @@ #include "base/memory.h" #include "base/unique_ptr.h" #include "doc/cel.h" -#include "doc/context.h" -#include "doc/doc_event.h" -#include "doc/doc_observer.h" #include "doc/frame_tag.h" #include "doc/layer.h" #include "doc/mask.h" @@ -42,7 +42,8 @@ using namespace base; using namespace doc; Document::Document(Sprite* sprite) - : m_flags(kMaskVisible) + : m_ctx(nullptr) + , m_flags(kMaskVisible) , m_undo(new DocumentUndo) // Information about the file format used to load/save this document , m_format_options(nullptr) @@ -58,12 +59,21 @@ Document::Document(Sprite* sprite) Document::~Document() { - // We cannot be in a context at this moment. If we were in a - // context, doc::~Document() would remove the document from the - // context and it would generate onRemoveDocument() notifications, - // which could result in serious problems for observers expecting a - // fully created app::Document. - ASSERT(context() == NULL); + removeFromContext(); +} + +void Document::setContext(Context* ctx) +{ + if (ctx == m_ctx) + return; + + removeFromContext(); + + m_ctx = ctx; + if (ctx) + ctx->documents().add(this); + + onContextChanged(); } DocumentApi Document::getApi(Transaction& transaction) @@ -98,62 +108,62 @@ color_t Document::bgColor(Layer* layer) const void Document::notifyGeneralUpdate() { - doc::DocEvent ev(this); - notify_observers(&doc::DocObserver::onGeneralUpdate, ev); + DocEvent ev(this); + notify_observers(&DocObserver::onGeneralUpdate, ev); } void Document::notifySpritePixelsModified(Sprite* sprite, const gfx::Region& region, frame_t frame) { - doc::DocEvent ev(this); + DocEvent ev(this); ev.sprite(sprite); ev.region(region); ev.frame(frame); - notify_observers(&doc::DocObserver::onSpritePixelsModified, ev); + notify_observers(&DocObserver::onSpritePixelsModified, ev); } void Document::notifyExposeSpritePixels(Sprite* sprite, const gfx::Region& region) { - doc::DocEvent ev(this); + DocEvent ev(this); ev.sprite(sprite); ev.region(region); - notify_observers(&doc::DocObserver::onExposeSpritePixels, ev); + notify_observers(&DocObserver::onExposeSpritePixels, ev); } void Document::notifyLayerMergedDown(Layer* srcLayer, Layer* targetLayer) { - doc::DocEvent ev(this); + DocEvent ev(this); ev.sprite(srcLayer->sprite()); ev.layer(srcLayer); ev.targetLayer(targetLayer); - notify_observers(&doc::DocObserver::onLayerMergedDown, ev); + notify_observers(&DocObserver::onLayerMergedDown, ev); } void Document::notifyCelMoved(Layer* fromLayer, frame_t fromFrame, Layer* toLayer, frame_t toFrame) { - doc::DocEvent ev(this); + DocEvent ev(this); ev.sprite(fromLayer->sprite()); ev.layer(fromLayer); ev.frame(fromFrame); ev.targetLayer(toLayer); ev.targetFrame(toFrame); - notify_observers(&doc::DocObserver::onCelMoved, ev); + notify_observers(&DocObserver::onCelMoved, ev); } void Document::notifyCelCopied(Layer* fromLayer, frame_t fromFrame, Layer* toLayer, frame_t toFrame) { - doc::DocEvent ev(this); + DocEvent ev(this); ev.sprite(fromLayer->sprite()); ev.layer(fromLayer); ev.frame(fromFrame); ev.targetLayer(toLayer); ev.targetFrame(toFrame); - notify_observers(&doc::DocObserver::onCelCopied, ev); + notify_observers(&DocObserver::onCelCopied, ev); } void Document::notifySelectionChanged() { - doc::DocEvent ev(this); - notify_observers(&doc::DocObserver::onSelectionChanged, ev); + DocEvent ev(this); + notify_observers(&DocObserver::onSelectionChanged, ev); } bool Document::isModified() const @@ -446,11 +456,31 @@ Document* Document::duplicate(DuplicateType type) const return documentCopy.release(); } +void Document::close() +{ + removeFromContext(); +} + +void Document::onFileNameChange() +{ + notify_observers(&DocObserver::onFileNameChanged, this); +} + void Document::onContextChanged() { m_undo->setContext(context()); } +void Document::removeFromContext() +{ + if (m_ctx) { + m_ctx->documents().remove(this); + m_ctx = nullptr; + + onContextChanged(); + } +} + // static gfx::Point Document::NoLastDrawingPoint() { diff --git a/src/app/document.h b/src/app/document.h index dbafd74bd..9aaa3e090 100644 --- a/src/app/document.h +++ b/src/app/document.h @@ -8,6 +8,7 @@ #define APP_DOCUMENT_H_INCLUDED #pragma once +#include "app/doc_observer.h" #include "app/extra_cel.h" #include "app/file/format_options.h" #include "app/transformation.h" @@ -22,6 +23,7 @@ #include "doc/frame.h" #include "doc/pixel_format.h" #include "gfx/rect.h" +#include "obs/observable.h" #include @@ -38,6 +40,8 @@ namespace gfx { } namespace app { + + class Context; class DocumentApi; class DocumentUndo; class Transaction; @@ -52,7 +56,8 @@ namespace app { // An application document. It is the class used to contain one file // opened and being edited by the user (a sprite). class Document : public doc::Document, - public base::RWLock { + public base::RWLock, + public obs::observable { enum Flags { kAssociatedToFile = 1, // This sprite is associated to a file in the file-system kMaskVisible = 2, // The mask wasn't hidden by the user @@ -62,6 +67,9 @@ namespace app { Document(Sprite* sprite); ~Document(); + Context* context() const { return m_ctx; } + void setContext(Context* ctx); + // Returns a high-level API: observable and undoable methods. DocumentApi getApi(Transaction& transaction); @@ -173,10 +181,16 @@ namespace app { void copyLayerContent(const Layer* sourceLayer, Document* destDoc, Layer* destLayer) const; Document* duplicate(DuplicateType type) const; + void close(); + protected: - virtual void onContextChanged() override; + void onFileNameChange() override; + virtual void onContextChanged(); private: + void removeFromContext(); + + Context* m_ctx; int m_flags; // Undo and redo information about the document. diff --git a/src/app/document_api.cpp b/src/app/document_api.cpp index 93448b4fd..0f1f30dfe 100644 --- a/src/app/document_api.cpp +++ b/src/app/document_api.cpp @@ -42,6 +42,7 @@ #include "app/cmd/set_transparent_color.h" #include "app/color_target.h" #include "app/color_utils.h" +#include "app/context.h" #include "app/document.h" #include "app/document_undo.h" #include "app/transaction.h" @@ -49,7 +50,6 @@ #include "doc/algorithm/flip_image.h" #include "doc/algorithm/shrink_bounds.h" #include "doc/cel.h" -#include "doc/context.h" #include "doc/frame_tag.h" #include "doc/frame_tags.h" #include "doc/mask.h" diff --git a/src/app/document_api_tests.cpp b/src/app/document_api_tests.cpp index 64b56d868..708fb3eb1 100644 --- a/src/app/document_api_tests.cpp +++ b/src/app/document_api_tests.cpp @@ -9,12 +9,12 @@ #include "app/context.h" #include "app/document.h" #include "app/document_api.h" +#include "app/test_context.h" #include "app/transaction.h" #include "base/unique_ptr.h" #include "doc/cel.h" #include "doc/image.h" #include "doc/primitives.h" -#include "doc/test_context.h" using namespace app; using namespace doc; diff --git a/src/app/document_exporter.h b/src/app/document_exporter.h index 6c8cb48b8..431790e5c 100644 --- a/src/app/document_exporter.h +++ b/src/app/document_exporter.h @@ -29,6 +29,7 @@ namespace doc { } namespace app { + class Context; class Document; diff --git a/src/app/document_range_tests.cpp b/src/app/document_range_tests.cpp index 08834be23..9ed5c65cf 100644 --- a/src/app/document_range_tests.cpp +++ b/src/app/document_range_tests.cpp @@ -12,10 +12,10 @@ #include "app/document_range.h" #include "app/document_range_ops.h" #include "app/document_undo.h" +#include "app/test_context.h" #include "app/transaction.h" #include "base/unique_ptr.h" #include "doc/doc.h" -#include "doc/test_context.h" using namespace app; using namespace doc; diff --git a/src/app/document_undo.cpp b/src/app/document_undo.cpp index 87e17d7fa..9087c8f6b 100644 --- a/src/app/document_undo.cpp +++ b/src/app/document_undo.cpp @@ -13,10 +13,10 @@ #include "app/app.h" #include "app/cmd.h" #include "app/cmd_transaction.h" +#include "app/context.h" #include "app/document_undo_observer.h" #include "app/pref/preferences.h" #include "base/mem_utils.h" -#include "doc/context.h" #include "undo/undo_history.h" #include "undo/undo_state.h" @@ -37,7 +37,7 @@ DocumentUndo::DocumentUndo() { } -void DocumentUndo::setContext(doc::Context* ctx) +void DocumentUndo::setContext(Context* ctx) { m_ctx = ctx; } diff --git a/src/app/document_undo.h b/src/app/document_undo.h index e9b8b20a7..688ba1a57 100644 --- a/src/app/document_undo.h +++ b/src/app/document_undo.h @@ -9,24 +9,21 @@ #pragma once #include "app/document_range.h" +#include "app/sprite_position.h" #include "base/disable_copying.h" #include "base/unique_ptr.h" -#include "doc/sprite_position.h" #include "obs/observable.h" #include "undo/undo_history.h" #include #include -namespace doc { - class Context; -} - namespace app { using namespace doc; class Cmd; class CmdTransaction; + class Context; class DocumentUndoObserver; class DocumentUndo : public obs::observable, @@ -36,7 +33,7 @@ namespace app { size_t totalUndoSize() const { return m_totalUndoSize; } - void setContext(doc::Context* ctx); + void setContext(Context* ctx); void add(CmdTransaction* cmd); @@ -76,7 +73,7 @@ namespace app { void onDeleteUndoState(undo::UndoState* state) override; undo::UndoHistory m_undoHistory; - doc::Context* m_ctx; + Context* m_ctx; size_t m_totalUndoSize; // This counter is equal to 0 if we are in the "saved state", i.e. diff --git a/src/doc/documents.cpp b/src/app/documents.cpp similarity index 87% rename from src/doc/documents.cpp rename to src/app/documents.cpp index d4e06be30..bef32d9f3 100644 --- a/src/doc/documents.cpp +++ b/src/app/documents.cpp @@ -1,22 +1,23 @@ -// Aseprite Document Library -// Copyright (c) 2001-2016 David Capello +// Aseprite +// Copyright (c) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include "doc/documents.h" +#include "app/documents.h" +#include "app/document.h" #include "base/fs.h" #include "base/mutex.h" -#include "doc/document.h" +#include "base/unique_ptr.h" #include -namespace doc { +namespace app { Documents::Documents(Context* ctx) : m_ctx(ctx) @@ -36,7 +37,7 @@ Document* Documents::add(int width, int height, ColorMode mode, int ncolors) CreateDocumentArgs args; notify_observers(&DocumentsObserver::onCreateDocument, &args); if (!args.document()) - args.setDocument(new Document()); + args.setDocument(new Document(nullptr)); base::UniquePtr doc(args.document()); doc->sprites().add(width, height, mode, ncolors); @@ -122,4 +123,4 @@ void Documents::deleteAll() } } -} // namespace doc +} // namespace app diff --git a/src/doc/documents.h b/src/app/documents.h similarity index 78% rename from src/doc/documents.h rename to src/app/documents.h index 4b95b6e73..38f7ca45a 100644 --- a/src/doc/documents.h +++ b/src/app/documents.h @@ -1,22 +1,23 @@ -// Aseprite Document Library -// Copyright (c) 2001-2016 David Capello +// Aseprite +// Copyright (c) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. -#ifndef DOC_DOCUMENTS_H_INCLUDED -#define DOC_DOCUMENTS_H_INCLUDED +#ifndef APP_DOCUMENTS_H_INCLUDED +#define APP_DOCUMENTS_H_INCLUDED #pragma once +#include "app/documents_observer.h" #include "base/disable_copying.h" #include "doc/color_mode.h" -#include "doc/documents_observer.h" #include "doc/object_id.h" #include "obs/observable.h" #include -namespace doc { +namespace app { + class Context; class Document; @@ -41,7 +42,9 @@ namespace doc { bool empty() const { return m_docs.empty(); } // Add a new documents to the list. - Document* add(int width, int height, ColorMode mode = ColorMode::RGB, int ncolors = 256); + Document* add(int width, int height, + doc::ColorMode mode = doc::ColorMode::RGB, + int ncolors = 256); Document* add(Document* doc); // Removes a document from the list without deleting it. You must @@ -54,7 +57,7 @@ namespace doc { void move(Document* doc, int index); Document* operator[](int index) const { return m_docs[index]; } - Document* getById(ObjectId id) const; + Document* getById(doc::ObjectId id) const; Document* getByName(const std::string& name) const; Document* getByFileName(const std::string& filename) const; @@ -68,6 +71,6 @@ namespace doc { DISABLE_COPYING(Documents); }; -} // namespace doc +} // namespace app #endif diff --git a/src/doc/documents_observer.h b/src/app/documents_observer.h similarity index 63% rename from src/doc/documents_observer.h rename to src/app/documents_observer.h index f4663c618..11e3a90fb 100644 --- a/src/doc/documents_observer.h +++ b/src/app/documents_observer.h @@ -1,14 +1,14 @@ -// Aseprite Document Library -// Copyright (c) 2001-2016 David Capello +// Aseprite +// Copyright (c) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. -#ifndef DOC_DOCUMENTS_OBSERVER_H_INCLUDED -#define DOC_DOCUMENTS_OBSERVER_H_INCLUDED +#ifndef APP_DOCUMENTS_OBSERVER_H_INCLUDED +#define APP_DOCUMENTS_OBSERVER_H_INCLUDED #pragma once -namespace doc { +namespace app { class Document; class CreateDocumentArgs { @@ -28,6 +28,6 @@ namespace doc { virtual void onRemoveDocument(Document* doc) { } }; -} // namespace doc +} // namespace app #endif diff --git a/src/app/file/file.h b/src/app/file/file.h index 462b7fa0d..6d67d9e4c 100644 --- a/src/app/file/file.h +++ b/src/app/file/file.h @@ -43,6 +43,7 @@ namespace doc { } namespace app { + class Context; class Document; class FileFormat; diff --git a/src/app/file/file_tests.cpp b/src/app/file/file_tests.cpp index a750071c1..3690dec59 100644 --- a/src/app/file/file_tests.cpp +++ b/src/app/file/file_tests.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -32,7 +32,7 @@ TEST(File, SeveralSizes) std::sprintf(&fn[0], "test.ase"); { - base::UniquePtr doc(ctx.documents().add(w, h, doc::ColorMode::INDEXED, 256)); + base::UniquePtr doc(ctx.documents().add(w, h, doc::ColorMode::INDEXED, 256)); doc->setFilename(&fn[0]); // Random pixels diff --git a/src/app/file/palette_file.cpp b/src/app/file/palette_file.cpp index 3af0a626c..c268b112d 100644 --- a/src/app/file/palette_file.cpp +++ b/src/app/file/palette_file.cpp @@ -140,7 +140,7 @@ bool save_palette(const char* filename, const Palette* pal, int columns) int h = (pal->size() / w) + (pal->size() % w > 0 ? 1: 0); app::Context tmpContext; - doc::Document* doc = tmpContext.documents().add( + Document* doc = tmpContext.documents().add( w, h, (pal->size() <= 256 ? doc::ColorMode::INDEXED: doc::ColorMode::RGB), pal->size()); diff --git a/src/app/pref/preferences.cpp b/src/app/pref/preferences.cpp index 6ab7a78e5..e64ec6ee6 100644 --- a/src/app/pref/preferences.cpp +++ b/src/app/pref/preferences.cpp @@ -138,7 +138,7 @@ DocumentPreferences& Preferences::document(const app::Document* doc) } } -void Preferences::removeDocument(doc::Document* doc) +void Preferences::removeDocument(Document* doc) { ASSERT(dynamic_cast(doc)); @@ -150,12 +150,12 @@ void Preferences::removeDocument(doc::Document* doc) } } -void Preferences::onRemoveDocument(doc::Document* doc) +void Preferences::onRemoveDocument(Document* doc) { removeDocument(doc); } -std::string Preferences::docConfigFileName(const app::Document* doc) +std::string Preferences::docConfigFileName(const Document* doc) { if (!doc) return ""; diff --git a/src/app/pref/preferences.h b/src/app/pref/preferences.h index b6343cde6..7ac0bf167 100644 --- a/src/app/pref/preferences.h +++ b/src/app/pref/preferences.h @@ -11,6 +11,7 @@ #include "app/color.h" #include "app/commands/filters/cels_target.h" #include "app/document_exporter.h" +#include "app/documents_observer.h" #include "app/pref/option.h" #include "app/sprite_sheet_type.h" #include "app/tools/freehand_algorithm.h" @@ -20,7 +21,6 @@ #include "doc/algorithm/resize_image.h" #include "doc/anidir.h" #include "doc/brush_pattern.h" -#include "doc/documents_observer.h" #include "doc/frame.h" #include "doc/layer_list.h" #include "filters/tiled_mode.h" @@ -44,8 +44,8 @@ namespace app { typedef app::gen::ToolPref ToolPreferences; typedef app::gen::DocPref DocumentPreferences; - class Preferences : public app::gen::GlobalPref - , public doc::DocumentsObserver { + class Preferences : public app::gen::GlobalPref, + public app::DocumentsObserver { public: static Preferences& instance(); @@ -60,23 +60,23 @@ namespace app { bool isSet(OptionBase& opt) const; ToolPreferences& tool(tools::Tool* tool); - DocumentPreferences& document(const app::Document* doc); + DocumentPreferences& document(const Document* doc); // Remove one document explicitly (this can be used if the // document used in Preferences::document() function wasn't member // of UIContext. - void removeDocument(doc::Document* doc); + void removeDocument(Document* doc); protected: - void onRemoveDocument(doc::Document* doc) override; + void onRemoveDocument(Document* doc) override; private: - std::string docConfigFileName(const app::Document* doc); + std::string docConfigFileName(const Document* doc); - void serializeDocPref(const app::Document* doc, app::DocumentPreferences* docPref, bool save); + void serializeDocPref(const Document* doc, app::DocumentPreferences* docPref, bool save); std::map m_tools; - std::map m_docs; + std::map m_docs; }; } // namespace app diff --git a/src/app/script/sprite_class.cpp b/src/app/script/sprite_class.cpp index 627f8fede..7ef74c147 100644 --- a/src/app/script/sprite_class.cpp +++ b/src/app/script/sprite_class.cpp @@ -18,11 +18,11 @@ #include "app/file/palette_file.h" #include "app/script/app_scripting.h" #include "app/script/sprite_wrap.h" +#include "app/site.h" #include "app/transaction.h" #include "app/ui/document_view.h" #include "doc/mask.h" #include "doc/palette.h" -#include "doc/site.h" #include "doc/sprite.h" #include "script/engine.h" diff --git a/src/app/script/sprite_wrap.cpp b/src/app/script/sprite_wrap.cpp index 248560f33..12a347e49 100644 --- a/src/app/script/sprite_wrap.cpp +++ b/src/app/script/sprite_wrap.cpp @@ -16,9 +16,9 @@ #include "app/document.h" #include "app/document_api.h" #include "app/script/image_wrap.h" +#include "app/site.h" #include "app/transaction.h" #include "app/ui/document_view.h" -#include "doc/site.h" #include "doc/sprite.h" namespace app { @@ -85,7 +85,7 @@ ImageWrap* SpriteWrap::activeImage() } #ifdef ENABLE_UI - doc::Site site; + Site site; m_view->getSite(&site); return wrapImage(site.image()); #else diff --git a/src/doc/site.cpp b/src/app/site.cpp similarity index 61% rename from src/doc/site.cpp rename to src/app/site.cpp index 9efb8e302..3d6c9473f 100644 --- a/src/doc/site.cpp +++ b/src/app/site.cpp @@ -1,25 +1,27 @@ -// Aseprite Document Library -// Copyright (c) 2001-2016 David Capello +// Aseprite +// Copyright (c) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include "doc/site.h" +#include "app/site.h" #include "base/base.h" #include "doc/cel.h" #include "doc/layer.h" #include "doc/sprite.h" -namespace doc { +namespace app { + +using namespace doc; Palette* Site::palette() { - return (m_sprite ? m_sprite->palette(m_frame): NULL); + return (m_sprite ? m_sprite->palette(m_frame): nullptr); } const Cel* Site::cel() const @@ -27,7 +29,7 @@ const Cel* Site::cel() const if (m_layer) return m_layer->cel(m_frame); else - return NULL; + return nullptr; } Cel* Site::cel() @@ -35,12 +37,12 @@ Cel* Site::cel() if (m_layer) return m_layer->cel(m_frame); else - return NULL; + return nullptr; } Image* Site::image(int* x, int* y, int* opacity) const { - Image* image = NULL; + Image* image = nullptr; if (m_sprite) { if (const Cel* cel = this->cel()) { @@ -56,7 +58,7 @@ Image* Site::image(int* x, int* y, int* opacity) const Palette* Site::palette() const { - return (m_sprite ? m_sprite->palette(m_frame): NULL); + return (m_sprite ? m_sprite->palette(m_frame): nullptr); } -} // namespace doc +} // namespace app diff --git a/src/doc/site.h b/src/app/site.h similarity index 52% rename from src/doc/site.h rename to src/app/site.h index 872172507..e2a5f05db 100644 --- a/src/doc/site.h +++ b/src/app/site.h @@ -1,11 +1,11 @@ -// Aseprite Document Library -// Copyright (c) 2001-2016 David Capello +// Aseprite +// Copyright (c) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. -#ifndef DOC_SITE_H_INCLUDED -#define DOC_SITE_H_INCLUDED +#ifndef APP_SITE_H_INCLUDED +#define APP_SITE_H_INCLUDED #pragma once #include "doc/frame.h" @@ -13,13 +13,15 @@ #include "doc/selected_layers.h" namespace doc { - class Cel; - class Document; class Image; class Layer; class Palette; class Sprite; +} // namespace doc + +namespace app { + class Document; // Specifies the current location in a context. E.g. the location in // the current Editor (current document, sprite, layer, frame, @@ -54,46 +56,46 @@ namespace doc { bool inTimeline() const { return (inLayers() || inFrames() || inCels()); } const Document* document() const { return m_document; } - const Sprite* sprite() const { return m_sprite; } - const Layer* layer() const { return m_layer; } - frame_t frame() const { return m_frame; } - const Cel* cel() const; + const doc::Sprite* sprite() const { return m_sprite; } + const doc::Layer* layer() const { return m_layer; } + doc::frame_t frame() const { return m_frame; } + const doc::Cel* cel() const; Document* document() { return m_document; } - Sprite* sprite() { return m_sprite; } - Layer* layer() { return m_layer; } - Cel* cel(); + doc::Sprite* sprite() { return m_sprite; } + doc::Layer* layer() { return m_layer; } + doc::Cel* cel(); void focus(Focus focus) { m_focus = focus; } void document(Document* document) { m_document = document; } - void sprite(Sprite* sprite) { m_sprite = sprite; } - void layer(Layer* layer) { m_layer = layer; } - void frame(frame_t frame) { m_frame = frame; } + void sprite(doc::Sprite* sprite) { m_sprite = sprite; } + void layer(doc::Layer* layer) { m_layer = layer; } + void frame(doc::frame_t frame) { m_frame = frame; } - const SelectedLayers& selectedLayers() const { return m_selectedLayers; } - SelectedLayers& selectedLayers() { return m_selectedLayers; } - void selectedLayers(const SelectedLayers& selectedLayers) { + const doc::SelectedLayers& selectedLayers() const { return m_selectedLayers; } + doc::SelectedLayers& selectedLayers() { return m_selectedLayers; } + void selectedLayers(const doc::SelectedLayers& selectedLayers) { m_selectedLayers = selectedLayers; } - const SelectedFrames& selectedFrames() const { return m_selectedFrames; } - SelectedFrames& selectedFrames() { return m_selectedFrames; } - void selectedFrames(const SelectedFrames& selectedFrames) { + const doc::SelectedFrames& selectedFrames() const { return m_selectedFrames; } + doc::SelectedFrames& selectedFrames() { return m_selectedFrames; } + void selectedFrames(const doc::SelectedFrames& selectedFrames) { m_selectedFrames = selectedFrames; } - Palette* palette(); - Image* image(int* x = nullptr, int* y = nullptr, int* opacity = nullptr) const; - Palette* palette() const; + doc::Palette* palette(); + doc::Image* image(int* x = nullptr, int* y = nullptr, int* opacity = nullptr) const; + doc::Palette* palette() const; private: Focus m_focus; Document* m_document; - Sprite* m_sprite; - Layer* m_layer; - frame_t m_frame; - SelectedLayers m_selectedLayers; - SelectedFrames m_selectedFrames; + doc::Sprite* m_sprite; + doc::Layer* m_layer; + doc::frame_t m_frame; + doc::SelectedLayers m_selectedLayers; + doc::SelectedFrames m_selectedFrames; }; } // namespace app diff --git a/src/app/sprite_position.h b/src/app/sprite_position.h new file mode 100644 index 000000000..2b823ebc2 --- /dev/null +++ b/src/app/sprite_position.h @@ -0,0 +1,56 @@ +// Aseprite +// Copyright (c) 2001-2018 David Capello +// +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. + +#ifndef DOC_SPRITE_POSITION_H_INCLUDED +#define DOC_SPRITE_POSITION_H_INCLUDED +#pragma once + +#include "doc/frame.h" +#include "doc/layer.h" +#include "doc/object.h" +#include "doc/object_id.h" + +namespace app { + + class SpritePosition { + public: + SpritePosition() + : m_layerId(doc::NullId) + , m_frame(0) { + } + + SpritePosition(const doc::Layer* layer, doc::frame_t frame) + : m_layerId(layer ? layer->id(): doc::NullId) + , m_frame(frame) { + } + + doc::Layer* layer() const { return doc::get(m_layerId); } + doc::ObjectId layerId() const { return m_layerId; } + doc::frame_t frame() const { return m_frame; } + + void layer(doc::Layer* layer) { + m_layerId = (layer ? layer->id(): doc::NullId); + } + + void layerId(doc::ObjectId layerId) { + m_layerId = layerId; + } + + void frame(doc::frame_t frame) { + m_frame = frame; + } + + bool operator==(const SpritePosition& o) const { return m_layerId == o.m_layerId && m_frame == o.m_frame; } + bool operator!=(const SpritePosition& o) const { return m_layerId != o.m_layerId || m_frame != o.m_frame; } + + private: + doc::ObjectId m_layerId; + doc::frame_t m_frame; + }; + +} // namespace app + +#endif diff --git a/src/doc/test_context.h b/src/app/test_context.h similarity index 76% rename from src/doc/test_context.h rename to src/app/test_context.h index 9a676a1f7..74d16dbce 100644 --- a/src/doc/test_context.h +++ b/src/app/test_context.h @@ -1,20 +1,20 @@ -// Aseprite Document Library -// Copyright (c) 2001-2016 David Capello +// Aseprite +// Copyright (c) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. #ifndef DOC_TEST_CONTEXT_H_INCLUDED #define DOC_TEST_CONTEXT_H_INCLUDED #pragma once -#include "doc/context.h" -#include "doc/document.h" +#include "app/context.h" +#include "app/document.h" +#include "app/site.h" #include "doc/layer.h" -#include "doc/site.h" #include "doc/sprite.h" -namespace doc { +namespace app { template class TestContextT : public Base { @@ -53,6 +53,6 @@ namespace doc { typedef TestContextT TestContext; -} // namespace doc +} // namespace app #endif diff --git a/src/app/transformation.cpp b/src/app/transformation.cpp index aad7828f5..45656ac81 100644 --- a/src/app/transformation.cpp +++ b/src/app/transformation.cpp @@ -1,8 +1,8 @@ -// Aseprite Gfx Library -// Copyright (C) 2001-2016 David Capello +// Aseprite +// Copyright (C) 2001-2018 David Capello // -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. +// This program is distributed under the terms of +// the End-User License Agreement for Aseprite. #ifdef HAVE_CONFIG_H #include "config.h" diff --git a/src/app/ui/color_bar.cpp b/src/app/ui/color_bar.cpp index 0c15bca0e..1a60af64e 100644 --- a/src/app/ui/color_bar.cpp +++ b/src/app/ui/color_bar.cpp @@ -420,13 +420,13 @@ void ColorBar::setEditMode(bool state) m_paletteView.deselect(); } -void ColorBar::onActiveSiteChange(const doc::Site& site) +void ColorBar::onActiveSiteChange(const Site& site) { if (m_lastDocument != site.document()) { if (m_lastDocument) m_lastDocument->remove_observer(this); - m_lastDocument = const_cast(site.document()); + m_lastDocument = const_cast(site.document()); if (m_lastDocument) m_lastDocument->add_observer(this); @@ -435,7 +435,7 @@ void ColorBar::onActiveSiteChange(const doc::Site& site) } } -void ColorBar::onGeneralUpdate(doc::DocEvent& ev) +void ColorBar::onGeneralUpdate(DocEvent& ev) { // TODO Observe palette changes only invalidate(); @@ -474,7 +474,7 @@ void ColorBar::onAfterExecuteCommand(CommandExecutionEvent& ev) // If the sprite isn't Indexed anymore (e.g. because we've just // undone a "RGB -> Indexed" conversion), we hide the "Remap" // button. - doc::Site site = UIContext::instance()->activeSite(); + Site site = UIContext::instance()->activeSite(); if (site.sprite() && site.sprite()->pixelFormat() != IMAGE_INDEXED) { hideRemap(); @@ -947,7 +947,7 @@ void ColorBar::setAscending(bool ascending) void ColorBar::showRemap() { - doc::Site site = UIContext::instance()->activeSite(); + Site site = UIContext::instance()->activeSite(); if (site.sprite() && site.sprite()->pixelFormat() == IMAGE_INDEXED) { if (!m_oldPalette) { diff --git a/src/app/ui/color_bar.h b/src/app/ui/color_bar.h index 23d8dec01..79057db9e 100644 --- a/src/app/ui/color_bar.h +++ b/src/app/ui/color_bar.h @@ -9,14 +9,14 @@ #pragma once #include "app/color.h" +#include "app/context_observer.h" +#include "app/doc_observer.h" +#include "app/documents_observer.h" #include "app/ui/button_set.h" #include "app/ui/color_button.h" #include "app/ui/input_chain_element.h" #include "app/ui/palette_view.h" #include "base/unique_ptr.h" -#include "doc/context_observer.h" -#include "doc/doc_observer.h" -#include "doc/documents_observer.h" #include "doc/pixel_format.h" #include "doc/sort_palette.h" #include "obs/connection.h" @@ -32,7 +32,6 @@ namespace ui { } namespace app { - class ColorButton; class ColorSpectrum; class ColorTintShadeTone; @@ -44,9 +43,9 @@ namespace app { class ColorBar : public ui::Box , public PaletteViewDelegate - , public doc::ContextObserver - , public doc::DocObserver - , public app::InputChainElement { + , public ContextObserver + , public DocObserver + , public InputChainElement { static ColorBar* m_instance; public: enum class ColorSelector { @@ -84,10 +83,10 @@ namespace app { ColorButton* bgColorButton() { return &m_bgColor; } // ContextObserver impl - void onActiveSiteChange(const doc::Site& site) override; + void onActiveSiteChange(const Site& site) override; // DocObserver impl - void onGeneralUpdate(doc::DocEvent& ev) override; + void onGeneralUpdate(DocEvent& ev) override; // InputChainElement impl void onNewInputPriority(InputChainElement* element, @@ -188,7 +187,7 @@ namespace app { bool m_fromBgButton; base::UniquePtr m_oldPalette; - doc::Document* m_lastDocument; + Document* m_lastDocument; bool m_ascending; obs::scoped_connection m_beforeCmdConn; obs::scoped_connection m_afterCmdConn; diff --git a/src/app/ui/color_button.cpp b/src/app/ui/color_button.cpp index 869c015fa..bbf2b5ee8 100644 --- a/src/app/ui/color_button.cpp +++ b/src/app/ui/color_button.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -15,6 +15,7 @@ #include "app/color_utils.h" #include "app/modules/editors.h" #include "app/modules/gfx.h" +#include "app/site.h" #include "app/ui/color_bar.h" #include "app/ui/color_popup.h" #include "app/ui/editor/editor.h" @@ -22,7 +23,6 @@ #include "app/ui/status_bar.h" #include "app/ui_context.h" #include "doc/layer.h" -#include "doc/site.h" #include "doc/sprite.h" #include "gfx/rect_io.h" #include "ui/ui.h" diff --git a/src/app/ui/color_button.h b/src/app/ui/color_button.h index fa7b2443d..f1be82063 100644 --- a/src/app/ui/color_button.h +++ b/src/app/ui/color_button.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -9,9 +9,9 @@ #pragma once #include "app/color.h" +#include "app/context_observer.h" #include "app/ui/color_button_options.h" #include "app/ui/color_source.h" -#include "doc/context_observer.h" #include "doc/pixel_format.h" #include "obs/signal.h" #include "ui/button.h" @@ -24,9 +24,9 @@ namespace ui { namespace app { class ColorPopup; - class ColorButton : public ui::ButtonBase - , public doc::ContextObserver - , public IColorSource { + class ColorButton : public ui::ButtonBase, + public ContextObserver, + public IColorSource { public: ColorButton(const app::Color& color, const PixelFormat pixelFormat, diff --git a/src/app/ui/document_view.cpp b/src/app/ui/document_view.cpp index 927369ddd..f6d7c23cf 100644 --- a/src/app/ui/document_view.cpp +++ b/src/app/ui/document_view.cpp @@ -18,6 +18,7 @@ #include "app/commands/commands.h" #include "app/console.h" #include "app/context_access.h" +#include "app/doc_event.h" #include "app/document_access.h" #include "app/i18n/strings.h" #include "app/modules/editors.h" @@ -35,7 +36,6 @@ #include "app/ui_context.h" #include "app/util/clipboard.h" #include "base/fs.h" -#include "doc/doc_event.h" #include "doc/layer.h" #include "doc/sprite.h" #include "fmt/format.h" @@ -361,25 +361,25 @@ bool DocumentView::onProcessMessage(Message* msg) return Box::onProcessMessage(msg); } -void DocumentView::onGeneralUpdate(doc::DocEvent& ev) +void DocumentView::onGeneralUpdate(DocEvent& ev) { if (m_editor->isVisible()) m_editor->updateEditor(); } -void DocumentView::onSpritePixelsModified(doc::DocEvent& ev) +void DocumentView::onSpritePixelsModified(DocEvent& ev) { if (m_editor->isVisible() && m_editor->frame() == ev.frame()) m_editor->drawSpriteClipped(ev.region()); } -void DocumentView::onLayerMergedDown(doc::DocEvent& ev) +void DocumentView::onLayerMergedDown(DocEvent& ev) { m_editor->setLayer(ev.targetLayer()); } -void DocumentView::onAddLayer(doc::DocEvent& ev) +void DocumentView::onAddLayer(DocEvent& ev) { if (current_editor == m_editor) { ASSERT(ev.layer() != NULL); @@ -387,7 +387,7 @@ void DocumentView::onAddLayer(doc::DocEvent& ev) } } -void DocumentView::onBeforeRemoveLayer(doc::DocEvent& ev) +void DocumentView::onBeforeRemoveLayer(DocEvent& ev) { Sprite* sprite = ev.sprite(); Layer* layer = ev.layer(); @@ -410,7 +410,7 @@ void DocumentView::onBeforeRemoveLayer(doc::DocEvent& ev) } } -void DocumentView::onAddFrame(doc::DocEvent& ev) +void DocumentView::onAddFrame(DocEvent& ev) { if (current_editor == m_editor) m_editor->setFrame(ev.frame()); @@ -418,7 +418,7 @@ void DocumentView::onAddFrame(doc::DocEvent& ev) m_editor->setFrame(m_editor->frame()+1); } -void DocumentView::onRemoveFrame(doc::DocEvent& ev) +void DocumentView::onRemoveFrame(DocEvent& ev) { // Adjust current frame of all editors that are in a frame more // advanced that the removed one. @@ -433,24 +433,24 @@ void DocumentView::onRemoveFrame(doc::DocEvent& ev) } } -void DocumentView::onAddCel(doc::DocEvent& ev) +void DocumentView::onAddCel(DocEvent& ev) { UIContext::instance()->notifyActiveSiteChanged(); } -void DocumentView::onRemoveCel(doc::DocEvent& ev) +void DocumentView::onRemoveCel(DocEvent& ev) { UIContext::instance()->notifyActiveSiteChanged(); } -void DocumentView::onTotalFramesChanged(doc::DocEvent& ev) +void DocumentView::onTotalFramesChanged(DocEvent& ev) { if (m_editor->frame() >= m_editor->sprite()->totalFrames()) { m_editor->setFrame(m_editor->sprite()->lastFrame()); } } -void DocumentView::onLayerRestacked(doc::DocEvent& ev) +void DocumentView::onLayerRestacked(DocEvent& ev) { m_editor->invalidate(); } diff --git a/src/app/ui/document_view.h b/src/app/ui/document_view.h index c9ab18186..69fbe71d1 100644 --- a/src/app/ui/document_view.h +++ b/src/app/ui/document_view.h @@ -8,16 +8,12 @@ #define APP_UI_DOCUMENT_VIEW_H_INCLUDED #pragma once +#include "app/doc_observer.h" #include "app/ui/input_chain_element.h" #include "app/ui/tabs.h" #include "app/ui/workspace_view.h" -#include "doc/doc_observer.h" #include "ui/box.h" -namespace doc { - class Site; -} - namespace ui { class View; } @@ -25,6 +21,7 @@ namespace ui { namespace app { class Document; class Editor; + class Site; class DocumentViewPreviewDelegate { public: @@ -34,11 +31,11 @@ namespace app { virtual void onPreviewOtherEditor(Editor* editor) = 0; }; - class DocumentView : public ui::Box - , public TabView - , public doc::DocObserver - , public WorkspaceView - , public app::InputChainElement { + class DocumentView : public ui::Box, + public TabView, + public app::DocObserver, + public WorkspaceView, + public app::InputChainElement { public: enum Type { Normal, @@ -52,7 +49,7 @@ namespace app { Document* document() const { return m_document; } Editor* editor() { return m_editor; } ui::View* viewWidget() const { return m_view; } - void getSite(doc::Site* site) const; + void getSite(Site* site) const; bool isPreview() { return m_type == Preview; } @@ -71,17 +68,17 @@ namespace app { InputChainElement* onGetInputChainElement() override { return this; } // DocObserver implementation - void onGeneralUpdate(doc::DocEvent& ev) override; - void onSpritePixelsModified(doc::DocEvent& ev) override; - void onLayerMergedDown(doc::DocEvent& ev) override; - void onAddLayer(doc::DocEvent& ev) override; - void onBeforeRemoveLayer(doc::DocEvent& ev) override; - void onAddFrame(doc::DocEvent& ev) override; - void onRemoveFrame(doc::DocEvent& ev) override; - void onAddCel(doc::DocEvent& ev) override; - void onRemoveCel(doc::DocEvent& ev) override; - void onTotalFramesChanged(doc::DocEvent& ev) override; - void onLayerRestacked(doc::DocEvent& ev) override; + void onGeneralUpdate(DocEvent& ev) override; + void onSpritePixelsModified(DocEvent& ev) override; + void onLayerMergedDown(DocEvent& ev) override; + void onAddLayer(DocEvent& ev) override; + void onBeforeRemoveLayer(DocEvent& ev) override; + void onAddFrame(DocEvent& ev) override; + void onRemoveFrame(DocEvent& ev) override; + void onAddCel(DocEvent& ev) override; + void onRemoveCel(DocEvent& ev) override; + void onTotalFramesChanged(DocEvent& ev) override; + void onLayerRestacked(DocEvent& ev) override; // InputChainElement impl void onNewInputPriority(InputChainElement* element, diff --git a/src/app/ui/editor/brush_preview.cpp b/src/app/ui/editor/brush_preview.cpp index fc494be30..42bae718f 100644 --- a/src/app/ui/editor/brush_preview.cpp +++ b/src/app/ui/editor/brush_preview.cpp @@ -14,6 +14,7 @@ #include "app/color.h" #include "app/color_utils.h" #include "app/document.h" +#include "app/site.h" #include "app/tools/controller.h" #include "app/tools/ink.h" #include "app/tools/intertwine.h" @@ -32,7 +33,6 @@ #include "doc/image_impl.h" #include "doc/layer.h" #include "doc/primitives.h" -#include "doc/site.h" #include "render/render.h" #include "she/display.h" #include "ui/manager.h" diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp index 2f9fe198a..6970d0bed 100644 --- a/src/app/ui/editor/editor.cpp +++ b/src/app/ui/editor/editor.cpp @@ -18,6 +18,7 @@ #include "app/commands/params.h" #include "app/commands/quick_command.h" #include "app/console.h" +#include "app/doc_event.h" #include "app/i18n/strings.h" #include "app/ini_file.h" #include "app/modules/editors.h" @@ -54,7 +55,6 @@ #include "base/unique_ptr.h" #include "doc/conversion_she.h" #include "doc/doc.h" -#include "doc/doc_event.h" #include "doc/mask_boundaries.h" #include "doc/slice.h" #include "she/surface.h" @@ -1926,13 +1926,13 @@ void Editor::onShowExtrasChange() invalidate(); } -void Editor::onExposeSpritePixels(doc::DocEvent& ev) +void Editor::onExposeSpritePixels(DocEvent& ev) { if (m_state && ev.sprite() == m_sprite) m_state->onExposeSpritePixels(ev.region()); } -void Editor::onSpritePixelRatioChanged(doc::DocEvent& ev) +void Editor::onSpritePixelRatioChanged(DocEvent& ev) { m_proj.setPixelRatio(ev.sprite()->pixelRatio()); invalidate(); diff --git a/src/app/ui/editor/editor.h b/src/app/ui/editor/editor.h index 5aee916c9..7a46b9d3e 100644 --- a/src/app/ui/editor/editor.h +++ b/src/app/ui/editor/editor.h @@ -9,6 +9,7 @@ #pragma once #include "app/color.h" +#include "app/doc_observer.h" #include "app/document.h" #include "app/pref/preferences.h" #include "app/tools/active_tool_observer.h" @@ -19,7 +20,6 @@ #include "app/ui/editor/editor_observers.h" #include "app/ui/editor/editor_state.h" #include "app/ui/editor/editor_states_history.h" -#include "doc/doc_observer.h" #include "doc/frame.h" #include "doc/image_buffer.h" #include "filters/tiled_mode.h" @@ -35,7 +35,6 @@ namespace doc { class Layer; - class Site; class Sprite; } namespace gfx { @@ -53,6 +52,7 @@ namespace app { class EditorCustomizationDelegate; class EditorRender; class PixelsMovement; + class Site; namespace tools { class Ink; @@ -64,10 +64,10 @@ namespace app { ScrollDir, }; - class Editor : public ui::Widget - , public doc::DocObserver - , public IColorSource - , public tools::ActiveToolObserver { + class Editor : public ui::Widget, + public app::DocObserver, + public IColorSource, + public tools::ActiveToolObserver { public: enum EditorFlags { kNoneFlag = 0, @@ -281,8 +281,8 @@ namespace app { void onShowExtrasChange(); // DocObserver impl - void onExposeSpritePixels(doc::DocEvent& ev) override; - void onSpritePixelRatioChanged(doc::DocEvent& ev) override; + void onExposeSpritePixels(DocEvent& ev) override; + void onSpritePixelRatioChanged(DocEvent& ev) override; void onBeforeRemoveLayer(DocEvent& ev) override; void onRemoveCel(DocEvent& ev) override; void onAddFrameTag(DocEvent& ev) override; diff --git a/src/app/ui/editor/pixels_movement.cpp b/src/app/ui/editor/pixels_movement.cpp index 9fa4f6b4f..b8868e307 100644 --- a/src/app/ui/editor/pixels_movement.cpp +++ b/src/app/ui/editor/pixels_movement.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -20,6 +20,7 @@ #include "app/document_api.h" #include "app/modules/gui.h" #include "app/pref/preferences.h" +#include "app/site.h" #include "app/snap_to_grid.h" #include "app/ui/editor/pivot_helpers.h" #include "app/ui/status_bar.h" @@ -36,7 +37,6 @@ #include "doc/image.h" #include "doc/layer.h" #include "doc/mask.h" -#include "doc/site.h" #include "doc/sprite.h" #include "gfx/region.h" #include "render/render.h" diff --git a/src/app/ui/editor/pixels_movement.h b/src/app/ui/editor/pixels_movement.h index f834bbbcb..2655cf56b 100644 --- a/src/app/ui/editor/pixels_movement.h +++ b/src/app/ui/editor/pixels_movement.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -10,11 +10,11 @@ #include "app/context_access.h" #include "app/extra_cel.h" +#include "app/site.h" #include "app/transaction.h" #include "app/ui/editor/handle_type.h" #include "base/shared_ptr.h" #include "doc/algorithm/flip_type.h" -#include "doc/site.h" #include "gfx/size.h" #include "obs/connection.h" diff --git a/src/app/ui/export_file_window.cpp b/src/app/ui/export_file_window.cpp index dee1eb151..b49d5f590 100644 --- a/src/app/ui/export_file_window.cpp +++ b/src/app/ui/export_file_window.cpp @@ -13,6 +13,7 @@ #include "app/document.h" #include "app/file/file.h" #include "app/i18n/strings.h" +#include "app/site.h" #include "app/ui/layer_frame_comboboxes.h" #include "app/ui_context.h" #include "base/bind.h" @@ -21,7 +22,6 @@ #include "base/string.h" #include "doc/frame_tag.h" #include "doc/selected_frames.h" -#include "doc/site.h" #include "fmt/format.h" #include "ui/alert.h" diff --git a/src/app/ui/layer_frame_comboboxes.cpp b/src/app/ui/layer_frame_comboboxes.cpp index 4259c067c..f5a263dc3 100644 --- a/src/app/ui/layer_frame_comboboxes.cpp +++ b/src/app/ui/layer_frame_comboboxes.cpp @@ -11,12 +11,12 @@ #include "app/ui/layer_frame_comboboxes.h" #include "app/restore_visible_layers.h" +#include "app/site.h" #include "doc/anidir.h" #include "doc/frame_tag.h" #include "doc/layer.h" #include "doc/selected_frames.h" #include "doc/selected_layers.h" -#include "doc/site.h" #include "doc/sprite.h" #include "ui/combobox.h" @@ -109,7 +109,7 @@ void fill_anidir_combobox(ui::ComboBox* anidir, doc::AniDir defAnidir) anidir->setSelectedItemIndex(int(defAnidir)); } -void calculate_visible_layers(doc::Site& site, +void calculate_visible_layers(Site& site, const std::string& layersValue, RestoreVisibleLayers& layersVisibility) { @@ -134,7 +134,7 @@ void calculate_visible_layers(doc::Site& site, } } -doc::FrameTag* calculate_selected_frames(const doc::Site& site, +doc::FrameTag* calculate_selected_frames(const Site& site, const std::string& framesValue, doc::SelectedFrames& selFrames) { diff --git a/src/app/ui/layer_frame_comboboxes.h b/src/app/ui/layer_frame_comboboxes.h index 55cbfc605..ace776212 100644 --- a/src/app/ui/layer_frame_comboboxes.h +++ b/src/app/ui/layer_frame_comboboxes.h @@ -18,7 +18,6 @@ namespace doc { class Layer; class SelectedFrames; class SelectedLayers; - class Site; class Sprite; } @@ -27,8 +26,8 @@ namespace ui { } namespace app { - class RestoreVisibleLayers; + class Site; extern const char* kAllLayers; extern const char* kAllFrames; @@ -56,11 +55,11 @@ namespace app { void fill_frames_combobox(const doc::Sprite* sprite, ui::ComboBox* frames, const std::string& defFrame); void fill_anidir_combobox(ui::ComboBox* anidir, doc::AniDir defAnidir); - void calculate_visible_layers(doc::Site& site, + void calculate_visible_layers(Site& site, const std::string& layersValue, RestoreVisibleLayers& layersVisibility); - doc::FrameTag* calculate_selected_frames(const doc::Site& site, + doc::FrameTag* calculate_selected_frames(const Site& site, const std::string& framesValue, doc::SelectedFrames& selFrames); diff --git a/src/app/ui/status_bar.cpp b/src/app/ui/status_bar.cpp index 589bd44a2..f55a3be89 100644 --- a/src/app/ui/status_bar.cpp +++ b/src/app/ui/status_bar.cpp @@ -12,6 +12,7 @@ #include "app/commands/commands.h" #include "app/commands/params.h" #include "app/context_access.h" +#include "app/doc_event.h" #include "app/document_access.h" #include "app/document_range.h" #include "app/modules/editors.h" @@ -35,7 +36,6 @@ #include "app/util/range_utils.h" #include "base/bind.h" #include "base/string.h" -#include "doc/doc_event.h" #include "doc/image.h" #include "doc/layer.h" #include "doc/sprite.h" @@ -759,7 +759,7 @@ void StatusBar::onResize(ResizeEvent& ev) updateSnapToGridWindowPosition(); } -void StatusBar::onActiveSiteChange(const doc::Site& site) +void StatusBar::onActiveSiteChange(const Site& site) { if (m_doc && site.document() != m_doc) { m_doc->remove_observer(this); @@ -768,7 +768,7 @@ void StatusBar::onActiveSiteChange(const doc::Site& site) if (site.document() && site.sprite()) { if (!m_doc) { - m_doc = const_cast(site.document()); + m_doc = const_cast(site.document()); m_doc->add_observer(this); } else { @@ -793,7 +793,7 @@ void StatusBar::onActiveSiteChange(const doc::Site& site) layout(); } -void StatusBar::onRemoveDocument(doc::Document* doc) +void StatusBar::onRemoveDocument(Document* doc) { if (m_doc && m_doc == doc) { diff --git a/src/app/ui/status_bar.h b/src/app/ui/status_bar.h index 4a59c2173..e8690f0f1 100644 --- a/src/app/ui/status_bar.h +++ b/src/app/ui/status_bar.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2017 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -9,11 +9,11 @@ #pragma once #include "app/color.h" +#include "app/context_observer.h" +#include "app/doc_observer.h" +#include "app/documents_observer.h" #include "app/tools/active_tool_observer.h" #include "base/time.h" -#include "doc/context_observer.h" -#include "doc/doc_observer.h" -#include "doc/documents_observer.h" #include "ui/base.h" #include "ui/box.h" @@ -42,9 +42,9 @@ namespace app { } class StatusBar : public ui::HBox - , public doc::ContextObserver - , public doc::DocumentsObserver - , public doc::DocObserver + , public ContextObserver + , public DocumentsObserver + , public DocObserver , public tools::ActiveToolObserver { static StatusBar* m_instance; public: @@ -73,10 +73,10 @@ namespace app { void onResize(ui::ResizeEvent& ev) override; // ContextObserver impl - void onActiveSiteChange(const doc::Site& site) override; + void onActiveSiteChange(const Site& site) override; // DocObservers impl - void onRemoveDocument(doc::Document* doc) override; + void onRemoveDocument(Document* doc) override; // DocObserver impl void onPixelFormatChanged(DocEvent& ev) override; @@ -104,7 +104,7 @@ namespace app { ui::Entry* m_currentFrame; // Current frame and go to frame entry ui::Button* m_newFrame; // Button to create a new frame ZoomEntry* m_zoomEntry; - doc::Document* m_doc; // Document used to show the cel slider + Document* m_doc; // Document used to show the cel slider // Tip window class CustomizedTipWindow; diff --git a/src/app/ui/timeline/timeline.cpp b/src/app/ui/timeline/timeline.cpp index ea396dd78..c19e106c1 100644 --- a/src/app/ui/timeline/timeline.cpp +++ b/src/app/ui/timeline/timeline.cpp @@ -18,6 +18,7 @@ #include "app/commands/params.h" #include "app/console.h" #include "app/context_access.h" +#include "app/doc_event.h" #include "app/document.h" #include "app/document_api.h" #include "app/document_range_ops.h" @@ -46,7 +47,6 @@ #include "base/scoped_value.h" #include "base/unique_ptr.h" #include "doc/doc.h" -#include "doc/doc_event.h" #include "doc/frame_tag.h" #include "gfx/point.h" #include "gfx/rect.h" @@ -1638,14 +1638,14 @@ void Timeline::onAfterCommandExecution(CommandExecutionEvent& ev) invalidate(); } -void Timeline::onActiveSiteChange(const doc::Site& site) +void Timeline::onActiveSiteChange(const Site& site) { if (hasMouse()) { updateStatusBarForFrame(site.frame(), nullptr, site.cel()); } } -void Timeline::onRemoveDocument(doc::Document* document) +void Timeline::onRemoveDocument(Document* document) { if (document == m_document) { detachDocument(); @@ -1657,7 +1657,7 @@ void Timeline::onGeneralUpdate(DocEvent& ev) invalidate(); } -void Timeline::onAddLayer(doc::DocEvent& ev) +void Timeline::onAddLayer(DocEvent& ev) { ASSERT(ev.layer() != NULL); @@ -1669,7 +1669,7 @@ void Timeline::onAddLayer(doc::DocEvent& ev) invalidate(); } -void Timeline::onAfterRemoveLayer(doc::DocEvent& ev) +void Timeline::onAfterRemoveLayer(DocEvent& ev) { Sprite* sprite = ev.sprite(); Layer* layer = ev.layer(); @@ -1697,7 +1697,7 @@ void Timeline::onAfterRemoveLayer(doc::DocEvent& ev) invalidate(); } -void Timeline::onAddFrame(doc::DocEvent& ev) +void Timeline::onAddFrame(DocEvent& ev) { setFrame(ev.frame(), false); @@ -1706,7 +1706,7 @@ void Timeline::onAddFrame(doc::DocEvent& ev) invalidate(); } -void Timeline::onRemoveFrame(doc::DocEvent& ev) +void Timeline::onRemoveFrame(DocEvent& ev) { // Adjust current frame of all editors that are in a frame more // advanced that the removed one. @@ -1729,13 +1729,13 @@ void Timeline::onRemoveFrame(doc::DocEvent& ev) invalidate(); } -void Timeline::onSelectionChanged(doc::DocEvent& ev) +void Timeline::onSelectionChanged(DocEvent& ev) { if (m_rangeLocks == 0) clearAndInvalidateRange(); } -void Timeline::onLayerNameChange(doc::DocEvent& ev) +void Timeline::onLayerNameChange(DocEvent& ev) { invalidate(); } diff --git a/src/app/ui/timeline/timeline.h b/src/app/ui/timeline/timeline.h index 6d6d3c531..05cf08534 100644 --- a/src/app/ui/timeline/timeline.h +++ b/src/app/ui/timeline/timeline.h @@ -8,15 +8,16 @@ #define APP_UI_TIMELINE_TIMELINE_H_INCLUDED #pragma once +#include "app/doc_observer.h" #include "app/document_range.h" +#include "app/documents_observer.h" #include "app/loop_tag.h" #include "app/pref/preferences.h" #include "app/ui/editor/editor_observer.h" #include "app/ui/input_chain_element.h" #include "app/ui/timeline/ani_controls.h" -#include "doc/doc_observer.h" -#include "doc/documents_observer.h" #include "doc/frame.h" +#include "doc/layer.h" #include "doc/selected_frames.h" #include "doc/selected_layers.h" #include "doc/sprite.h" @@ -52,14 +53,14 @@ namespace app { class Document; class Editor; - class Timeline : public ui::Widget - , public ui::ScrollableViewDelegate - , public doc::ContextObserver - , public doc::DocumentsObserver - , public doc::DocObserver - , public app::EditorObserver - , public app::InputChainElement - , public app::FrameTagProvider { + class Timeline : public ui::Widget, + public ui::ScrollableViewDelegate, + public ContextObserver, + public DocumentsObserver, + public DocObserver, + public EditorObserver, + public InputChainElement, + public FrameTagProvider { public: typedef DocumentRange Range; @@ -137,12 +138,12 @@ namespace app { // DocObserver impl. void onGeneralUpdate(DocEvent& ev) override; - void onAddLayer(doc::DocEvent& ev) override; - void onAfterRemoveLayer(doc::DocEvent& ev) override; - void onAddFrame(doc::DocEvent& ev) override; - void onRemoveFrame(doc::DocEvent& ev) override; - void onSelectionChanged(doc::DocEvent& ev) override; - void onLayerNameChange(doc::DocEvent& ev) override; + void onAddLayer(DocEvent& ev) override; + void onAfterRemoveLayer(DocEvent& ev) override; + void onAddFrame(DocEvent& ev) override; + void onRemoveFrame(DocEvent& ev) override; + void onSelectionChanged(DocEvent& ev) override; + void onLayerNameChange(DocEvent& ev) override; void onAddFrameTag(DocEvent& ev) override; void onRemoveFrameTag(DocEvent& ev) override; @@ -150,10 +151,10 @@ namespace app { void onAfterCommandExecution(CommandExecutionEvent& ev); // ContextObserver impl - void onActiveSiteChange(const doc::Site& site) override; + void onActiveSiteChange(const Site& site) override; // DocumentsObserver impl. - void onRemoveDocument(doc::Document* document) override; + void onRemoveDocument(Document* document) override; // EditorObserver impl. void onStateChanged(Editor* editor) override; diff --git a/src/app/ui_context.cpp b/src/app/ui_context.cpp index d75034d31..69df3b726 100644 --- a/src/app/ui_context.cpp +++ b/src/app/ui_context.cpp @@ -12,6 +12,7 @@ #include "app/document.h" #include "app/modules/editors.h" #include "app/pref/preferences.h" +#include "app/site.h" #include "app/ui/color_bar.h" #include "app/ui/document_view.h" #include "app/ui/editor/editor.h" @@ -24,7 +25,6 @@ #include "app/ui/workspace_tabs.h" #include "app/ui_context.h" #include "base/mutex.h" -#include "doc/site.h" #include "doc/sprite.h" namespace app { @@ -120,7 +120,7 @@ void UIContext::setActiveView(DocumentView* docView) notifyActiveSiteChanged(); } -void UIContext::onSetActiveDocument(doc::Document* document) +void UIContext::onSetActiveDocument(Document* document) { bool notify = (lastSelectedDoc() != document); app::Context::onSetActiveDocument(document); @@ -135,7 +135,7 @@ void UIContext::onSetActiveDocument(doc::Document* document) notifyActiveSiteChanged(); } -DocumentView* UIContext::getFirstDocumentView(doc::Document* document) const +DocumentView* UIContext::getFirstDocumentView(Document* document) const { Workspace* workspace = App::instance()->workspace(); if (!workspace) // Workspace (main window) can be null if we are in --batch mode @@ -152,7 +152,7 @@ DocumentView* UIContext::getFirstDocumentView(doc::Document* document) const return nullptr; } -DocumentViews UIContext::getAllDocumentViews(doc::Document* document) const +DocumentViews UIContext::getAllDocumentViews(Document* document) const { Workspace* workspace = App::instance()->workspace(); DocumentViews docViews; @@ -177,7 +177,7 @@ Editor* UIContext::activeEditor() return NULL; } -void UIContext::onAddDocument(doc::Document* doc) +void UIContext::onAddDocument(Document* doc) { app::Context::onAddDocument(doc); @@ -198,7 +198,7 @@ void UIContext::onAddDocument(doc::Document* doc) view->editor()->setDefaultScroll(); } -void UIContext::onRemoveDocument(doc::Document* doc) +void UIContext::onRemoveDocument(Document* doc) { app::Context::onRemoveDocument(doc); diff --git a/src/app/ui_context.h b/src/app/ui_context.h index f2426f20d..9a44dc562 100644 --- a/src/app/ui_context.h +++ b/src/app/ui_context.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2015, 2018 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -9,7 +9,7 @@ #pragma once #include "app/context.h" -#include "doc/documents_observer.h" +#include "app/documents_observer.h" namespace app { class DocumentView; @@ -29,8 +29,8 @@ namespace app { DocumentView* activeView() const; void setActiveView(DocumentView* documentView); - DocumentView* getFirstDocumentView(doc::Document* document) const override; - DocumentViews getAllDocumentViews(doc::Document* document) const; + DocumentView* getFirstDocumentView(Document* document) const override; + DocumentViews getAllDocumentViews(Document* document) const; // Returns the current editor. It can be null. Editor* activeEditor(); @@ -40,10 +40,10 @@ namespace app { Editor* getEditorFor(Document* document); protected: - void onAddDocument(doc::Document* doc) override; - void onRemoveDocument(doc::Document* doc) override; - void onGetActiveSite(doc::Site* site) const override; - void onSetActiveDocument(doc::Document* doc) override; + void onAddDocument(Document* doc) override; + void onRemoveDocument(Document* doc) override; + void onGetActiveSite(Site* site) const override; + void onSetActiveDocument(Document* doc) override; private: DocumentView* m_lastSelectedView; diff --git a/src/app/util/clipboard.cpp b/src/app/util/clipboard.cpp index 011eb0cc1..9f10e7afd 100644 --- a/src/app/util/clipboard.cpp +++ b/src/app/util/clipboard.cpp @@ -43,7 +43,7 @@ namespace app { namespace { - class ClipboardRange : public doc::DocumentsObserver { + class ClipboardRange : public DocumentsObserver { public: ClipboardRange() : m_doc(nullptr) { } @@ -77,7 +77,7 @@ namespace { DocumentRange range() const { return m_range; } // DocumentsObserver impl - void onRemoveDocument(doc::Document* doc) override { + void onRemoveDocument(Document* doc) override { if (doc == m_doc) invalidate(); } diff --git a/src/app/util/expand_cel_canvas.cpp b/src/app/util/expand_cel_canvas.cpp index 944555491..6911ef4e9 100644 --- a/src/app/util/expand_cel_canvas.cpp +++ b/src/app/util/expand_cel_canvas.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -17,6 +17,7 @@ #include "app/cmd/patch_cel.h" #include "app/context.h" #include "app/document.h" +#include "app/site.h" #include "app/transaction.h" #include "app/util/range_utils.h" #include "base/unique_ptr.h" @@ -25,7 +26,6 @@ #include "doc/image.h" #include "doc/layer.h" #include "doc/primitives.h" -#include "doc/site.h" #include "doc/sprite.h" namespace { diff --git a/src/app/util/expand_cel_canvas.h b/src/app/util/expand_cel_canvas.h index 3e156dbbd..99e390db9 100644 --- a/src/app/util/expand_cel_canvas.h +++ b/src/app/util/expand_cel_canvas.h @@ -20,12 +20,12 @@ namespace doc { class Cel; class Image; class Layer; - class Site; class Sprite; } namespace app { class Document; + class Site; class Transaction; using namespace filters; diff --git a/src/app/util/new_image_from_mask.cpp b/src/app/util/new_image_from_mask.cpp index c6a8156dc..b886c210a 100644 --- a/src/app/util/new_image_from_mask.cpp +++ b/src/app/util/new_image_from_mask.cpp @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -11,11 +11,11 @@ #include "app/util/new_image_from_mask.h" #include "app/document.h" +#include "app/site.h" #include "base/unique_ptr.h" #include "doc/image_impl.h" #include "doc/mask.h" #include "doc/primitives.h" -#include "doc/site.h" #include "render/render.h" namespace app { @@ -28,7 +28,7 @@ Image* new_image_from_mask(const Site& site) return new_image_from_mask(site, srcMask); } -doc::Image* new_image_from_mask(const doc::Site& site, +doc::Image* new_image_from_mask(const Site& site, const doc::Mask* srcMask, bool merged) { diff --git a/src/app/util/new_image_from_mask.h b/src/app/util/new_image_from_mask.h index ffbb63fdb..856e0ad85 100644 --- a/src/app/util/new_image_from_mask.h +++ b/src/app/util/new_image_from_mask.h @@ -1,5 +1,5 @@ // Aseprite -// Copyright (C) 2001-2016 David Capello +// Copyright (C) 2001-2018 David Capello // // This program is distributed under the terms of // the End-User License Agreement for Aseprite. @@ -11,13 +11,13 @@ namespace doc { class Image; class Mask; - class Site; } namespace app { + class Site; - doc::Image* new_image_from_mask(const doc::Site& site); - doc::Image* new_image_from_mask(const doc::Site& site, + doc::Image* new_image_from_mask(const Site& site); + doc::Image* new_image_from_mask(const Site& site, const doc::Mask* mask, bool merged = false); diff --git a/src/doc/CMakeLists.txt b/src/doc/CMakeLists.txt index 3d2c39862..8defd60fb 100644 --- a/src/doc/CMakeLists.txt +++ b/src/doc/CMakeLists.txt @@ -29,10 +29,8 @@ add_library(doc-lib cel_io.cpp cels_range.cpp compressed_image.cpp - context.cpp conversion_she.cpp document.cpp - documents.cpp file/col_file.cpp file/gpl_file.cpp file/hex_file.cpp @@ -59,7 +57,6 @@ add_library(doc-lib rgbmap.cpp selected_frames.cpp selected_layers.cpp - site.cpp slice.cpp slice_io.cpp slices.cpp diff --git a/src/doc/context.cpp b/src/doc/context.cpp deleted file mode 100644 index 65ee7b062..000000000 --- a/src/doc/context.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// Aseprite Document Library -// Copyright (c) 2001-2016 David Capello -// -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "doc/context.h" - -#include "base/debug.h" -#include "doc/site.h" - -namespace doc { - -Context::Context() - : m_docs(this) - , m_activeDoc(NULL) -{ - m_docs.add_observer(this); -} - -Context::~Context() -{ - m_docs.remove_observer(this); -} - -Site Context::activeSite() const -{ - Site site; - onGetActiveSite(&site); - return site; -} - -Document* Context::activeDocument() const -{ - Site site; - onGetActiveSite(&site); - return site.document(); -} - -void Context::notifyActiveSiteChanged() -{ - Site site = activeSite(); - notify_observers(&ContextObserver::onActiveSiteChange, site); -} - -void Context::onGetActiveSite(Site* site) const -{ - ASSERT(false); -} - -void Context::onAddDocument(Document* doc) -{ - // Do nothing -} - -void Context::onRemoveDocument(Document* doc) -{ - // Do nothing -} - -} // namespace doc diff --git a/src/doc/context.h b/src/doc/context.h deleted file mode 100644 index 427a96a6f..000000000 --- a/src/doc/context.h +++ /dev/null @@ -1,51 +0,0 @@ -// Aseprite Document Library -// Copyright (c) 2001-2016 David Capello -// -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. - -#ifndef DOC_CONTEXT_H_INCLUDED -#define DOC_CONTEXT_H_INCLUDED -#pragma once - -#include "base/disable_copying.h" -#include "doc/context_observer.h" -#include "doc/documents.h" -#include "doc/documents_observer.h" -#include "obs/observable.h" - -namespace doc { - class Command; - class Document; - class Settings; - - class Context : public obs::observable - , public DocumentsObserver { - public: - Context(); - virtual ~Context(); - - const Documents& documents() const { return m_docs; } - Documents& documents() { return m_docs; } - - Site activeSite() const; - Document* activeDocument() const; - - void notifyActiveSiteChanged(); - - protected: - virtual void onGetActiveSite(Site* site) const; - virtual void onAddDocument(Document* doc) override; - virtual void onRemoveDocument(Document* doc) override; - - private: - Settings* m_settings; - Documents m_docs; - Document* m_activeDoc; - - DISABLE_COPYING(Context); - }; - -} // namespace doc - -#endif diff --git a/src/doc/context_observer.h b/src/doc/context_observer.h deleted file mode 100644 index dfbd5ca1d..000000000 --- a/src/doc/context_observer.h +++ /dev/null @@ -1,24 +0,0 @@ -// Aseprite Document Library -// Copyright (c) 2001-2015 David Capello -// -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. - -#ifndef DOC_CONTEXT_OBSERVER_H_INCLUDED -#define DOC_CONTEXT_OBSERVER_H_INCLUDED -#pragma once - -namespace doc { - - class Document; - class Site; - - class ContextObserver { - public: - virtual ~ContextObserver() { } - virtual void onActiveSiteChange(const Site& site) { } - }; - -} // namespace doc - -#endif diff --git a/src/doc/doc.h b/src/doc/doc.h index 79cf3efe5..d73410ed4 100644 --- a/src/doc/doc.h +++ b/src/doc/doc.h @@ -1,5 +1,5 @@ // Aseprite Document Library -// Copyright (c) 2001-2017 David Capello +// Copyright (c) 2001-2018 David Capello // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. @@ -33,7 +33,6 @@ #include "doc/primitives_fast.h" #include "doc/remap.h" #include "doc/rgbmap.h" -#include "doc/site.h" #include "doc/slice.h" #include "doc/slices.h" #include "doc/sprite.h" diff --git a/src/doc/document.cpp b/src/doc/document.cpp index 8fb51f150..2707abab8 100644 --- a/src/doc/document.cpp +++ b/src/doc/document.cpp @@ -1,5 +1,5 @@ // Aseprite Document Library -// Copyright (c) 2001-2016 David Capello +// Copyright (c) 2001-2018 David Capello // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. @@ -11,7 +11,6 @@ #include "doc/document.h" #include "base/fs.h" -#include "doc/context.h" #include "doc/sprite.h" namespace doc { @@ -19,27 +18,11 @@ namespace doc { Document::Document() : Object(ObjectType::Document) , m_sprites(this) - , m_ctx(NULL) { } Document::~Document() { - removeFromContext(); -} - -void Document::setContext(Context* ctx) -{ - if (ctx == m_ctx) - return; - - removeFromContext(); - - m_ctx = ctx; - if (ctx) - ctx->documents().add(this); - - onContextChanged(); } int Document::width() const @@ -70,27 +53,12 @@ void Document::setFilename(const std::string& filename) else m_filename = filename; - notify_observers(&DocObserver::onFileNameChanged, this); + onFileNameChange(); } -void Document::close() -{ - removeFromContext(); -} - -void Document::onContextChanged() +void Document::onFileNameChange() { // Do nothing } -void Document::removeFromContext() -{ - if (m_ctx) { - m_ctx->documents().remove(this); - m_ctx = NULL; - - onContextChanged(); - } -} - } // namespace doc diff --git a/src/doc/document.h b/src/doc/document.h index 3faf4488f..00dba19b9 100644 --- a/src/doc/document.h +++ b/src/doc/document.h @@ -1,5 +1,5 @@ // Aseprite Document Library -// Copyright (c) 2001-2016 David Capello +// Copyright (c) 2001-2018 David Capello // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. @@ -10,25 +10,16 @@ #include -#include "base/unique_ptr.h" -#include "doc/doc_observer.h" #include "doc/object.h" #include "doc/sprites.h" -#include "obs/observable.h" namespace doc { - class Context; - - class Document : public Object - , public obs::observable { + class Document : public Object { public: Document(); ~Document(); - Context* context() const { return m_ctx; } - void setContext(Context* ctx); - const Sprites& sprites() const { return m_sprites; } Sprites& sprites() { return m_sprites; } @@ -43,19 +34,13 @@ namespace doc { const std::string& filename() const { return m_filename; } void setFilename(const std::string& filename); - void close(); - protected: - virtual void onContextChanged(); + virtual void onFileNameChange(); private: - void removeFromContext(); - - // Document's file name. From where it was loaded, where it is - // saved. - std::string m_filename; + std::string m_filename; // Document's file name. From where it was + // loaded, where it is saved. Sprites m_sprites; - Context* m_ctx; }; } // namespace doc diff --git a/src/doc/sprite.h b/src/doc/sprite.h index cd1cf7830..c753c5bc2 100644 --- a/src/doc/sprite.h +++ b/src/doc/sprite.h @@ -16,11 +16,11 @@ #include "doc/frame_tags.h" #include "doc/image_ref.h" #include "doc/image_spec.h" +#include "doc/layer_list.h" #include "doc/object.h" #include "doc/pixel_format.h" #include "doc/pixel_ratio.h" #include "doc/slices.h" -#include "doc/sprite_position.h" #include "gfx/rect.h" #include diff --git a/src/doc/sprite_position.h b/src/doc/sprite_position.h deleted file mode 100644 index 153d00553..000000000 --- a/src/doc/sprite_position.h +++ /dev/null @@ -1,56 +0,0 @@ -// Aseprite Document Library -// Copyright (c) 2001-2016 David Capello -// -// This file is released under the terms of the MIT license. -// Read LICENSE.txt for more information. - -#ifndef DOC_SPRITE_POSITION_H_INCLUDED -#define DOC_SPRITE_POSITION_H_INCLUDED -#pragma once - -#include "doc/frame.h" -#include "doc/layer.h" -#include "doc/object.h" -#include "doc/object_id.h" - -namespace doc { - - class SpritePosition { - public: - SpritePosition() - : m_layerId(NullId) - , m_frame(0) { - } - - SpritePosition(const Layer* layer, frame_t frame) - : m_layerId(layer ? layer->id(): NullId) - , m_frame(frame) { - } - - Layer* layer() const { return get(m_layerId); } - ObjectId layerId() const { return m_layerId; } - frame_t frame() const { return m_frame; } - - void layer(Layer* layer) { - m_layerId = (layer ? layer->id(): NullId); - } - - void layerId(ObjectId layerId) { - m_layerId = layerId; - } - - void frame(frame_t frame) { - m_frame = frame; - } - - bool operator==(const SpritePosition& o) const { return m_layerId == o.m_layerId && m_frame == o.m_frame; } - bool operator!=(const SpritePosition& o) const { return m_layerId != o.m_layerId || m_frame != o.m_frame; } - - private: - ObjectId m_layerId; - frame_t m_frame; - }; - -} // namespace doc - -#endif diff --git a/src/render/render_tests.cpp b/src/render/render_tests.cpp index 385eb3134..007610738 100644 --- a/src/render/render_tests.cpp +++ b/src/render/render_tests.cpp @@ -1,5 +1,5 @@ // Aseprite Document Library -// Copyright (c) 2001-2017 David Capello +// Copyright (c) 2001-2018 David Capello // // This file is released under the terms of the MIT license. // Read LICENSE.txt for more information. @@ -14,7 +14,6 @@ #include "base/unique_ptr.h" #include "doc/cel.h" -#include "doc/context.h" #include "doc/document.h" #include "doc/image.h" #include "doc/layer.h" @@ -65,8 +64,8 @@ TYPED_TEST_CASE(RenderAllModes, ImageAllTraits); TEST(Render, Basic) { - Context ctx; - Document* doc = ctx.documents().add(2, 2, ColorMode::INDEXED); + Document* doc = new Document; + doc->sprites().add(2, 2, ColorMode::INDEXED); Image* src = doc->sprite()->root()->firstLayer()->cel(0)->image(); clear_image(src, 2); @@ -84,9 +83,8 @@ TYPED_TEST(RenderAllModes, CheckDefaultBackgroundMode) { typedef TypeParam ImageTraits; - Context ctx; - Document* doc = ctx.documents().add(2, 2, - ColorMode(ImageTraits::pixel_format)); + Document* doc = new Document; + doc->sprites().add(2, 2, ColorMode(ImageTraits::pixel_format)); EXPECT_TRUE(!doc->sprite()->root()->firstLayer()->isBackground()); Image* src = doc->sprite()->root()->firstLayer()->cel(0)->image(); @@ -105,8 +103,8 @@ TYPED_TEST(RenderAllModes, CheckDefaultBackgroundMode) TEST(Render, DefaultBackgroundModeWithNonzeroTransparentIndex) { - Context ctx; - Document* doc = ctx.documents().add(2, 2, ColorMode::INDEXED); + Document* doc = new Document; + doc->sprites().add(2, 2, ColorMode::INDEXED); doc->sprite()->setTransparentColor(2); // Transparent color is index 2 EXPECT_TRUE(!doc->sprite()->root()->firstLayer()->isBackground()); @@ -133,8 +131,8 @@ TEST(Render, DefaultBackgroundModeWithNonzeroTransparentIndex) TEST(Render, CheckedBackground) { - Context ctx; - Document* doc = ctx.documents().add(4, 4, ColorMode::INDEXED); + Document* doc = new Document; + doc->sprites().add(4, 4, ColorMode::INDEXED); base::UniquePtr dst(Image::create(IMAGE_INDEXED, 4, 4)); clear_image(dst, 0); @@ -181,13 +179,12 @@ TEST(Render, CheckedBackground) TEST(Render, ZoomAndDstBounds) { - Context ctx; - // Create this image: // 0 0 0 // 0 4 4 // 0 4 4 - Document* doc = ctx.documents().add(3, 3, ColorMode::INDEXED); + Document* doc = new Document; + doc->sprites().add(3, 3, ColorMode::INDEXED); Image* src = doc->sprite()->root()->firstLayer()->cel(0)->image(); clear_image(src, 0); fill_rect(src, 1, 1, 2, 2, 4); @@ -214,8 +211,8 @@ TEST(Render, ZoomAndDstBounds) TEST(Render, BugWithMultiplesOf3ZoomFactors) { - Context ctx; - Document* doc = ctx.documents().add(4, 4, ColorMode::RGB); + Document* doc = new Document; + doc->sprites().add(4, 4, ColorMode::RGB); Image* src = doc->sprite()->root()->firstLayer()->cel(0)->image(); clear_image(src, 0); draw_line(src, 0, 0, 3, 3, rgba(255, 0, 0, 255));