Table of Contents

Конфигурация

IcyConfiguration содержит всё, что нужно IcyUI для работы в вашей игре: как рисовать, откуда приходит ввод, как загружаются ресурсы и шрифты, тему, журнал и то, как масштабируется интерфейс. Каждый элемент создаётся с ней — через Canvas, на который он попадает. Меняют её при настройке IcyUI с помощью построителя.

Настройка

UseIcyUI() строит конфигурацию с настройками движка по умолчанию:

  • отрисовка, ввод и загрузка ресурсов для движка;
  • поддержка разметки, чтобы LoadMarkup и конвейер ресурсов читали файлы интерфейса .xml;
  • встроенная тема;
  • системные шрифты, с Segoe UI в качестве семейства по умолчанию;
  • поставщик журнала: окно Output отладчика в MonoGame, журнал Stride в Stride.

Чтобы что-то изменить, передайте лямбду. Она выполняется после настроек по умолчанию, поэтому то, что она задаёт, побеждает:

public static StrideIcyHost SetUp(IGame game) => game.UseIcyUI(ui =>
{
    ui.ConfigureFonts().WithDefaultFontFamily("Noto Sans");                 // instead of Segoe UI
    ui.ConfigureLogging(LogLevel.Information);                             // more than warnings
    ui.ConfigureGestures(gestures => gestures.HoldDelay = TimeSpan.FromSeconds(0.8));
});

После настройки конфигурация доступна как Configuration хоста (или через GetIcyConfiguration() у игры).

Разделы

Построитель группирует настройки в разделы. У каждого есть метод Configure…; большинство также принимают лямбду, которая получает объект настроек раздела:

Раздел Что содержит Страница
ConfigureTheme Тему: словарь ресурсов со стилями и шаблонами. Ресурсы, стили и темы
ConfigureFonts Системные шрифты, импортированные файлы шрифтов, шрифт по умолчанию и резервный шрифт. Ресурсы и шрифты
ConfigureScaling Как интерфейс масштабируется вместе с дисплеем. DPI и масштабирование
ConfigureLogging Куда идут предупреждения IcyUI и с какого уровня. Журнал и диагностика
ConfigureGestures Задержку удержания, задержку двойного касания и порог перетаскивания. Ввод, фокус и навигация
ConfigureAssets Откуда загружаются файлы и импортёры для каждого типа ресурсов. Ресурсы и шрифты
ConfigureTypes Преобразование типов (AddTypeConverter) и поиск типов для разметки. Справочник по разметке
ConfigureMarkup, ConfigureDiagnostics Параметры разметки; доступные отладочные инструменты. Журнал и диагностика

Некоторые настройки — одиночные значения, которые задаются прямо у построителя, например WithCulture: культура, в которой локализуются строки, а также показываются и разбираются числа (см. Локализация и Привязка данных).

Порядок: сначала настройки по умолчанию, ваши изменения последними

Некоторые настройки можно применить только когда конфигурация уже существует: загрузку темы, импорт шрифтов. Построитель хранит их как шаги и выполняет в порядке объявления в конце построения. Поскольку настройки движка объявлены до вашей лямбды, заданные вами тема или семейство шрифтов заменяют настройки по умолчанию, а не перезаписываются ими. Если в лямбде задать одно и то же дважды, останется последнее значение.

Поэтому любую настройку движка по умолчанию можно изменить или отключить из своей лямбды:

Настройка по умолчанию Как изменить или отключить
Встроенная тема ConfigureTheme(t => t.Theme = myTheme); пустой ResourceDictionary — чтобы темы не было совсем.
Системные шрифты ConfigureFonts().UseSystemFonts(false) (см. Ресурсы и шрифты).
Segoe UI как семейство по умолчанию ConfigureFonts().WithDefaultFontFamily("My Font").
Поставщик журнала движка ConfigureLogging().UseLoggerFactory(myFactory) отправляет всё в вашу фабрику.
Поддержка разметки, импортёры ресурсов Отменять нечего: они ничего не стоят, пока не загружен файл их типа.

IcyUI без настроек движка

Обычный способ — UseIcyUI(). Инструменту или тесту, которым нужна конфигурация без движка, можно построить её напрямую через IcyConfigurationBuilder с теми же разделами, передав собственную отрисовку и ввод.

Типичные ошибки

  • Вызывайте UseIcyUI() один раз за игру. Повторный вызов бросает исключение; существующий хост доступен через GetIcyHost().
  • Настраивайте IcyUI в нужный момент. MonoGame: в Initialize(), до base.Initialize(). Stride: в Start() стартового скрипта или после BeginRun() в игре без редактора, когда графический компоновщик сцены уже существует.

См. также