Material Editor camera controller zoom respects viewport boundary

This commit is contained in:
mnaumov
2021-05-06 13:10:55 -07:00
parent abce15ea20
commit dfd0cbb0fd
4 changed files with 23 additions and 2 deletions
@@ -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;
@@ -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)
@@ -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;
}