Доработан проект UI под новый Core

This commit is contained in:
2026-01-25 02:52:07 +03:00
parent be12154262
commit 2bd7d3c474
7 changed files with 923 additions and 181 deletions

View File

@@ -6,26 +6,62 @@ namespace Lattice.UI.DragDrop.Abstractions;
/// <summary>
/// Поставщик визуального представления для перетаскиваемого элемента.
/// </summary>
/// <remarks>
/// <para>
/// Интерфейс предоставляет абстракцию для создания и управления визуальными
/// представлениями элементов при операции перетаскивания.
/// </para>
/// <para>
/// Реализации могут предоставлять различные стили визуального представления:
/// от простого клонирования оригинального элемента до сложных анимированных представлений.
/// </para>
/// </remarks>
public interface IDragVisualProvider
{
/// <summary>
/// Создает визуальное представление для перетаскивания.
/// Создает визуальное представление для перетаскивания на основе информации о перетаскивании.
/// </summary>
/// <param name="dragInfo">Информация о перетаскивании.</param>
/// <param name="dragInfo">Информация о перетаскивании, содержащая данные и метаданные операции.</param>
/// <param name="initialPosition">Начальная позиция в экранных координатах.</param>
/// <returns>Объект, представляющий визуальное отображение.</returns>
object CreateDragVisual(DragInfo dragInfo, Point initialPosition);
/// <returns>Объект, представляющий визуальное отображение для перетаскивания.</returns>
/// <remarks>
/// <para>
/// Созданный визуальный элемент должен:
/// 1. Отображать репрезентативное представление перетаскиваемых данных
/// 2. Иметь прозрачный фон или альфа-канал для плавного отображения
/// 3. Быть легковесным для обеспечения плавной анимации
/// 4. Поддерживать возможность изменения позиции через <see cref="UpdateDragVisualPosition"/>
/// </para>
/// <para>
/// Метод может возвращать null, если визуальное представление не требуется.
/// </para>
/// </remarks>
object? CreateDragVisual(DragInfo dragInfo, Point initialPosition);
/// <summary>
/// Обновляет позицию визуального представления.
/// Обновляет позицию визуального представления перетаскивания.
/// </summary>
/// <param name="dragVisual">Визуальное представление.</param>
/// <param name="position">Новая позиция.</param>
/// <param name="dragVisual">Визуальное представление, созданное методом <see cref="CreateDragVisual"/>.</param>
/// <param name="position">Новая позиция в экранных координатах.</param>
/// <remarks>
/// Метод должен обновить позицию визуального элемента максимально эффективно,
/// так как он вызывается часто во время операции перетаскивания.
/// </remarks>
void UpdateDragVisualPosition(object dragVisual, Point position);
/// <summary>
/// Освобождает ресурсы визуального представления.
/// </summary>
/// <param name="dragVisual">Визуальное представление.</param>
/// <param name="dragVisual">Визуальное представление для освобождения.</param>
/// <remarks>
/// <para>
/// Метод должен освободить все ресурсы, связанные с визуальным представлением,
/// включая графические ресурсы, подписки на события и временные данные.
/// </para>
/// <para>
/// Этот метод гарантированно вызывается после завершения операции перетаскивания,
/// независимо от её успешности.
/// </para>
/// </remarks>
void ReleaseDragVisual(object dragVisual);
}