Ensure SnapToGrid only appears when GridSnapping is enabled LYN-2302 (#1362)
* updates to better support showing/hiding viewport ui when grid snapping is enabled/disabled * connect up editor settings callbacks * minor polish changes * api rename * updates following review feedback
This commit is contained in:
committed by
GitHub
parent
f0da36a301
commit
8ffd16b0be
@@ -14,6 +14,7 @@
|
||||
|
||||
#include <AzCore/Casting/numeric_cast.h>
|
||||
#include <AzCore/Settings/SettingsRegistry.h>
|
||||
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
||||
#include <AzCore/std/string/string_view.h>
|
||||
|
||||
namespace SandboxEditor
|
||||
@@ -56,6 +57,39 @@ namespace SandboxEditor
|
||||
return value;
|
||||
}
|
||||
|
||||
struct EditorViewportSettingsCallbacksImpl : public EditorViewportSettingsCallbacks
|
||||
{
|
||||
EditorViewportSettingsCallbacksImpl()
|
||||
{
|
||||
if (auto* registry = AZ::SettingsRegistry::Get())
|
||||
{
|
||||
using AZ::SettingsRegistryMergeUtils::IsPathAncestorDescendantOrEqual;
|
||||
|
||||
m_notifyEventHandler = registry->RegisterNotifier(
|
||||
[this](const AZStd::string_view path, [[maybe_unused]] const AZ::SettingsRegistryInterface::Type type)
|
||||
{
|
||||
if (IsPathAncestorDescendantOrEqual(GridSnappingSetting, path))
|
||||
{
|
||||
m_gridSnappingChanged.Signal(GridSnappingEnabled());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void SetGridSnappingChangedEvent(GridSnappingChangedEvent::Handler& handler) override
|
||||
{
|
||||
handler.Connect(m_gridSnappingChanged);
|
||||
}
|
||||
|
||||
GridSnappingChangedEvent m_gridSnappingChanged;
|
||||
AZ::SettingsRegistryInterface::NotifyEventHandler m_notifyEventHandler;
|
||||
};
|
||||
|
||||
AZStd::unique_ptr<EditorViewportSettingsCallbacks> CreateEditorViewportSettingsCallbacks()
|
||||
{
|
||||
return AZStd::make_unique<EditorViewportSettingsCallbacksImpl>();
|
||||
}
|
||||
|
||||
bool GridSnappingEnabled()
|
||||
{
|
||||
return GetRegistry(GridSnappingSetting, false);
|
||||
|
||||
@@ -14,8 +14,27 @@
|
||||
|
||||
#include <SandboxAPI.h>
|
||||
|
||||
#include <AzCore/Settings/SettingsRegistry.h>
|
||||
#include <AzCore/std/smart_ptr/unique_ptr.h>
|
||||
|
||||
namespace SandboxEditor
|
||||
{
|
||||
using GridSnappingChangedEvent = AZ::Event<bool>;
|
||||
|
||||
//! Set callbacks to listen for editor settings change events.
|
||||
class EditorViewportSettingsCallbacks
|
||||
{
|
||||
public:
|
||||
virtual ~EditorViewportSettingsCallbacks() = default;
|
||||
|
||||
virtual void SetGridSnappingChangedEvent(GridSnappingChangedEvent::Handler& handler) = 0;
|
||||
};
|
||||
|
||||
//! Create an instance of EditorViewportSettingsCallbacks
|
||||
//! Note: EditorViewportSettingsCallbacks is implemented in EditorViewportSettings.cpp - a change
|
||||
//! event will fire when a value in the settings registry (editorpreferences.setreg) is modified.
|
||||
SANDBOX_API AZStd::unique_ptr<EditorViewportSettingsCallbacks> CreateEditorViewportSettingsCallbacks();
|
||||
|
||||
SANDBOX_API bool GridSnappingEnabled();
|
||||
SANDBOX_API void SetGridSnapping(bool enabled);
|
||||
|
||||
|
||||
@@ -76,7 +76,6 @@
|
||||
#include "EditorPreferencesPageGeneral.h"
|
||||
#include "ViewportManipulatorController.h"
|
||||
#include "LegacyViewportCameraController.h"
|
||||
#include "EditorViewportSettings.h"
|
||||
|
||||
#include "ViewPane.h"
|
||||
#include "CustomResolutionDlg.h"
|
||||
@@ -1450,6 +1449,17 @@ void EditorViewportWidget::SetViewportId(int id)
|
||||
{
|
||||
SetAsActiveViewport();
|
||||
}
|
||||
|
||||
m_editorViewportSettingsCallbacks = SandboxEditor::CreateEditorViewportSettingsCallbacks();
|
||||
|
||||
m_gridSnappingHandler = SandboxEditor::GridSnappingChangedEvent::Handler(
|
||||
[id](const bool snapping)
|
||||
{
|
||||
AzToolsFramework::ViewportInteraction::ViewportSettingsNotificationBus::Event(
|
||||
id, &AzToolsFramework::ViewportInteraction::ViewportSettingsNotificationBus::Events::OnGridSnappingChanged, snapping);
|
||||
});
|
||||
|
||||
m_editorViewportSettingsCallbacks->SetGridSnappingChangedEvent(m_gridSnappingHandler);
|
||||
}
|
||||
|
||||
void EditorViewportWidget::ConnectViewportInteractionRequestBus()
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "Objects/DisplayContext.h"
|
||||
#include "Undo/Undo.h"
|
||||
#include "Util/PredefinedAspectRatios.h"
|
||||
#include "EditorViewportSettings.h"
|
||||
|
||||
#include <AzCore/Component/EntityId.h>
|
||||
#include <AzCore/std/optional.h>
|
||||
@@ -571,6 +572,9 @@ private:
|
||||
|
||||
AzFramework::EntityVisibilityQuery m_entityVisibilityQuery;
|
||||
|
||||
SandboxEditor::GridSnappingChangedEvent::Handler m_gridSnappingHandler;
|
||||
AZStd::unique_ptr<SandboxEditor::EditorViewportSettingsCallbacks> m_editorViewportSettingsCallbacks;
|
||||
|
||||
QSet<int> m_keyDown;
|
||||
|
||||
bool m_freezeViewportInput = false;
|
||||
|
||||
Reference in New Issue
Block a user