Guest User

Untitled

a guest
Apr 19th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #if INTERACTIVE
  2. #r "WindowsBase.dll"
  3. #r "PresentationCore.dll"
  4. #r "PresentationFramework.dll"
  5. #endif
  6.  
  7. open System.Windows
  8. open System.Windows.Input
  9.  
  10. let getLocation (element : #IInputElement) (args : #MouseEventArgs) =
  11. let position = args.GetPosition element
  12. position.X, position.Y
  13.  
  14. let getMouseClicks (element : #IInputElement) =
  15. let mouseDowns = element.MouseLeftButtonDown |> Event.map (fun _ -> true)
  16. let mouseUps = element.MouseLeftButtonUp |> Event.map (fun _ -> false)
  17. mouseDowns |> Event.merge mouseUps
  18.  
  19. let getMouseDiffs (element : #IInputElement) =
  20. let mouseMoves = element.MouseMove |> Event.map (getLocation element)
  21. mouseMoves
  22. |> Event.zip mouseMoves
  23. |> Event.map (fun ((fstX, fstY), (sndX, sndY)) -> fstX - sndX, fstY - sndY)
  24.  
  25. let getMouseDrag (element : #IInputElement) =
  26. getMouseClicks element
  27. |> Event.collect (fun leftDown ->
  28. printfn "Left down %b" leftDown
  29. getMouseDiffs element
  30. |> Event.filter (fun _ -> printfn "Inner Left down %b" leftDown; leftDown))
  31.  
  32. let getMouseDrag' (element : #IInputElement) =
  33. let event = new Event<_>()
  34. let ok = ref false
  35. getMouseClicks element |> Event.add (fun arg -> ok := arg)
  36. getMouseDiffs element
  37. |> Event.add (fun arg -> if !ok then event.Trigger arg)
  38. event.Publish
Add Comment
Please, Sign In to add comment