Material Editor camera controller zoom respects viewport boundary
This commit is contained in:
@@ -246,6 +246,8 @@ namespace AzToolsFramework
|
||||
/// from ViewportCursorScreenPosition. This method will always return the correct position to generate a mouse
|
||||
/// position delta.
|
||||
virtual AZStd::optional<AzFramework::ScreenPoint> PreviousViewportCursorScreenPosition() = 0;
|
||||
/// Is mouse over viewport.
|
||||
virtual bool IsMouseOver() const = 0;
|
||||
|
||||
protected:
|
||||
~ViewportMouseCursorRequests() = default;
|
||||
|
||||
+1
@@ -103,6 +103,7 @@ namespace AtomToolsFramework
|
||||
void EndCursorCapture() override;
|
||||
AzFramework::ScreenPoint ViewportCursorScreenPosition() override;
|
||||
AZStd::optional<AzFramework::ScreenPoint> PreviousViewportCursorScreenPosition() override;
|
||||
bool IsMouseOver() const override;
|
||||
|
||||
// AzFramework::WindowRequestBus::Handler ...
|
||||
void SetWindowTitle(const AZStd::string& title) override;
|
||||
|
||||
@@ -472,6 +472,11 @@ namespace AtomToolsFramework
|
||||
: AZStd::optional<AzFramework::ScreenPoint>{};
|
||||
}
|
||||
|
||||
bool RenderViewportWidget::IsMouseOver() const
|
||||
{
|
||||
return m_mouseOver;
|
||||
}
|
||||
|
||||
void RenderViewportWidget::BeginCursorCapture()
|
||||
{
|
||||
if (m_capturingCursor)
|
||||
|
||||
+15
-2
@@ -17,6 +17,8 @@
|
||||
#include <AzFramework/Input/Devices/Keyboard/InputDeviceKeyboard.h>
|
||||
#include <AzFramework/Input/Devices/Mouse/InputDeviceMouse.h>
|
||||
#include <AzFramework/Components/CameraBus.h>
|
||||
#include <AzFramework/Viewport/ScreenGeometry.h>
|
||||
#include <AzToolsFramework/Viewport/ViewportMessages.h>
|
||||
|
||||
#include <AtomLyIntegration/CommonFeatures/Mesh/MeshComponentBus.h>
|
||||
#include <Atom/RPI.Public/RPISystemInterface.h>
|
||||
@@ -136,6 +138,11 @@ namespace MaterialEditor
|
||||
const InputChannel::State state = event.m_inputChannel.GetState();
|
||||
const KeyMask keysOld = m_keys;
|
||||
|
||||
bool mouseOver = false;
|
||||
AzToolsFramework::ViewportInteraction::ViewportMouseCursorRequestBus::EventResult(
|
||||
mouseOver, GetViewportId(),
|
||||
&AzToolsFramework::ViewportInteraction::ViewportMouseCursorRequestBus::Events::IsMouseOver);
|
||||
|
||||
if (!m_behavior)
|
||||
{
|
||||
EvaluateControlBehavior();
|
||||
@@ -178,7 +185,10 @@ namespace MaterialEditor
|
||||
}
|
||||
else if (inputChannelId == InputDeviceMouse::Movement::Z)
|
||||
{
|
||||
m_behavior->MoveZ(event.m_inputChannel.GetValue());
|
||||
if (mouseOver)
|
||||
{
|
||||
m_behavior->MoveZ(event.m_inputChannel.GetValue());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case InputChannel::State::Ended:
|
||||
@@ -222,7 +232,10 @@ namespace MaterialEditor
|
||||
}
|
||||
else if (inputChannelId == InputDeviceMouse::Movement::Z)
|
||||
{
|
||||
m_behavior->MoveZ(event.m_inputChannel.GetValue());
|
||||
if (mouseOver)
|
||||
{
|
||||
m_behavior->MoveZ(event.m_inputChannel.GetValue());
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user