diff options
Diffstat (limited to 'Editor')
-rw-r--r-- | Editor/GUI/GUIWindow.cpp | 27 | ||||
-rw-r--r-- | Editor/GUI/GUIWindow.h | 20 | ||||
-rw-r--r-- | Editor/Scripting/Window/GUIWindow.bind.cpp | 12 |
3 files changed, 56 insertions, 3 deletions
diff --git a/Editor/GUI/GUIWindow.cpp b/Editor/GUI/GUIWindow.cpp index 19ceb85..028a654 100644 --- a/Editor/GUI/GUIWindow.cpp +++ b/Editor/GUI/GUIWindow.cpp @@ -8,6 +8,32 @@ #include "Editor/Scripting/EditorScriptingManager.h" using namespace LuaBind; +using namespace std; + +GUIWindowProxy::GUIWindowProxy(GUIWindow *owner, LuaBind::MemberRef script) +{ + +} + +void GUIWindowProxy::OnGUI(LuaBind::State& state) +{ + MemberInvoker invoker = MemberInvoker(state, owner); + invoker.member = script; + invoker.method = "OnGUI"; + invoker.AddMember(script); + invoker.Invoke(0); +} + +void GUIWindowProxy::DoGUI() +{ + LuaBind::State state = owner->GetVM()->GetCurThread(); + + + + OnGUI(state); +} + +//------------------------------------------------------------------------------------ static bool RedirectMouseWheel(HWND window, WPARAM wParam, LPARAM lParam) { @@ -210,7 +236,6 @@ void GUIWindow::RepaintAll() GUIWindow::GUIWindow(LuaBind::VM* vm, std::string name) : LuaBind::NativeClass<GUIWindow>(vm) - , m_Script() { log_info("Init GUIWindow"); diff --git a/Editor/GUI/GUIWindow.h b/Editor/GUI/GUIWindow.h index aed38d9..bbf2687 100644 --- a/Editor/GUI/GUIWindow.h +++ b/Editor/GUI/GUIWindow.h @@ -14,6 +14,25 @@ #include "Runtime/Utilities/Exception.h" #include "WindowUtil.h" +class GUIWindow; + +class GUIWindowProxy : public LuaObjectProxy +{ +public: + GUIWindow * owner; + LuaBind::MemberRef script; + + GUIWindowProxy() {} + GUIWindowProxy(GUIWindow *owner, LuaBind::MemberRef script); + + void DoGUI(); + void DoClean(); + +private: + void OnGUI(LuaBind::State& state); + +}; + // GUI窗口,事件相应、绘制、布局的单元 class GUIWindow : public WindowBase @@ -47,6 +66,7 @@ private: std::string m_Name; LuaBind::MemberRef m_Script; + GUIWindowProxy m_Instance; BOOL m_MouseTracking; DWORD m_MouseHoverTime; diff --git a/Editor/Scripting/Window/GUIWindow.bind.cpp b/Editor/Scripting/Window/GUIWindow.bind.cpp index 604c26a..7fc0d4d 100644 --- a/Editor/Scripting/Window/GUIWindow.bind.cpp +++ b/Editor/Scripting/Window/GUIWindow.bind.cpp @@ -22,12 +22,20 @@ LUA_BIND_IMPL_METHOD(GUIWindow, _New) LUA_BIND_STATE(L, GUIWindow); LUA_BIND_CHECK(L, "T"); + if (!LuaHelper::IsType(state, "GameLab.Editor.Window.GUIWindow", -1)) + { + state.ErrorType(-1, "GameLab.Editor.Window.GUIWindow"); + return 0; + } + GUIWindow* wnd = new GUIWindow(state.GetVM()); - if (LuaHelper::IsType(state, "GameLab.Editor.Window.GUIWindow", -1)) - wnd->SetMemberRef(state, wnd->m_Script, -1); + wnd->SetMemberRef(state, wnd->m_Script, -1); + wnd->m_Instance.owner = wnd; + wnd->m_Instance.script = wnd->m_Script; wnd->PushUserdata(state); + return 1; } |