diff --git a/src/app/commands/cmd_fullscreen_preview.cpp b/src/app/commands/cmd_fullscreen_preview.cpp index 79c30263d..8903f4f1b 100644 --- a/src/app/commands/cmd_fullscreen_preview.cpp +++ b/src/app/commands/cmd_fullscreen_preview.cpp @@ -173,7 +173,7 @@ protected: virtual void onPaint(PaintEvent& ev) override { Graphics* g = ev.getGraphics(); - AppRender& render = Editor::renderEngine(); + AppRender& render = m_editor->renderEngine(); render.disableOnionskin(); render.setBgType(render::BgType::TRANSPARENT); diff --git a/src/app/commands/filters/filter_preview.cpp b/src/app/commands/filters/filter_preview.cpp index 998a0cf1d..5ea245015 100644 --- a/src/app/commands/filters/filter_preview.cpp +++ b/src/app/commands/filters/filter_preview.cpp @@ -12,6 +12,7 @@ #include "app/commands/filters/filter_preview.h" #include "app/commands/filters/filter_manager_impl.h" +#include "app/modules/editors.h" #include "app/ui/editor/editor.h" #include "doc/sprite.h" #include "ui/manager.h" @@ -64,14 +65,14 @@ bool FilterPreview::onProcessMessage(Message* msg) switch (msg->type()) { case kOpenMessage: - Editor::renderEngine().setPreviewImage( + current_editor->renderEngine().setPreviewImage( m_filterMgr->layer(), m_filterMgr->frame(), m_filterMgr->destinationImage()); break; case kCloseMessage: - Editor::renderEngine().removePreviewImage(); + current_editor->renderEngine().removePreviewImage(); // Stop the preview timer. m_timer.stop(); diff --git a/src/app/tools/tool_loop_manager.cpp b/src/app/tools/tool_loop_manager.cpp index 6631ef0e0..db810ea93 100644 --- a/src/app/tools/tool_loop_manager.cpp +++ b/src/app/tools/tool_loop_manager.cpp @@ -18,7 +18,6 @@ #include "app/tools/intertwine.h" #include "app/tools/point_shape.h" #include "app/tools/tool_loop.h" -#include "app/ui/editor/editor.h" #include "doc/image.h" #include "doc/primitives.h" #include "doc/sprite.h" @@ -57,19 +56,6 @@ void ToolLoopManager::prepareLoop(const Pointer& pointer, m_toolLoop->getIntertwine()->prepareIntertwine(); m_toolLoop->getController()->prepareController(modifiers); m_toolLoop->getPointShape()->preparePointShape(m_toolLoop); - - // Prepare preview image (the destination image will be our preview - // in the tool-loop time, so we can see what we are drawing) - Editor::renderEngine().setPreviewImage( - m_toolLoop->getLayer(), - m_toolLoop->getFrame(), - m_toolLoop->getDstImage()); -} - -void ToolLoopManager::releaseLoop(const Pointer& pointer) -{ - // No more preview image - Editor::renderEngine().removePreviewImage(); } void ToolLoopManager::pressKey(ui::KeyScancode key) diff --git a/src/app/tools/tool_loop_manager.h b/src/app/tools/tool_loop_manager.h index 36493a4d5..8ce4bcb54 100644 --- a/src/app/tools/tool_loop_manager.h +++ b/src/app/tools/tool_loop_manager.h @@ -37,7 +37,6 @@ namespace app { // is called. // 5. When the user release the mouse: // - ToolLoopManager::releaseButton - // - ToolLoopManager::releaseLoop class ToolLoopManager { public: @@ -72,9 +71,6 @@ namespace app { void prepareLoop(const Pointer& pointer, ui::KeyModifiers modifiers); - // Called when the loop is over. - void releaseLoop(const Pointer& pointer); - void pressKey(ui::KeyScancode key); void releaseKey(ui::KeyScancode key); diff --git a/src/app/ui/editor/drawing_state.cpp b/src/app/ui/editor/drawing_state.cpp index 5be70da65..7da3bbf4d 100644 --- a/src/app/ui/editor/drawing_state.cpp +++ b/src/app/ui/editor/drawing_state.cpp @@ -59,7 +59,7 @@ DrawingState::DrawingState(tools::ToolLoop* toolLoop) DrawingState::~DrawingState() { - destroyLoop(); + destroyLoop(nullptr); } void DrawingState::initToolLoop(Editor* editor, MouseMessage* msg) @@ -71,6 +71,13 @@ void DrawingState::initToolLoop(Editor* editor, MouseMessage* msg) m_toolLoopManager->prepareLoop(pointer_from_msg(msg), msg->keyModifiers()); m_toolLoopManager->pressButton(pointer_from_msg(msg)); + // Prepare preview image (the destination image will be our preview + // in the tool-loop time, so we can see what we are drawing) + editor->renderEngine().setPreviewImage( + m_toolLoop->getLayer(), + m_toolLoop->getFrame(), + m_toolLoop->getDstImage()); + editor->captureMouse(); } @@ -84,8 +91,7 @@ bool DrawingState::onMouseDown(Editor* editor, MouseMessage* msg) // Cancel drawing loop if (m_toolLoopManager->isCanceled()) { - m_toolLoopManager->releaseLoop(pointer_from_msg(msg)); - destroyLoop(); + destroyLoop(editor); // Change to standby state editor->backToPreviousState(); @@ -112,8 +118,7 @@ bool DrawingState::onMouseUp(Editor* editor, MouseMessage* msg) return true; } - m_toolLoopManager->releaseLoop(pointer_from_msg(msg)); - destroyLoop(); + destroyLoop(editor); // Back to standby state. editor->backToPreviousState(); @@ -196,15 +201,18 @@ void DrawingState::onExposeSpritePixels(const gfx::Region& rgn) m_toolLoop->validateDstImage(rgn); } -void DrawingState::destroyLoop() +void DrawingState::destroyLoop(Editor* editor) { + if (editor) + editor->renderEngine().removePreviewImage(); + if (m_toolLoop) m_toolLoop->dispose(); delete m_toolLoopManager; delete m_toolLoop; - m_toolLoopManager = NULL; - m_toolLoop = NULL; + m_toolLoopManager = nullptr; + m_toolLoop = nullptr; app_rebuild_documents_tabs(); } diff --git a/src/app/ui/editor/drawing_state.h b/src/app/ui/editor/drawing_state.h index 1ce994316..9815063eb 100644 --- a/src/app/ui/editor/drawing_state.h +++ b/src/app/ui/editor/drawing_state.h @@ -37,7 +37,7 @@ namespace app { void initToolLoop(Editor* editor, ui::MouseMessage* msg); private: - void destroyLoop(); + void destroyLoop(Editor* editor); // The tool-loop. tools::ToolLoop* m_toolLoop; diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp index a6cab19e5..a61b3d0b9 100644 --- a/src/app/ui/editor/editor.cpp +++ b/src/app/ui/editor/editor.cpp @@ -139,9 +139,6 @@ private: // static doc::ImageBufferPtr Editor::m_renderBuffer; -// static -AppRender Editor::m_renderEngine; - Editor::Editor(Document* document, EditorFlags flags) : Widget(editor_type()) , m_state(new StandbyState()) diff --git a/src/app/ui/editor/editor.h b/src/app/ui/editor/editor.h index 49425199b..73c00565e 100644 --- a/src/app/ui/editor/editor.h +++ b/src/app/ui/editor/editor.h @@ -206,7 +206,7 @@ namespace app { // E.g. It can be re-used by PreviewCommand static ImageBufferPtr getRenderImageBuffer(); - static AppRender& renderEngine() { return m_renderEngine; } + AppRender& renderEngine() { return m_renderEngine; } protected: bool onProcessMessage(ui::Message* msg) override; @@ -305,7 +305,7 @@ namespace app { double m_aniSpeed; static doc::ImageBufferPtr m_renderBuffer; - static AppRender m_renderEngine; + AppRender m_renderEngine; }; ui::WidgetType editor_type();