2 | module IdrisGL.SDL.SDL_event
6 | import IdrisGL.DataType
7 | import IdrisGL.SDL.SDL_keycode
23 | E_MOUSEMOTION (Int, Int)
25 | E_L_MOUSEBUTTONDOWN (Int, Int)
27 | E_M_MOUSEBUTTONDOWN (Int, Int)
29 | E_R_MOUSEBUTTONDOWN (Int, Int)
31 | E_L_MOUSEBUTTONUP (Int, Int)
33 | E_M_MOUSEBUTTONUP (Int, Int)
35 | E_R_MOUSEBUTTONUP (Int, Int)
37 | E_MOUSEWHEEL (Int, Int)
40 | EventStruct = Struct "Event" [("ePtr", AnyPtr), ("mouseX", Int), ("mouseY", Int), ("mouseButton", Int)]
46 | frgn : String -> String
47 | frgn func = "C:" ++ func ++ ",sdl_events"
51 | %foreign frgn "keyEveCode"
52 | prim_keyEveCode : AnyPtr -> Int
54 | keyEveCode : Event -> Int
55 | keyEveCode (MkEvent e) = prim_keyEveCode e
57 | %foreign frgn "mouseEveCode"
58 | prim_mouseEveCode : AnyPtr -> EventStruct
60 | mouseEveCode : Event -> (Int, Int, Int)
61 | mouseEveCode (MkEvent e) =
62 | let e' = prim_mouseEveCode e
63 | x : Int := getField e' "mouseX"
64 | y : Int := getField e' "mouseY"
65 | b : Int := getField e' "mouseButton"
70 | getEve : Int -> Event -> Eve
71 | getEve 256 _ = E_QUIT
73 | getEve 768 e = E_KEYDOWN (getKey $
keyEveCode e)
74 | getEve 769 e = E_KEYUP (getKey $
keyEveCode e)
76 | getEve 1024 e with (mouseEveCode e)
77 | getEve 1024 e | (x,y,_) = E_MOUSEMOTION (x,y)
79 | getEve 1025 e with (mouseEveCode e)
80 | getEve 1025 e | (x,y,1) = E_L_MOUSEBUTTONDOWN (x,y)
81 | getEve 1025 e | (x,y,2) = E_M_MOUSEBUTTONDOWN (x,y)
82 | getEve 1025 e | (x,y,3) = E_R_MOUSEBUTTONDOWN (x,y)
83 | getEve 1025 e | (x,y,_) = E_UNAVAILABLE
85 | getEve 1026 e with (mouseEveCode e)
86 | getEve 1026 e | (x,y,1) = E_L_MOUSEBUTTONUP (x,y)
87 | getEve 1026 e | (x,y,2) = E_M_MOUSEBUTTONUP (x,y)
88 | getEve 1026 e | (x,y,3) = E_R_MOUSEBUTTONUP (x,y)
89 | getEve 1026 e | (x,y,_) = E_UNAVAILABLE
91 | getEve 1027 e with (mouseEveCode e)
92 | getEve 1027 e | (x,y,_) = E_MOUSEWHEEL (x,y)
94 | getEve _ _ = E_UNAVAILABLE
98 | %foreign frgn "newEve"
99 | prim_newEve : AnyPtr
103 | newEve : HasIO io => io Event
104 | newEve = pure $
MkEvent $
prim_newEve
108 | %foreign frgn "eveType"
109 | prim_eveType : AnyPtr -> Int
113 | eveType : (event : Event) -> Eve
114 | eveType event@(MkEvent e) = getEve (prim_eveType e) event
118 | %foreign frgn "freeEve"
119 | prim_freeEve : AnyPtr -> PrimIO ()
123 | freeEve : HasIO io => Event -> io ()
124 | freeEve (MkEvent e) = primIO $
prim_freeEve e