From 587782450dca9326d8bdb9bc1a6b4228a913a4c9 Mon Sep 17 00:00:00 2001 From: disinvite Date: Wed, 4 Dec 2024 17:26:02 -0500 Subject: [PATCH] Improve functions with drag notifications --- .../include/legoeventnotificationparam.h | 6 ++++ .../src/entity/legocameracontroller.cpp | 30 +++++++++---------- .../legoomni/src/input/legoinputmanager.cpp | 20 ++++++++----- LEGO1/omni/include/mxnotificationparam.h | 1 + 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoeventnotificationparam.h b/LEGO1/lego/legoomni/include/legoeventnotificationparam.h index cbb12b61..c8543a26 100644 --- a/LEGO1/lego/legoomni/include/legoeventnotificationparam.h +++ b/LEGO1/lego/legoomni/include/legoeventnotificationparam.h @@ -54,9 +54,15 @@ class LegoEventNotificationParam : public MxNotificationParam { MxS32 GetY() const { return m_y; } void SetROI(LegoROI* p_roi) { m_roi = p_roi; } + + // FUNCTION: BETA10 0x1007d620 void SetModifier(MxU8 p_modifier) { m_modifier = p_modifier; } void SetKey(MxU8 p_key) { m_key = p_key; } + + // FUNCTION: BETA10 0x1007d650 void SetX(MxS32 p_x) { m_x = p_x; } + + // FUNCTION: BETA10 0x1007d680 void SetY(MxS32 p_y) { m_y = p_y; } protected: diff --git a/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp b/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp index b9d76039..151e92e0 100644 --- a/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp @@ -42,6 +42,21 @@ MxResult LegoCameraController::Create() MxLong LegoCameraController::Notify(MxParam& p_param) { switch (((MxNotificationParam&) p_param).GetNotification()) { + case c_notificationDrag: { + if (((((LegoEventNotificationParam&) p_param).GetModifier()) & LegoEventNotificationParam::c_lButtonState) == + 0) { + OnLButtonUp(MxPoint32( + ((LegoEventNotificationParam&) p_param).GetX(), + ((LegoEventNotificationParam&) p_param).GetY() + )); + } + else if (((((LegoEventNotificationParam&) p_param).GetModifier()) & LegoEventNotificationParam::c_rButtonState) == 0) { + OnRButtonUp(MxPoint32( + ((LegoEventNotificationParam&) p_param).GetX(), + ((LegoEventNotificationParam&) p_param).GetY() + )); + } + } break; case c_notificationDragEnd: { if ((((LegoEventNotificationParam&) p_param).GetModifier()) & LegoEventNotificationParam::c_lButtonState) { OnLButtonDown(MxPoint32( @@ -62,21 +77,6 @@ MxLong LegoCameraController::Notify(MxParam& p_param) MxPoint32(((LegoEventNotificationParam&) p_param).GetX(), ((LegoEventNotificationParam&) p_param).GetY()) ); } break; - case c_notificationDrag: { - if (((((LegoEventNotificationParam&) p_param).GetModifier()) & LegoEventNotificationParam::c_lButtonState) == - 0) { - OnLButtonUp(MxPoint32( - ((LegoEventNotificationParam&) p_param).GetX(), - ((LegoEventNotificationParam&) p_param).GetY() - )); - } - else if (((((LegoEventNotificationParam&) p_param).GetModifier()) & LegoEventNotificationParam::c_rButtonState) == 0) { - OnRButtonUp(MxPoint32( - ((LegoEventNotificationParam&) p_param).GetX(), - ((LegoEventNotificationParam&) p_param).GetY() - )); - } - } break; } return SUCCESS; diff --git a/LEGO1/lego/legoomni/src/input/legoinputmanager.cpp b/LEGO1/lego/legoomni/src/input/legoinputmanager.cpp index f546b2bf..b099454a 100644 --- a/LEGO1/lego/legoomni/src/input/legoinputmanager.cpp +++ b/LEGO1/lego/legoomni/src/input/legoinputmanager.cpp @@ -489,11 +489,19 @@ MxBool LegoInputManager::ProcessOneEvent(LegoEventNotificationParam& p_param) } // FUNCTION: LEGO1 0x1005cdf0 +// FUNCTION: BETA10 0x10089cc1 MxBool LegoInputManager::FUN_1005cdf0(LegoEventNotificationParam& p_param) { MxBool result = FALSE; switch (p_param.GetNotification()) { + case c_notificationButtonDown: + m_x = p_param.GetX(); + m_y = p_param.GetY(); + m_unk0x80 = FALSE; + m_unk0x81 = TRUE; + StartAutoDragTimer(); + break; case c_notificationButtonUp: StopAutoDragTimer(); @@ -511,13 +519,6 @@ MxBool LegoInputManager::FUN_1005cdf0(LegoEventNotificationParam& p_param) m_unk0x80 = FALSE; m_unk0x81 = FALSE; break; - case c_notificationButtonDown: - m_x = p_param.GetX(); - m_y = p_param.GetY(); - m_unk0x80 = FALSE; - m_unk0x81 = TRUE; - StartAutoDragTimer(); - break; case c_notificationMouseMove: if (m_unk0x195) { p_param.SetModifier(LegoEventNotificationParam::c_lButtonState); @@ -532,8 +533,9 @@ MxBool LegoInputManager::FUN_1005cdf0(LegoEventNotificationParam& p_param) MxS32 diffX = p_param.GetX() - m_x; MxS32 diffY = p_param.GetY() - m_y; + MxS32 t = diffX * diffX + diffY * diffY; - if (m_unk0x195 || (diffX * diffX) + (diffY * diffY) > m_unk0x74) { + if (m_unk0x195 || t > m_unk0x74) { StopAutoDragTimer(); m_unk0x80 = TRUE; p_param.SetNotification(c_notificationDragEnd); @@ -571,12 +573,14 @@ MxBool LegoInputManager::FUN_1005cdf0(LegoEventNotificationParam& p_param) } // FUNCTION: LEGO1 0x1005cfb0 +// FUNCTION: BETA10 0x10089fc5 void LegoInputManager::StartAutoDragTimer() { m_autoDragTimerID = ::SetTimer(LegoOmni::GetInstance()->GetWindowHandle(), 1, m_autoDragTime, NULL); } // FUNCTION: LEGO1 0x1005cfd0 +// FUNCTION: BETA10 0x1008a005 void LegoInputManager::StopAutoDragTimer() { if (m_autoDragTimerID) { diff --git a/LEGO1/omni/include/mxnotificationparam.h b/LEGO1/omni/include/mxnotificationparam.h index a5b30b24..66104b91 100644 --- a/LEGO1/omni/include/mxnotificationparam.h +++ b/LEGO1/omni/include/mxnotificationparam.h @@ -55,6 +55,7 @@ class MxNotificationParam : public MxParam { // FUNCTION: BETA10 0x1003c960 MxCore* GetSender() const { return m_sender; } + // FUNCTION: BETA10 0x1007d5c0 void SetNotification(NotificationId p_type) { m_type = p_type; } void SetSender(MxCore* p_sender) { m_sender = p_sender; }