summaryrefslogtreecommitdiff
path: root/Editor/GUI
diff options
context:
space:
mode:
Diffstat (limited to 'Editor/GUI')
-rw-r--r--Editor/GUI/GUIWindow.cpp10
-rw-r--r--Editor/GUI/GUIWindow.h3
-rw-r--r--Editor/GUI/WindowUtil.cpp29
-rw-r--r--Editor/GUI/WindowUtil.h (renamed from Editor/GUI/WindowBase.h)6
4 files changed, 46 insertions, 2 deletions
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/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/WindowBase.h b/Editor/GUI/WindowUtil.h
index cf3cae6..dcc4eca 100644
--- a/Editor/GUI/WindowBase.h
+++ b/Editor/GUI/WindowUtil.h
@@ -29,6 +29,9 @@ public:
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<WindowManager>
@@ -41,3 +44,6 @@ private:
static std::vector<GUIWindow*> s_GUIWindows;
};
+
+
+