mirror of
https://github.com/aseprite/aseprite.git
synced 2025-04-16 05:42:32 +00:00
Fix issue where filter preview sometimes doesn't start
This commit is contained in:
parent
9cf408541f
commit
d872a0b422
@ -1,4 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
|
// Copyright (C) 2019 Igara Studio S.A.
|
||||||
// Copyright (C) 2001-2018 David Capello
|
// Copyright (C) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
@ -13,7 +14,6 @@
|
|||||||
#include "app/commands/filters/filter_manager_impl.h"
|
#include "app/commands/filters/filter_manager_impl.h"
|
||||||
#include "app/ui/editor/editor.h"
|
#include "app/ui/editor/editor.h"
|
||||||
#include "app/ui/editor/editor_render.h"
|
#include "app/ui/editor/editor_render.h"
|
||||||
#include "base/bind.h"
|
|
||||||
#include "base/scoped_lock.h"
|
#include "base/scoped_lock.h"
|
||||||
#include "doc/layer.h"
|
#include "doc/layer.h"
|
||||||
#include "doc/sprite.h"
|
#include "doc/sprite.h"
|
||||||
@ -31,6 +31,7 @@ FilterPreview::FilterPreview(FilterManagerImpl* filterMgr)
|
|||||||
, m_filterMgr(filterMgr)
|
, m_filterMgr(filterMgr)
|
||||||
, m_timer(1, this)
|
, m_timer(1, this)
|
||||||
, m_filterThread(nullptr)
|
, m_filterThread(nullptr)
|
||||||
|
, m_filterIsDone(false)
|
||||||
{
|
{
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
}
|
}
|
||||||
@ -81,10 +82,9 @@ void FilterPreview::restartPreview()
|
|||||||
|
|
||||||
m_filterMgr->beginForPreview();
|
m_filterMgr->beginForPreview();
|
||||||
m_filterIsDone = false;
|
m_filterIsDone = false;
|
||||||
m_filterThread.reset(new base::thread(
|
|
||||||
base::Bind<void>(&FilterPreview::onFilterThread, this)));
|
|
||||||
|
|
||||||
m_timer.start();
|
m_timer.start();
|
||||||
|
m_filterThread.reset(
|
||||||
|
new base::thread([this]{ onFilterThread(); }));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FilterPreview::onProcessMessage(Message* msg)
|
bool FilterPreview::onProcessMessage(Message* msg)
|
||||||
@ -99,7 +99,10 @@ bool FilterPreview::onProcessMessage(Message* msg)
|
|||||||
setEnablePreview(false);
|
setEnablePreview(false);
|
||||||
|
|
||||||
// Stop the preview timer.
|
// Stop the preview timer.
|
||||||
m_timer.stop();
|
{
|
||||||
|
base::scoped_lock lock(m_filterMgrMutex);
|
||||||
|
m_timer.stop();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kTimerMessage: {
|
case kTimerMessage: {
|
||||||
@ -119,10 +122,12 @@ bool FilterPreview::onProcessMessage(Message* msg)
|
|||||||
// This is executed in other thread.
|
// This is executed in other thread.
|
||||||
void FilterPreview::onFilterThread()
|
void FilterPreview::onFilterThread()
|
||||||
{
|
{
|
||||||
while (!m_filterIsDone && m_timer.isRunning()) {
|
bool running = true;
|
||||||
|
while (running) {
|
||||||
{
|
{
|
||||||
base::scoped_lock lock(m_filterMgrMutex);
|
base::scoped_lock lock(m_filterMgrMutex);
|
||||||
m_filterIsDone = !m_filterMgr->applyStep();
|
m_filterIsDone = !m_filterMgr->applyStep();
|
||||||
|
running = (!m_filterIsDone && m_timer.isRunning());
|
||||||
}
|
}
|
||||||
base::this_thread::yield();
|
base::this_thread::yield();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user