feat(new_editor): wire project, inspector, and viewport runtime

This commit is contained in:
2026-04-19 00:03:25 +08:00
parent 8257403036
commit a57b322bc7
168 changed files with 14829 additions and 2507 deletions

View File

@@ -24,6 +24,11 @@ public:
m_rightAlt = false;
m_leftSuper = false;
m_rightSuper = false;
m_leftMouse = false;
m_rightMouse = false;
m_middleMouse = false;
m_x1Mouse = false;
m_x2Mouse = false;
}
void SyncFromSystemState() {
@@ -35,6 +40,11 @@ public:
m_rightAlt = (GetKeyState(VK_RMENU) & 0x8000) != 0;
m_leftSuper = (GetKeyState(VK_LWIN) & 0x8000) != 0;
m_rightSuper = (GetKeyState(VK_RWIN) & 0x8000) != 0;
m_leftMouse = (GetKeyState(VK_LBUTTON) & 0x8000) != 0;
m_rightMouse = (GetKeyState(VK_RBUTTON) & 0x8000) != 0;
m_middleMouse = (GetKeyState(VK_MBUTTON) & 0x8000) != 0;
m_x1Mouse = (GetKeyState(VK_XBUTTON1) & 0x8000) != 0;
m_x2Mouse = (GetKeyState(VK_XBUTTON2) & 0x8000) != 0;
}
::XCEngine::UI::UIInputModifiers GetCurrentModifiers() const {
@@ -43,11 +53,25 @@ public:
::XCEngine::UI::UIInputModifiers BuildPointerModifiers(std::size_t wParam) const {
::XCEngine::UI::UIInputModifiers modifiers = BuildModifiers();
modifiers.shift = modifiers.shift || (wParam & MK_SHIFT) != 0;
modifiers.control = modifiers.control || (wParam & MK_CONTROL) != 0;
ApplyPointerWParam(modifiers, wParam);
return modifiers;
}
::XCEngine::UI::UIInputModifiers ApplyPointerMessage(
::XCEngine::UI::UIInputEventType type,
::XCEngine::UI::UIPointerButton button,
std::size_t wParam) {
::XCEngine::UI::UIInputModifiers modifiers = BuildPointerModifiers(wParam);
if (type == ::XCEngine::UI::UIInputEventType::PointerButtonDown) {
SetPointerButton(modifiers, button, true);
} else if (type == ::XCEngine::UI::UIInputEventType::PointerButtonUp) {
SetPointerButton(modifiers, button, false);
}
ApplyPointerState(modifiers);
return BuildModifiers();
}
::XCEngine::UI::UIInputModifiers ApplyKeyMessage(
::XCEngine::UI::UIInputEventType type,
WPARAM wParam,
@@ -119,6 +143,52 @@ private:
}
}
static void ApplyPointerWParam(
::XCEngine::UI::UIInputModifiers& modifiers,
std::size_t wParam) {
modifiers.shift = modifiers.shift || (wParam & MK_SHIFT) != 0;
modifiers.control = modifiers.control || (wParam & MK_CONTROL) != 0;
modifiers.leftMouse = (wParam & MK_LBUTTON) != 0;
modifiers.rightMouse = (wParam & MK_RBUTTON) != 0;
modifiers.middleMouse = (wParam & MK_MBUTTON) != 0;
modifiers.x1Mouse = (wParam & MK_XBUTTON1) != 0;
modifiers.x2Mouse = (wParam & MK_XBUTTON2) != 0;
}
static void SetPointerButton(
::XCEngine::UI::UIInputModifiers& modifiers,
::XCEngine::UI::UIPointerButton button,
bool pressed) {
switch (button) {
case ::XCEngine::UI::UIPointerButton::Left:
modifiers.leftMouse = pressed;
break;
case ::XCEngine::UI::UIPointerButton::Right:
modifiers.rightMouse = pressed;
break;
case ::XCEngine::UI::UIPointerButton::Middle:
modifiers.middleMouse = pressed;
break;
case ::XCEngine::UI::UIPointerButton::X1:
modifiers.x1Mouse = pressed;
break;
case ::XCEngine::UI::UIPointerButton::X2:
modifiers.x2Mouse = pressed;
break;
case ::XCEngine::UI::UIPointerButton::None:
default:
break;
}
}
void ApplyPointerState(const ::XCEngine::UI::UIInputModifiers& modifiers) {
m_leftMouse = modifiers.leftMouse;
m_rightMouse = modifiers.rightMouse;
m_middleMouse = modifiers.middleMouse;
m_x1Mouse = modifiers.x1Mouse;
m_x2Mouse = modifiers.x2Mouse;
}
void SetModifierState(ModifierKey key, bool pressed) {
switch (key) {
case ModifierKey::LeftShift:
@@ -157,6 +227,11 @@ private:
modifiers.control = m_leftControl || m_rightControl;
modifiers.alt = m_leftAlt || m_rightAlt;
modifiers.super = m_leftSuper || m_rightSuper;
modifiers.leftMouse = m_leftMouse;
modifiers.rightMouse = m_rightMouse;
modifiers.middleMouse = m_middleMouse;
modifiers.x1Mouse = m_x1Mouse;
modifiers.x2Mouse = m_x2Mouse;
return modifiers;
}
@@ -168,6 +243,11 @@ private:
bool m_rightAlt = false;
bool m_leftSuper = false;
bool m_rightSuper = false;
bool m_leftMouse = false;
bool m_rightMouse = false;
bool m_middleMouse = false;
bool m_x1Mouse = false;
bool m_x2Mouse = false;
};
} // namespace XCEngine::Tests::CoreUI::Host