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;
}
}