food-market/src/food-market.pos/Program.cs
nns 4b08782e82 fix(pos-ui): полировка по реальному окну Windows 11
Правки по замечаниям на windows11-sale.png (VM 1280×800 maximized — высоты
меньше, чем в headless):

1. Адаптив правой панели по высоте (SaleView.axaml.cs, подписка на Bounds):
   уровни normal/compact/tiny — сжимаются отступы, ИТОГО, кнопки; скрывается
   блок «Последний чек»; ClipToBounds, чтобы ничего не уходило под полосу клавиш.
2. Шапка — Grid вместо StackPanel: чипы в отдельной колонке и не обрезаются;
   адаптив по ширине (MainWindow.axaml.cs): <1400 короткие чипы, <1100 без «Магазин…».
   BadgesCompact во VM переключает тексты ShiftBadge/QueueBadge.
3. Иконка «Выплата» (одиночная горизонталь) схлопывалась при Stretch=Uniform →
   Stretch=None; «Внесение» выровнял так же.
4. Hover строки корзины — светлый #F7FBF8 вместо тёмного из темы.
5. Плитки избранного — Grid *,Auto: цена прибита к низу, у всех на одной линии.
6. Полоса горячих клавиш — выравнивание влево (как в макете).
7. --density: рендер экрана продажи в 1280×720/800, 1366×768, 1920×1080 для проверки.

--uitest OK, 82 unit зелёные, smoke OK, скорость не хуже.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:51:51 +05:00

42 lines
2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Avalonia;
using foodmarket.Pos.Tooling;
namespace foodmarket.Pos;
internal static class Program
{
[STAThread]
public static int Main(string[] args)
{
PosFormat.Apply(); // единый формат чисел (KZ/RU: «3 422 ₸», «1,235 кг»)
// CLI-режимы (без интерактивного окна):
// --smoke : прогон сценария кассы через логику (без UI), печать результатов.
// --screenshots : headless-рендер экранов в docs/pos-screenshots (1920×1080 + 1366×768).
// --uitest : headless UI-автотест экрана продажи (Avalonia.Headless, для CI/xvfb).
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).
if (args.Contains("--demo") || args.Contains("--demo-pay")) App.DemoMode = true;
if (args.Contains("--demo-pay")) App.DemoPay = true;
BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
return 0;
}
public static AppBuilder BuildAvaloniaApp()
{
var b = AppBuilder.Configure<App>().UsePlatformDetect();
// Демо-скриншот на headless VM (без GPU) — ПО-рендеринг, иначе окно чёрное.
if (App.DemoMode && OperatingSystem.IsWindows())
b = b.With(new Avalonia.Win32PlatformOptions
{
RenderingMode = new[] { Avalonia.Win32RenderingMode.Software },
});
return b.WithInterFont().LogToTrace();
}
}