Add script::ScopedEngineDelegate

This commit is contained in:
David Capello 2018-09-06 15:12:48 -03:00
parent 0e3be4ec91
commit 3035820d39
2 changed files with 21 additions and 7 deletions

View File

@ -31,7 +31,6 @@ public:
void onConsolePrint(const char* text) override {
m_console.printf("%s\n", text);
}
private:
Console m_console;
};
@ -69,12 +68,11 @@ void RunScriptCommand::onLoadParams(const Params& params)
void RunScriptCommand::onExecute(Context* context)
{
script::Engine* engine = App::instance()->scriptEngine();
ConsoleEngineDelegate delegate;
engine->setDelegate(&delegate);
engine->evalFile(m_filename);
engine->setDelegate(nullptr);
{
ConsoleEngineDelegate delegate;
script::ScopedEngineDelegate scoped(engine, &delegate);
engine->evalFile(m_filename);
}
ui::Manager::getDefault()->invalidate();
}

View File

@ -48,6 +48,7 @@ namespace app {
Engine();
~Engine();
EngineDelegate* delegate() { return m_delegate; }
void setDelegate(EngineDelegate* delegate) {
m_delegate = delegate;
}
@ -65,6 +66,21 @@ namespace app {
bool m_printLastResult;
};
class ScopedEngineDelegate {
public:
ScopedEngineDelegate(Engine* engine, EngineDelegate* delegate)
: m_engine(engine),
m_oldDelegate(engine->delegate()) {
m_engine->setDelegate(delegate);
}
~ScopedEngineDelegate() {
m_engine->setDelegate(m_oldDelegate);
}
private:
Engine* m_engine;
EngineDelegate* m_oldDelegate;
};
int push_image_iterator_function(lua_State* L, const doc::ImageRef& image);
void push_cel_image(lua_State* L, doc::Cel* cel);
void push_sprite_cel(lua_State* L, doc::Cel* cel);