using Lattice.Core.Docking.Models; using Lattice.Core.Geometry; namespace Lattice.Core.Docking.Abstractions; /// /// Предоставляет абстракцию для операции перетаскивания в док-системе. /// Эта абстракция позволяет отделить логику перетаскивания от конкретной UI-платформы. /// public interface IDragService { /// /// Начинает операцию перетаскивания указанного элемента. /// /// Элемент для перетаскивания. /// Визуальная обратная связь (зависит от платформы). void StartDrag(IDockElement element, object? visualFeedback = null); /// /// Обновляет позицию перетаскивания. /// /// Координата X. /// Координата Y. void UpdateDrag(double x, double y); /// /// Завершает операцию перетаскивания. /// /// Координата X завершения. /// Координата Y завершения. void EndDrag(double x, double y); /// /// Отменяет операцию перетаскивания. /// void CancelDrag(); } /// /// Представляет область для сброса при операции перетаскивания. /// public class DropArea { /// /// Целевой элемент для сброса. /// public IDockElement Target { get; set; } /// /// Позиция сброса относительно цели. /// public DockPosition Position { get; set; } /// /// Границы области в экранных координатах. /// public Rect Bounds { get; set; } /// /// Видимость области (для анимации). /// public double Visibility { get; set; } = 0.0; /// /// Инициализирует новый экземпляр области сброса. /// /// Целевой элемент. /// Позиция сброса. /// Границы области. public DropArea(IDockElement target, DockPosition position, Rect bounds) { Target = target; Position = position; Bounds = bounds; } }