diff --git a/src/food-market.pos/Program.cs b/src/food-market.pos/Program.cs index ecfddc7..6833e99 100644 --- a/src/food-market.pos/Program.cs +++ b/src/food-market.pos/Program.cs @@ -16,6 +16,7 @@ public static int Main(string[] args) if (args.Contains("--smoke")) return SmokeRunner.Run(args); if (args.Contains("--screenshots")) return ScreenshotRunner.Run(args); if (args.Contains("--compare")) return CompareRunner.Run(args); + if (args.Contains("--density")) return ScreenshotRunner.RunDensity(args); if (args.Contains("--uitest")) return UiTestRunner.Run(args); // --demo : показать реальное окно с примерами данных (для скриншота на Windows). diff --git a/src/food-market.pos/Tooling/ScreenshotRunner.cs b/src/food-market.pos/Tooling/ScreenshotRunner.cs index 9039410..3ba7693 100644 --- a/src/food-market.pos/Tooling/ScreenshotRunner.cs +++ b/src/food-market.pos/Tooling/ScreenshotRunner.cs @@ -71,6 +71,40 @@ public static int Run(string[] args) return 0; } + /// Проверка адаптива правой панели по высоте: экран продажи в разных + /// разрешениях → docs/pos-screenshots/density/. Запуск: dotnet run -- --density + public static int RunDensity(string[] args) + { + var outDir = args.SkipWhile(a => a != "--density").Skip(1).FirstOrDefault(a => !a.StartsWith("--")) + ?? Path.Combine(FindRepoRoot(), "docs", "pos-screenshots", "density"); + Directory.CreateDirectory(outDir); + + AppBuilder.Configure() + .UseSkia() + .UseHeadless(new AvaloniaHeadlessPlatformOptions { UseHeadlessDrawing = false }) + .WithInterFont() + .SetupWithoutStarting(); + + var sizes = new (string name, int w, int h)[] + { + ("1280x720", 1280, 720), ("1280x800", 1280, 800), + ("1366x768", 1366, 768), ("1920x1080", 1920, 1080), + }; + foreach (var (name, w, h) in sizes) + { + var window = new MainWindow { DataContext = new MainWindowViewModel() }; + window.Width = w; window.Height = h; + window.Show(); + for (int i = 0; i < 6; i++) Dispatcher.UIThread.RunJobs(); + var frame = window.CaptureRenderedFrame(); + frame?.Save(Path.Combine(outDir, $"sale-{name}.png")); + window.Close(); + Console.WriteLine($"[density] sale-{name}.png"); + } + Console.WriteLine($"[done] density → {outDir}"); + return 0; + } + private static SaleViewModel EmptySale() => new(); private static Control ShellWith(SaleViewModel sale) { @@ -165,6 +199,27 @@ private static void WriteGallery(string dir, List<(string file, string caption)> } } + // Раздел «Адаптив» — один экран продажи в разных разрешениях (если есть). + var densDir = Path.Combine(dir, "density"); + if (Directory.Exists(densDir)) + { + var dens = Directory.GetFiles(densDir, "*.png").OrderBy(f => f).ToList(); + if (dens.Count > 0) + { + sb.Append("Адаптив — одно разрешение на кадр" + + "Правая панель сжимается по высоте (меньше отступы, " + + "скрыт блок «Последний чек», кнопки 44px), шапка — по ширине (сокращение чипов). " + + "Ничего не перекрывается на 1280×720/800, 1366×768, 1920×1080."); + sb.Append(""); + foreach (var d in dens) + { + var rel = "density/" + Path.GetFileName(d); + sb.Append($"{System.Net.WebUtility.HtmlEncode(Path.GetFileNameWithoutExtension(d))}"); + } + sb.Append(""); + } + } + sb.Append("