using Lattice.Core.DragDrop.Models; using Lattice.Core.Geometry; namespace Lattice.UI.DragDrop.Abstractions; /// /// Поставщик визуального представления для перетаскиваемого элемента. /// /// /// /// Интерфейс предоставляет абстракцию для создания и управления визуальными /// представлениями элементов при операции перетаскивания. /// /// /// Реализации могут предоставлять различные стили визуального представления: /// от простого клонирования оригинального элемента до сложных анимированных представлений. /// /// public interface IDragVisualProvider { /// /// Создает визуальное представление для перетаскивания на основе информации о перетаскивании. /// /// Информация о перетаскивании, содержащая данные и метаданные операции. /// Начальная позиция в экранных координатах. /// Объект, представляющий визуальное отображение для перетаскивания. /// /// /// Созданный визуальный элемент должен: /// 1. Отображать репрезентативное представление перетаскиваемых данных /// 2. Иметь прозрачный фон или альфа-канал для плавного отображения /// 3. Быть легковесным для обеспечения плавной анимации /// 4. Поддерживать возможность изменения позиции через /// /// /// Метод может возвращать null, если визуальное представление не требуется. /// /// object? CreateDragVisual(DragInfo dragInfo, Point initialPosition); /// /// Обновляет позицию визуального представления перетаскивания. /// /// Визуальное представление, созданное методом . /// Новая позиция в экранных координатах. /// /// Метод должен обновить позицию визуального элемента максимально эффективно, /// так как он вызывается часто во время операции перетаскивания. /// void UpdateDragVisualPosition(object dragVisual, Point position); /// /// Освобождает ресурсы визуального представления. /// /// Визуальное представление для освобождения. /// /// /// Метод должен освободить все ресурсы, связанные с визуальным представлением, /// включая графические ресурсы, подписки на события и временные данные. /// /// /// Этот метод гарантированно вызывается после завершения операции перетаскивания, /// независимо от её успешности. /// /// void ReleaseDragVisual(object dragVisual); }