refactor(new_editor/docking): split dock host interaction helpers
This commit is contained in:
77
new_editor/src/Docking/UIEditorDockHostInteractionInternal.h
Normal file
77
new_editor/src/Docking/UIEditorDockHostInteractionInternal.h
Normal file
@@ -0,0 +1,77 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEditor/Docking/UIEditorDockHostInteraction.h>
|
||||
|
||||
namespace XCEngine::UI::Editor::Detail {
|
||||
|
||||
struct DockHostTabStripEventResult {
|
||||
bool consumed = false;
|
||||
bool commandRequested = false;
|
||||
bool reorderRequested = false;
|
||||
bool dragStarted = false;
|
||||
bool dragEnded = false;
|
||||
bool dragCanceled = false;
|
||||
bool requestPointerCapture = false;
|
||||
bool releasePointerCapture = false;
|
||||
UIEditorWorkspaceCommandKind commandKind = UIEditorWorkspaceCommandKind::ActivatePanel;
|
||||
std::size_t dropInsertionIndex = Widgets::UIEditorTabStripInvalidIndex;
|
||||
std::string panelId = {};
|
||||
std::string nodeId = {};
|
||||
std::string draggedTabId = {};
|
||||
Widgets::UIEditorDockHostHitTarget hitTarget = {};
|
||||
int priority = 0;
|
||||
};
|
||||
|
||||
bool ShouldUsePointerPosition(const ::XCEngine::UI::UIInputEvent& event);
|
||||
bool ShouldDispatchTabStripEvent(
|
||||
const ::XCEngine::UI::UIInputEvent& event,
|
||||
bool splitterActive);
|
||||
UIEditorWorkspaceLayoutOperationResult ApplySplitRatio(
|
||||
UIEditorWorkspaceController& controller,
|
||||
std::string_view nodeId,
|
||||
float splitRatio);
|
||||
UIEditorWorkspaceCommandResult DispatchPanelCommand(
|
||||
UIEditorWorkspaceController& controller,
|
||||
UIEditorWorkspaceCommandKind kind,
|
||||
std::string panelId);
|
||||
UIEditorDockHostTabStripInteractionEntry& FindOrCreateTabStripInteractionEntry(
|
||||
UIEditorDockHostInteractionState& state,
|
||||
std::string_view nodeId);
|
||||
void PruneTabStripInteractionEntries(
|
||||
UIEditorDockHostInteractionState& state,
|
||||
const Widgets::UIEditorDockHostLayout& layout);
|
||||
void SyncDockHostTabStripVisualStates(UIEditorDockHostInteractionState& state);
|
||||
bool HasFocusedTabStrip(const UIEditorDockHostInteractionState& state);
|
||||
const Widgets::UIEditorDockHostTabStackLayout* FindTabStackLayoutByNodeId(
|
||||
const Widgets::UIEditorDockHostLayout& layout,
|
||||
std::string_view nodeId);
|
||||
bool IsPointInsideRect(
|
||||
const ::XCEngine::UI::UIRect& rect,
|
||||
const ::XCEngine::UI::UIPoint& point);
|
||||
void ClearAllTabStripTransientInteractions(UIEditorDockHostInteractionState& state);
|
||||
void ClearTabDockDragState(UIEditorDockHostInteractionState& state);
|
||||
std::vector<Widgets::UIEditorTabStripItem> BuildTabStripItems(
|
||||
const Widgets::UIEditorDockHostTabStackLayout& tabStack);
|
||||
Widgets::UIEditorDockHostHitTarget MapTabStripHitTarget(
|
||||
const Widgets::UIEditorDockHostTabStackLayout& tabStack,
|
||||
const UIEditorTabStripInteractionResult& result);
|
||||
int ResolveTabStripPriority(const UIEditorTabStripInteractionResult& result);
|
||||
DockHostTabStripEventResult ProcessTabStripEvent(
|
||||
UIEditorDockHostInteractionState& state,
|
||||
const Widgets::UIEditorDockHostLayout& layout,
|
||||
const ::XCEngine::UI::UIInputEvent& event,
|
||||
const Widgets::UIEditorDockHostMetrics& metrics);
|
||||
std::size_t ResolveTabHeaderDropInsertionIndex(
|
||||
const Widgets::UIEditorDockHostTabStackLayout& tabStack,
|
||||
const ::XCEngine::UI::UIPoint& point);
|
||||
UIEditorWorkspaceDockPlacement ResolveDockPlacement(
|
||||
const Widgets::UIEditorDockHostTabStackLayout& tabStack,
|
||||
const ::XCEngine::UI::UIPoint& point);
|
||||
void SyncDockPreview(
|
||||
UIEditorDockHostInteractionState& state,
|
||||
const Widgets::UIEditorDockHostLayout& layout);
|
||||
void SyncHoverTarget(
|
||||
UIEditorDockHostInteractionState& state,
|
||||
const Widgets::UIEditorDockHostLayout& layout);
|
||||
|
||||
} // namespace XCEngine::UI::Editor::Detail
|
||||
Reference in New Issue
Block a user