package ui import "opslag.de/schobers/geom" // Dragable keeps track of the mouse position during a drag operation. type Dragable struct { start *geom.PointF32 current *geom.PointF32 } // Cancel cancels the drag operation and returns the start and end position. func (d *Dragable) Cancel() (geom.PointF32, geom.PointF32) { if d.start == nil { return geom.ZeroPtF32, geom.ZeroPtF32 } start, end := *d.start, *d.current d.start = nil d.current = nil return start, end } // IsDragging returns if the drag operation is in progress and the start location if so. func (d *Dragable) IsDragging() (geom.PointF32, bool) { if d.start != nil { return *d.start, true } return geom.ZeroPtF32, false } // Move calculates the delta between the start point and the current position. func (d *Dragable) Move(p geom.PointF32) (geom.PointF32, bool) { if d.start == nil { return geom.ZeroPtF32, false } delta := p.Sub(*d.current) d.current = &p return delta, true } // Start set the start point of the drag operation. func (d *Dragable) Start(p geom.PointF32) { d.start = &p d.current = &p }