DragAndDrop core

This commit is contained in:
FrigaT
2026-01-18 16:33:35 +03:00
parent 9ea82af329
commit 79bdd8bc62
229 changed files with 21214 additions and 2494 deletions

View File

@@ -0,0 +1,41 @@
using Lattice.Core.Geometry;
namespace Lattice.UI.DragDrop.Abstractions;
/// <summary>
/// Хост для отображения визуальных элементов перетаскивания.
/// </summary>
public interface IDragDropHost
{
/// <summary>
/// Показывает визуальное представление перетаскивания.
/// </summary>
/// <param name="dragVisual">Визуальное представление.</param>
/// <param name="position">Начальная позиция.</param>
void ShowDragVisual(object dragVisual, Point position);
/// <summary>
/// Обновляет позицию визуального представления перетаскивания.
/// </summary>
/// <param name="dragVisual">Визуальное представление.</param>
/// <param name="position">Новая позиция.</param>
void UpdateDragVisualPosition(object dragVisual, Point position);
/// <summary>
/// Скрывает визуальное представление перетаскивания.
/// </summary>
/// <param name="dragVisual">Визуальное представление.</param>
void HideDragVisual(object dragVisual);
/// <summary>
/// Показывает визуальную обратную связь для цели сброса.
/// </summary>
/// <param name="adorner">Элемент обратной связи.</param>
void ShowDropAdorner(IDropVisualAdorner adorner);
/// <summary>
/// Скрывает визуальную обратную связь для цели сброса.
/// </summary>
/// <param name="adorner">Элемент обратной связи.</param>
void HideDropAdorner(IDropVisualAdorner adorner);
}

View File

@@ -0,0 +1,31 @@
using Lattice.Core.DragDrop.Models;
using Lattice.Core.Geometry;
namespace Lattice.UI.DragDrop.Abstractions;
/// <summary>
/// Поставщик визуального представления для перетаскиваемого элемента.
/// </summary>
public interface IDragVisualProvider
{
/// <summary>
/// Создает визуальное представление для перетаскивания.
/// </summary>
/// <param name="dragInfo">Информация о перетаскивании.</param>
/// <param name="initialPosition">Начальная позиция в экранных координатах.</param>
/// <returns>Объект, представляющий визуальное отображение.</returns>
object CreateDragVisual(DragInfo dragInfo, Point initialPosition);
/// <summary>
/// Обновляет позицию визуального представления.
/// </summary>
/// <param name="dragVisual">Визуальное представление.</param>
/// <param name="position">Новая позиция.</param>
void UpdateDragVisualPosition(object dragVisual, Point position);
/// <summary>
/// Освобождает ресурсы визуального представления.
/// </summary>
/// <param name="dragVisual">Визуальное представление.</param>
void ReleaseDragVisual(object dragVisual);
}

View File

@@ -0,0 +1,28 @@
using Lattice.Core.DragDrop.Models;
using Lattice.Core.Geometry;
namespace Lattice.UI.DragDrop.Abstractions;
/// <summary>
/// Визуальный элемент, показывающий обратную связь при наведении на цель сброса.
/// </summary>
public interface IDropVisualAdorner
{
/// <summary>
/// Показывает визуальную обратную связь для цели сброса.
/// </summary>
/// <param name="dropInfo">Информация о сбросе.</param>
/// <param name="targetBounds">Границы цели.</param>
void Show(DropInfo dropInfo, Rect targetBounds);
/// <summary>
/// Обновляет позицию и состояние визуальной обратной связи.
/// </summary>
/// <param name="dropInfo">Информация о сбросе.</param>
void Update(DropInfo dropInfo);
/// <summary>
/// Скрывает визуальную обратную связь.
/// </summary>
void Hide();
}