diff options
-rw-r--r-- | Data/BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua | 4 | ||||
-rw-r--r-- | Data/Libraries/GameLab/Editor/Window/GUIWindow.lua | 12 | ||||
-rw-r--r-- | Documents/Unity.xlsx | bin | 0 -> 195084 bytes | |||
-rw-r--r-- | Editor/GUI/GUIWindow.cpp | 59 | ||||
-rw-r--r-- | Editor/GUI/GUIWindow.h | 17 | ||||
-rw-r--r-- | Editor/Scripting/Window/GUIWindow.bind.cpp | 17 | ||||
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindInvoker.h | 4 | ||||
-rw-r--r-- | Runtime/Lua/LuaBind/LuaBindLFunction.h | 2 |
8 files changed, 76 insertions, 39 deletions
diff --git a/Data/BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua b/Data/BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua index 7ed156b..3030b38 100644 --- a/Data/BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua +++ b/Data/BuiltIn/Libraries/GameLab/Engine/GUI/IMGUI.lua @@ -70,4 +70,8 @@ GUI.HorizontalScrollbar = function() end
+GUI.DrawLine = function()
+
+end
+
return GUI
\ No newline at end of file diff --git a/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua b/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua index 53f08a8..e434aed 100644 --- a/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua +++ b/Data/Libraries/GameLab/Editor/Window/GUIWindow.lua @@ -61,6 +61,14 @@ GUIWindow.set_position = function(self, position) self.m_Native:SetPosition({position.x, position.y, position.width, position.height})
end
+GUIWindow.Start = function(self)
+
+end
+
+GUIWindow.Destroy = function(self)
+
+end
+
GUIWindow.SetContainerWindow = function(self, containerWindow)
self.m_ContainerWindow = containerWindow
self.m_Native:SetContainerWindow(containerWindow:GetNative())
@@ -85,6 +93,7 @@ end -- 最主要的回调函数,同时处理窗口管理、事件、布局、渲染
GUIWindow.OnGUI = function(self)
+ Debug.Log("OnGUI")
self:ClearBackground()
local event = Event.current
@@ -102,12 +111,11 @@ end GUIWindow.OnFocus = function(self)
Debug.Log("GUIWindow.OnFocus")
-end
+end
GUIWindow.ClearBackground = function(self)
GL.ClearColor(self.m_ClearColor)
GL.Clear(GL.EBufferType.ColorBuffer)
-
end
return GUIWindow
\ No newline at end of file diff --git a/Documents/Unity.xlsx b/Documents/Unity.xlsx Binary files differnew file mode 100644 index 0000000..70d0a73 --- /dev/null +++ b/Documents/Unity.xlsx diff --git a/Editor/GUI/GUIWindow.cpp b/Editor/GUI/GUIWindow.cpp index 028a654..fe19a95 100644 --- a/Editor/GUI/GUIWindow.cpp +++ b/Editor/GUI/GUIWindow.cpp @@ -12,7 +12,6 @@ using namespace std; GUIWindowProxy::GUIWindowProxy(GUIWindow *owner, LuaBind::MemberRef script) { - } void GUIWindowProxy::OnGUI(LuaBind::State& state) @@ -24,13 +23,41 @@ void GUIWindowProxy::OnGUI(LuaBind::State& state) invoker.Invoke(0); } -void GUIWindowProxy::DoGUI() +void GUIWindowProxy::OnFocus(LuaBind::State& state) { - LuaBind::State state = owner->GetVM()->GetCurThread(); + LuaBind::MemberInvoker invoker = MemberInvoker(state, owner); + invoker.member = script; + invoker.method = "OnFocus"; + invoker.AddMember(script); + invoker.Invoke(0); +} +void GUIWindowProxy::DoGUI(LuaBind::State& state) +{ + OnGUI(state); +} +void GUIWindowProxy::DoClean(LuaBind::State& state) +{ - OnGUI(state); +} + +void GUIWindowProxy::Start(LuaBind::State& state) +{ + LuaBind::MemberInvoker invoker = MemberInvoker(state, owner); + invoker.member = script; + invoker.method = "Start"; + invoker.AddMember(script); + invoker.Invoke(0); +} + +void GUIWindowProxy::Destroy(LuaBind::State& state) +{ + LuaBind::MemberInvoker invoker = MemberInvoker(state, owner); + invoker.member = script; + invoker.method = "Destroy"; + invoker.AddMember(script); + invoker.Invoke(0); } //------------------------------------------------------------------------------------ @@ -232,8 +259,6 @@ void GUIWindow::RepaintAll() { } -//////////////////////////////////////////////////////////// - GUIWindow::GUIWindow(LuaBind::VM* vm, std::string name) : LuaBind::NativeClass<GUIWindow>(vm) { @@ -292,19 +317,15 @@ void GUIWindow::ProcessEventMessages(UINT message, WPARAM wParam, LPARAM lParam) LuaBind::State state = GetVM()->GetCurThread(); SCRIPT_GLOBAL.setCurrentEvent.AddTable(state, ie); - SCRIPT_GLOBAL.setCurrentEvent.Invoke(state, 0); + SCRIPT_GLOBAL.setCurrentEvent.Invoke(state); - SCRIPT_GLOBAL.guiBeginOnGUI.Invoke(state, 0); + SCRIPT_GLOBAL.guiBeginOnGUI.Invoke(state); SetAsRenderContext(); - LuaBind::MemberInvoker invoker = LuaBind::MemberInvoker(state, this); - invoker.member = m_Script; - invoker.method = "OnGUI"; - invoker.AddMember(m_Script); - invoker.Invoke(0); + m_Script.DoGUI(state); - SCRIPT_GLOBAL.guiEndOnGUI.Invoke(state, 0); + SCRIPT_GLOBAL.guiEndOnGUI.Invoke(state); } bool GUIWindow::SetRenderContext() @@ -371,7 +392,8 @@ void GUIWindow::DoPaint() void GUIWindow::OnFocus() { - InvokeLuaCallback(m_Script, "OnFocus"); + LuaBind::State state = GetVM()->GetCurThread(); + m_Script.OnFocus(state); } void GUIWindow::OnLostFocus() @@ -380,11 +402,8 @@ void GUIWindow::OnLostFocus() void GUIWindow::OnPaint() { - LuaBind::MemberInvoker invoker = MemberInvoker(GetVM()->GetCurThread(), this); - invoker.member = m_Script; - invoker.method = "OnGUI"; - invoker.AddMember(m_Script); - invoker.Invoke(0); + LuaBind::State state = GetVM()->GetCurThread(); + m_Script.OnGUI(state); } void GUIWindow::SetPosition(Rect position) diff --git a/Editor/GUI/GUIWindow.h b/Editor/GUI/GUIWindow.h index bbf2687..ed79f26 100644 --- a/Editor/GUI/GUIWindow.h +++ b/Editor/GUI/GUIWindow.h @@ -25,11 +25,17 @@ public: GUIWindowProxy() {} GUIWindowProxy(GUIWindow *owner, LuaBind::MemberRef script); - void DoGUI(); - void DoClean(); + void DoGUI(LuaBind::State& state); + void DoClean(LuaBind::State& state); -private: - void OnGUI(LuaBind::State& state); + //------------------------------------------------------ + // callbacks + //------------------------------------------------------ + + void Start(LuaBind::State& state); + void Destroy(LuaBind::State& state); + void OnGUI(LuaBind::State& state); + void OnFocus(LuaBind::State& state); }; @@ -65,8 +71,7 @@ private: std::string m_Name; - LuaBind::MemberRef m_Script; - GUIWindowProxy m_Instance; + GUIWindowProxy m_Script; BOOL m_MouseTracking; DWORD m_MouseHoverTime; diff --git a/Editor/Scripting/Window/GUIWindow.bind.cpp b/Editor/Scripting/Window/GUIWindow.bind.cpp index 7fc0d4d..5a61592 100644 --- a/Editor/Scripting/Window/GUIWindow.bind.cpp +++ b/Editor/Scripting/Window/GUIWindow.bind.cpp @@ -4,11 +4,11 @@ LUA_BIND_REGISTRY(GUIWindow) { LUA_BIND_REGISTER_METHODS(state, - { "DoPaint", _DoPaint }, - { "Focus", _Focus }, + { "New", _New }, + { "DoPaint", _DoPaint }, + { "Focus", _Focus }, { "SetContainerWindow", _SetContainerWindow }, - { "SetPosition", _SetPosition }, - { "New", _New } + { "SetPosition", _SetPosition } ); } @@ -16,7 +16,7 @@ LUA_BIND_POSTPROCESS(GUIWindow) { } -// GUIWindow.New([script]) +// GUIWindow.New(script) LUA_BIND_IMPL_METHOD(GUIWindow, _New) { LUA_BIND_STATE(L, GUIWindow); @@ -30,9 +30,10 @@ LUA_BIND_IMPL_METHOD(GUIWindow, _New) GUIWindow* wnd = new GUIWindow(state.GetVM()); - wnd->SetMemberRef(state, wnd->m_Script, -1); - wnd->m_Instance.owner = wnd; - wnd->m_Instance.script = wnd->m_Script; + LuaBind::MemberRef script; + wnd->SetMemberRef(state, script, -1); + wnd->m_Script.owner = wnd; + wnd->m_Script.script = script; wnd->PushUserdata(state); diff --git a/Runtime/Lua/LuaBind/LuaBindInvoker.h b/Runtime/Lua/LuaBind/LuaBindInvoker.h index 45a4e63..5f24b15 100644 --- a/Runtime/Lua/LuaBind/LuaBindInvoker.h +++ b/Runtime/Lua/LuaBind/LuaBindInvoker.h @@ -26,7 +26,7 @@ namespace LuaBind ++argc; } - virtual void Invoke(int nReturns); + virtual void Invoke(int nReturns = 0); protected: State state; @@ -60,7 +60,7 @@ namespace LuaBind ++argc; } - void Invoke(int nReturns); + void Invoke(int nReturns = 0); private: LuaBind::Object* owner; diff --git a/Runtime/Lua/LuaBind/LuaBindLFunction.h b/Runtime/Lua/LuaBind/LuaBindLFunction.h index 5c4346b..0d4a8a8 100644 --- a/Runtime/Lua/LuaBind/LuaBindLFunction.h +++ b/Runtime/Lua/LuaBind/LuaBindLFunction.h @@ -22,7 +22,7 @@ namespace LuaBind ++argc;
}
- void Invoke(State& state, int nReturns);
+ void Invoke(State& state, int nReturns = 0);
private:
int argc;
|