fix(new_editor): stabilize inspector add-component layout and project browser scrolling

This commit is contained in:
2026-04-22 23:30:17 +08:00
parent b0d3141eee
commit c10367a42e
3 changed files with 203 additions and 32 deletions

View File

@@ -6,6 +6,7 @@
#include "Commands/EditorEditCommandRoute.h"
#include <XCEditor/Collections/UIEditorGridDragDrop.h>
#include <XCEditor/Collections/UIEditorInlineRenameSession.h>
#include <XCEditor/Collections/UIEditorScrollViewInteraction.h>
#include <XCEditor/Collections/UIEditorTreeDragDrop.h>
#include <XCEditor/Collections/UIEditorTreeViewInteraction.h>
#include <XCEditor/Foundation/UIEditorTextMeasurement.h>
@@ -176,7 +177,10 @@ private:
std::optional<EditCommandTarget> ResolveEditCommandTarget(
std::string_view explicitItemId = {},
bool forceCurrentFolder = false) const;
Layout BuildLayout(const ::XCEngine::UI::UIRect& bounds) const;
Layout BuildLayout(
const ::XCEngine::UI::UIRect& bounds,
const ::XCEngine::UI::UIRect& browserContentRect,
float browserVerticalOffset) const;
std::size_t HitTestBreadcrumbItem(const ::XCEngine::UI::UIPoint& point) const;
std::size_t HitTestAssetTile(const ::XCEngine::UI::UIPoint& point) const;
std::string ResolveAssetDropTargetItemId(
@@ -184,6 +188,9 @@ private:
DropTargetSurface* surface = nullptr) const;
void SyncCurrentFolderSelection();
bool NavigateToFolder(std::string_view itemId, EventSource source = EventSource::None);
float MeasureBrowserContentHeight(
const ::XCEngine::UI::UIRect& browserContentRect) const;
void RebuildBrowserScrollLayout();
void EmitEvent(EventKind kind, EventSource source, const FolderEntry* folder);
void EmitEvent(EventKind kind, EventSource source, const AssetEntry* asset);
void EmitSelectionClearedEvent(EventSource source);
@@ -247,6 +254,9 @@ private:
::XCEngine::UI::Widgets::UISelectionModel m_assetSelection = {};
Collections::GridDragDrop::State m_assetDragState = {};
Collections::TreeDragDrop::State m_treeDragState = {};
UIEditorScrollViewInteractionState m_browserScrollInteractionState = {};
UIEditorScrollViewInteractionFrame m_browserScrollFrame = {};
float m_browserVerticalOffset = 0.0f;
UIEditorTreeViewInteractionState m_treeInteractionState = {};
UIEditorTreeViewInteractionFrame m_treeFrame = {};
UIEditorInlineRenameSessionState m_renameState = {};