Formalize scene viewport transform gizmo overlay provider
This commit is contained in:
@@ -14,13 +14,9 @@
|
||||
#include "Platform/Win32Utf8.h"
|
||||
#include "UI/UI.h"
|
||||
|
||||
#include <XCEngine/Debug/Logger.h>
|
||||
|
||||
#include <imgui.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstdarg>
|
||||
#include <cstdio>
|
||||
#include <filesystem>
|
||||
#include <vector>
|
||||
|
||||
@@ -388,15 +384,6 @@ SceneViewportToolOverlayResult RenderSceneViewportToolOverlay(
|
||||
return result;
|
||||
}
|
||||
|
||||
void LogSceneViewNavigation(Debug::Logger& logger, const char* format, ...) {
|
||||
char buffer[512] = {};
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
std::vsnprintf(buffer, sizeof(buffer), format, args);
|
||||
va_end(args);
|
||||
logger.Info(Debug::LogCategory::General, buffer);
|
||||
}
|
||||
|
||||
bool ShouldBeginSceneViewportNavigationDrag(
|
||||
bool hasInteractiveViewport,
|
||||
bool hovered,
|
||||
@@ -428,7 +415,6 @@ void SceneViewPanel::Render() {
|
||||
const ViewportPanelContentResult content = RenderViewportPanelContent(*m_context, EditorViewportKind::Scene);
|
||||
if (IViewportHostService* viewportHostService = m_context->GetViewportHostService()) {
|
||||
const ImGuiIO& io = ImGui::GetIO();
|
||||
auto& logger = Debug::Logger::Get();
|
||||
const bool hasInteractiveViewport = content.hasViewportArea && content.frame.hasTexture;
|
||||
const SceneViewportToolOverlayResult toolOverlay = RenderSceneViewportToolOverlay(content, m_toolMode);
|
||||
const bool viewportContentHovered = content.hovered && !toolOverlay.hovered;
|
||||
@@ -536,12 +522,12 @@ void SceneViewPanel::Render() {
|
||||
m_scaleGizmo,
|
||||
gizmoFrameState.scaleContext)
|
||||
: SceneViewportTransformGizmoHandleBuildInputs{};
|
||||
const SceneViewportTransformGizmoOverlayState interactionGizmoOverlayState =
|
||||
BuildSceneViewportTransformGizmoOverlayState(interactionGizmoInputs);
|
||||
viewportHostService->SetSceneViewTransformGizmoOverlayState(interactionGizmoOverlayState);
|
||||
const SceneViewportOverlayFrameData& interactionOverlayFrameData =
|
||||
hasInteractiveViewport
|
||||
? viewportHostService->GetSceneViewInteractionOverlayFrameData(
|
||||
*m_context,
|
||||
overlay,
|
||||
interactionGizmoInputs)
|
||||
? viewportHostService->GetSceneViewEditorOverlayFrameData(*m_context)
|
||||
: emptySceneOverlayFrameData;
|
||||
const SceneViewportOverlayHandleHitResult overlayHandleHit =
|
||||
hasInteractiveViewport
|
||||
@@ -664,25 +650,6 @@ void SceneViewPanel::Render() {
|
||||
ImGuiMouseButton_Middle);
|
||||
const bool beginPanDrag = beginLeftPanDrag || beginMiddlePanDrag;
|
||||
|
||||
if (ImGui::IsMouseClicked(ImGuiMouseButton_Right) || ImGui::IsMouseClicked(ImGuiMouseButton_Middle)) {
|
||||
LogSceneViewNavigation(
|
||||
logger,
|
||||
"SceneView nav click hovered=%d focused=%d hasViewport=%d clickedR=%d clickedM=%d downR=%d downM=%d "
|
||||
"look=%d pan=%d gizmoActive=%d ioDelta=(%.2f, %.2f)",
|
||||
content.hovered ? 1 : 0,
|
||||
content.focused ? 1 : 0,
|
||||
hasInteractiveViewport ? 1 : 0,
|
||||
ImGui::IsMouseClicked(ImGuiMouseButton_Right) ? 1 : 0,
|
||||
ImGui::IsMouseClicked(ImGuiMouseButton_Middle) ? 1 : 0,
|
||||
ImGui::IsMouseDown(ImGuiMouseButton_Right) ? 1 : 0,
|
||||
ImGui::IsMouseDown(ImGuiMouseButton_Middle) ? 1 : 0,
|
||||
m_lookDragging ? 1 : 0,
|
||||
m_panDragging ? 1 : 0,
|
||||
gizmoActive ? 1 : 0,
|
||||
io.MouseDelta.x,
|
||||
io.MouseDelta.y);
|
||||
}
|
||||
|
||||
if (toolOverlay.clicked || beginTransformGizmo || orientationGizmoClick || sceneIconClick || selectClick || beginLookDrag ||
|
||||
beginPanDrag) {
|
||||
ImGui::SetWindowFocus();
|
||||
@@ -741,14 +708,6 @@ void SceneViewPanel::Render() {
|
||||
m_panDragging = false;
|
||||
m_loggedLookDelta = false;
|
||||
m_loggedPanDelta = false;
|
||||
LogSceneViewNavigation(
|
||||
logger,
|
||||
"SceneView begin look drag hovered=%d focused=%d downR=%d downM=%d gizmoActive=%d",
|
||||
content.hovered ? 1 : 0,
|
||||
content.focused ? 1 : 0,
|
||||
ImGui::IsMouseDown(ImGuiMouseButton_Right) ? 1 : 0,
|
||||
ImGui::IsMouseDown(ImGuiMouseButton_Middle) ? 1 : 0,
|
||||
gizmoActive ? 1 : 0);
|
||||
}
|
||||
if (beginPanDrag) {
|
||||
m_panDragging = true;
|
||||
@@ -756,25 +715,13 @@ void SceneViewPanel::Render() {
|
||||
m_panDragButton = beginLeftPanDrag ? ImGuiMouseButton_Left : ImGuiMouseButton_Middle;
|
||||
m_loggedPanDelta = false;
|
||||
m_loggedLookDelta = false;
|
||||
LogSceneViewNavigation(
|
||||
logger,
|
||||
"SceneView begin pan drag hovered=%d focused=%d button=%d downR=%d downM=%d downL=%d gizmoActive=%d",
|
||||
content.hovered ? 1 : 0,
|
||||
content.focused ? 1 : 0,
|
||||
m_panDragButton,
|
||||
ImGui::IsMouseDown(ImGuiMouseButton_Right) ? 1 : 0,
|
||||
ImGui::IsMouseDown(ImGuiMouseButton_Middle) ? 1 : 0,
|
||||
ImGui::IsMouseDown(ImGuiMouseButton_Left) ? 1 : 0,
|
||||
gizmoActive ? 1 : 0);
|
||||
}
|
||||
|
||||
if (m_lookDragging && !ImGui::IsMouseDown(ImGuiMouseButton_Right)) {
|
||||
LogSceneViewNavigation(logger, "SceneView end look drag");
|
||||
m_lookDragging = false;
|
||||
m_loggedLookDelta = false;
|
||||
}
|
||||
if (m_panDragging && !ImGui::IsMouseDown(m_panDragButton)) {
|
||||
LogSceneViewNavigation(logger, "SceneView end pan drag");
|
||||
m_panDragging = false;
|
||||
m_panDragButton = ImGuiMouseButton_Middle;
|
||||
m_loggedPanDelta = false;
|
||||
@@ -819,13 +766,6 @@ void SceneViewPanel::Render() {
|
||||
input.mouseDelta = io.MouseDelta;
|
||||
if (!m_loggedLookDelta &&
|
||||
(input.mouseDelta.x != 0.0f || input.mouseDelta.y != 0.0f)) {
|
||||
LogSceneViewNavigation(
|
||||
logger,
|
||||
"SceneView look delta=(%.2f, %.2f) hovered=%d downR=%d",
|
||||
input.mouseDelta.x,
|
||||
input.mouseDelta.y,
|
||||
content.hovered ? 1 : 0,
|
||||
ImGui::IsMouseDown(ImGuiMouseButton_Right) ? 1 : 0);
|
||||
m_loggedLookDelta = true;
|
||||
}
|
||||
}
|
||||
@@ -834,13 +774,6 @@ void SceneViewPanel::Render() {
|
||||
input.mouseDelta = io.MouseDelta;
|
||||
if (!m_loggedPanDelta &&
|
||||
(input.mouseDelta.x != 0.0f || input.mouseDelta.y != 0.0f)) {
|
||||
LogSceneViewNavigation(
|
||||
logger,
|
||||
"SceneView pan delta=(%.2f, %.2f) hovered=%d downM=%d",
|
||||
input.mouseDelta.x,
|
||||
input.mouseDelta.y,
|
||||
content.hovered ? 1 : 0,
|
||||
ImGui::IsMouseDown(ImGuiMouseButton_Middle) ? 1 : 0);
|
||||
m_loggedPanDelta = true;
|
||||
}
|
||||
}
|
||||
@@ -866,18 +799,18 @@ void SceneViewPanel::Render() {
|
||||
showingScaleGizmo,
|
||||
m_scaleGizmo);
|
||||
|
||||
viewportHostService->SetSceneViewTransientTransformGizmoOverlayData(
|
||||
overlay,
|
||||
BuildSceneViewportTransformGizmoHandleBuildInputs(
|
||||
showingMoveGizmo,
|
||||
m_moveGizmo,
|
||||
drawGizmoFrameState.moveContext,
|
||||
showingRotateGizmo,
|
||||
m_rotateGizmo,
|
||||
drawGizmoFrameState.rotateContext,
|
||||
showingScaleGizmo,
|
||||
m_scaleGizmo,
|
||||
drawGizmoFrameState.scaleContext));
|
||||
viewportHostService->SetSceneViewTransformGizmoOverlayState(
|
||||
BuildSceneViewportTransformGizmoOverlayState(
|
||||
BuildSceneViewportTransformGizmoHandleBuildInputs(
|
||||
showingMoveGizmo,
|
||||
m_moveGizmo,
|
||||
drawGizmoFrameState.moveContext,
|
||||
showingRotateGizmo,
|
||||
m_rotateGizmo,
|
||||
drawGizmoFrameState.rotateContext,
|
||||
showingScaleGizmo,
|
||||
m_scaleGizmo,
|
||||
drawGizmoFrameState.scaleContext)));
|
||||
|
||||
DrawSceneViewportOverlay(
|
||||
ImGui::GetWindowDrawList(),
|
||||
|
||||
Reference in New Issue
Block a user