feat: 输入隔离——ImGui WantCapture 在 Window 层门控事件与轮询
This commit is contained in:
@@ -33,6 +33,17 @@ namespace Engine {
|
||||
using EventCallbackFn = std::function<void(const Event&)>;
|
||||
void SetEventCallback(EventCallbackFn callback) { m_EventCallback = std::move(callback); }
|
||||
|
||||
// 输入捕获:返回 true = 该类输入被 UI 占用(如 ImGui 窗口交互)。
|
||||
// 生效范围:类型化事件回调(Key/Mouse*)+ 轮询接口
|
||||
//(IsKeyPressed/GetMouseDelta)。窗口类事件(Resize/Close/Focus)不受影响。
|
||||
// 未设置时全部放行(行为与无 UI 时一致)。
|
||||
using CaptureFn = std::function<bool()>;
|
||||
void SetInputCapture(CaptureFn keyboard, CaptureFn mouse)
|
||||
{
|
||||
m_KeyboardCapture = std::move(keyboard);
|
||||
m_MouseCapture = std::move(mouse);
|
||||
}
|
||||
|
||||
vk::SurfaceKHR CreateSurface(vk::Instance instance);
|
||||
void DestroySurface(vk::Instance instance, vk::SurfaceKHR surface);
|
||||
|
||||
@@ -65,6 +76,10 @@ namespace Engine {
|
||||
bool m_FramebufferResized = false;
|
||||
EventCallbackFn m_EventCallback;
|
||||
|
||||
// UI 输入捕获(ImGui 接管时置位)
|
||||
CaptureFn m_KeyboardCapture;
|
||||
CaptureFn m_MouseCapture;
|
||||
|
||||
// GLFW 静态回调(通过 window user pointer 找回 this)
|
||||
static void FramebufferResizeCallback(GLFWwindow* window, int width, int height);
|
||||
static void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods);
|
||||
|
||||
Reference in New Issue
Block a user