diff --git a/src/ui/CSimpleMovieFrame.cpp b/src/ui/CSimpleMovieFrame.cpp index 8eed325..2b0a983 100644 --- a/src/ui/CSimpleMovieFrame.cpp +++ b/src/ui/CSimpleMovieFrame.cpp @@ -23,6 +23,14 @@ void CSimpleMovieFrame::RegisterScriptMethods(lua_State* L) { FrameScript_Object::FillScriptMethodTable(L, SimpleMovieFrameMethods, NUM_SIMPLE_MOVIE_FRAME_SCRIPT_METHODS); } +void CSimpleMovieFrame::RenderMovie(void* param) { + auto movieFrame = reinterpret_cast(param); + if (movieFrame->m_isPlaying) { + // movieFrame->UpdateTiming(); + // movieFrame->Render(); + } +} + FrameScript_Object::ScriptIx* CSimpleMovieFrame::GetScriptByName(const char* name, ScriptData& data) { auto parentScript = CSimpleFrame::GetScriptByName(name, data); @@ -58,6 +66,10 @@ int32_t CSimpleMovieFrame::GetScriptMetaTable() { } void CSimpleMovieFrame::OnFrameRender(CRenderBatch* batch, uint32_t layer) { + this->CSimpleFrame::OnFrameRender(batch, layer); + if (layer == DRAWLAYER_ARTWORK) { + batch->QueueCallback(&CSimpleMovieFrame::RenderMovie, this); + } } CSimpleMovieFrame::CSimpleMovieFrame(CSimpleFrame* parent) @@ -80,6 +92,18 @@ int32_t CSimpleMovieFrame::StartMovie(const char* filename, int32_t volume) { } void CSimpleMovieFrame::StopMovie() { + if (!this->m_isPlaying) { + return; + } + + // UnloadDivxDecoder + // CloseAudio + // CloseCaptions + this->m_isStopped = 0; + this->m_isPlaying = 0; + if (this->m_onMovieFinished.luaRef) { + this->RunScript(this->m_onMovieFinished, 0, nullptr); + } } int32_t CSimpleMovieFrame::ParseAVIFile(const char* filename) { diff --git a/src/ui/CSimpleMovieFrame.hpp b/src/ui/CSimpleMovieFrame.hpp index fec2d45..46c6e02 100644 --- a/src/ui/CSimpleMovieFrame.hpp +++ b/src/ui/CSimpleMovieFrame.hpp @@ -17,9 +17,11 @@ class CSimpleMovieFrame : public CSimpleFrame { static void CreateScriptMetaTable(); static int32_t GetObjectType(); static void RegisterScriptMethods(lua_State* L); + static void RenderMovie(void* param); // Member variables int32_t m_isPlaying = 0; + int32_t m_isStopped = 0; int32_t m_enableSubtitles = 0; char m_filename[256]; int32_t m_volume = 100;