mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-06 12:39:57 +00:00
Do not share the AppRender instance between editors
This commit is contained in:
parent
22adb9d7d3
commit
c2569060f3
@ -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);
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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())
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user