Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #if INTERACTIVE
- #r "WindowsBase.dll"
- #r "PresentationCore.dll"
- #r "PresentationFramework.dll"
- #endif
- open System.Windows
- open System.Windows.Input
- let getLocation (element : #IInputElement) (args : #MouseEventArgs) =
- let position = args.GetPosition element
- position.X, position.Y
- let getMouseClicks (element : #IInputElement) =
- let mouseDowns = element.MouseLeftButtonDown |> Event.map (fun _ -> true)
- let mouseUps = element.MouseLeftButtonUp |> Event.map (fun _ -> false)
- mouseDowns |> Event.merge mouseUps
- let getMouseDiffs (element : #IInputElement) =
- let mouseMoves = element.MouseMove |> Event.map (getLocation element)
- mouseMoves
- |> Event.zip mouseMoves
- |> Event.map (fun ((fstX, fstY), (sndX, sndY)) -> fstX - sndX, fstY - sndY)
- let getMouseDrag (element : #IInputElement) =
- getMouseClicks element
- |> Event.collect (fun leftDown ->
- printfn "Left down %b" leftDown
- getMouseDiffs element
- |> Event.filter (fun _ -> printfn "Inner Left down %b" leftDown; leftDown))
- let getMouseDrag' (element : #IInputElement) =
- let event = new Event<_>()
- let ok = ref false
- getMouseClicks element |> Event.add (fun arg -> ok := arg)
- getMouseDiffs element
- |> Event.add (fun arg -> if !ok then event.Trigger arg)
- event.Publish
Add Comment
Please, Sign In to add comment