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