use inset_foundation::{App, Handle};
use crate::drag_details::{DragEndDetails, DragUpdateDetails};
pub trait Drag {
fn update(&self, app: &mut App, details: DragUpdateDetails);
fn end(&self, app: &mut App, details: DragEndDetails);
fn cancel(&self, app: &mut App);
}
pub trait DragObject: Sized + 'static {
fn update(self: Handle<Self>, _app: &mut App, _details: DragUpdateDetails) {}
fn end(self: Handle<Self>, _app: &mut App, _details: DragEndDetails) {}
fn cancel(self: Handle<Self>, _app: &mut App) {}
}
impl<T: DragObject> Drag for Handle<T> {
fn update(&self, app: &mut App, details: DragUpdateDetails) {
T::update(*self, app, details);
}
fn end(&self, app: &mut App, details: DragEndDetails) {
T::end(*self, app, details);
}
fn cancel(&self, app: &mut App) {
T::cancel(*self, app);
}
}