Forge
csharpdeeb25a2
1using CascadeIDE.Cockpit.Composition.Shell;
2
3namespace CascadeIDE.Cockpit.Composition.HostSurface;
4
5/// <summary>
6/// Композитор кадра хоста главного окна: shell + <see cref="CockpitInstrumentDescriptor"/> (ADR 0047).
7/// Держит слабую связность с Avalonia — только DTO для привязок и будущего Skia-backend слотов.
8/// </summary>
9public static class MainWindowHostSurfaceCompositor
10{
11 /// <summary>Собирает <see cref="MainWindowHostSurfaceFrame"/> за один проход поверх <see cref="MainWindowShellSurfaceCompositor"/>.</summary>
12 public static MainWindowHostSurfaceFrame ComposeFrame(in MainWindowShellSurfaceCompositionInput input)
13 {
14 var shell = MainWindowShellSurfaceCompositor.Compose(input);
15 var surfaceId = ResolveSurfaceId(input);
16 var instruments = BuildInstruments(shell, surfaceId, input);
17 return new MainWindowHostSurfaceFrame(shell, instruments);
18 }
19
20 private static string ResolveSurfaceId(in MainWindowShellSurfaceCompositionInput input)
21 {
22 if (input.SuppressPfdColumnForPfdHostWindow && input.SuppressMfdColumnForMfdHostWindow)
23 return MainWindowHostSurfaceIds.PlusPfdMfdHostTopLevel;
24 if (input.SuppressPfdColumnForPfdHostWindow)
25 return MainWindowHostSurfaceIds.PlusPfdHostTopLevel;
26 if (input.SuppressMfdColumnForMfdHostWindow)
27 return MainWindowHostSurfaceIds.PlusMfdHostTopLevel;
28 return MainWindowHostSurfaceIds.DockedGrid;
29 }
30
31 private static IReadOnlyList<CockpitInstrumentDescriptor> BuildInstruments(
32 in MainWindowShellSurfaceComposition shell,
33 string surfaceId,
34 in MainWindowShellSurfaceCompositionInput input)
35 {
36 var list = new List<CockpitInstrumentDescriptor>(2);
37 if (shell.PfdSurfaceVisible
38 && InstrumentPlacementRuntime.TryResolveInstrument(surfaceId, CockpitSlotIds.Pfd, input.DisplaySettings, out var pfdInstrumentId))
39 {
40 list.Add(new CockpitInstrumentDescriptor(pfdInstrumentId, CockpitSlotIds.Pfd));
41 }
42
43 if (shell.PfdRightColumnVisible
44 && InstrumentPlacementRuntime.TryResolveInstrument(surfaceId, CockpitSlotIds.Pfd, input.DisplaySettings, out var pfdRightInstrumentId))
45 {
46 list.Add(new CockpitInstrumentDescriptor(pfdRightInstrumentId, CockpitSlotIds.Pfd));
47 }
48
49 if (shell.MfdColumnVisibleInMainGrid
50 && InstrumentPlacementRuntime.TryResolveInstrument(surfaceId, CockpitSlotIds.Mfd, input.DisplaySettings, out var mfdInstrumentId))
51 {
52 list.Add(new CockpitInstrumentDescriptor(mfdInstrumentId, CockpitSlotIds.Mfd));
53 }
54
55 return list;
56 }
57}
58
View only · write via MCP/CIDE