refactor(new_editor): unify panel input and rename primitives
This commit is contained in:
@@ -2,7 +2,9 @@
|
||||
|
||||
#include "Project/EditorProjectRuntime.h"
|
||||
|
||||
#include <XCEditor/Collections/UIEditorTreePanelBehavior.h>
|
||||
#include <XCEditor/Fields/UIEditorFieldStyle.h>
|
||||
#include <XCEditor/Foundation/UIEditorPanelInputFilter.h>
|
||||
#include <XCEditor/Fields/UIEditorTextField.h>
|
||||
|
||||
#include "Internal/StringEncoding.h"
|
||||
@@ -358,22 +360,11 @@ UIRect ProjectPanel::BuildRenameBounds(
|
||||
ResolveUIEditorTextFieldMetrics());
|
||||
|
||||
if (surface == RenameSurface::Tree) {
|
||||
const std::size_t visibleIndex = TreeDrag::FindVisibleIndexForItemId(
|
||||
return BuildUIEditorTreePanelInlineRenameBounds(
|
||||
m_treeFrame.layout,
|
||||
GetBrowserModel().GetTreeItems(),
|
||||
itemId);
|
||||
if (visibleIndex == Widgets::UIEditorTreeViewInvalidIndex ||
|
||||
visibleIndex >= m_treeFrame.layout.rowRects.size() ||
|
||||
visibleIndex >= m_treeFrame.layout.labelRects.size()) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const UIRect& rowRect = m_treeFrame.layout.rowRects[visibleIndex];
|
||||
const UIRect& labelRect = m_treeFrame.layout.labelRects[visibleIndex];
|
||||
const float x = (std::max)(rowRect.x, labelRect.x - hostedMetrics.valueTextInsetX);
|
||||
const float right = rowRect.x + rowRect.width - 8.0f;
|
||||
const float width = (std::max)(120.0f, right - x);
|
||||
return UIRect(x, rowRect.y, width, rowRect.height);
|
||||
itemId,
|
||||
hostedMetrics);
|
||||
}
|
||||
|
||||
if (surface == RenameSurface::Grid) {
|
||||
@@ -962,14 +953,16 @@ std::vector<UIInputEvent> ProjectPanel::BuildTreeInteractionInputEvents(
|
||||
bool allowInteraction,
|
||||
bool panelActive) const {
|
||||
const std::vector<UIInputEvent> rawEvents =
|
||||
FilterProjectPanelInputEvents(
|
||||
FilterUIEditorPanelInputEvents(
|
||||
bounds,
|
||||
inputEvents,
|
||||
allowInteraction,
|
||||
panelActive,
|
||||
HasActivePointerCapture());
|
||||
const std::vector<UIInputEvent> treeRawEvents =
|
||||
FilterTreeInputEvents(rawEvents, m_splitterDragging || m_assetDragState.dragging);
|
||||
UIEditorPanelInputFilterOptions{
|
||||
.allowPointerInBounds = allowInteraction,
|
||||
.allowPointerWhileCaptured = HasActivePointerCapture(),
|
||||
.allowKeyboardInput = panelActive,
|
||||
.allowFocusEvents = panelActive || HasActivePointerCapture(),
|
||||
.includePointerLeave = allowInteraction || HasActivePointerCapture()
|
||||
});
|
||||
|
||||
const Widgets::UIEditorTreeViewLayout layout =
|
||||
m_treeFrame.layout.bounds.width > 0.0f
|
||||
@@ -979,11 +972,12 @@ std::vector<UIInputEvent> ProjectPanel::BuildTreeInteractionInputEvents(
|
||||
GetBrowserModel().GetTreeItems(),
|
||||
m_folderExpansion,
|
||||
ResolveUIEditorTreeViewMetrics());
|
||||
return TreeDrag::BuildInteractionInputEvents(
|
||||
return BuildUIEditorTreePanelInteractionInputEvents(
|
||||
m_treeDragState,
|
||||
layout,
|
||||
GetBrowserModel().GetTreeItems(),
|
||||
treeRawEvents);
|
||||
rawEvents,
|
||||
m_splitterDragging || m_assetDragState.dragging);
|
||||
}
|
||||
|
||||
UIEditorHostCommandEvaluationResult ProjectPanel::EvaluateAssetCommand(
|
||||
@@ -1360,12 +1354,16 @@ void ProjectPanel::Update(
|
||||
m_visible = true;
|
||||
SyncAssetSelectionFromRuntime();
|
||||
const std::vector<UIInputEvent> filteredEvents =
|
||||
FilterProjectPanelInputEvents(
|
||||
FilterUIEditorPanelInputEvents(
|
||||
panelState->bounds,
|
||||
inputEvents,
|
||||
allowInteraction,
|
||||
panelActive,
|
||||
HasActivePointerCapture());
|
||||
UIEditorPanelInputFilterOptions{
|
||||
.allowPointerInBounds = allowInteraction,
|
||||
.allowPointerWhileCaptured = HasActivePointerCapture(),
|
||||
.allowKeyboardInput = panelActive,
|
||||
.allowFocusEvents = panelActive || HasActivePointerCapture(),
|
||||
.includePointerLeave = allowInteraction || HasActivePointerCapture()
|
||||
});
|
||||
|
||||
m_navigationWidth = ClampNavigationWidth(m_navigationWidth, panelState->bounds.width);
|
||||
m_layout = BuildLayout(panelState->bounds);
|
||||
@@ -1482,7 +1480,9 @@ void ProjectPanel::Update(
|
||||
m_treeDragState,
|
||||
m_treeFrame.layout,
|
||||
GetBrowserModel().GetTreeItems(),
|
||||
FilterTreeInputEvents(filteredEvents, m_splitterDragging || m_assetDragState.dragging),
|
||||
FilterUIEditorTreePanelPointerInputEvents(
|
||||
filteredEvents,
|
||||
m_splitterDragging || m_assetDragState.dragging),
|
||||
m_layout.treeRect,
|
||||
treeDragCallbacks);
|
||||
if (treeDragResult.dropCommitted) {
|
||||
@@ -2041,7 +2041,7 @@ void ProjectPanel::Append(UIDrawList& drawList) const {
|
||||
1.0f,
|
||||
0.0f);
|
||||
} else {
|
||||
const std::size_t visibleIndex = TreeDrag::FindVisibleIndexForItemId(
|
||||
const std::size_t visibleIndex = FindUIEditorTreePanelVisibleItemIndex(
|
||||
m_treeFrame.layout,
|
||||
GetBrowserModel().GetTreeItems(),
|
||||
m_treeDragState.dropTargetItemId);
|
||||
@@ -2059,7 +2059,7 @@ void ProjectPanel::Append(UIDrawList& drawList) const {
|
||||
if (m_assetDragState.dragging &&
|
||||
m_assetDragState.validDropTarget &&
|
||||
m_assetDropTargetSurface == DropTargetSurface::Tree) {
|
||||
const std::size_t visibleIndex = TreeDrag::FindVisibleIndexForItemId(
|
||||
const std::size_t visibleIndex = FindUIEditorTreePanelVisibleItemIndex(
|
||||
m_treeFrame.layout,
|
||||
GetBrowserModel().GetTreeItems(),
|
||||
m_assetDragState.dropTargetItemId);
|
||||
@@ -2157,18 +2157,10 @@ void ProjectPanel::Append(UIDrawList& drawList) const {
|
||||
BuildUIEditorPropertyGridTextFieldMetrics(
|
||||
ResolveUIEditorPropertyGridMetrics(),
|
||||
ResolveUIEditorTextFieldMetrics()));
|
||||
Widgets::AppendUIEditorTextFieldBackground(
|
||||
AppendUIEditorInlineRenameSession(
|
||||
drawList,
|
||||
m_renameFrame.layout,
|
||||
m_renameState.textFieldSpec,
|
||||
m_renameState.textFieldInteraction.textFieldState,
|
||||
textFieldPalette,
|
||||
textFieldMetrics);
|
||||
Widgets::AppendUIEditorTextFieldForeground(
|
||||
drawList,
|
||||
m_renameFrame.layout,
|
||||
m_renameState.textFieldSpec,
|
||||
m_renameState.textFieldInteraction.textFieldState,
|
||||
m_renameFrame,
|
||||
m_renameState,
|
||||
textFieldPalette,
|
||||
textFieldMetrics);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user