From d8417b03b9c2a820d3d3be0dfa80841b4d1f4c04 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 9 Nov 2021 19:22:13 +0800 Subject: *misc --- Editor/GUI/GUIWindow.cpp | 10 ++++++++++ Editor/GUI/GUIWindow.h | 3 +-- Editor/GUI/WindowBase.h | 43 ----------------------------------------- Editor/GUI/WindowUtil.cpp | 29 ++++++++++++++++++++++++++++ Editor/GUI/WindowUtil.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 45 deletions(-) delete mode 100644 Editor/GUI/WindowBase.h create mode 100644 Editor/GUI/WindowUtil.h (limited to 'Editor/GUI') diff --git a/Editor/GUI/GUIWindow.cpp b/Editor/GUI/GUIWindow.cpp index 1a9ea00..c79cb52 100644 --- a/Editor/GUI/GUIWindow.cpp +++ b/Editor/GUI/GUIWindow.cpp @@ -4,6 +4,7 @@ #include "Editor/Graphics/Graphics.h" #include "Editor/Win/Win.h" #include "Runtime/Math/Math.h" +#include "Runtime/Events/InputEvent.h" using namespace LuaBind; @@ -260,7 +261,16 @@ GUIWindow::GUIWindow(LuaBind::VM* vm, std::string name) void GUIWindow::ProcessEventMessages(UINT message, WPARAM wParam, LPARAM lParam) { + InputEvent ie(message, wParam, lParam, m_Handle); + LuaBind::State state = GetVM()->GetCurThread(); + + LuaBind::MemberInvoker invoker = LuaBind::MemberInvoker(state, this); + invoker.member = m_Script; + invoker.method = "OnEvent"; + invoker.AddMember(m_Script); + invoker.AddTable(ie); + invoker.Invoke(0); } bool GUIWindow::SetRenderContext() diff --git a/Editor/GUI/GUIWindow.h b/Editor/GUI/GUIWindow.h index aa81b38..06d8a17 100644 --- a/Editor/GUI/GUIWindow.h +++ b/Editor/GUI/GUIWindow.h @@ -12,8 +12,7 @@ #include "Editor/Utils/HelperFuncs.h" #include "Runtime/Math/Math.h" #include "Runtime/Utilities/Exception.h" - -#include "WindowBase.h" +#include "WindowUtil.h" // GUI窗口,事件相应、绘制、布局的单元 class GUIWindow diff --git a/Editor/GUI/WindowBase.h b/Editor/GUI/WindowBase.h deleted file mode 100644 index cf3cae6..0000000 --- a/Editor/GUI/WindowBase.h +++ /dev/null @@ -1,43 +0,0 @@ -#pragma once - -#include -#include -#include "Runtime/Math/Rect.h" -#include "Runtime/Lua/LuaBind/LuaBind.h" -#include "Runtime/Lua/LuaHelper.h" -#include "Runtime/Utilities/Singleton.h" -#include "Runtime/Debug/Log.h" -#include "Runtime/Graphics/OpenGL.h" -#include "Runtime/Utilities/UtilMacros.h" -#include "Editor/Utils/HelperFuncs.h" -#include "Runtime/Math/Math.h" -#include "Runtime/Utilities/Exception.h" - -class WindowBase -{ -}; - -CustomException(WindowException); - -class GUIWindow; - -class WindowUtil -{ -public: - static void RegisterClasses(); - - static const wchar_t* kContainerWindowClassName; - static const wchar_t* kPopupWindowClassName; - static const wchar_t* kGUIWindowClassName; -}; - -class WindowManager : Singleton -{ -public: - static Vector2 GetMousePosition(); - static GUIWindow* GetMouseOverWindow(); - -private: - static std::vector s_GUIWindows; - -}; diff --git a/Editor/GUI/WindowUtil.cpp b/Editor/GUI/WindowUtil.cpp index 34a7b30..2c73573 100644 --- a/Editor/GUI/WindowUtil.cpp +++ b/Editor/GUI/WindowUtil.cpp @@ -1,3 +1,4 @@ +#include "Runtime/Utilities/StaticInitiator.h" #include "EditorWindows.h" #include "WinUtils.h" @@ -9,6 +10,16 @@ static ATOM ContainerWindowClassAtom; static ATOM PopupWindowClassAtom; static ATOM GUIViewClassAtom; +static int s_EditorMouseOffsetX; +static int s_EditorMouseOffsetY; +static HWND s_EditorInputWindow; + +InitializeStaticVariables([]() { + s_EditorMouseOffsetX = 0; + s_EditorMouseOffsetY = 0; + s_EditorInputWindow = NULL; +}); + void WindowUtil::RegisterClasses() { log_info("WindowUtil::Init()"); @@ -16,4 +27,22 @@ void WindowUtil::RegisterClasses() ContainerWindowClassAtom = winutils::RegisterWindowClass(kContainerWindowClassName, ContainerWindow::ContainerWndProc, CS_HREDRAW | CS_VREDRAW); PopupWindowClassAtom = winutils::RegisterWindowClass(kPopupWindowClassName, ContainerWindow::ContainerWndProc, CS_HREDRAW | CS_VREDRAW | CS_DROPSHADOW);//CS_HREDRAW宽度(水平)变化时重绘、CS_VREDRAW高度(垂直)变化时重绘 GUIViewClassAtom = winutils::RegisterWindowClass(kGUIWindowClassName, GUIWindow::GUIViewWndProc, CS_HREDRAW | CS_VREDRAW | CS_DROPSHADOW); +} + +void WindowUtil::SetEditorMouseOffset(int x, int y, HWND window) +{ + s_EditorMouseOffsetX = x; + s_EditorMouseOffsetY = y; + s_EditorInputWindow = window; +} + +void WindowUtil::GetEditorMouseOffset(int *x, int *y, HWND *window) +{ + *x = s_EditorMouseOffsetX; + *y = s_EditorMouseOffsetY; + + if (NULL != window) + { + *window = s_EditorInputWindow; + } } \ No newline at end of file diff --git a/Editor/GUI/WindowUtil.h b/Editor/GUI/WindowUtil.h new file mode 100644 index 0000000..dcc4eca --- /dev/null +++ b/Editor/GUI/WindowUtil.h @@ -0,0 +1,49 @@ +#pragma once + +#include +#include +#include "Runtime/Math/Rect.h" +#include "Runtime/Lua/LuaBind/LuaBind.h" +#include "Runtime/Lua/LuaHelper.h" +#include "Runtime/Utilities/Singleton.h" +#include "Runtime/Debug/Log.h" +#include "Runtime/Graphics/OpenGL.h" +#include "Runtime/Utilities/UtilMacros.h" +#include "Editor/Utils/HelperFuncs.h" +#include "Runtime/Math/Math.h" +#include "Runtime/Utilities/Exception.h" + +class WindowBase +{ +}; + +CustomException(WindowException); + +class GUIWindow; + +class WindowUtil +{ +public: + static void RegisterClasses(); + + static const wchar_t* kContainerWindowClassName; + static const wchar_t* kPopupWindowClassName; + static const wchar_t* kGUIWindowClassName; + + static void SetEditorMouseOffset(int x, int y, HWND window); + static void GetEditorMouseOffset(int *x, int *y, HWND *window); +}; + +class WindowManager : Singleton +{ +public: + static Vector2 GetMousePosition(); + static GUIWindow* GetMouseOverWindow(); + +private: + static std::vector s_GUIWindows; + +}; + + + -- cgit v1.1-26-g67d0