--<<<- ------------------------------------------------------------------------ class TrackerTwoDShape (Tracker, TwoDShape) end ------------------------------------------------------------------------ class SimpleDragger (Tracker) instance variables manager: undefined trackConstraint: @none minimumX: negInf minimumY: negInf maximumX: posInf maximumY: posInf grabOffset dropAction: undefined end method init self {class SimpleDragger} #rest args #key \ manager: (undefined) \ -> ( apply nextMethod self args self.manager := manager ) method trackStartDrag self {class SimpleDragger} service ev state -> ( local pt := ev.localCoords self.grabOffset := new Point x:pt.x y:pt.y local xOffset := self.x local yOffset := self.y state[@trackConstraint] := self.trackConstraint state[@trackMatrix] := translate state[@trackMatrix] \ xOffset yOffset true ) method trackMove self {class SimpleDragger} service ev -> ( local pt := ev.localCoords local x := max (pt.x - self.grabOffset.x) (self.minimumX) local x := min x (self.maximumX) local y := max (pt.y - self.grabOffset.y) (self.minimumY) local y := min y (self.maximumY) self.x := x self.y := y ) method trackUp self {class SimpleDragger} service ev -> ( if (self.dropAction <> undefined) do ( self.dropAction self.manager self ) ) ------------------------------------------------------------------------ class DraggableShape (SimpleDragger, TrackerTwoDShape) end method trackStart self {class DraggableShape} service ev state -> ( trackStartDrag self service ev state ) ------------------------------------------------------------------------ class DraggableSpace (SimpleDragger, TrackerTwoDSpace) end method trackStartMulti self {class DraggableSpace} service ev state -> ( trackStartDrag self service ev state ) ------------------------------------------------------------------------ class DropSlot (TrackerTwoDSpace) instance variables dropAction end method trackDrop self {class DropSlot} service x y obj doit -> ( if (self.dropAction <> undefined) do ( self.dropAction self.target obj x y ) true ) ------------------------------------------------------------------------ -->>>