Forge
csharpdeeb25a2
1using Avalonia;
2using Avalonia.Media;
3using static CascadeIDE.Cockpit.PrimitivesKit.CockpitPrimitivesPalette.Annunciator;
4
5namespace CascadeIDE.Cockpit.PrimitivesKit;
6
7/// <summary>
8/// Размеры и раскладка полосы annunciator (ADR 0063): константы, <see cref="MeasureStrip"/>, фон панели.
9/// Отрисовка конкретной ячейки — у типов вроде <see cref="LabeledAnnunciatorLampFace"/>.
10/// </summary>
11public static class AnnunciatorLampMetrics
12{
13 public const double DefaultCellWidth = 40;
14 public const double DefaultCellHeight = 40;
15 public const double DefaultGap = 4;
16 public const double DefaultPanelPadding = 6;
17 /// <summary>Ламп в одной строке полосы (напр. 4 для готовности окружения).</summary>
18 public const int DefaultStripColumns = 4;
19 public const double LabelFontSize = 9;
20 /// <summary>Две строки подписи в линзе (короткий кегль).</summary>
21 public const double TwoLineLabelFontSize = 7.0;
22
23 /// <summary>Размер прямоугольника полосы (с паддингом панели) для заданного числа ячеек.</summary>
24 public static Size MeasureStrip(
25 int itemCount,
26 int columnsPerRow = DefaultStripColumns,
27 double cellW = DefaultCellWidth,
28 double cellH = DefaultCellHeight,
29 double gap = DefaultGap,
30 double panelPadding = DefaultPanelPadding)
31 {
32 if (itemCount <= 0 || columnsPerRow <= 0)
33 return new Size(0, 0);
34
35 var rowCount = (itemCount + columnsPerRow - 1) / columnsPerRow;
36 var w = panelPadding * 2 + columnsPerRow * cellW + (columnsPerRow - 1) * gap;
37 var h = panelPadding * 2 + rowCount * cellH + (rowCount - 1) * gap;
38 return new Size(w, h);
39 }
40
41 /// <summary>Фон панели под полосой ламп (рамка «корпуса»).</summary>
42 public static void DrawPanelBackground(DrawingContext context, Rect bounds) =>
43 context.DrawRectangle(new SolidColorBrush(PanelBackground), new Pen(new SolidColorBrush(BezelOuter), 1), bounds);
44}
45
View only · write via MCP/CIDE