/
WheelEvent.purs
94 lines (73 loc) · 2.16 KB
/
WheelEvent.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
module Web.UIEvent.WheelEvent
( WheelEvent
, fromMouseEvent
, fromUIEvent
, fromEvent
, toMouseEvent
, toUIEvent
, toEvent
, deltaX
, deltaY
, deltaZ
, deltaModeIndex
, deltaMode
, DeltaMode(..)
, toEnumDeltaMode
, fromEnumDeltaMode
) where
import Prelude
import Data.Enum (class BoundedEnum, class Enum, Cardinality(..), defaultPred, defaultSucc, toEnum)
import Data.Maybe (Maybe(..), fromJust)
import Unsafe.Coerce (unsafeCoerce)
import Web.Event.Event (Event)
import Web.Internal.FFI (unsafeReadProtoTagged)
import Web.UIEvent.MouseEvent (MouseEvent)
import Web.UIEvent.UIEvent (UIEvent)
foreign import data WheelEvent :: Type
fromMouseEvent :: MouseEvent -> Maybe WheelEvent
fromMouseEvent = unsafeReadProtoTagged "WheelEvent"
fromUIEvent :: UIEvent -> Maybe WheelEvent
fromUIEvent = unsafeReadProtoTagged "WheelEvent"
fromEvent :: Event -> Maybe WheelEvent
fromEvent = unsafeReadProtoTagged "WheelEvent"
toMouseEvent :: WheelEvent -> MouseEvent
toMouseEvent = unsafeCoerce
toUIEvent :: WheelEvent -> UIEvent
toUIEvent = unsafeCoerce
toEvent :: WheelEvent -> Event
toEvent = unsafeCoerce
foreign import deltaX :: WheelEvent -> Number
foreign import deltaY :: WheelEvent -> Number
foreign import deltaZ :: WheelEvent -> Number
foreign import deltaModeIndex :: WheelEvent -> Int
deltaMode :: Partial => WheelEvent -> DeltaMode
deltaMode = fromJust <<< toEnum <<< deltaModeIndex
data DeltaMode
= Pixel
| Line
| Page
derive instance eqDeltaMode :: Eq DeltaMode
derive instance ordDeltaMode :: Ord DeltaMode
instance boundedDeltaMode :: Bounded DeltaMode where
bottom = Pixel
top = Page
instance enumDeltaMode :: Enum DeltaMode where
succ = defaultSucc toEnumDeltaMode fromEnumDeltaMode
pred = defaultPred toEnumDeltaMode fromEnumDeltaMode
instance boundedEnumDeltaMode :: BoundedEnum DeltaMode where
cardinality = Cardinality 3
toEnum = toEnumDeltaMode
fromEnum = fromEnumDeltaMode
toEnumDeltaMode :: Int -> Maybe DeltaMode
toEnumDeltaMode =
case _ of
0 -> Just Pixel
1 -> Just Line
2 -> Just Page
_ -> Nothing
fromEnumDeltaMode :: DeltaMode -> Int
fromEnumDeltaMode =
case _ of
Pixel -> 0
Line -> 1
Page -> 2