refactor(new_editor): unify panel input and rename primitives
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "Scene/EditorSceneRuntime.h"
|
||||
|
||||
#include <XCEditor/Collections/UIEditorTreePanelBehavior.h>
|
||||
#include <XCEditor/Fields/UIEditorFieldStyle.h>
|
||||
#include <XCEditor/Fields/UIEditorTextField.h>
|
||||
|
||||
@@ -321,28 +322,15 @@ void HierarchyPanel::SyncTreeFocusState(
|
||||
UIRect HierarchyPanel::BuildRenameBounds(
|
||||
std::string_view itemId,
|
||||
const Widgets::UIEditorTreeViewLayout& layout) const {
|
||||
if (itemId.empty()) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const std::size_t visibleIndex =
|
||||
FindVisibleIndexForItemId(layout, m_treeItems, itemId);
|
||||
if (visibleIndex == UIEditorTreeViewInvalidIndex ||
|
||||
visibleIndex >= layout.rowRects.size() ||
|
||||
visibleIndex >= layout.labelRects.size()) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const Widgets::UIEditorTextFieldMetrics hostedMetrics =
|
||||
BuildUIEditorPropertyGridTextFieldMetrics(
|
||||
ResolveUIEditorPropertyGridMetrics(),
|
||||
ResolveUIEditorTextFieldMetrics());
|
||||
const UIRect& rowRect = layout.rowRects[visibleIndex];
|
||||
const UIRect& labelRect = 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);
|
||||
return BuildUIEditorTreePanelInlineRenameBounds(
|
||||
layout,
|
||||
m_treeItems,
|
||||
itemId,
|
||||
hostedMetrics);
|
||||
}
|
||||
|
||||
bool HierarchyPanel::WantsHostPointerCapture() const {
|
||||
@@ -464,12 +452,14 @@ void HierarchyPanel::ProcessDragAndFrameEvents(
|
||||
const UIRect& bounds,
|
||||
bool allowInteraction,
|
||||
bool panelActive) {
|
||||
const std::vector<UIInputEvent> filteredEvents = FilterHierarchyInputEvents(
|
||||
const std::vector<UIInputEvent> filteredEvents = FilterUIEditorTreePanelInputEvents(
|
||||
bounds,
|
||||
inputEvents,
|
||||
allowInteraction,
|
||||
panelActive,
|
||||
HasActivePointerCapture());
|
||||
UIEditorTreePanelInputFilterOptions{
|
||||
.allowInteraction = allowInteraction,
|
||||
.panelActive = panelActive,
|
||||
.captureActive = HasActivePointerCapture()
|
||||
});
|
||||
|
||||
if (m_treeFrame.result.selectionChanged) {
|
||||
SyncSceneRuntimeSelectionFromTree();
|
||||
@@ -565,12 +555,14 @@ void HierarchyPanel::Update(
|
||||
}
|
||||
|
||||
m_visible = true;
|
||||
const std::vector<UIInputEvent> filteredEvents = FilterHierarchyInputEvents(
|
||||
const std::vector<UIInputEvent> filteredEvents = FilterUIEditorTreePanelInputEvents(
|
||||
panelState->bounds,
|
||||
inputEvents,
|
||||
allowInteraction,
|
||||
panelActive,
|
||||
HasActivePointerCapture());
|
||||
UIEditorTreePanelInputFilterOptions{
|
||||
.allowInteraction = allowInteraction,
|
||||
.panelActive = panelActive,
|
||||
.captureActive = HasActivePointerCapture()
|
||||
});
|
||||
SyncTreeFocusState(filteredEvents);
|
||||
|
||||
const Widgets::UIEditorTreeViewMetrics treeMetrics =
|
||||
@@ -591,11 +583,12 @@ void HierarchyPanel::Update(
|
||||
}
|
||||
|
||||
const std::vector<UIInputEvent> interactionEvents =
|
||||
TreeDrag::BuildInteractionInputEvents(
|
||||
BuildUIEditorTreePanelInteractionInputEvents(
|
||||
m_dragState,
|
||||
layout,
|
||||
m_treeItems,
|
||||
filteredEvents,
|
||||
false,
|
||||
kDragThreshold);
|
||||
m_treeFrame = UpdateUIEditorTreeViewInteraction(
|
||||
m_treeInteractionState,
|
||||
@@ -655,18 +648,10 @@ void HierarchyPanel::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);
|
||||
}
|
||||
@@ -684,11 +669,11 @@ void HierarchyPanel::Append(UIDrawList& drawList) const {
|
||||
return;
|
||||
}
|
||||
|
||||
const std::size_t visibleIndex = TreeDrag::FindVisibleIndexForItemId(
|
||||
const std::size_t visibleIndex = FindUIEditorTreePanelVisibleItemIndex(
|
||||
m_treeFrame.layout,
|
||||
m_treeItems,
|
||||
m_dragState.dropTargetItemId);
|
||||
if (visibleIndex == UIEditorTreeViewInvalidIndex ||
|
||||
if (visibleIndex == Widgets::UIEditorTreeViewInvalidIndex ||
|
||||
visibleIndex >= m_treeFrame.layout.rowRects.size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user