reckfellENGINE

Тема интерфейса редактора для инструментов

Наследование темы, иконки, масштаб и локальные переопределения.

На этой странице

Тема инструментов редактора

Панель EditorPlugin должна следовать текущей теме и масштабу редактора. Это отдельная задача от оформления интерфейса игры и веб-портала: Theme проекта игры не заменяет общую тему редактора.

Начать с наследования

Добавьте обычные Button, Label и Container в принадлежащий плагину EditorDock. Наследование темы уже даёт согласованные шрифты, цвета и состояния. Не назначайте каждому контролу собственный Theme без необходимости: так легко потерять состояния фокуса, disabled и hover.

Получайте текущую тему через EditorInterface.Singleton.GetEditorTheme(), а масштаб через GetEditorScale(). Иконки редактора находятся в типе темы EditorIcons. Перед чтением необязательной иконки используйте HasIcon, чтобы отсутствие имени не создало ошибку в логе.

Пример создаёт кнопку для уже существующего Tool-плагина. Вызывающий код добавляет её в свои контролы и удаляет вместе с панелью:

C#
using System;
using Reckfell;

public static class EditorButtons
{
    // Call from a Tool EditorPlugin; add the result to its owned controls.
    public static Button Create(string text, string iconName = "Add")
    {
        if (!Engine.IsEditorHint())
            throw new InvalidOperationException("Editor context required.");
        var button = new Button { Text = text };
        void Refresh()
        {
            var editor = EditorInterface.Singleton;
            var theme = editor.GetEditorTheme();
            button.Icon = theme.HasIcon(iconName, "EditorIcons")
                ? theme.GetIcon(iconName, "EditorIcons") : null;
            button.CustomMinimumSize = new Vector2(0, 32 * editor.GetEditorScale());
        }
        button.ThemeChanged += Refresh;
        Refresh();
        return button;
    }
}

Текст передаётся извне: локализуйте его там, где определена команда. Ширина не фиксируется, чтобы длинная подпись могла увеличить минимальный размер; контейнер и доступная ширина всё равно должны быть проверены визуально. Высота учитывает текущий масштаб редактора.

ThemeChanged перечитывает иконку и размер. Это обновление данных по уведомлению, а не обещание поддержки всех переключений DPI и тем на любой ОС. В примере нет глобальной подписки на EditorSettings: обработчик принадлежит самой кнопке и уходит вместе с её панелью.

Локально изменить внешний вид

  • Сначала используйте стандартный контрол и подходящий контейнер.
  • Если стандартных состояний недостаточно, примените локальное theme override или подходящую вариацию темы.
  • Перед изменением общего StyleBox создайте его копию. Изменение разделяемого ресурса темы может изменить другие контролы.
  • Не считайте имя вариации из старой статьи обязательным для текущей темы. Проверьте её наличие и поведение в выбранном оформлении.
  • Не задавайте вручную цвет текста только для normal: фокус, disabled, hover и контраст тоже должны оставаться читаемыми.

Что проверить перед публикацией инструмента

СценарийПроверка
Обычный и длинный переводПодпись не обрезается, соседние кнопки и поля доступны.
Маленькое окноКонтейнер переносит или прокручивает содержимое по назначению; команды не исчезают за краем.
Масштаб интерфейсаРазмеры, иконки и интервалы остаются согласованными; фиксированная ширина не ломает подписи.
КлавиатураВидны фокус и порядок перехода; действие доступно без мыши, где это требуется.
Смена темыСобственные цвета и скопированные стили перечитаны, а состояния контролов не смешались.
Выключение плагинаПанель, кнопки и их обработчики удалены; повторное включение не создаёт дубликаты.

Для этой статьи выполнен функциональный прогон в установленном headless-редакторе: тема, иконка Add, fallback для неизвестной иконки, масштабированная высота, минимальная ширина длинного RU-текста, нативные сигналы и очистка панели. Реальные переключения темы/DPI, клавиатурная навигация и отрисованная вёрстка на разных ОС этим не проверены. Новые скриншоты интерфейса не добавлялись.

Полный жизненный цикл панели — в EditorPlugin и EditorDock; устройство встроенного интерфейса — в архитектуре редактора.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.