resources: formalize internal shader ir
This commit is contained in:
@@ -217,8 +217,11 @@ std::size_t FindPopupItemIndex(
|
||||
bool HasMeaningfulInteractionResult(
|
||||
const UIEditorShellInteractionResult& result) {
|
||||
return result.consumed ||
|
||||
result.requestPointerCapture ||
|
||||
result.releasePointerCapture ||
|
||||
result.commandTriggered ||
|
||||
result.menuMutation.changed ||
|
||||
result.workspaceResult.consumed ||
|
||||
!result.menuId.empty() ||
|
||||
!result.popupId.empty() ||
|
||||
!result.itemId.empty() ||
|
||||
@@ -227,11 +230,8 @@ bool HasMeaningfulInteractionResult(
|
||||
|
||||
BuildRequestOutput BuildRequest(
|
||||
const UIRect& bounds,
|
||||
const UIEditorPanelRegistry& panelRegistry,
|
||||
const UIEditorWorkspaceModel& workspace,
|
||||
const UIEditorWorkspaceSession& session,
|
||||
const UIEditorWorkspaceController& controller,
|
||||
const UIEditorShellInteractionModel& model,
|
||||
const Widgets::UIEditorDockHostState& dockHostState,
|
||||
const UIEditorShellInteractionState& state,
|
||||
const UIEditorShellInteractionMetrics& metrics) {
|
||||
BuildRequestOutput output = {};
|
||||
@@ -242,11 +242,11 @@ BuildRequestOutput BuildRequest(
|
||||
BuildShellComposeModel(model, request.menuBarItems);
|
||||
request.shellRequest = ResolveUIEditorShellComposeRequest(
|
||||
bounds,
|
||||
panelRegistry,
|
||||
workspace,
|
||||
session,
|
||||
controller.GetPanelRegistry(),
|
||||
controller.GetWorkspace(),
|
||||
controller.GetSession(),
|
||||
shellModel,
|
||||
dockHostState,
|
||||
state.workspaceInteractionState.dockHostInteractionState.dockHostState,
|
||||
state.composeState,
|
||||
metrics.shellMetrics);
|
||||
|
||||
@@ -444,7 +444,7 @@ bool ShouldUsePointerPosition(const UIInputEvent& event) {
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<UIInputEvent> FilterComposeInputEvents(
|
||||
std::vector<UIInputEvent> FilterWorkspaceInputEvents(
|
||||
const std::vector<UIInputEvent>& inputEvents,
|
||||
bool menuModalDuringFrame) {
|
||||
if (!menuModalDuringFrame) {
|
||||
@@ -466,44 +466,32 @@ std::vector<UIInputEvent> FilterComposeInputEvents(
|
||||
|
||||
UIEditorShellInteractionRequest ResolveUIEditorShellInteractionRequest(
|
||||
const UIRect& bounds,
|
||||
const UIEditorPanelRegistry& panelRegistry,
|
||||
const UIEditorWorkspaceModel& workspace,
|
||||
const UIEditorWorkspaceSession& session,
|
||||
const UIEditorWorkspaceController& controller,
|
||||
const UIEditorShellInteractionModel& model,
|
||||
const Widgets::UIEditorDockHostState& dockHostState,
|
||||
const UIEditorShellInteractionState& state,
|
||||
const UIEditorShellInteractionMetrics& metrics) {
|
||||
return BuildRequest(
|
||||
bounds,
|
||||
panelRegistry,
|
||||
workspace,
|
||||
session,
|
||||
controller,
|
||||
model,
|
||||
dockHostState,
|
||||
state,
|
||||
metrics).request;
|
||||
}
|
||||
|
||||
UIEditorShellInteractionFrame UpdateUIEditorShellInteraction(
|
||||
UIEditorShellInteractionState& state,
|
||||
UIEditorWorkspaceController& controller,
|
||||
const UIRect& bounds,
|
||||
const UIEditorPanelRegistry& panelRegistry,
|
||||
const UIEditorWorkspaceModel& workspace,
|
||||
const UIEditorWorkspaceSession& session,
|
||||
const UIEditorShellInteractionModel& model,
|
||||
const std::vector<UIInputEvent>& inputEvents,
|
||||
const Widgets::UIEditorDockHostState& dockHostState,
|
||||
const UIEditorShellInteractionMetrics& metrics) {
|
||||
UIEditorShellInteractionResult interactionResult = {};
|
||||
bool menuModalDuringFrame = state.menuSession.HasOpenMenu();
|
||||
|
||||
BuildRequestOutput requestBuild = BuildRequest(
|
||||
bounds,
|
||||
panelRegistry,
|
||||
workspace,
|
||||
session,
|
||||
controller,
|
||||
model,
|
||||
dockHostState,
|
||||
state,
|
||||
metrics);
|
||||
UIEditorShellInteractionRequest request = std::move(requestBuild.request);
|
||||
@@ -516,11 +504,8 @@ UIEditorShellInteractionFrame UpdateUIEditorShellInteraction(
|
||||
|
||||
requestBuild = BuildRequest(
|
||||
bounds,
|
||||
panelRegistry,
|
||||
workspace,
|
||||
session,
|
||||
controller,
|
||||
model,
|
||||
dockHostState,
|
||||
state,
|
||||
metrics);
|
||||
request = std::move(requestBuild.request);
|
||||
@@ -664,43 +649,48 @@ UIEditorShellInteractionFrame UpdateUIEditorShellInteraction(
|
||||
menuModalDuringFrame = true;
|
||||
request = BuildRequest(
|
||||
bounds,
|
||||
panelRegistry,
|
||||
workspace,
|
||||
session,
|
||||
controller,
|
||||
model,
|
||||
dockHostState,
|
||||
state,
|
||||
metrics).request;
|
||||
}
|
||||
}
|
||||
|
||||
const std::vector<UIInputEvent> workspaceInputEvents =
|
||||
FilterWorkspaceInputEvents(inputEvents, menuModalDuringFrame);
|
||||
UIEditorWorkspaceInteractionModel workspaceModel = {};
|
||||
workspaceModel.workspacePresentations = model.workspacePresentations;
|
||||
UIEditorWorkspaceInteractionFrame workspaceInteractionFrame =
|
||||
UpdateUIEditorWorkspaceInteraction(
|
||||
state.workspaceInteractionState,
|
||||
controller,
|
||||
request.shellRequest.layout.workspaceRect,
|
||||
workspaceModel,
|
||||
workspaceInputEvents,
|
||||
metrics.shellMetrics.dockHostMetrics);
|
||||
state.composeState.workspaceState = state.workspaceInteractionState.composeState;
|
||||
|
||||
request = BuildRequest(
|
||||
bounds,
|
||||
controller,
|
||||
model,
|
||||
state,
|
||||
metrics).request;
|
||||
|
||||
const RequestHit finalHit =
|
||||
HitTestRequest(request, state.pointerPosition, state.hasPointerPosition);
|
||||
UpdateMenuBarVisualState(state, request, finalHit);
|
||||
|
||||
const UIEditorShellComposeModel shellModel =
|
||||
BuildShellComposeModel(model, request.menuBarItems);
|
||||
const std::vector<UIInputEvent> composeInputEvents =
|
||||
FilterComposeInputEvents(inputEvents, menuModalDuringFrame);
|
||||
|
||||
UIEditorShellInteractionFrame frame = {};
|
||||
frame.request = request;
|
||||
frame.shellFrame = UpdateUIEditorShellCompose(
|
||||
state.composeState,
|
||||
bounds,
|
||||
panelRegistry,
|
||||
workspace,
|
||||
session,
|
||||
shellModel,
|
||||
composeInputEvents,
|
||||
dockHostState,
|
||||
metrics.shellMetrics);
|
||||
frame.shellFrame.layout = request.shellRequest.layout;
|
||||
frame.shellFrame.workspaceFrame = workspaceInteractionFrame.composeFrame;
|
||||
frame.workspaceInteractionFrame = std::move(workspaceInteractionFrame);
|
||||
frame.popupFrames = BuildPopupFrames(
|
||||
frame.request,
|
||||
state,
|
||||
finalHit.popupRequest != nullptr ? finalHit.popupRequest->popupId : std::string_view(),
|
||||
finalHit.popupItem != nullptr ? finalHit.popupItem->itemId : std::string_view());
|
||||
frame.result = interactionResult;
|
||||
frame.openRootMenuId = std::string(state.menuSession.GetOpenRootMenuId());
|
||||
frame.hoveredMenuId =
|
||||
finalHit.menuButton != nullptr ? finalHit.menuButton->menuId : std::string();
|
||||
@@ -709,6 +699,20 @@ UIEditorShellInteractionFrame UpdateUIEditorShellInteraction(
|
||||
frame.hoveredItemId =
|
||||
finalHit.popupItem != nullptr ? finalHit.popupItem->itemId : std::string();
|
||||
frame.focused = state.focused || state.menuSession.HasOpenMenu();
|
||||
interactionResult.workspaceResult = frame.workspaceInteractionFrame.result;
|
||||
interactionResult.requestPointerCapture =
|
||||
interactionResult.workspaceResult.requestPointerCapture;
|
||||
interactionResult.releasePointerCapture =
|
||||
interactionResult.workspaceResult.releasePointerCapture;
|
||||
interactionResult.viewportInteractionChanged =
|
||||
interactionResult.workspaceResult.viewportInteractionChanged;
|
||||
interactionResult.viewportPanelId =
|
||||
interactionResult.workspaceResult.viewportPanelId;
|
||||
interactionResult.viewportInputFrame =
|
||||
interactionResult.workspaceResult.viewportInputFrame;
|
||||
interactionResult.consumed =
|
||||
interactionResult.consumed || interactionResult.workspaceResult.consumed;
|
||||
frame.result = std::move(interactionResult);
|
||||
return frame;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user