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