Refine XCEditor docking and DPI rendering

This commit is contained in:
2026-04-11 17:07:37 +08:00
parent 35d3d6328b
commit 2958dcc491
46 changed files with 4839 additions and 471 deletions

View File

@@ -40,16 +40,27 @@ struct UIEditorDockHostTabStripVisualState {
UIEditorTabStripState state = {};
};
struct UIEditorDockHostDropPreviewState {
bool visible = false;
std::string sourceNodeId = {};
std::string sourcePanelId = {};
std::string targetNodeId = {};
UIEditorWorkspaceDockPlacement placement =
UIEditorWorkspaceDockPlacement::Center;
std::size_t insertionIndex = UIEditorTabStripInvalidIndex;
};
struct UIEditorDockHostState {
bool focused = false;
UIEditorDockHostHitTarget hoveredTarget = {};
std::string activeSplitterNodeId = {};
std::vector<UIEditorDockHostTabStripVisualState> tabStripStates = {};
UIEditorDockHostDropPreviewState dropPreview = {};
};
struct UIEditorDockHostMetrics {
::XCEngine::UI::Layout::UISplitterMetrics splitterMetrics =
::XCEngine::UI::Layout::UISplitterMetrics{ 4.0f, 12.0f };
::XCEngine::UI::Layout::UISplitterMetrics{ 1.0f, 10.0f };
UIEditorTabStripMetrics tabStripMetrics = {};
UIEditorPanelFrameMetrics panelFrameMetrics = {};
::XCEngine::UI::UISize minimumStandalonePanelBodySize =
@@ -75,6 +86,10 @@ struct UIEditorDockHostPalette {
::XCEngine::UI::UIColor(0.70f, 0.72f, 0.74f, 1.0f);
::XCEngine::UI::UIColor placeholderMutedColor =
::XCEngine::UI::UIColor(0.58f, 0.59f, 0.62f, 1.0f);
::XCEngine::UI::UIColor dropPreviewFillColor =
::XCEngine::UI::UIColor(0.88f, 0.88f, 0.88f, 0.14f);
::XCEngine::UI::UIColor dropPreviewBorderColor =
::XCEngine::UI::UIColor(0.94f, 0.94f, 0.94f, 0.78f);
};
struct UIEditorDockHostTabItemLayout {
@@ -107,10 +122,20 @@ struct UIEditorDockHostTabStackLayout {
UIEditorPanelFrameLayout contentFrameLayout = {};
};
struct UIEditorDockHostDropPreviewLayout {
bool visible = false;
std::string targetNodeId = {};
UIEditorWorkspaceDockPlacement placement =
UIEditorWorkspaceDockPlacement::Center;
std::size_t insertionIndex = UIEditorTabStripInvalidIndex;
::XCEngine::UI::UIRect previewRect = {};
};
struct UIEditorDockHostLayout {
::XCEngine::UI::UIRect bounds = {};
std::vector<UIEditorDockHostSplitterLayout> splitters = {};
std::vector<UIEditorDockHostTabStackLayout> tabStacks = {};
UIEditorDockHostDropPreviewLayout dropPreview = {};
};
// Allows higher-level compose to own panel body presentation while DockHost