sdl2 2.1.3 → 2.1.3.1
raw patch · 57 files changed
+10954/−10949 lines, 57 filesdep ~vectorsetup-changedPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: vector
API changes (from Hackage documentation)
Files
- ChangeLog.md +5/−0
- LICENSE +30/−30
- Setup.hs +2/−2
- cbits/sdlhelper.c +77/−77
- examples/OpenGLExample.hs +129/−129
- examples/lazyfoo/Lesson01.hs +27/−27
- examples/lazyfoo/Lesson02.hs +30/−30
- examples/lazyfoo/Lesson03.hs +39/−39
- examples/lazyfoo/Lesson04.hs +67/−67
- examples/lazyfoo/Lesson05.hs +48/−48
- examples/lazyfoo/Lesson07.hs +60/−60
- examples/lazyfoo/Lesson08.hs +71/−71
- examples/lazyfoo/Lesson09.hs +70/−70
- examples/lazyfoo/Lesson10.hs +79/−79
- examples/lazyfoo/Lesson11.hs +91/−91
- examples/lazyfoo/Lesson12.hs +109/−109
- examples/lazyfoo/Lesson14.hs +85/−85
- examples/lazyfoo/Lesson15.hs +116/−116
- examples/lazyfoo/Lesson17.hs +141/−141
- examples/lazyfoo/Lesson18.hs +105/−105
- examples/lazyfoo/Lesson19.hs +147/−147
- examples/lazyfoo/Lesson20.hs +129/−129
- examples/lazyfoo/Lesson43.hs +109/−109
- examples/twinklebear/Lesson01.hs +38/−38
- examples/twinklebear/Lesson02.hs +75/−75
- examples/twinklebear/Lesson04.hs +72/−72
- examples/twinklebear/Lesson04a.hs +92/−92
- examples/twinklebear/Lesson05.hs +98/−98
- include/sdlhelper.h +26/−26
- sdl2.cabal +3/−3
- src/Data/Bitmask.hs +9/−9
- src/SDL/Audio.hs +447/−447
- src/SDL/Exception.hs +107/−107
- src/SDL/Filesystem.hs +51/−51
- src/SDL/Init.hs +80/−80
- src/SDL/Input.hs +10/−10
- src/SDL/Input/Keyboard.hs +166/−166
- src/SDL/Input/Keyboard/Codes.hs +1011/−1011
- src/SDL/Internal/Numbered.hs +11/−11
- src/SDL/Internal/Types.hs +23/−23
- src/SDL/Internal/Vect.hs +669/−669
- src/SDL/Power.hs +70/−70
- src/SDL/Raw.hs +31/−31
- src/SDL/Raw/Audio.hs +170/−170
- src/SDL/Raw/Basic.hs +200/−200
- src/SDL/Raw/Enum.hsc +1727/−1727
- src/SDL/Raw/Error.hs +44/−44
- src/SDL/Raw/Event.hs +639/−639
- src/SDL/Raw/Filesystem.hs +165/−165
- src/SDL/Raw/Haptic.hs +191/−191
- src/SDL/Raw/Platform.hs +13/−13
- src/SDL/Raw/Power.hs +15/−15
- src/SDL/Raw/Thread.hs +258/−258
- src/SDL/Raw/Timer.hs +46/−46
- src/SDL/Raw/Types.hsc +1423/−1423
- src/SDL/Raw/Video.hs +1113/−1113
- src/SDL/Time.hs +95/−95
ChangeLog.md view
@@ -1,3 +1,8 @@+2.1.3.1+=======++* Raise upper bounds for `vector` to <0.13+ 2.1.3 =====
LICENSE view
@@ -1,30 +1,30 @@-Copyright (c) 2013, 2014 Gabríel Arthúr Pétursson - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * Neither the name of Gabríel Arthúr Pétursson nor the names of other - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Copyright (c) 2013-2017 Gabríel Arthúr Pétursson++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Gabríel Arthúr Pétursson nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Setup.hs view
@@ -1,2 +1,2 @@-import Distribution.Simple -main = defaultMain +import Distribution.Simple+main = defaultMain
cbits/sdlhelper.c view
@@ -1,77 +1,77 @@-#include <string.h> -#include "sdlhelper.h" - -void SDLHelper_JoystickGetDeviceGUID (int device_index, SDL_JoystickGUID *guid) -{ - SDL_JoystickGUID t = SDL_JoystickGetDeviceGUID (device_index); - memcpy (guid, &t, sizeof (*guid)); -} - -void SDLHelper_JoystickGetGUID (SDL_Joystick *joystick, SDL_JoystickGUID *guid) -{ - SDL_JoystickGUID t = SDL_JoystickGetGUID (joystick); - memcpy (guid, &t, sizeof (*guid)); -} - -void SDLHelper_JoystickGetGUIDFromString (const char *pchGUID, SDL_JoystickGUID *guid) -{ - SDL_JoystickGUID t = SDL_JoystickGetGUIDFromString (pchGUID); - memcpy (guid, &t, sizeof (*guid)); -} - -void SDLHelper_JoystickGetGUIDString (const SDL_JoystickGUID *guid, char *gszGUID, int cbGUID) -{ - SDL_JoystickGetGUIDString (*guid, gszGUID, cbGUID); -} - -void SDLHelper_GameControllerGetBindForAxis (SDL_GameController *gamecontroller, SDL_GameControllerAxis axis, SDL_GameControllerButtonBind *bind) -{ - SDL_GameControllerButtonBind t = SDL_GameControllerGetBindForAxis (gamecontroller, axis); - memcpy (bind, &t, sizeof (*bind)); -} - -void SDLHelper_GameControllerGetBindForButton (SDL_GameController *gamecontroller, SDL_GameControllerButton button, SDL_GameControllerButtonBind *bind) -{ - SDL_GameControllerButtonBind t = SDL_GameControllerGetBindForButton (gamecontroller, button); - memcpy (bind, &t, sizeof (*bind)); -} - -char *SDLHelper_GameControllerMappingForGUID (const SDL_JoystickGUID *guid) -{ - return SDL_GameControllerMappingForGUID (*guid); -} - -void SDLHelper_LogMessage (int category, SDL_LogPriority priority, const char *str) -{ - SDL_LogMessage (category, priority, "%s", str); -} - -int SDLHelper_RWclose (SDL_RWops *ctx) -{ - return SDL_RWclose (ctx); -} - -size_t SDLHelper_RWread (SDL_RWops *ctx, void *ptr, size_t size, size_t maxnum) -{ - return SDL_RWread (ctx, ptr, size, maxnum); -} - -Sint64 SDLHelper_RWseek (SDL_RWops *ctx, Sint64 offset, int whence) -{ - return SDL_RWseek (ctx, offset, whence); -} - -Sint64 SDLHelper_RWtell (SDL_RWops *ctx) -{ - return SDL_RWtell (ctx); -} - -size_t SDLHelper_RWwrite (SDL_RWops *ctx, const void *ptr, size_t size, size_t num) -{ - return SDL_RWwrite (ctx, ptr, size, num); -} - -int SDLHelper_SetError (const char *str) -{ - return SDL_SetError ("%s", str); -} +#include <string.h>+#include "sdlhelper.h"++void SDLHelper_JoystickGetDeviceGUID (int device_index, SDL_JoystickGUID *guid)+{+ SDL_JoystickGUID t = SDL_JoystickGetDeviceGUID (device_index);+ memcpy (guid, &t, sizeof (*guid));+}++void SDLHelper_JoystickGetGUID (SDL_Joystick *joystick, SDL_JoystickGUID *guid)+{+ SDL_JoystickGUID t = SDL_JoystickGetGUID (joystick);+ memcpy (guid, &t, sizeof (*guid));+}++void SDLHelper_JoystickGetGUIDFromString (const char *pchGUID, SDL_JoystickGUID *guid)+{+ SDL_JoystickGUID t = SDL_JoystickGetGUIDFromString (pchGUID);+ memcpy (guid, &t, sizeof (*guid));+}++void SDLHelper_JoystickGetGUIDString (const SDL_JoystickGUID *guid, char *gszGUID, int cbGUID)+{+ SDL_JoystickGetGUIDString (*guid, gszGUID, cbGUID);+}++void SDLHelper_GameControllerGetBindForAxis (SDL_GameController *gamecontroller, SDL_GameControllerAxis axis, SDL_GameControllerButtonBind *bind)+{+ SDL_GameControllerButtonBind t = SDL_GameControllerGetBindForAxis (gamecontroller, axis);+ memcpy (bind, &t, sizeof (*bind));+}++void SDLHelper_GameControllerGetBindForButton (SDL_GameController *gamecontroller, SDL_GameControllerButton button, SDL_GameControllerButtonBind *bind)+{+ SDL_GameControllerButtonBind t = SDL_GameControllerGetBindForButton (gamecontroller, button);+ memcpy (bind, &t, sizeof (*bind));+}++char *SDLHelper_GameControllerMappingForGUID (const SDL_JoystickGUID *guid)+{+ return SDL_GameControllerMappingForGUID (*guid);+}++void SDLHelper_LogMessage (int category, SDL_LogPriority priority, const char *str)+{+ SDL_LogMessage (category, priority, "%s", str);+}++int SDLHelper_RWclose (SDL_RWops *ctx)+{+ return SDL_RWclose (ctx);+}++size_t SDLHelper_RWread (SDL_RWops *ctx, void *ptr, size_t size, size_t maxnum)+{+ return SDL_RWread (ctx, ptr, size, maxnum);+}++Sint64 SDLHelper_RWseek (SDL_RWops *ctx, Sint64 offset, int whence)+{+ return SDL_RWseek (ctx, offset, whence);+}++Sint64 SDLHelper_RWtell (SDL_RWops *ctx)+{+ return SDL_RWtell (ctx);+}++size_t SDLHelper_RWwrite (SDL_RWops *ctx, const void *ptr, size_t size, size_t num)+{+ return SDL_RWwrite (ctx, ptr, size, num);+}++int SDLHelper_SetError (const char *str)+{+ return SDL_SetError ("%s", str);+}
examples/OpenGLExample.hs view
@@ -1,129 +1,129 @@---port of https://github.com/bergey/haskell-OpenGL-examples - -{-# LANGUAGE CPP #-} -{-# LANGUAGE OverloadedStrings #-} -module OpenGLExample where - -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import qualified Data.ByteString as BS -import qualified Data.Vector.Storable as V -import System.Exit (exitFailure) -import System.IO - -import SDL (($=)) -import qualified SDL -import qualified Graphics.Rendering.OpenGL as GL - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL / OpenGL Example" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight, - SDL.windowOpenGL = Just SDL.defaultOpenGL} - SDL.showWindow window - - _ <- SDL.glCreateContext window - (prog, attrib) <- initResources - - let loop = do - events <- SDL.pollEvents - let quit = elem SDL.QuitEvent $ map SDL.eventPayload events - - GL.clear [GL.ColorBuffer] - draw prog attrib - SDL.glSwapWindow window - - unless quit loop - - loop - - SDL.destroyWindow window - SDL.quit - -initResources :: IO (GL.Program, GL.AttribLocation) -initResources = do - -- compile vertex shader - vs <- GL.createShader GL.VertexShader - GL.shaderSourceBS vs $= vsSource - GL.compileShader vs - vsOK <- GL.get $ GL.compileStatus vs - unless vsOK $ do - hPutStrLn stderr "Error in vertex shader\n" - exitFailure - - -- Do it again for the fragment shader - fs <- GL.createShader GL.FragmentShader - GL.shaderSourceBS fs $= fsSource - GL.compileShader fs - fsOK <- GL.get $ GL.compileStatus fs - unless fsOK $ do - hPutStrLn stderr "Error in fragment shader\n" - exitFailure - - program <- GL.createProgram - GL.attachShader program vs - GL.attachShader program fs - GL.attribLocation program "coord2d" $= GL.AttribLocation 0 - GL.linkProgram program - linkOK <- GL.get $ GL.linkStatus program - GL.validateProgram program - status <- GL.get $ GL.validateStatus program - unless (linkOK && status) $ do - hPutStrLn stderr "GL.linkProgram error" - plog <- GL.get $ GL.programInfoLog program - putStrLn plog - exitFailure - GL.currentProgram $= Just program - - return (program, GL.AttribLocation 0) - -draw :: GL.Program -> GL.AttribLocation -> IO () -draw program attrib = do - GL.clearColor $= GL.Color4 1 1 1 1 - GL.clear [GL.ColorBuffer] - GL.viewport $= (GL.Position 0 0, GL.Size (fromIntegral screenWidth) (fromIntegral screenHeight)) - - GL.currentProgram $= Just program - GL.vertexAttribArray attrib $= GL.Enabled - V.unsafeWith vertices $ \ptr -> - GL.vertexAttribPointer attrib $= - (GL.ToFloat, GL.VertexArrayDescriptor 2 GL.Float 0 ptr) - GL.drawArrays GL.Triangles 0 3 -- 3 is the number of vertices - GL.vertexAttribArray attrib $= GL.Disabled - -vsSource, fsSource :: BS.ByteString -vsSource = BS.intercalate "\n" - [ - "attribute vec2 coord2d; " - , "" - , "void main(void) { " - , " gl_Position = vec4(coord2d, 0.0, 1.0); " - , "}" - ] - -fsSource = BS.intercalate "\n" - [ - "" - , "#version 120" - , "void main(void) {" - , "gl_FragColor = vec4((gl_FragCoord.x/640), (gl_FragCoord.y/480), 0, 1);" - , "}" - ] - -vertices :: V.Vector Float -vertices = V.fromList [ 0.0, 0.8 - , -0.8, -0.8 - , 0.8, -0.8 - ] +--port of https://github.com/bergey/haskell-OpenGL-examples++{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-}+module OpenGLExample where++import Control.Monad+import Foreign.C.Types+import SDL.Vect+import qualified Data.ByteString as BS+import qualified Data.Vector.Storable as V+import System.Exit (exitFailure)+import System.IO++import SDL (($=))+import qualified SDL+import qualified Graphics.Rendering.OpenGL as GL++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]+ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL / OpenGL Example"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight,+ SDL.windowOpenGL = Just SDL.defaultOpenGL}+ SDL.showWindow window++ _ <- SDL.glCreateContext window+ (prog, attrib) <- initResources++ let loop = do+ events <- SDL.pollEvents+ let quit = elem SDL.QuitEvent $ map SDL.eventPayload events++ GL.clear [GL.ColorBuffer]+ draw prog attrib+ SDL.glSwapWindow window++ unless quit loop++ loop++ SDL.destroyWindow window+ SDL.quit++initResources :: IO (GL.Program, GL.AttribLocation)+initResources = do+ -- compile vertex shader+ vs <- GL.createShader GL.VertexShader+ GL.shaderSourceBS vs $= vsSource+ GL.compileShader vs+ vsOK <- GL.get $ GL.compileStatus vs+ unless vsOK $ do+ hPutStrLn stderr "Error in vertex shader\n"+ exitFailure++ -- Do it again for the fragment shader+ fs <- GL.createShader GL.FragmentShader+ GL.shaderSourceBS fs $= fsSource+ GL.compileShader fs+ fsOK <- GL.get $ GL.compileStatus fs+ unless fsOK $ do+ hPutStrLn stderr "Error in fragment shader\n"+ exitFailure++ program <- GL.createProgram+ GL.attachShader program vs+ GL.attachShader program fs+ GL.attribLocation program "coord2d" $= GL.AttribLocation 0+ GL.linkProgram program+ linkOK <- GL.get $ GL.linkStatus program+ GL.validateProgram program+ status <- GL.get $ GL.validateStatus program+ unless (linkOK && status) $ do+ hPutStrLn stderr "GL.linkProgram error"+ plog <- GL.get $ GL.programInfoLog program+ putStrLn plog+ exitFailure+ GL.currentProgram $= Just program++ return (program, GL.AttribLocation 0)++draw :: GL.Program -> GL.AttribLocation -> IO ()+draw program attrib = do+ GL.clearColor $= GL.Color4 1 1 1 1+ GL.clear [GL.ColorBuffer]+ GL.viewport $= (GL.Position 0 0, GL.Size (fromIntegral screenWidth) (fromIntegral screenHeight))++ GL.currentProgram $= Just program+ GL.vertexAttribArray attrib $= GL.Enabled+ V.unsafeWith vertices $ \ptr ->+ GL.vertexAttribPointer attrib $=+ (GL.ToFloat, GL.VertexArrayDescriptor 2 GL.Float 0 ptr)+ GL.drawArrays GL.Triangles 0 3 -- 3 is the number of vertices+ GL.vertexAttribArray attrib $= GL.Disabled++vsSource, fsSource :: BS.ByteString+vsSource = BS.intercalate "\n"+ [+ "attribute vec2 coord2d; "+ , ""+ , "void main(void) { "+ , " gl_Position = vec4(coord2d, 0.0, 1.0); "+ , "}"+ ]++fsSource = BS.intercalate "\n"+ [+ ""+ , "#version 120"+ , "void main(void) {"+ , "gl_FragColor = vec4((gl_FragCoord.x/640), (gl_FragCoord.y/480), 0, 1);"+ , "}"+ ]++vertices :: V.Vector Float+vertices = V.fromList [ 0.0, 0.8+ , -0.8, -0.8+ , 0.8, -0.8+ ]
examples/lazyfoo/Lesson01.hs view
@@ -1,27 +1,27 @@-{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson01 (main) where - -import Control.Concurrent (threadDelay) -import Foreign.C.Types -import SDL.Vect -import qualified SDL - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight } - SDL.showWindow window - - screenSurface <- SDL.getWindowSurface window - let white = V4 maxBound maxBound maxBound maxBound - SDL.surfaceFillRect screenSurface Nothing white - SDL.updateWindowSurface window - - threadDelay 2000000 - - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson01 (main) where++import Control.Concurrent (threadDelay)+import Foreign.C.Types+import SDL.Vect+import qualified SDL++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }+ SDL.showWindow window++ screenSurface <- SDL.getWindowSurface window+ let white = V4 maxBound maxBound maxBound maxBound+ SDL.surfaceFillRect screenSurface Nothing white+ SDL.updateWindowSurface window++ threadDelay 2000000++ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson02.hs view
@@ -1,30 +1,30 @@-{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson02 (main) where - -import Control.Concurrent (threadDelay) -import Foreign.C.Types -import SDL.Vect -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight } - SDL.showWindow window - screenSurface <- SDL.getWindowSurface window - - helloWorld <- getDataFileName "examples/lazyfoo/hello_world.bmp" >>= SDL.loadBMP - - SDL.surfaceBlit helloWorld Nothing screenSurface Nothing - SDL.updateWindowSurface window - - threadDelay 2000000 - - SDL.destroyWindow window - SDL.freeSurface helloWorld - SDL.quit +{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson02 (main) where++import Control.Concurrent (threadDelay)+import Foreign.C.Types+import SDL.Vect+import qualified SDL++import Paths_sdl2 (getDataFileName)++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]+ window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }+ SDL.showWindow window+ screenSurface <- SDL.getWindowSurface window++ helloWorld <- getDataFileName "examples/lazyfoo/hello_world.bmp" >>= SDL.loadBMP++ SDL.surfaceBlit helloWorld Nothing screenSurface Nothing+ SDL.updateWindowSurface window++ threadDelay 2000000++ SDL.destroyWindow window+ SDL.freeSurface helloWorld+ SDL.quit
examples/lazyfoo/Lesson03.hs view
@@ -1,39 +1,39 @@-{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE OverloadedStrings #-} - -module Lazyfoo.Lesson03 (main) where - -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight } - SDL.showWindow window - screenSurface <- SDL.getWindowSurface window - - xOut <- getDataFileName "examples/lazyfoo/x.bmp" >>= SDL.loadBMP - - let - loop = do - events <- SDL.pollEvents - let quit = elem SDL.QuitEvent $ map SDL.eventPayload events - - SDL.surfaceBlit xOut Nothing screenSurface Nothing - SDL.updateWindowSurface window - - unless quit loop - - loop - - SDL.freeSurface xOut - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}++module Lazyfoo.Lesson03 (main) where++import Control.Monad+import Foreign.C.Types+import SDL.Vect+import qualified SDL++import Paths_sdl2 (getDataFileName)++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]+ window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }+ SDL.showWindow window+ screenSurface <- SDL.getWindowSurface window++ xOut <- getDataFileName "examples/lazyfoo/x.bmp" >>= SDL.loadBMP++ let+ loop = do+ events <- SDL.pollEvents+ let quit = elem SDL.QuitEvent $ map SDL.eventPayload events++ SDL.surfaceBlit xOut Nothing screenSurface Nothing+ SDL.updateWindowSurface window++ unless quit loop++ loop++ SDL.freeSurface xOut+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson04.hs view
@@ -1,68 +1,68 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE PatternSynonyms #-} -module Lazyfoo.Lesson04 (main) where - -import Prelude hiding (any, mapM_) -import Control.Monad hiding (mapM_) -import Data.Foldable hiding (elem) -import Data.Maybe -import Data.Monoid +{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+module Lazyfoo.Lesson04 (main) where++import Prelude hiding (any, mapM_)+import Control.Monad hiding (mapM_)+import Data.Foldable hiding (elem)+import Data.Maybe+import Data.Monoid import Foreign.C.Types-import SDL.Vect -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -loadBMP :: FilePath -> IO SDL.Surface -loadBMP path = getDataFileName path >>= SDL.loadBMP - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight } - SDL.showWindow window - screenSurface <- SDL.getWindowSurface window - - surfaceDefault <- loadBMP "examples/lazyfoo/press.bmp" - surfaceUp <- loadBMP "examples/lazyfoo/up.bmp" - surfaceDown <- loadBMP "examples/lazyfoo/down.bmp" - surfaceLeft <- loadBMP "examples/lazyfoo/left.bmp" - surfaceRight <- loadBMP "examples/lazyfoo/right.bmp" - - let - loop oldSurface = do - events <- map SDL.eventPayload <$> SDL.pollEvents - let quit = SDL.QuitEvent `elem` events - - currentSurface = - fromMaybe oldSurface $ getLast $ - foldMap (\case SDL.KeyboardEvent e - | SDL.keyboardEventKeyMotion e == SDL.Pressed -> - case SDL.keysymKeycode (SDL.keyboardEventKeysym e) of - SDL.KeycodeUp -> Last (Just surfaceUp) - SDL.KeycodeDown -> Last (Just surfaceDown) - SDL.KeycodeRight -> Last (Just surfaceRight) - SDL.KeycodeLeft -> Last (Just surfaceLeft) - _ -> mempty - _ -> mempty) - events - - SDL.surfaceBlit currentSurface Nothing screenSurface Nothing - SDL.updateWindowSurface window - - unless quit (loop currentSurface) - - loop surfaceDefault - - mapM_ SDL.freeSurface [ surfaceDefault, surfaceUp, surfaceDown, surfaceRight, surfaceLeft ] - SDL.destroyWindow window - SDL.quit +import SDL.Vect+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++loadBMP :: FilePath -> IO SDL.Surface+loadBMP path = getDataFileName path >>= SDL.loadBMP++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]+ window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }+ SDL.showWindow window+ screenSurface <- SDL.getWindowSurface window++ surfaceDefault <- loadBMP "examples/lazyfoo/press.bmp"+ surfaceUp <- loadBMP "examples/lazyfoo/up.bmp"+ surfaceDown <- loadBMP "examples/lazyfoo/down.bmp"+ surfaceLeft <- loadBMP "examples/lazyfoo/left.bmp"+ surfaceRight <- loadBMP "examples/lazyfoo/right.bmp"++ let+ loop oldSurface = do+ events <- map SDL.eventPayload <$> SDL.pollEvents+ let quit = SDL.QuitEvent `elem` events++ currentSurface =+ fromMaybe oldSurface $ getLast $+ foldMap (\case SDL.KeyboardEvent e+ | SDL.keyboardEventKeyMotion e == SDL.Pressed ->+ case SDL.keysymKeycode (SDL.keyboardEventKeysym e) of+ SDL.KeycodeUp -> Last (Just surfaceUp)+ SDL.KeycodeDown -> Last (Just surfaceDown)+ SDL.KeycodeRight -> Last (Just surfaceRight)+ SDL.KeycodeLeft -> Last (Just surfaceLeft)+ _ -> mempty+ _ -> mempty)+ events++ SDL.surfaceBlit currentSurface Nothing screenSurface Nothing+ SDL.updateWindowSurface window++ unless quit (loop currentSurface)++ loop surfaceDefault++ mapM_ SDL.freeSurface [ surfaceDefault, surfaceUp, surfaceDown, surfaceRight, surfaceLeft ]+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson05.hs view
@@ -1,48 +1,48 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson05 (main) where - -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -loadSurface :: SDL.Surface -> FilePath -> IO SDL.Surface -loadSurface screenSurface path = do - loadedSurface <- getDataFileName path >>= SDL.loadBMP - desiredFormat <- SDL.surfaceFormat screenSurface - SDL.convertSurface loadedSurface desiredFormat <* SDL.freeSurface loadedSurface - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight } - SDL.showWindow window - screenSurface <- SDL.getWindowSurface window - - stretchedSurface <- loadSurface screenSurface "examples/lazyfoo/stretch.bmp" - - let - loop = do - events <- SDL.pollEvents - let quit = elem SDL.QuitEvent $ map SDL.eventPayload events - - SDL.surfaceBlitScaled stretchedSurface Nothing screenSurface Nothing - SDL.updateWindowSurface window - - unless quit loop - - loop - - SDL.freeSurface stretchedSurface - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson05 (main) where++import Control.Monad+import Foreign.C.Types+import SDL.Vect+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++loadSurface :: SDL.Surface -> FilePath -> IO SDL.Surface+loadSurface screenSurface path = do+ loadedSurface <- getDataFileName path >>= SDL.loadBMP+ desiredFormat <- SDL.surfaceFormat screenSurface+ SDL.convertSurface loadedSurface desiredFormat <* SDL.freeSurface loadedSurface++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]+ window <- SDL.createWindow "SDL Tutorial" SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }+ SDL.showWindow window+ screenSurface <- SDL.getWindowSurface window++ stretchedSurface <- loadSurface screenSurface "examples/lazyfoo/stretch.bmp"++ let+ loop = do+ events <- SDL.pollEvents+ let quit = elem SDL.QuitEvent $ map SDL.eventPayload events++ SDL.surfaceBlitScaled stretchedSurface Nothing screenSurface Nothing+ SDL.updateWindowSurface window++ unless quit loop++ loop++ SDL.freeSurface stretchedSurface+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson07.hs view
@@ -1,60 +1,60 @@-{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson07 (main) where - -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - xOutSurface <- getDataFileName "examples/lazyfoo/texture.bmp" >>= SDL.loadBMP - texture <- SDL.createTextureFromSurface renderer xOutSurface - SDL.freeSurface xOutSurface - - let loop = do - events <- SDL.pollEvents - - let quit = elem SDL.QuitEvent $ map SDL.eventPayload events - - SDL.clear renderer - SDL.copy renderer texture Nothing Nothing - SDL.present renderer - - unless quit loop - - loop - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson07 (main) where++import Control.Monad+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++import Paths_sdl2 (getDataFileName)++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ xOutSurface <- getDataFileName "examples/lazyfoo/texture.bmp" >>= SDL.loadBMP+ texture <- SDL.createTextureFromSurface renderer xOutSurface+ SDL.freeSurface xOutSurface++ let loop = do+ events <- SDL.pollEvents++ let quit = elem SDL.QuitEvent $ map SDL.eventPayload events++ SDL.clear renderer+ SDL.copy renderer texture Nothing Nothing+ SDL.present renderer++ unless quit loop++ loop++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson08.hs view
@@ -1,71 +1,71 @@-{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson08 (main) where - -import Control.Monad -import Data.Foldable (for_) -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - let loop = do - events <- SDL.pollEvents - - let quit = elem SDL.QuitEvent $ map SDL.eventPayload events - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - SDL.rendererDrawColor renderer $= V4 maxBound 0 0 maxBound - SDL.fillRect renderer (Just $ SDL.Rectangle (P $ V2 (screenWidth `div` 4) (screenHeight `div` 4)) - (V2 (screenWidth `div` 2) (screenHeight `div` 2))) - - SDL.rendererDrawColor renderer $= V4 0 0 maxBound maxBound - SDL.drawRect renderer (Just (SDL.Rectangle (P $ V2 (screenWidth `div` 6) (screenHeight `div` 6)) - (V2 (screenWidth * 2 `div` 3) (screenHeight * 2 `div` 3)))) - - SDL.rendererDrawColor renderer $= V4 0 maxBound 0 maxBound - SDL.drawLine renderer (P (V2 0 (screenHeight `div` 2))) (P (V2 screenWidth (screenHeight `div` 2))) - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - for_ [0, 4 .. screenHeight] $ \i -> - SDL.drawPoint renderer (P (V2 (screenWidth `div` 2) i)) - - SDL.present renderer - - unless quit loop - - loop - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson08 (main) where++import Control.Monad+import Data.Foldable (for_)+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ let loop = do+ events <- SDL.pollEvents++ let quit = elem SDL.QuitEvent $ map SDL.eventPayload events++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ SDL.rendererDrawColor renderer $= V4 maxBound 0 0 maxBound+ SDL.fillRect renderer (Just $ SDL.Rectangle (P $ V2 (screenWidth `div` 4) (screenHeight `div` 4))+ (V2 (screenWidth `div` 2) (screenHeight `div` 2)))++ SDL.rendererDrawColor renderer $= V4 0 0 maxBound maxBound+ SDL.drawRect renderer (Just (SDL.Rectangle (P $ V2 (screenWidth `div` 6) (screenHeight `div` 6))+ (V2 (screenWidth * 2 `div` 3) (screenHeight * 2 `div` 3))))++ SDL.rendererDrawColor renderer $= V4 0 maxBound 0 maxBound+ SDL.drawLine renderer (P (V2 0 (screenHeight `div` 2))) (P (V2 screenWidth (screenHeight `div` 2)))++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ for_ [0, 4 .. screenHeight] $ \i ->+ SDL.drawPoint renderer (P (V2 (screenWidth `div` 2) i))++ SDL.present renderer++ unless quit loop++ loop++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson09.hs view
@@ -1,70 +1,70 @@-{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson09 (main) where - -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - textureSurface <- getDataFileName "examples/lazyfoo/viewport.bmp" >>= SDL.loadBMP - texture <- SDL.createTextureFromSurface renderer textureSurface - SDL.freeSurface textureSurface - - let loop = do - events <- SDL.pollEvents - - let quit = elem SDL.QuitEvent $ map SDL.eventPayload events - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - SDL.rendererViewport renderer $= Just (SDL.Rectangle (P (V2 0 0)) (V2 (screenWidth `div` 2) (screenHeight `div` 2))) - SDL.copy renderer texture Nothing Nothing - - SDL.rendererViewport renderer $= Just (SDL.Rectangle (P (V2 (screenWidth `div` 2) 0)) (V2 (screenWidth `div` 2) (screenHeight `div` 2))) - SDL.copy renderer texture Nothing Nothing - - SDL.rendererViewport renderer $= Just (SDL.Rectangle (P (V2 0 (screenHeight `div` 2))) (V2 screenWidth (screenHeight `div` 2))) - SDL.copy renderer texture Nothing Nothing - - SDL.present renderer - - unless quit loop - - loop - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson09 (main) where++import Control.Monad+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++import Paths_sdl2 (getDataFileName)++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ textureSurface <- getDataFileName "examples/lazyfoo/viewport.bmp" >>= SDL.loadBMP+ texture <- SDL.createTextureFromSurface renderer textureSurface+ SDL.freeSurface textureSurface++ let loop = do+ events <- SDL.pollEvents++ let quit = elem SDL.QuitEvent $ map SDL.eventPayload events++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ SDL.rendererViewport renderer $= Just (SDL.Rectangle (P (V2 0 0)) (V2 (screenWidth `div` 2) (screenHeight `div` 2)))+ SDL.copy renderer texture Nothing Nothing++ SDL.rendererViewport renderer $= Just (SDL.Rectangle (P (V2 (screenWidth `div` 2) 0)) (V2 (screenWidth `div` 2) (screenHeight `div` 2)))+ SDL.copy renderer texture Nothing Nothing++ SDL.rendererViewport renderer $= Just (SDL.Rectangle (P (V2 0 (screenHeight `div` 2))) (V2 screenWidth (screenHeight `div` 2)))+ SDL.copy renderer texture Nothing Nothing++ SDL.present renderer++ unless quit loop++ loop++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson10.hs view
@@ -1,79 +1,79 @@-{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson10 (main) where - -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -data Texture = Texture SDL.Texture (V2 CInt) - -loadTexture :: SDL.Renderer -> FilePath -> IO Texture -loadTexture r filePath = do - surface <- getDataFileName filePath >>= SDL.loadBMP - size <- SDL.surfaceDimensions surface - let key = V4 0 maxBound maxBound maxBound - SDL.surfaceColorKey surface $= Just key - t <- SDL.createTextureFromSurface r surface - SDL.freeSurface surface - return (Texture t size) - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> IO () -renderTexture r (Texture t size) xy = - SDL.copy r t Nothing (Just $ SDL.Rectangle xy size) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - fooTexture <- loadTexture renderer "examples/lazyfoo/foo.bmp" - backgroundTexture <- loadTexture renderer "examples/lazyfoo/background.bmp" - - let loop = do - events <- SDL.pollEvents - - let quit = elem SDL.QuitEvent $ map SDL.eventPayload events - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - renderTexture renderer backgroundTexture 0 - renderTexture renderer fooTexture (P (V2 240 190)) - - SDL.present renderer - - unless quit loop - - loop - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson10 (main) where++import Control.Monad+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++import Paths_sdl2 (getDataFileName)++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++data Texture = Texture SDL.Texture (V2 CInt)++loadTexture :: SDL.Renderer -> FilePath -> IO Texture+loadTexture r filePath = do+ surface <- getDataFileName filePath >>= SDL.loadBMP+ size <- SDL.surfaceDimensions surface+ let key = V4 0 maxBound maxBound maxBound+ SDL.surfaceColorKey surface $= Just key+ t <- SDL.createTextureFromSurface r surface+ SDL.freeSurface surface+ return (Texture t size)++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> IO ()+renderTexture r (Texture t size) xy =+ SDL.copy r t Nothing (Just $ SDL.Rectangle xy size)++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ fooTexture <- loadTexture renderer "examples/lazyfoo/foo.bmp"+ backgroundTexture <- loadTexture renderer "examples/lazyfoo/background.bmp"++ let loop = do+ events <- SDL.pollEvents++ let quit = elem SDL.QuitEvent $ map SDL.eventPayload events++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ renderTexture renderer backgroundTexture 0+ renderTexture renderer fooTexture (P (V2 240 190))++ SDL.present renderer++ unless quit loop++ loop++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson11.hs view
@@ -1,91 +1,91 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson11 (main) where - -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -data Texture = Texture SDL.Texture (V2 CInt) - -loadTexture :: SDL.Renderer -> FilePath -> IO Texture -loadTexture r filePath = do - surface <- getDataFileName filePath >>= SDL.loadBMP - size <- SDL.surfaceDimensions surface - let key = V4 0 maxBound maxBound maxBound - SDL.surfaceColorKey surface $= Just key - t <- SDL.createTextureFromSurface r surface - SDL.freeSurface surface - return (Texture t size) - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> IO () -renderTexture r (Texture t size) xy clip = - let dstSize = maybe size (\(SDL.Rectangle _ size') -> size') clip - in SDL.copy r t clip (Just (SDL.Rectangle xy dstSize)) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.SoftwareRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - spriteSheetTexture <- loadTexture renderer "examples/lazyfoo/dots.bmp" - let spriteSize = V2 100 100 - clip1 = SDL.Rectangle (P (V2 0 0)) spriteSize - clip2 = SDL.Rectangle (P (V2 100 0)) spriteSize - clip3 = SDL.Rectangle (P (V2 0 100)) spriteSize - clip4 = SDL.Rectangle (P (V2 100 100)) spriteSize - - let loop = do - events <- SDL.pollEvents - - let quit = elem SDL.QuitEvent $ map SDL.eventPayload events - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - renderTexture renderer spriteSheetTexture (P (V2 0 0)) (Just clip1) - renderTexture renderer spriteSheetTexture (P (V2 (screenWidth -) (const 0) <*> spriteSize)) (Just clip2) - renderTexture renderer spriteSheetTexture (P (V2 (const 0) (screenHeight -) <*> spriteSize)) (Just clip3) - renderTexture renderer spriteSheetTexture (P (V2 (screenWidth -) (screenHeight -) <*> spriteSize)) (Just clip4) - - SDL.present renderer - - unless quit loop - - loop - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson11 (main) where++import Control.Monad+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++data Texture = Texture SDL.Texture (V2 CInt)++loadTexture :: SDL.Renderer -> FilePath -> IO Texture+loadTexture r filePath = do+ surface <- getDataFileName filePath >>= SDL.loadBMP+ size <- SDL.surfaceDimensions surface+ let key = V4 0 maxBound maxBound maxBound+ SDL.surfaceColorKey surface $= Just key+ t <- SDL.createTextureFromSurface r surface+ SDL.freeSurface surface+ return (Texture t size)++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> IO ()+renderTexture r (Texture t size) xy clip =+ let dstSize = maybe size (\(SDL.Rectangle _ size') -> size') clip+ in SDL.copy r t clip (Just (SDL.Rectangle xy dstSize))++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.SoftwareRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ spriteSheetTexture <- loadTexture renderer "examples/lazyfoo/dots.bmp"+ let spriteSize = V2 100 100+ clip1 = SDL.Rectangle (P (V2 0 0)) spriteSize+ clip2 = SDL.Rectangle (P (V2 100 0)) spriteSize+ clip3 = SDL.Rectangle (P (V2 0 100)) spriteSize+ clip4 = SDL.Rectangle (P (V2 100 100)) spriteSize++ let loop = do+ events <- SDL.pollEvents++ let quit = elem SDL.QuitEvent $ map SDL.eventPayload events++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ renderTexture renderer spriteSheetTexture (P (V2 0 0)) (Just clip1)+ renderTexture renderer spriteSheetTexture (P (V2 (screenWidth -) (const 0) <*> spriteSize)) (Just clip2)+ renderTexture renderer spriteSheetTexture (P (V2 (const 0) (screenHeight -) <*> spriteSize)) (Just clip3)+ renderTexture renderer spriteSheetTexture (P (V2 (screenWidth -) (screenHeight -) <*> spriteSize)) (Just clip4)++ SDL.present renderer++ unless quit loop++ loop++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson12.hs view
@@ -1,109 +1,109 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE MultiWayIf #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE PatternSynonyms #-} -module Lazyfoo.Lesson12 (main) where - -import Control.Monad -import Data.Monoid -import Data.Word -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Data.Foldable -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -data Texture = Texture SDL.Texture (V2 CInt) - -loadTexture :: SDL.Renderer -> FilePath -> IO Texture -loadTexture r filePath = do - surface <- getDataFileName filePath >>= SDL.loadBMP - size <- SDL.surfaceDimensions surface - let key = V4 0 maxBound maxBound maxBound - SDL.surfaceColorKey surface $= Just key - t <- SDL.createTextureFromSurface r surface - SDL.freeSurface surface - return (Texture t size) - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> IO () -renderTexture r (Texture t size) xy clip = - let dstSize = maybe size (\(SDL.Rectangle _ size') -> size') clip - in SDL.copy r t clip (Just (SDL.Rectangle xy dstSize)) - -setTextureColor :: Texture -> V3 Word8 -> IO () -setTextureColor (Texture t _) rgb = SDL.textureColorMod t $= rgb - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.SoftwareRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - modulatedTexture <- loadTexture renderer "examples/lazyfoo/colors.bmp" - - let loop color = do - events <- SDL.pollEvents - - let (Any quit, Sum colorAdjustment) = - foldMap (\case - SDL.QuitEvent -> (Any True, mempty) - SDL.KeyboardEvent e -> - (\x -> (mempty, x)) $ - if | SDL.keyboardEventKeyMotion e == SDL.Pressed -> - case SDL.keysymScancode (SDL.keyboardEventKeysym e) of - SDL.ScancodeQ -> Sum (V3 32 0 0) - SDL.ScancodeW -> Sum (V3 0 32 0) - SDL.ScancodeE -> Sum (V3 0 0 32) - SDL.ScancodeA -> Sum (V3 (-32) 0 0) - SDL.ScancodeS -> Sum (V3 0 (-32) 0) - SDL.ScancodeD -> Sum (V3 0 0 (-32)) - _ -> mempty - | otherwise -> mempty - _ -> mempty) $ - map SDL.eventPayload events - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - let color' = color + colorAdjustment - setTextureColor modulatedTexture color' - renderTexture renderer modulatedTexture 0 Nothing - - SDL.present renderer - - unless quit (loop color') - - loop (V3 maxBound maxBound maxBound) - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+module Lazyfoo.Lesson12 (main) where++import Control.Monad+import Data.Monoid+import Data.Word+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Data.Foldable+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++data Texture = Texture SDL.Texture (V2 CInt)++loadTexture :: SDL.Renderer -> FilePath -> IO Texture+loadTexture r filePath = do+ surface <- getDataFileName filePath >>= SDL.loadBMP+ size <- SDL.surfaceDimensions surface+ let key = V4 0 maxBound maxBound maxBound+ SDL.surfaceColorKey surface $= Just key+ t <- SDL.createTextureFromSurface r surface+ SDL.freeSurface surface+ return (Texture t size)++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> IO ()+renderTexture r (Texture t size) xy clip =+ let dstSize = maybe size (\(SDL.Rectangle _ size') -> size') clip+ in SDL.copy r t clip (Just (SDL.Rectangle xy dstSize))++setTextureColor :: Texture -> V3 Word8 -> IO ()+setTextureColor (Texture t _) rgb = SDL.textureColorMod t $= rgb++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.SoftwareRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ modulatedTexture <- loadTexture renderer "examples/lazyfoo/colors.bmp"++ let loop color = do+ events <- SDL.pollEvents++ let (Any quit, Sum colorAdjustment) =+ foldMap (\case+ SDL.QuitEvent -> (Any True, mempty)+ SDL.KeyboardEvent e ->+ (\x -> (mempty, x)) $+ if | SDL.keyboardEventKeyMotion e == SDL.Pressed ->+ case SDL.keysymScancode (SDL.keyboardEventKeysym e) of+ SDL.ScancodeQ -> Sum (V3 32 0 0)+ SDL.ScancodeW -> Sum (V3 0 32 0)+ SDL.ScancodeE -> Sum (V3 0 0 32)+ SDL.ScancodeA -> Sum (V3 (-32) 0 0)+ SDL.ScancodeS -> Sum (V3 0 (-32) 0)+ SDL.ScancodeD -> Sum (V3 0 0 (-32))+ _ -> mempty+ | otherwise -> mempty+ _ -> mempty) $+ map SDL.eventPayload events++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ let color' = color + colorAdjustment+ setTextureColor modulatedTexture color'+ renderTexture renderer modulatedTexture 0 Nothing++ SDL.present renderer++ unless quit (loop color')++ loop (V3 maxBound maxBound maxBound)++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson14.hs view
@@ -1,85 +1,85 @@-{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson14 (main) where - -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -data Texture = Texture SDL.Texture (V2 CInt) - -loadTexture :: SDL.Renderer -> FilePath -> IO Texture -loadTexture r filePath = do - surface <- getDataFileName filePath >>= SDL.loadBMP - size <- SDL.surfaceDimensions surface - let key = V4 0 maxBound maxBound maxBound - SDL.surfaceColorKey surface $= Just key - t <- SDL.createTextureFromSurface r surface - SDL.freeSurface surface - return (Texture t size) - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> IO () -renderTexture r (Texture t size) xy clip = - let dstSize = maybe size (\(SDL.Rectangle _ size') -> size') clip - in SDL.copy r t clip (Just (SDL.Rectangle xy dstSize)) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedVSyncRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - spriteSheetTexture <- loadTexture renderer "examples/lazyfoo/animation.bmp" - let spriteSize = V2 64 205 - clip1 = SDL.Rectangle (P (V2 0 0)) spriteSize - clip2 = SDL.Rectangle (P (V2 64 0)) spriteSize - clip3 = SDL.Rectangle (P (V2 128 0)) spriteSize - clip4 = SDL.Rectangle (P (V2 196 0)) spriteSize - - let loop [] = return () - loop (frame:frames) = do - events <- SDL.pollEvents - - let quit = elem SDL.QuitEvent $ map SDL.eventPayload events - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - renderTexture renderer spriteSheetTexture (P (fmap (`div` 2) (V2 screenWidth screenHeight) - fmap (`div` 2) spriteSize)) (Just frame) - - SDL.present renderer - - unless quit (loop frames) - - loop (cycle ([clip1, clip2, clip3, clip4] >>= replicate 4)) - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson14 (main) where++import Control.Monad+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++import Paths_sdl2 (getDataFileName)++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++data Texture = Texture SDL.Texture (V2 CInt)++loadTexture :: SDL.Renderer -> FilePath -> IO Texture+loadTexture r filePath = do+ surface <- getDataFileName filePath >>= SDL.loadBMP+ size <- SDL.surfaceDimensions surface+ let key = V4 0 maxBound maxBound maxBound+ SDL.surfaceColorKey surface $= Just key+ t <- SDL.createTextureFromSurface r surface+ SDL.freeSurface surface+ return (Texture t size)++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> IO ()+renderTexture r (Texture t size) xy clip =+ let dstSize = maybe size (\(SDL.Rectangle _ size') -> size') clip+ in SDL.copy r t clip (Just (SDL.Rectangle xy dstSize))++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedVSyncRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ spriteSheetTexture <- loadTexture renderer "examples/lazyfoo/animation.bmp"+ let spriteSize = V2 64 205+ clip1 = SDL.Rectangle (P (V2 0 0)) spriteSize+ clip2 = SDL.Rectangle (P (V2 64 0)) spriteSize+ clip3 = SDL.Rectangle (P (V2 128 0)) spriteSize+ clip4 = SDL.Rectangle (P (V2 196 0)) spriteSize++ let loop [] = return ()+ loop (frame:frames) = do+ events <- SDL.pollEvents++ let quit = elem SDL.QuitEvent $ map SDL.eventPayload events++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ renderTexture renderer spriteSheetTexture (P (fmap (`div` 2) (V2 screenWidth screenHeight) - fmap (`div` 2) spriteSize)) (Just frame)++ SDL.present renderer++ unless quit (loop frames)++ loop (cycle ([clip1, clip2, clip3, clip4] >>= replicate 4))++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson15.hs view
@@ -1,116 +1,116 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE MultiWayIf #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE PatternSynonyms #-} -module Lazyfoo.Lesson15 (main) where - -import Control.Monad -import Data.Monoid -import Data.Maybe -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -import Data.Foldable -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -data Texture = Texture SDL.Texture (V2 CInt) - -loadTexture :: SDL.Renderer -> FilePath -> IO Texture -loadTexture r filePath = do - surface <- getDataFileName filePath >>= SDL.loadBMP - size <- SDL.surfaceDimensions surface - let key = V4 0 maxBound maxBound maxBound - SDL.surfaceColorKey surface $= Just key - t <- SDL.createTextureFromSurface r surface - SDL.freeSurface surface - return (Texture t size) - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO () -renderTexture r (Texture t size) xy clip theta center flips = - let dstSize = - maybe size (\(SDL.Rectangle _ size') -> size') clip - in SDL.copyEx r - t - clip - (Just (SDL.Rectangle xy dstSize)) - (fromMaybe 0 theta) - center - (fromMaybe (pure False) flips) - -textureSize :: Texture -> V2 CInt -textureSize (Texture _ sz) = sz - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedVSyncRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - arrowTexture <- loadTexture renderer "examples/lazyfoo/arrow.bmp" - - let loop theta flips = do - events <- SDL.pollEvents - - let (Any quit, Sum phi, Last newFlips) = - foldMap (\case - SDL.QuitEvent -> (Any True, mempty, mempty) - SDL.KeyboardEvent e -> - (\(x,y) -> (mempty, x,y)) $ - if | SDL.keyboardEventKeyMotion e == SDL.Pressed -> - case SDL.keysymScancode (SDL.keyboardEventKeysym e) of - SDL.ScancodeQ -> (mempty, Last (Just (V2 True False))) - SDL.ScancodeW -> (mempty, Last (Just (V2 False False))) - SDL.ScancodeE -> (mempty, Last (Just (V2 False True))) - SDL.ScancodeA -> (Sum (-60), mempty) - SDL.ScancodeD -> (Sum 60, mempty) - _ -> mempty - | otherwise -> mempty - _ -> mempty) $ - map SDL.eventPayload events - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - let theta' = theta + phi - flips' = fromMaybe flips newFlips - renderTexture renderer arrowTexture (P (fmap (`div` 2) (V2 screenWidth screenHeight) - fmap (`div` 2) (textureSize arrowTexture))) Nothing (Just theta') Nothing (Just flips') - - SDL.present renderer - - unless quit (loop theta' flips') - - loop 0 (pure False) - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+module Lazyfoo.Lesson15 (main) where++import Control.Monad+import Data.Monoid+import Data.Maybe+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+import Data.Foldable+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++data Texture = Texture SDL.Texture (V2 CInt)++loadTexture :: SDL.Renderer -> FilePath -> IO Texture+loadTexture r filePath = do+ surface <- getDataFileName filePath >>= SDL.loadBMP+ size <- SDL.surfaceDimensions surface+ let key = V4 0 maxBound maxBound maxBound+ SDL.surfaceColorKey surface $= Just key+ t <- SDL.createTextureFromSurface r surface+ SDL.freeSurface surface+ return (Texture t size)++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO ()+renderTexture r (Texture t size) xy clip theta center flips =+ let dstSize =+ maybe size (\(SDL.Rectangle _ size') -> size') clip+ in SDL.copyEx r+ t+ clip+ (Just (SDL.Rectangle xy dstSize))+ (fromMaybe 0 theta)+ center+ (fromMaybe (pure False) flips)++textureSize :: Texture -> V2 CInt+textureSize (Texture _ sz) = sz++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedVSyncRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ arrowTexture <- loadTexture renderer "examples/lazyfoo/arrow.bmp"++ let loop theta flips = do+ events <- SDL.pollEvents++ let (Any quit, Sum phi, Last newFlips) =+ foldMap (\case+ SDL.QuitEvent -> (Any True, mempty, mempty)+ SDL.KeyboardEvent e ->+ (\(x,y) -> (mempty, x,y)) $+ if | SDL.keyboardEventKeyMotion e == SDL.Pressed ->+ case SDL.keysymScancode (SDL.keyboardEventKeysym e) of+ SDL.ScancodeQ -> (mempty, Last (Just (V2 True False)))+ SDL.ScancodeW -> (mempty, Last (Just (V2 False False)))+ SDL.ScancodeE -> (mempty, Last (Just (V2 False True)))+ SDL.ScancodeA -> (Sum (-60), mempty)+ SDL.ScancodeD -> (Sum 60, mempty)+ _ -> mempty+ | otherwise -> mempty+ _ -> mempty) $+ map SDL.eventPayload events++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ let theta' = theta + phi+ flips' = fromMaybe flips newFlips+ renderTexture renderer arrowTexture (P (fmap (`div` 2) (V2 screenWidth screenHeight) - fmap (`div` 2) (textureSize arrowTexture))) Nothing (Just theta') Nothing (Just flips')++ SDL.present renderer++ unless quit (loop theta' flips')++ loop 0 (pure False)++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson17.hs view
@@ -1,141 +1,141 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson17 (main) where - -import Prelude hiding (foldl1, and) -import Control.Monad -import Data.Foldable -import Data.Monoid -import Data.Maybe -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -data Texture = Texture SDL.Texture (V2 CInt) - -loadTexture :: SDL.Renderer -> FilePath -> IO Texture -loadTexture r filePath = do - surface <- getDataFileName filePath >>= SDL.loadBMP - size <- SDL.surfaceDimensions surface - let key = V4 0 maxBound maxBound maxBound - SDL.surfaceColorKey surface $= Just key - t <- SDL.createTextureFromSurface r surface - SDL.freeSurface surface - return (Texture t size) - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO () -renderTexture r (Texture t size) xy clip theta center flips = - let dstSize = - maybe size (\(SDL.Rectangle _ size') -> size') clip - in SDL.copyEx r - t - clip - (Just (SDL.Rectangle xy dstSize)) - (fromMaybe 0 theta) - center - (fromMaybe (pure False) flips) - -data ButtonSprite = MouseOut | MouseOver | MouseDown | MouseUp - -data Button = Button (Point V2 CInt) ButtonSprite - -buttonSize :: V2 CInt -buttonWidth, buttonHeight :: CInt -buttonSize@(V2 buttonWidth buttonHeight) = V2 300 200 - -handleEvent :: Point V2 CInt -> SDL.EventPayload -> Button -> Button -handleEvent mousePos ev (Button buttonPos _) = - let inside = and ((>=) <$> mousePos <*> buttonPos) && - and ((<=) <$> mousePos <*> buttonPos + P buttonSize) - sprite - | inside = case ev of - SDL.MouseButtonEvent e - | SDL.mouseButtonEventMotion e == SDL.Pressed -> MouseDown - | SDL.mouseButtonEventMotion e == SDL.Released -> MouseUp - | otherwise -> MouseOver - _ -> MouseOver - | otherwise = MouseOut - - in Button buttonPos sprite - -renderButton :: SDL.Renderer -> Texture -> Button -> IO () -renderButton r spriteSheet (Button xy sprite) = - renderTexture r spriteSheet xy (Just spriteClipRect) Nothing Nothing Nothing - where - spriteClipRect = - let i = case sprite of - MouseOut -> 0 - MouseOver -> 1 - MouseDown -> 2 - MouseUp -> 3 - in SDL.Rectangle (P (V2 0 (i * 200))) (V2 300 200) - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedVSyncRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - buttonSpriteSheet <- loadTexture renderer "examples/lazyfoo/button.bmp" - - let loop buttons = do - events <- SDL.pollEvents - mousePos <- SDL.getAbsoluteMouseLocation - - let (Any quit, Endo updateButton) = - foldMap (\case - SDL.QuitEvent -> (Any True, mempty) - e -> (mempty, Endo (handleEvent mousePos e))) $ - map SDL.eventPayload events - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - let buttons' = map updateButton buttons - for_ buttons' (renderButton renderer buttonSpriteSheet) - - SDL.present renderer - - unless quit (loop buttons') - - loop (let newButton xy = Button xy MouseOut - in [ newButton (P (V2 0 0)) - , newButton (P (V2 (screenWidth - buttonWidth) 0)) - , newButton (P (V2 0 (screenHeight - buttonHeight))) - , newButton (P (V2 screenWidth screenHeight - buttonSize)) - ]) - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson17 (main) where++import Prelude hiding (foldl1, and)+import Control.Monad+import Data.Foldable+import Data.Monoid+import Data.Maybe+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++data Texture = Texture SDL.Texture (V2 CInt)++loadTexture :: SDL.Renderer -> FilePath -> IO Texture+loadTexture r filePath = do+ surface <- getDataFileName filePath >>= SDL.loadBMP+ size <- SDL.surfaceDimensions surface+ let key = V4 0 maxBound maxBound maxBound+ SDL.surfaceColorKey surface $= Just key+ t <- SDL.createTextureFromSurface r surface+ SDL.freeSurface surface+ return (Texture t size)++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO ()+renderTexture r (Texture t size) xy clip theta center flips =+ let dstSize =+ maybe size (\(SDL.Rectangle _ size') -> size') clip+ in SDL.copyEx r+ t+ clip+ (Just (SDL.Rectangle xy dstSize))+ (fromMaybe 0 theta)+ center+ (fromMaybe (pure False) flips)++data ButtonSprite = MouseOut | MouseOver | MouseDown | MouseUp++data Button = Button (Point V2 CInt) ButtonSprite++buttonSize :: V2 CInt+buttonWidth, buttonHeight :: CInt+buttonSize@(V2 buttonWidth buttonHeight) = V2 300 200++handleEvent :: Point V2 CInt -> SDL.EventPayload -> Button -> Button+handleEvent mousePos ev (Button buttonPos _) =+ let inside = and ((>=) <$> mousePos <*> buttonPos) &&+ and ((<=) <$> mousePos <*> buttonPos + P buttonSize)+ sprite+ | inside = case ev of+ SDL.MouseButtonEvent e+ | SDL.mouseButtonEventMotion e == SDL.Pressed -> MouseDown+ | SDL.mouseButtonEventMotion e == SDL.Released -> MouseUp+ | otherwise -> MouseOver+ _ -> MouseOver+ | otherwise = MouseOut++ in Button buttonPos sprite++renderButton :: SDL.Renderer -> Texture -> Button -> IO ()+renderButton r spriteSheet (Button xy sprite) =+ renderTexture r spriteSheet xy (Just spriteClipRect) Nothing Nothing Nothing+ where+ spriteClipRect =+ let i = case sprite of+ MouseOut -> 0+ MouseOver -> 1+ MouseDown -> 2+ MouseUp -> 3+ in SDL.Rectangle (P (V2 0 (i * 200))) (V2 300 200)++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedVSyncRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ buttonSpriteSheet <- loadTexture renderer "examples/lazyfoo/button.bmp"++ let loop buttons = do+ events <- SDL.pollEvents+ mousePos <- SDL.getAbsoluteMouseLocation++ let (Any quit, Endo updateButton) =+ foldMap (\case+ SDL.QuitEvent -> (Any True, mempty)+ e -> (mempty, Endo (handleEvent mousePos e))) $+ map SDL.eventPayload events++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ let buttons' = map updateButton buttons+ for_ buttons' (renderButton renderer buttonSpriteSheet)++ SDL.present renderer++ unless quit (loop buttons')++ loop (let newButton xy = Button xy MouseOut+ in [ newButton (P (V2 0 0))+ , newButton (P (V2 (screenWidth - buttonWidth) 0))+ , newButton (P (V2 0 (screenHeight - buttonHeight)))+ , newButton (P (V2 screenWidth screenHeight - buttonSize))+ ])++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson18.hs view
@@ -1,105 +1,105 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE MultiWayIf #-} -{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson18 (main) where - -import Prelude hiding (any, mapM_) -import Control.Monad hiding (mapM_) -import Data.Foldable hiding (elem) -import Data.Maybe -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -data Texture = Texture SDL.Texture (V2 CInt) - -loadTexture :: SDL.Renderer -> FilePath -> IO Texture -loadTexture r filePath = do - surface <- getDataFileName filePath >>= SDL.loadBMP - size <- SDL.surfaceDimensions surface - let key = V4 0 maxBound maxBound maxBound - SDL.surfaceColorKey surface $= Just key - t <- SDL.createTextureFromSurface r surface - SDL.freeSurface surface - return (Texture t size) - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO () -renderTexture r (Texture t size) xy clip theta center flips = - let dstSize = - maybe size (\(SDL.Rectangle _ size') -> size') clip - in SDL.copyEx r - t - clip - (Just (SDL.Rectangle xy dstSize)) - (fromMaybe 0 theta) - center - (fromMaybe (pure False) flips) -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedVSyncRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - pressTexture <- loadTexture renderer "examples/lazyfoo/press.bmp" - upTexture <- loadTexture renderer "examples/lazyfoo/up.bmp" - downTexture <- loadTexture renderer "examples/lazyfoo/down.bmp" - leftTexture <- loadTexture renderer "examples/lazyfoo/left.bmp" - rightTexture <- loadTexture renderer "examples/lazyfoo/right.bmp" - - let - loop = do - events <- map SDL.eventPayload <$> SDL.pollEvents - let quit = SDL.QuitEvent `elem` events - - keyMap <- SDL.getKeyboardState - let texture = - if | keyMap SDL.ScancodeUp -> upTexture - | keyMap SDL.ScancodeDown -> downTexture - | keyMap SDL.ScancodeLeft -> leftTexture - | keyMap SDL.ScancodeRight -> rightTexture - | otherwise -> pressTexture - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - renderTexture renderer texture 0 Nothing Nothing Nothing Nothing - - SDL.present renderer - - unless quit loop - - loop - - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson18 (main) where++import Prelude hiding (any, mapM_)+import Control.Monad hiding (mapM_)+import Data.Foldable hiding (elem)+import Data.Maybe+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++data Texture = Texture SDL.Texture (V2 CInt)++loadTexture :: SDL.Renderer -> FilePath -> IO Texture+loadTexture r filePath = do+ surface <- getDataFileName filePath >>= SDL.loadBMP+ size <- SDL.surfaceDimensions surface+ let key = V4 0 maxBound maxBound maxBound+ SDL.surfaceColorKey surface $= Just key+ t <- SDL.createTextureFromSurface r surface+ SDL.freeSurface surface+ return (Texture t size)++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO ()+renderTexture r (Texture t size) xy clip theta center flips =+ let dstSize =+ maybe size (\(SDL.Rectangle _ size') -> size') clip+ in SDL.copyEx r+ t+ clip+ (Just (SDL.Rectangle xy dstSize))+ (fromMaybe 0 theta)+ center+ (fromMaybe (pure False) flips)+main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedVSyncRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ pressTexture <- loadTexture renderer "examples/lazyfoo/press.bmp"+ upTexture <- loadTexture renderer "examples/lazyfoo/up.bmp"+ downTexture <- loadTexture renderer "examples/lazyfoo/down.bmp"+ leftTexture <- loadTexture renderer "examples/lazyfoo/left.bmp"+ rightTexture <- loadTexture renderer "examples/lazyfoo/right.bmp"++ let+ loop = do+ events <- map SDL.eventPayload <$> SDL.pollEvents+ let quit = SDL.QuitEvent `elem` events++ keyMap <- SDL.getKeyboardState+ let texture =+ if | keyMap SDL.ScancodeUp -> upTexture+ | keyMap SDL.ScancodeDown -> downTexture+ | keyMap SDL.ScancodeLeft -> leftTexture+ | keyMap SDL.ScancodeRight -> rightTexture+ | otherwise -> pressTexture++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ renderTexture renderer texture 0 Nothing Nothing Nothing Nothing++ SDL.present renderer++ unless quit loop++ loop++ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson19.hs view
@@ -1,147 +1,147 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE MultiWayIf #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE PatternSynonyms #-} -module Lazyfoo.Lesson19 (main) where - -import Prelude hiding (any, mapM_) -import Control.Monad hiding (mapM_) -import Data.Int -import Data.Maybe -import Data.Monoid -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL -import qualified Data.Vector as V - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -import Data.Foldable -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -joystickDeadZone :: Int16 -joystickDeadZone = 8000 - -data Texture = Texture SDL.Texture (V2 CInt) - -loadTexture :: SDL.Renderer -> FilePath -> IO Texture -loadTexture r filePath = do - surface <- getDataFileName filePath >>= SDL.loadBMP - size <- SDL.surfaceDimensions surface - let key = V4 0 maxBound maxBound maxBound - SDL.surfaceColorKey surface $= Just key - t <- SDL.createTextureFromSurface r surface - SDL.freeSurface surface - return (Texture t size) - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO () -renderTexture r (Texture t size) xy clip theta center flips = - let dstSize = - maybe size (\(SDL.Rectangle _ size') -> size') clip - in SDL.copyEx r - t - clip - (Just (SDL.Rectangle xy dstSize)) - (fromMaybe 0 theta) - center - (fromMaybe (pure False) flips) - -textureSize :: Texture -> V2 CInt -textureSize (Texture _ sz) = sz - -getJoystick :: IO SDL.Joystick -getJoystick = do - joysticks <- SDL.availableJoysticks - joystick <- if V.length joysticks == 0 - then error "No joysticks connected!" - else return (joysticks V.! 0) - - SDL.openJoystick joystick - - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo, SDL.InitJoystick] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedVSyncRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - arrowTexture <- loadTexture renderer "examples/lazyfoo/arrow.bmp" - - joystick <- getJoystick - joystickID <- SDL.getJoystickID joystick - - let loop (xDir', yDir') = do - events <- SDL.pollEvents - - let (Any quit, Last newDir) = - foldMap (\case - SDL.QuitEvent -> (Any True, mempty) - SDL.KeyboardEvent e -> - if | SDL.keyboardEventKeyMotion e == SDL.Pressed -> - case SDL.keysymScancode (SDL.keyboardEventKeysym e) of - SDL.ScancodeEscape -> (Any True, mempty) - _ -> mempty - | otherwise -> mempty - SDL.JoyAxisEvent e -> - if | SDL.joyAxisEventWhich e == joystickID -> - (\x -> (mempty, Last $ Just x)) $ - case SDL.joyAxisEventAxis e of - 0 -> if | SDL.joyAxisEventValue e < -joystickDeadZone -> (-1, yDir') - | SDL.joyAxisEventValue e > joystickDeadZone -> (1, yDir') - | otherwise -> (0, yDir') - 1 -> if | SDL.joyAxisEventValue e < -joystickDeadZone -> (xDir', -1) - | SDL.joyAxisEventValue e > joystickDeadZone -> (xDir', 1) - | otherwise -> (xDir', 0) - _ -> (xDir', yDir') - | otherwise -> mempty - _ -> mempty) $ - map SDL.eventPayload events - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - let dir@(xDir, yDir) = fromMaybe (xDir', yDir') newDir - phi = if xDir == 0 && yDir == 0 - then 0 - else atan2 yDir xDir * (180.0 / pi) - - renderTexture renderer arrowTexture (P (fmap (`div` 2) (V2 screenWidth screenHeight) - fmap (`div` 2) (textureSize arrowTexture))) Nothing (Just phi) Nothing Nothing - - SDL.present renderer - - unless quit $ loop dir - - loop (0, 0) - - SDL.closeJoystick joystick - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+module Lazyfoo.Lesson19 (main) where++import Prelude hiding (any, mapM_)+import Control.Monad hiding (mapM_)+import Data.Int+import Data.Maybe+import Data.Monoid+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL+import qualified Data.Vector as V++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+import Data.Foldable+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++joystickDeadZone :: Int16+joystickDeadZone = 8000++data Texture = Texture SDL.Texture (V2 CInt)++loadTexture :: SDL.Renderer -> FilePath -> IO Texture+loadTexture r filePath = do+ surface <- getDataFileName filePath >>= SDL.loadBMP+ size <- SDL.surfaceDimensions surface+ let key = V4 0 maxBound maxBound maxBound+ SDL.surfaceColorKey surface $= Just key+ t <- SDL.createTextureFromSurface r surface+ SDL.freeSurface surface+ return (Texture t size)++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO ()+renderTexture r (Texture t size) xy clip theta center flips =+ let dstSize =+ maybe size (\(SDL.Rectangle _ size') -> size') clip+ in SDL.copyEx r+ t+ clip+ (Just (SDL.Rectangle xy dstSize))+ (fromMaybe 0 theta)+ center+ (fromMaybe (pure False) flips)++textureSize :: Texture -> V2 CInt+textureSize (Texture _ sz) = sz++getJoystick :: IO SDL.Joystick+getJoystick = do+ joysticks <- SDL.availableJoysticks+ joystick <- if V.length joysticks == 0+ then error "No joysticks connected!"+ else return (joysticks V.! 0)++ SDL.openJoystick joystick+++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo, SDL.InitJoystick]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedVSyncRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ arrowTexture <- loadTexture renderer "examples/lazyfoo/arrow.bmp"++ joystick <- getJoystick+ joystickID <- SDL.getJoystickID joystick++ let loop (xDir', yDir') = do+ events <- SDL.pollEvents++ let (Any quit, Last newDir) =+ foldMap (\case+ SDL.QuitEvent -> (Any True, mempty)+ SDL.KeyboardEvent e ->+ if | SDL.keyboardEventKeyMotion e == SDL.Pressed ->+ case SDL.keysymScancode (SDL.keyboardEventKeysym e) of+ SDL.ScancodeEscape -> (Any True, mempty)+ _ -> mempty+ | otherwise -> mempty+ SDL.JoyAxisEvent e ->+ if | SDL.joyAxisEventWhich e == joystickID ->+ (\x -> (mempty, Last $ Just x)) $+ case SDL.joyAxisEventAxis e of+ 0 -> if | SDL.joyAxisEventValue e < -joystickDeadZone -> (-1, yDir')+ | SDL.joyAxisEventValue e > joystickDeadZone -> (1, yDir')+ | otherwise -> (0, yDir')+ 1 -> if | SDL.joyAxisEventValue e < -joystickDeadZone -> (xDir', -1)+ | SDL.joyAxisEventValue e > joystickDeadZone -> (xDir', 1)+ | otherwise -> (xDir', 0)+ _ -> (xDir', yDir')+ | otherwise -> mempty+ _ -> mempty) $+ map SDL.eventPayload events++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ let dir@(xDir, yDir) = fromMaybe (xDir', yDir') newDir+ phi = if xDir == 0 && yDir == 0+ then 0+ else atan2 yDir xDir * (180.0 / pi)++ renderTexture renderer arrowTexture (P (fmap (`div` 2) (V2 screenWidth screenHeight) - fmap (`div` 2) (textureSize arrowTexture))) Nothing (Just phi) Nothing Nothing++ SDL.present renderer++ unless quit $ loop dir++ loop (0, 0)++ SDL.closeJoystick joystick++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson20.hs view
@@ -1,129 +1,129 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE MultiWayIf #-} -{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson20 (main) where - -import Prelude hiding (any, mapM_) -import Control.Monad hiding (mapM_) -import Data.Maybe -import Data.Monoid -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import SDL.Haptic -import qualified SDL -import qualified Data.Vector as V - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -import Data.Foldable -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -data Texture = Texture SDL.Texture (V2 CInt) - -loadTexture :: SDL.Renderer -> FilePath -> IO Texture -loadTexture r filePath = do - surface <- getDataFileName filePath >>= SDL.loadBMP - size <- SDL.surfaceDimensions surface - let key = V4 0 maxBound maxBound maxBound - SDL.colorKey surface $= Just key - t <- SDL.createTextureFromSurface r surface - SDL.freeSurface surface - return (Texture t size) - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO () -renderTexture r (Texture t size) xy clip theta center flips = - let dstSize = - maybe size (\(SDL.Rectangle _ size') -> size') clip - in SDL.renderCopyEx r - t - clip - (Just (SDL.Rectangle xy dstSize)) - (fromMaybe 0 theta) - center - (fromMaybe (pure False) flips) - -getJoystick :: IO SDL.Joystick -getJoystick = do - joysticks <- SDL.availableJoysticks - joystick <- if V.length joysticks == 0 - then error "No joysticks connected!" - else return (joysticks V.! 0) - - SDL.openJoystick joystick - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo, SDL.InitJoystick, SDL.InitHaptic] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedVSyncRenderer - , SDL.rendererTargetTexture = False - } - - SDL.renderDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - rumbleTexture <- loadTexture renderer "examples/lazyfoo/rumble.bmp" - - joystick <- getJoystick - hapticDevice <- SDL.openHaptic (SDL.OpenHapticJoystick joystick) - SDL.hapticRumbleInit hapticDevice - - let loop = do - events <- SDL.pollEvents - - let (Any quit, Any buttonDown) = - foldMap (\case - SDL.QuitEvent -> (Any True, mempty) - SDL.KeyboardEvent e -> - if | SDL.keyboardEventKeyMotion e == SDL.Pressed -> - case SDL.keysymScancode (SDL.keyboardEventKeysym e) of - SDL.ScancodeEscape -> (Any True, mempty) - _ -> mempty - | otherwise -> mempty - SDL.JoyButtonEvent e -> - if | SDL.joyButtonEventState e /= 0 -> (mempty, Any True) - | otherwise -> mempty - _ -> mempty) $ - map SDL.eventPayload events - - when buttonDown $ SDL.hapticRumblePlay hapticDevice 0.75 500 - - SDL.renderDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.renderClear renderer - - renderTexture renderer rumbleTexture (P $ V2 0 0) Nothing Nothing Nothing Nothing - - SDL.renderPresent renderer - - unless quit loop - - loop - - SDL.closeHaptic hapticDevice - SDL.closeJoystick joystick - - SDL.destroyRenderer renderer - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson20 (main) where++import Prelude hiding (any, mapM_)+import Control.Monad hiding (mapM_)+import Data.Maybe+import Data.Monoid+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import SDL.Haptic+import qualified SDL+import qualified Data.Vector as V++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+import Data.Foldable+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++data Texture = Texture SDL.Texture (V2 CInt)++loadTexture :: SDL.Renderer -> FilePath -> IO Texture+loadTexture r filePath = do+ surface <- getDataFileName filePath >>= SDL.loadBMP+ size <- SDL.surfaceDimensions surface+ let key = V4 0 maxBound maxBound maxBound+ SDL.colorKey surface $= Just key+ t <- SDL.createTextureFromSurface r surface+ SDL.freeSurface surface+ return (Texture t size)++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO ()+renderTexture r (Texture t size) xy clip theta center flips =+ let dstSize =+ maybe size (\(SDL.Rectangle _ size') -> size') clip+ in SDL.renderCopyEx r+ t+ clip+ (Just (SDL.Rectangle xy dstSize))+ (fromMaybe 0 theta)+ center+ (fromMaybe (pure False) flips)++getJoystick :: IO SDL.Joystick+getJoystick = do+ joysticks <- SDL.availableJoysticks+ joystick <- if V.length joysticks == 0+ then error "No joysticks connected!"+ else return (joysticks V.! 0)++ SDL.openJoystick joystick++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo, SDL.InitJoystick, SDL.InitHaptic]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedVSyncRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.renderDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ rumbleTexture <- loadTexture renderer "examples/lazyfoo/rumble.bmp"++ joystick <- getJoystick+ hapticDevice <- SDL.openHaptic (SDL.OpenHapticJoystick joystick)+ SDL.hapticRumbleInit hapticDevice++ let loop = do+ events <- SDL.pollEvents++ let (Any quit, Any buttonDown) =+ foldMap (\case+ SDL.QuitEvent -> (Any True, mempty)+ SDL.KeyboardEvent e ->+ if | SDL.keyboardEventKeyMotion e == SDL.Pressed ->+ case SDL.keysymScancode (SDL.keyboardEventKeysym e) of+ SDL.ScancodeEscape -> (Any True, mempty)+ _ -> mempty+ | otherwise -> mempty+ SDL.JoyButtonEvent e ->+ if | SDL.joyButtonEventState e /= 0 -> (mempty, Any True)+ | otherwise -> mempty+ _ -> mempty) $+ map SDL.eventPayload events++ when buttonDown $ SDL.hapticRumblePlay hapticDevice 0.75 500++ SDL.renderDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.renderClear renderer++ renderTexture renderer rumbleTexture (P $ V2 0 0) Nothing Nothing Nothing Nothing++ SDL.renderPresent renderer++ unless quit loop++ loop++ SDL.closeHaptic hapticDevice+ SDL.closeJoystick joystick++ SDL.destroyRenderer renderer+ SDL.destroyWindow window+ SDL.quit
examples/lazyfoo/Lesson43.hs view
@@ -1,109 +1,109 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE OverloadedStrings #-} -module Lazyfoo.Lesson43 (main) where - -import Prelude hiding (any, mapM_) -import Control.Monad hiding (mapM_) -import Data.Foldable hiding (elem) -import Data.Maybe -import Foreign.C.Types -import SDL.Vect -import SDL (($=)) -import qualified SDL - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -data Texture = Texture SDL.Texture (V2 CInt) - -createBlank :: SDL.Renderer -> V2 CInt -> SDL.TextureAccess -> IO Texture -createBlank r sz access = Texture <$> SDL.createTexture r SDL.RGBA8888 access sz <*> pure sz - -renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO () -renderTexture r (Texture t size) xy clip theta center flips = - let dstSize = - maybe size (\(SDL.Rectangle _ size') -> size') clip - in SDL.copyEx r - t - clip - (Just (SDL.Rectangle xy dstSize)) - (fromMaybe 0 theta) - center - (fromMaybe (pure False) flips) - -setAsRenderTarget :: SDL.Renderer -> Maybe Texture -> IO () -setAsRenderTarget r Nothing = SDL.rendererRenderTarget r $= Nothing -setAsRenderTarget r (Just (Texture t _)) = SDL.rendererRenderTarget r $= Just t - -main :: IO () -main = do - SDL.initialize [SDL.InitVideo] - - SDL.HintRenderScaleQuality $= SDL.ScaleLinear - do renderQuality <- SDL.get SDL.HintRenderScaleQuality - when (renderQuality /= SDL.ScaleLinear) $ - putStrLn "Warning: Linear texture filtering not enabled!" - - window <- - SDL.createWindow - "SDL Tutorial" - SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight} - SDL.showWindow window - - renderer <- - SDL.createRenderer - window - (-1) - SDL.RendererConfig - { SDL.rendererType = SDL.AcceleratedVSyncRenderer - , SDL.rendererTargetTexture = False - } - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - - targetTexture <- createBlank renderer (V2 screenWidth screenHeight) SDL.TextureAccessTarget - - let - screenCenter = P (V2 (screenWidth `div` 2) (screenHeight `div` 2)) - - loop theta = do - events <- map SDL.eventPayload <$> SDL.pollEvents - let quit = SDL.QuitEvent `elem` events - - setAsRenderTarget renderer (Just targetTexture) - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - SDL.clear renderer - - SDL.rendererDrawColor renderer $= V4 maxBound 0 0 maxBound - SDL.fillRect renderer (Just $ SDL.Rectangle (P $ V2 (screenWidth `div` 4) (screenHeight `div` 4)) - (V2 (screenWidth `div` 2) (screenHeight `div` 2))) - - SDL.rendererDrawColor renderer $= V4 0 0 maxBound maxBound - SDL.drawRect renderer (Just (SDL.Rectangle (P $ V2 (screenWidth `div` 6) (screenHeight `div` 6)) - (V2 (screenWidth * 2 `div` 3) (screenHeight * 2 `div` 3)))) - - SDL.rendererDrawColor renderer $= V4 0 maxBound 0 maxBound - SDL.drawLine renderer (P (V2 0 (screenHeight `div` 2))) (P (V2 screenWidth (screenHeight `div` 2))) - - SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound - for_ [0, 4 .. screenHeight] $ \i -> - SDL.drawPoint renderer (P (V2 (screenWidth `div` 2) i)) - - setAsRenderTarget renderer Nothing - - renderTexture renderer targetTexture 0 Nothing (Just (fromIntegral theta)) (Just screenCenter) Nothing - - SDL.present renderer - - unless quit (loop (theta + 2 `mod` 360)) - - loop (0 :: Int) - - SDL.destroyWindow window - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+module Lazyfoo.Lesson43 (main) where++import Prelude hiding (any, mapM_)+import Control.Monad hiding (mapM_)+import Data.Foldable hiding (elem)+import Data.Maybe+import Foreign.C.Types+import SDL.Vect+import SDL (($=))+import qualified SDL++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++data Texture = Texture SDL.Texture (V2 CInt)++createBlank :: SDL.Renderer -> V2 CInt -> SDL.TextureAccess -> IO Texture+createBlank r sz access = Texture <$> SDL.createTexture r SDL.RGBA8888 access sz <*> pure sz++renderTexture :: SDL.Renderer -> Texture -> Point V2 CInt -> Maybe (SDL.Rectangle CInt) -> Maybe CDouble -> Maybe (Point V2 CInt) -> Maybe (V2 Bool) -> IO ()+renderTexture r (Texture t size) xy clip theta center flips =+ let dstSize =+ maybe size (\(SDL.Rectangle _ size') -> size') clip+ in SDL.copyEx r+ t+ clip+ (Just (SDL.Rectangle xy dstSize))+ (fromMaybe 0 theta)+ center+ (fromMaybe (pure False) flips)++setAsRenderTarget :: SDL.Renderer -> Maybe Texture -> IO ()+setAsRenderTarget r Nothing = SDL.rendererRenderTarget r $= Nothing+setAsRenderTarget r (Just (Texture t _)) = SDL.rendererRenderTarget r $= Just t++main :: IO ()+main = do+ SDL.initialize [SDL.InitVideo]++ SDL.HintRenderScaleQuality $= SDL.ScaleLinear+ do renderQuality <- SDL.get SDL.HintRenderScaleQuality+ when (renderQuality /= SDL.ScaleLinear) $+ putStrLn "Warning: Linear texture filtering not enabled!"++ window <-+ SDL.createWindow+ "SDL Tutorial"+ SDL.defaultWindow {SDL.windowInitialSize = V2 screenWidth screenHeight}+ SDL.showWindow window++ renderer <-+ SDL.createRenderer+ window+ (-1)+ SDL.RendererConfig+ { SDL.rendererType = SDL.AcceleratedVSyncRenderer+ , SDL.rendererTargetTexture = False+ }++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound++ targetTexture <- createBlank renderer (V2 screenWidth screenHeight) SDL.TextureAccessTarget++ let+ screenCenter = P (V2 (screenWidth `div` 2) (screenHeight `div` 2))++ loop theta = do+ events <- map SDL.eventPayload <$> SDL.pollEvents+ let quit = SDL.QuitEvent `elem` events++ setAsRenderTarget renderer (Just targetTexture)++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ SDL.clear renderer++ SDL.rendererDrawColor renderer $= V4 maxBound 0 0 maxBound+ SDL.fillRect renderer (Just $ SDL.Rectangle (P $ V2 (screenWidth `div` 4) (screenHeight `div` 4))+ (V2 (screenWidth `div` 2) (screenHeight `div` 2)))++ SDL.rendererDrawColor renderer $= V4 0 0 maxBound maxBound+ SDL.drawRect renderer (Just (SDL.Rectangle (P $ V2 (screenWidth `div` 6) (screenHeight `div` 6))+ (V2 (screenWidth * 2 `div` 3) (screenHeight * 2 `div` 3))))++ SDL.rendererDrawColor renderer $= V4 0 maxBound 0 maxBound+ SDL.drawLine renderer (P (V2 0 (screenHeight `div` 2))) (P (V2 screenWidth (screenHeight `div` 2)))++ SDL.rendererDrawColor renderer $= V4 maxBound maxBound maxBound maxBound+ for_ [0, 4 .. screenHeight] $ \i ->+ SDL.drawPoint renderer (P (V2 (screenWidth `div` 2) i))++ setAsRenderTarget renderer Nothing++ renderTexture renderer targetTexture 0 Nothing (Just (fromIntegral theta)) (Just screenCenter) Nothing++ SDL.present renderer++ unless quit (loop (theta + 2 `mod` 360))++ loop (0 :: Int)++ SDL.destroyWindow window+ SDL.quit
examples/twinklebear/Lesson01.hs view
@@ -1,38 +1,38 @@-{-# LANGUAGE OverloadedStrings #-} -module TwinkleBear.Lesson01 (main) where - - -import Prelude hiding (init) -import SDL.Vect -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -main :: IO () -main = do - SDL.initializeAll - - let winConfig = SDL.defaultWindow { SDL.windowPosition = SDL.Absolute (P (V2 100 100)) - , SDL.windowInitialSize = V2 640 480 } - - rdrConfig = SDL.RendererConfig { SDL.rendererType = SDL.AcceleratedVSyncRenderer - , SDL.rendererTargetTexture = True } - - window <- SDL.createWindow "Hello World!" winConfig - renderer <- SDL.createRenderer window (-1) rdrConfig - - bmp <- getDataFileName "examples/twinklebear/hello.bmp" >>= SDL.loadBMP - tex <- SDL.createTextureFromSurface renderer bmp - SDL.freeSurface bmp - - SDL.clear renderer - SDL.copy renderer tex Nothing Nothing - SDL.present renderer - - SDL.delay 2000 - - SDL.destroyTexture tex - SDL.destroyRenderer renderer - SDL.destroyWindow window - - SDL.quit +{-# LANGUAGE OverloadedStrings #-}+module TwinkleBear.Lesson01 (main) where+++import Prelude hiding (init)+import SDL.Vect+import qualified SDL++import Paths_sdl2 (getDataFileName)++main :: IO ()+main = do+ SDL.initializeAll++ let winConfig = SDL.defaultWindow { SDL.windowPosition = SDL.Absolute (P (V2 100 100))+ , SDL.windowInitialSize = V2 640 480 }++ rdrConfig = SDL.RendererConfig { SDL.rendererType = SDL.AcceleratedVSyncRenderer+ , SDL.rendererTargetTexture = True }++ window <- SDL.createWindow "Hello World!" winConfig+ renderer <- SDL.createRenderer window (-1) rdrConfig++ bmp <- getDataFileName "examples/twinklebear/hello.bmp" >>= SDL.loadBMP+ tex <- SDL.createTextureFromSurface renderer bmp+ SDL.freeSurface bmp++ SDL.clear renderer+ SDL.copy renderer tex Nothing Nothing+ SDL.present renderer++ SDL.delay 2000++ SDL.destroyTexture tex+ SDL.destroyRenderer renderer+ SDL.destroyWindow window++ SDL.quit
examples/twinklebear/Lesson02.hs view
@@ -1,75 +1,75 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE OverloadedStrings #-} -module TwinkleBear.Lesson02 (main) where - -import Prelude hiding (init) -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - - -data RenderPos = Centered | At (Point V2 CInt) - - -loadTexture :: SDL.Renderer -> FilePath -> IO SDL.Texture -loadTexture renderer path = do - bmp <- SDL.loadBMP path - SDL.createTextureFromSurface renderer bmp <* SDL.freeSurface bmp - - -renderTexture :: SDL.Renderer -> SDL.Texture -> RenderPos -> IO () -renderTexture renderer tex pos = do - ti <- SDL.queryTexture tex - let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti) - pos' = case pos of - At p -> p - Centered -> let cntr a b = (a - b) `div` 2 - in P $ V2 (cntr screenWidth w) (cntr screenHeight h) - extent = V2 w h - SDL.copy renderer tex Nothing (Just $ SDL.Rectangle pos' extent) - - -renderTiledBackground :: SDL.Renderer -> SDL.Texture -> IO () -renderTiledBackground renderer tex = do - ti <- SDL.queryTexture tex - let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti) - grid = [ At . P $ V2 (x*w) (y*h) | x <- [ 0..screenWidth `div` w ], - y <- [ 0..screenHeight `div` h ]] - forM_ grid (renderTexture renderer tex) - - -main :: IO () -main = do - SDL.initializeAll - - let winConfig = SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight } - rdrConfig = SDL.defaultRenderer { SDL.rendererType = SDL.AcceleratedRenderer } - - window <- SDL.createWindow "Lesson 2" winConfig - renderer <- SDL.createRenderer window (-1) rdrConfig - - background <- getDataFileName "examples/twinklebear/background.bmp" >>= loadTexture renderer - image <- getDataFileName "examples/twinklebear/smiley.bmp" >>= loadTexture renderer - - renderTiledBackground renderer background - renderTexture renderer image Centered - SDL.present renderer - - SDL.delay 2000 - - SDL.destroyTexture image - SDL.destroyTexture background - SDL.destroyRenderer renderer - SDL.destroyWindow window - - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-}+module TwinkleBear.Lesson02 (main) where++import Prelude hiding (init)+import Control.Monad+import Foreign.C.Types+import SDL.Vect+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)+++data RenderPos = Centered | At (Point V2 CInt)+++loadTexture :: SDL.Renderer -> FilePath -> IO SDL.Texture+loadTexture renderer path = do+ bmp <- SDL.loadBMP path+ SDL.createTextureFromSurface renderer bmp <* SDL.freeSurface bmp+++renderTexture :: SDL.Renderer -> SDL.Texture -> RenderPos -> IO ()+renderTexture renderer tex pos = do+ ti <- SDL.queryTexture tex+ let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti)+ pos' = case pos of+ At p -> p+ Centered -> let cntr a b = (a - b) `div` 2+ in P $ V2 (cntr screenWidth w) (cntr screenHeight h)+ extent = V2 w h+ SDL.copy renderer tex Nothing (Just $ SDL.Rectangle pos' extent)+++renderTiledBackground :: SDL.Renderer -> SDL.Texture -> IO ()+renderTiledBackground renderer tex = do+ ti <- SDL.queryTexture tex+ let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti)+ grid = [ At . P $ V2 (x*w) (y*h) | x <- [ 0..screenWidth `div` w ],+ y <- [ 0..screenHeight `div` h ]]+ forM_ grid (renderTexture renderer tex)+++main :: IO ()+main = do+ SDL.initializeAll++ let winConfig = SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }+ rdrConfig = SDL.defaultRenderer { SDL.rendererType = SDL.AcceleratedRenderer }++ window <- SDL.createWindow "Lesson 2" winConfig+ renderer <- SDL.createRenderer window (-1) rdrConfig++ background <- getDataFileName "examples/twinklebear/background.bmp" >>= loadTexture renderer+ image <- getDataFileName "examples/twinklebear/smiley.bmp" >>= loadTexture renderer++ renderTiledBackground renderer background+ renderTexture renderer image Centered+ SDL.present renderer++ SDL.delay 2000++ SDL.destroyTexture image+ SDL.destroyTexture background+ SDL.destroyRenderer renderer+ SDL.destroyWindow window++ SDL.quit
examples/twinklebear/Lesson04.hs view
@@ -1,72 +1,72 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE OverloadedStrings #-} -module TwinkleBear.Lesson04 (main) where - - -import Prelude hiding (init) -import Control.Monad -import Foreign.C.Types -import SDL.Vect -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - - -data RenderPos = Centered | At (Point V2 CInt) - - -loadTexture :: SDL.Renderer -> FilePath -> IO SDL.Texture -loadTexture renderer path = do - bmp <- SDL.loadBMP path - SDL.createTextureFromSurface renderer bmp <* SDL.freeSurface bmp - - -renderTexture :: SDL.Renderer -> SDL.Texture -> RenderPos -> IO () -renderTexture renderer tex pos = do - ti <- SDL.queryTexture tex - let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti) - pos' = case pos of - At p -> p - Centered -> let cntr a b = (a - b) `div` 2 - in P $ V2 (cntr screenWidth w) (cntr screenHeight h) - extent = V2 w h - SDL.copy renderer tex Nothing (Just $ SDL.Rectangle pos' extent) - - -main :: IO () -main = do - SDL.initialize [ SDL.InitVideo ] - - let winConfig = SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight } - - window <- SDL.createWindow "Lesson 4" winConfig - renderer <- SDL.createRenderer window (-1) SDL.defaultRenderer - - image <- getDataFileName "examples/twinklebear/event-driven.bmp" >>= loadTexture renderer - - let loop = do - renderTexture renderer image Centered - SDL.present renderer - - quit <- fmap (\ev -> case SDL.eventPayload ev of - SDL.QuitEvent -> True - SDL.KeyboardEvent e -> SDL.keyboardEventKeyMotion e == SDL.Pressed - SDL.MouseButtonEvent e -> SDL.mouseButtonEventMotion e == SDL.Pressed - _ -> False) SDL.waitEvent - - unless quit loop - - loop - - SDL.destroyTexture image - SDL.destroyRenderer renderer - SDL.destroyWindow window - - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-}+module TwinkleBear.Lesson04 (main) where+++import Prelude hiding (init)+import Control.Monad+import Foreign.C.Types+import SDL.Vect+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)+++data RenderPos = Centered | At (Point V2 CInt)+++loadTexture :: SDL.Renderer -> FilePath -> IO SDL.Texture+loadTexture renderer path = do+ bmp <- SDL.loadBMP path+ SDL.createTextureFromSurface renderer bmp <* SDL.freeSurface bmp+++renderTexture :: SDL.Renderer -> SDL.Texture -> RenderPos -> IO ()+renderTexture renderer tex pos = do+ ti <- SDL.queryTexture tex+ let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti)+ pos' = case pos of+ At p -> p+ Centered -> let cntr a b = (a - b) `div` 2+ in P $ V2 (cntr screenWidth w) (cntr screenHeight h)+ extent = V2 w h+ SDL.copy renderer tex Nothing (Just $ SDL.Rectangle pos' extent)+++main :: IO ()+main = do+ SDL.initialize [ SDL.InitVideo ]++ let winConfig = SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }++ window <- SDL.createWindow "Lesson 4" winConfig+ renderer <- SDL.createRenderer window (-1) SDL.defaultRenderer++ image <- getDataFileName "examples/twinklebear/event-driven.bmp" >>= loadTexture renderer++ let loop = do+ renderTexture renderer image Centered+ SDL.present renderer++ quit <- fmap (\ev -> case SDL.eventPayload ev of+ SDL.QuitEvent -> True+ SDL.KeyboardEvent e -> SDL.keyboardEventKeyMotion e == SDL.Pressed+ SDL.MouseButtonEvent e -> SDL.mouseButtonEventMotion e == SDL.Pressed+ _ -> False) SDL.waitEvent++ unless quit loop++ loop++ SDL.destroyTexture image+ SDL.destroyRenderer renderer+ SDL.destroyWindow window++ SDL.quit
examples/twinklebear/Lesson04a.hs view
@@ -1,92 +1,92 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE MultiWayIf #-} -{-# LANGUAGE PatternSynonyms #-} -module TwinkleBear.Lesson04a (main) where - - -import Prelude hiding (init) -import Control.Monad -import Data.Monoid -import Foreign.C.Types -import SDL.Vect -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -import Data.Foldable -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - - -data RenderPos = Centered | At (Point V2 CInt) - - -loadTexture :: SDL.Renderer -> FilePath -> IO SDL.Texture -loadTexture renderer path = do - bmp <- SDL.loadBMP path - SDL.createTextureFromSurface renderer bmp <* SDL.freeSurface bmp - - -renderTexture :: SDL.Renderer -> SDL.Texture -> RenderPos -> IO () -renderTexture renderer tex pos = do - ti <- SDL.queryTexture tex - let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti) - pos' = case pos of - At p -> p - Centered -> let cntr a b = (a - b) `div` 2 - in P $ V2 (cntr screenWidth w) (cntr screenHeight h) - extent = V2 w h - SDL.copy renderer tex Nothing (Just $ SDL.Rectangle pos' extent) - - -main :: IO () -main = do - SDL.initialize [ SDL.InitVideo ] - - let winConfig = SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight } - - window <- SDL.createWindow "Lesson 4a" winConfig - renderer <- SDL.createRenderer window (-1) SDL.defaultRenderer - - image <- getDataFileName "examples/twinklebear/ladybeetle.bmp" >>= loadTexture renderer - - let loop imgPos = do - events <- SDL.pollEvents - - let (Any quit, Sum posDelta) = - foldMap (\case - SDL.QuitEvent -> (Any True, mempty) - SDL.KeyboardEvent e -> - if | SDL.keyboardEventKeyMotion e == SDL.Pressed -> - case SDL.keysymScancode (SDL.keyboardEventKeysym e) of - SDL.ScancodeUp -> (Any False, Sum (V2 0 (-10))) - SDL.ScancodeDown -> (Any False, Sum (V2 0 10 )) - SDL.ScancodeLeft -> (Any False, Sum (V2 (-10) 0 )) - SDL.ScancodeRight -> (Any False, Sum (V2 10 0 )) - SDL.ScancodeQ -> (Any True, mempty) - _ -> mempty - | otherwise -> mempty - _ -> mempty) $ - map SDL.eventPayload events - - imgPos' = imgPos + posDelta - - SDL.clear renderer - renderTexture renderer image $ At (P imgPos') - SDL.present renderer - - unless quit $ loop imgPos' - - loop $ V2 100 100 - - SDL.destroyTexture image - SDL.destroyRenderer renderer - SDL.destroyWindow window - - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE PatternSynonyms #-}+module TwinkleBear.Lesson04a (main) where+++import Prelude hiding (init)+import Control.Monad+import Data.Monoid+import Foreign.C.Types+import SDL.Vect+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+import Data.Foldable+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)+++data RenderPos = Centered | At (Point V2 CInt)+++loadTexture :: SDL.Renderer -> FilePath -> IO SDL.Texture+loadTexture renderer path = do+ bmp <- SDL.loadBMP path+ SDL.createTextureFromSurface renderer bmp <* SDL.freeSurface bmp+++renderTexture :: SDL.Renderer -> SDL.Texture -> RenderPos -> IO ()+renderTexture renderer tex pos = do+ ti <- SDL.queryTexture tex+ let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti)+ pos' = case pos of+ At p -> p+ Centered -> let cntr a b = (a - b) `div` 2+ in P $ V2 (cntr screenWidth w) (cntr screenHeight h)+ extent = V2 w h+ SDL.copy renderer tex Nothing (Just $ SDL.Rectangle pos' extent)+++main :: IO ()+main = do+ SDL.initialize [ SDL.InitVideo ]++ let winConfig = SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }++ window <- SDL.createWindow "Lesson 4a" winConfig+ renderer <- SDL.createRenderer window (-1) SDL.defaultRenderer++ image <- getDataFileName "examples/twinklebear/ladybeetle.bmp" >>= loadTexture renderer++ let loop imgPos = do+ events <- SDL.pollEvents++ let (Any quit, Sum posDelta) =+ foldMap (\case+ SDL.QuitEvent -> (Any True, mempty)+ SDL.KeyboardEvent e ->+ if | SDL.keyboardEventKeyMotion e == SDL.Pressed ->+ case SDL.keysymScancode (SDL.keyboardEventKeysym e) of+ SDL.ScancodeUp -> (Any False, Sum (V2 0 (-10)))+ SDL.ScancodeDown -> (Any False, Sum (V2 0 10 ))+ SDL.ScancodeLeft -> (Any False, Sum (V2 (-10) 0 ))+ SDL.ScancodeRight -> (Any False, Sum (V2 10 0 ))+ SDL.ScancodeQ -> (Any True, mempty)+ _ -> mempty+ | otherwise -> mempty+ _ -> mempty) $+ map SDL.eventPayload events++ imgPos' = imgPos + posDelta++ SDL.clear renderer+ renderTexture renderer image $ At (P imgPos')+ SDL.present renderer++ unless quit $ loop imgPos'++ loop $ V2 100 100++ SDL.destroyTexture image+ SDL.destroyRenderer renderer+ SDL.destroyWindow window++ SDL.quit
examples/twinklebear/Lesson05.hs view
@@ -1,98 +1,98 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE MultiWayIf #-} -{-# LANGUAGE PatternSynonyms #-} -module TwinkleBear.Lesson05 (main) where - -import Prelude hiding (init) -import Control.Applicative -import Control.Monad -import Data.Monoid -import Foreign.C.Types -import SDL.Vect -import qualified SDL - -import Paths_sdl2 (getDataFileName) - -#if !MIN_VERSION_base(4,8,0) -import Data.Foldable -#endif - -screenWidth, screenHeight :: CInt -(screenWidth, screenHeight) = (640, 480) - -spriteWidth, spriteHeight :: CInt -(spriteWidth, spriteHeight) = (100, 100) - - -type ClipRect = Maybe (SDL.Rectangle CInt) - -data RenderPos = Centered | At (Point V2 CInt) - - -loadTexture :: SDL.Renderer -> FilePath -> IO SDL.Texture -loadTexture renderer path = do - bmp <- SDL.loadBMP path - SDL.createTextureFromSurface renderer bmp <* SDL.freeSurface bmp - - -renderTexture :: SDL.Renderer -> SDL.Texture -> ClipRect -> RenderPos -> IO () -renderTexture renderer tex clipRect pos = do - ti <- SDL.queryTexture tex - let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti) - pos' = case pos of - At p -> p - Centered -> let cntr a b = (a - b) `div` 2 - in P $ V2 (cntr screenWidth w) (cntr screenHeight h) - extent = V2 w h - SDL.copy renderer tex clipRect (Just $ SDL.Rectangle pos' extent) - - -main :: IO () -main = do - SDL.initialize [ SDL.InitVideo ] - - let winConfig = SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight } - - window <- SDL.createWindow "Lesson 5" winConfig - renderer <- SDL.createRenderer window (-1) SDL.defaultRenderer - - spriteSheet <- getDataFileName "examples/twinklebear/spritesheet.bmp" >>= loadTexture renderer - let [spriteOne, spriteTwo, spriteThree, spriteFour] = - [ SDL.Rectangle (P (V2 (x * spriteWidth) (y * spriteHeight))) (V2 spriteWidth spriteHeight) - | x <- [0..1], y <- [0..1] ] - - let loop spriteRect = do - events <- SDL.pollEvents - - let (Any quit, Last newSpriteRect) = - foldMap (\case - SDL.QuitEvent -> (Any True, mempty) - SDL.KeyboardEvent e -> - if | SDL.keyboardEventKeyMotion e == SDL.Pressed -> - case SDL.keysymScancode (SDL.keyboardEventKeysym e) of - SDL.Scancode1 -> (Any False, Last (Just spriteOne)) - SDL.Scancode2 -> (Any False, Last (Just spriteTwo)) - SDL.Scancode3 -> (Any False, Last (Just spriteThree)) - SDL.Scancode4 -> (Any False, Last (Just spriteFour)) - SDL.ScancodeQ -> (Any True, mempty) - _ -> mempty - | otherwise -> mempty - _ -> mempty) $ - map SDL.eventPayload events - - spriteRect' = newSpriteRect <|> spriteRect - - SDL.clear renderer - renderTexture renderer spriteSheet spriteRect' Centered - SDL.present renderer - - unless quit $ loop spriteRect' - - loop $ Just spriteOne - - SDL.destroyRenderer renderer - SDL.destroyWindow window - - SDL.quit +{-# LANGUAGE CPP #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE MultiWayIf #-}+{-# LANGUAGE PatternSynonyms #-}+module TwinkleBear.Lesson05 (main) where++import Prelude hiding (init)+import Control.Applicative+import Control.Monad+import Data.Monoid+import Foreign.C.Types+import SDL.Vect+import qualified SDL++import Paths_sdl2 (getDataFileName)++#if !MIN_VERSION_base(4,8,0)+import Data.Foldable+#endif++screenWidth, screenHeight :: CInt+(screenWidth, screenHeight) = (640, 480)++spriteWidth, spriteHeight :: CInt+(spriteWidth, spriteHeight) = (100, 100)+++type ClipRect = Maybe (SDL.Rectangle CInt)++data RenderPos = Centered | At (Point V2 CInt)+++loadTexture :: SDL.Renderer -> FilePath -> IO SDL.Texture+loadTexture renderer path = do+ bmp <- SDL.loadBMP path+ SDL.createTextureFromSurface renderer bmp <* SDL.freeSurface bmp+++renderTexture :: SDL.Renderer -> SDL.Texture -> ClipRect -> RenderPos -> IO ()+renderTexture renderer tex clipRect pos = do+ ti <- SDL.queryTexture tex+ let (w, h) = (SDL.textureWidth ti, SDL.textureHeight ti)+ pos' = case pos of+ At p -> p+ Centered -> let cntr a b = (a - b) `div` 2+ in P $ V2 (cntr screenWidth w) (cntr screenHeight h)+ extent = V2 w h+ SDL.copy renderer tex clipRect (Just $ SDL.Rectangle pos' extent)+++main :: IO ()+main = do+ SDL.initialize [ SDL.InitVideo ]++ let winConfig = SDL.defaultWindow { SDL.windowInitialSize = V2 screenWidth screenHeight }++ window <- SDL.createWindow "Lesson 5" winConfig+ renderer <- SDL.createRenderer window (-1) SDL.defaultRenderer++ spriteSheet <- getDataFileName "examples/twinklebear/spritesheet.bmp" >>= loadTexture renderer+ let [spriteOne, spriteTwo, spriteThree, spriteFour] =+ [ SDL.Rectangle (P (V2 (x * spriteWidth) (y * spriteHeight))) (V2 spriteWidth spriteHeight)+ | x <- [0..1], y <- [0..1] ]++ let loop spriteRect = do+ events <- SDL.pollEvents++ let (Any quit, Last newSpriteRect) =+ foldMap (\case+ SDL.QuitEvent -> (Any True, mempty)+ SDL.KeyboardEvent e ->+ if | SDL.keyboardEventKeyMotion e == SDL.Pressed ->+ case SDL.keysymScancode (SDL.keyboardEventKeysym e) of+ SDL.Scancode1 -> (Any False, Last (Just spriteOne))+ SDL.Scancode2 -> (Any False, Last (Just spriteTwo))+ SDL.Scancode3 -> (Any False, Last (Just spriteThree))+ SDL.Scancode4 -> (Any False, Last (Just spriteFour))+ SDL.ScancodeQ -> (Any True, mempty)+ _ -> mempty+ | otherwise -> mempty+ _ -> mempty) $+ map SDL.eventPayload events++ spriteRect' = newSpriteRect <|> spriteRect++ SDL.clear renderer+ renderTexture renderer spriteSheet spriteRect' Centered+ SDL.present renderer++ unless quit $ loop spriteRect'++ loop $ Just spriteOne++ SDL.destroyRenderer renderer+ SDL.destroyWindow window++ SDL.quit
include/sdlhelper.h view
@@ -1,26 +1,26 @@-#ifndef _HS_SDL2_HELPER_H_ -#define _HS_SDL2_HELPER_H_ - -#include <stddef.h> -#include "SDL.h" - -void SDLHelper_JoystickGetDeviceGUID (int device_index, SDL_JoystickGUID *guid); -void SDLHelper_JoystickGetGUID (SDL_Joystick *joystick, SDL_JoystickGUID *guid); -void SDLHelper_JoystickGetGUIDFromString (const char *pchGUID, SDL_JoystickGUID *guid); -void SDLHelper_JoystickGetGUIDString (const SDL_JoystickGUID *guid, char *gszGUID, int cbGUID); - -void SDLHelper_GameControllerGetBindForAxis (SDL_GameController *gamecontroller, SDL_GameControllerAxis axis, SDL_GameControllerButtonBind *bind); -void SDLHelper_GameControllerGetBindForButton (SDL_GameController *gamecontroller, SDL_GameControllerButton button, SDL_GameControllerButtonBind *bind); -char *SDLHelper_GameControllerMappingForGUID (const SDL_JoystickGUID *guid); - -void SDLHelper_LogMessage (int category, SDL_LogPriority priority, const char *str); - -int SDLHelper_RWclose (SDL_RWops *ctx); -size_t SDLHelper_RWread (SDL_RWops *ctx, void *ptr, size_t size, size_t maxnum); -Sint64 SDLHelper_RWseek (SDL_RWops *ctx, Sint64 offset, int whence); -Sint64 SDLHelper_RWtell (SDL_RWops *ctx); -size_t SDLHelper_RWwrite (SDL_RWops *ctx, const void *ptr, size_t size, size_t num); - -int SDLHelper_SetError(const char *str); - -#endif +#ifndef _HS_SDL2_HELPER_H_+#define _HS_SDL2_HELPER_H_++#include <stddef.h>+#include "SDL.h"++void SDLHelper_JoystickGetDeviceGUID (int device_index, SDL_JoystickGUID *guid);+void SDLHelper_JoystickGetGUID (SDL_Joystick *joystick, SDL_JoystickGUID *guid);+void SDLHelper_JoystickGetGUIDFromString (const char *pchGUID, SDL_JoystickGUID *guid);+void SDLHelper_JoystickGetGUIDString (const SDL_JoystickGUID *guid, char *gszGUID, int cbGUID);++void SDLHelper_GameControllerGetBindForAxis (SDL_GameController *gamecontroller, SDL_GameControllerAxis axis, SDL_GameControllerButtonBind *bind);+void SDLHelper_GameControllerGetBindForButton (SDL_GameController *gamecontroller, SDL_GameControllerButton button, SDL_GameControllerButtonBind *bind);+char *SDLHelper_GameControllerMappingForGUID (const SDL_JoystickGUID *guid);++void SDLHelper_LogMessage (int category, SDL_LogPriority priority, const char *str);++int SDLHelper_RWclose (SDL_RWops *ctx);+size_t SDLHelper_RWread (SDL_RWops *ctx, void *ptr, size_t size, size_t maxnum);+Sint64 SDLHelper_RWseek (SDL_RWops *ctx, Sint64 offset, int whence);+Sint64 SDLHelper_RWtell (SDL_RWops *ctx);+size_t SDLHelper_RWwrite (SDL_RWops *ctx, const void *ptr, size_t size, size_t num);++int SDLHelper_SetError(const char *str);++#endif
sdl2.cabal view
@@ -1,5 +1,5 @@ name: sdl2-version: 2.1.3+version: 2.1.3.1 synopsis: Both high- and low-level bindings to the SDL library (version 2.0.2+). description: This package contains bindings to the SDL 2 library, in both high- and@@ -17,7 +17,7 @@ license-file: LICENSE author: Gabríel Arthúr Pétursson, Oliver Charles maintainer: gabriel@system.is, ollie@ocharles.org.uk-copyright: Copyright © 2013, 2014 Gabríel Arthúr Pétursson+copyright: Copyright © 2013-2017 Gabríel Arthúr Pétursson category: Graphics build-type: Simple cabal-version: >= 1.10@@ -124,7 +124,7 @@ StateVar >= 1.1.0.0 && < 1.2, text >= 1.1.0.0 && < 1.3, transformers >= 0.2 && < 0.6,- vector >= 0.10.9.0 && < 0.12+ vector >= 0.10.9.0 && < 0.13 if flag(no-linear) cpp-options: -Dnolinear
src/Data/Bitmask.hs view
@@ -1,9 +1,9 @@-module Data.Bitmask (foldFlags) where - -import Prelude hiding (foldl) - -import Data.Bits -import Data.Foldable - -foldFlags :: (Bits b, Foldable f, Num b) => (flag -> b) -> f flag -> b -foldFlags f = foldl (\a b -> a .|. f b) 0 +module Data.Bitmask (foldFlags) where++import Prelude hiding (foldl)++import Data.Bits+import Data.Foldable++foldFlags :: (Bits b, Foldable f, Num b) => (flag -> b) -> f flag -> b+foldFlags f = foldl (\a b -> a .|. f b) 0
src/SDL/Audio.hs view
@@ -1,447 +1,447 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE ConstraintKinds #-} -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveFoldable #-} -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DeriveTraversable #-} -{-# LANGUAGE ForeignFunctionInterface #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE KindSignatures #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE PatternSynonyms #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE RecordWildCards #-} -{-# LANGUAGE StandaloneDeriving #-} -{-# LANGUAGE ScopedTypeVariables #-} - -{-| - -"SDL.Audio" provides a high-level API to SDL's audio device capabilities. - --} - -module SDL.Audio - ( -- * Managing 'AudioDevice's - -- $audioDevice - AudioDevice - - -- ** Opening and Closing 'AudioDevice's - , openAudioDevice - , closeAudioDevice - , OpenDeviceSpec(..) - , AudioDeviceUsage(..) - , Channels(..) - , Changeable(..) - - -- ** Working with Opened Devices - -- *** Locking 'AudioDevice's - , setAudioDeviceLocked - , LockState(..) - - -- *** Switching Playback States - , PlaybackState(..) - , setAudioDevicePlaybackState - - -- *** Querying an 'AudioDevice's Status. - , AudioDeviceStatus(..) - , audioDeviceStatus - - -- ** 'AudioFormat' - , AudioFormat(..) - - -- ** Enumerating 'AudioDevice's - , getAudioDeviceNames - - -- * 'AudioSpec' - , AudioSpec - , audioSpecFreq - , audioSpecFormat - , audioSpecChannels - , audioSpecSilence - , audioSpecSize - , audioSpecCallback - - -- * Audio Drivers - , getAudioDrivers - , currentAudioDriver - , AudioDriver - , audioDriverName - - -- * Explicit Initialization - , audioInit - ) where - -import Control.Monad.IO.Class (MonadIO, liftIO) -import Data.Bits -import Data.Data (Data) -import Data.IORef (newIORef, writeIORef, readIORef) -import Data.Int (Int8, Int16, Int32) -import Data.Text (Text) -import Data.Traversable (for) -import Data.Typeable -import Data.Word -import Foreign.C.Types -import Foreign.ForeignPtr -import Foreign.Marshal.Alloc -import Foreign.Marshal.Utils -import Foreign.Ptr -import Foreign.Storable -import GHC.Exts (Constraint) -import GHC.Generics (Generic) -import SDL.Exception -import qualified Data.ByteString as BS -import qualified Data.Text.Encoding as Text -import qualified Data.Vector as V -import qualified Data.Vector.Storable.Mutable as MV -import qualified SDL.Raw.Audio as Raw -import qualified SDL.Raw.Enum as Raw -import qualified SDL.Raw.Types as Raw - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -import Data.Foldable (Foldable) -import Data.Traversable (Traversable) -#endif - -{- - -$audioDevice - -In order to produce sound, you must first open an 'AudioDevice'. To do so, -pass an 'OpenDeviceSpec' to 'openAudioDevice'. - --} - --- | A specification to 'openAudioDevice', indicating the desired output format. --- Note that many of these properties are 'Changeable', meaning that you can --- choose whether or not SDL should interpret your specification as an --- unbreakable request ('Mandate'), or as an approximation 'Desire'. -data OpenDeviceSpec = forall sampleType. OpenDeviceSpec - { openDeviceFreq :: !(Changeable CInt) - -- ^ The output audio frequency in herts. - , openDeviceFormat :: !(Changeable (AudioFormat sampleType)) - -- ^ The format of audio that will be sampled from the output buffer. - , openDeviceChannels :: !(Changeable Channels) - -- ^ The amount of audio channels. - , openDeviceSamples :: !Word16 - -- ^ Output audio buffer size in samples. This should be a power of 2. - , openDeviceCallback :: forall actualSampleType. AudioFormat actualSampleType -> MV.IOVector actualSampleType -> IO () - -- ^ A callback to invoke whenever new sample data is required. The callback - -- will be passed a single 'MV.MVector' that must be filled with audio data. - , openDeviceUsage :: !AudioDeviceUsage - -- ^ How you intend to use the opened 'AudioDevice' - either for outputting - -- or capturing audio. - , openDeviceName :: !(Maybe Text) - -- ^ The name of the 'AudioDevice' that should be opened. If 'Nothing', - -- any suitable 'AudioDevice' will be used. - } deriving (Typeable) - --- | Attempt to open the closest matching 'AudioDevice', as specified by the --- given 'OpenDeviceSpec'. --- --- See @<https://wiki.libsdl.org/SDL_OpenAudioDevice SDL_OpenAudioDevice>@ for C documentation. -openAudioDevice :: MonadIO m => OpenDeviceSpec -> m (AudioDevice, AudioSpec) -openAudioDevice OpenDeviceSpec{..} = liftIO $ - maybeWith (BS.useAsCString . Text.encodeUtf8) openDeviceName $ \cDevName -> do - anAudioFormatRef <- newIORef undefined - cb <- Raw.mkAudioCallback $ \_ buffer len -> do - fp <- newForeignPtr_ buffer - anAudioFormat <- readIORef anAudioFormatRef - case anAudioFormat of - AnAudioFormat audioFormat -> - case audioFormatStorable audioFormat of - Dict -> openDeviceCallback audioFormat - (MV.unsafeCast (MV.unsafeFromForeignPtr0 fp (fromIntegral len))) - with (desiredSpec cb) $ \desiredSpecPtr -> - alloca $ \actualSpecPtr -> do - devId <- throwIf0 "SDL.Audio.openAudioDevice" "SDL_OpenAudioDevice" $ - Raw.openAudioDevice cDevName (encodeUsage openDeviceUsage) desiredSpecPtr actualSpecPtr changes - actual <- peek actualSpecPtr - let audioDevice = AudioDevice devId - anAudioFormat = decodeAudioFormat (Raw.audioSpecFormat actual) - spec = - case anAudioFormat of - AnAudioFormat audioFormat -> - AudioSpec { audioSpecFreq = Raw.audioSpecFreq actual - , audioSpecFormat = audioFormat - , audioSpecChannels = fromC "SDL.Audio.openAudioDevice" "audioSpecChannels" readChannels (Raw.audioSpecChannels actual) - , audioSpecSilence = Raw.audioSpecSilence actual - , audioSpecSize = Raw.audioSpecSize actual - , audioSpecSamples = Raw.audioSpecSamples actual - , audioSpecCallback = openDeviceCallback - } - writeIORef anAudioFormatRef anAudioFormat - return (audioDevice, spec) - - where - changes = foldl (.|.) 0 [ foldChangeable (const Raw.SDL_AUDIO_ALLOW_FREQUENCY_CHANGE) (const 0) openDeviceFreq - , foldChangeable (const Raw.SDL_AUDIO_ALLOW_FORMAT_CHANGE) (const 0) openDeviceFormat - , foldChangeable (const Raw.SDL_AUDIO_ALLOW_CHANNELS_CHANGE) (const 0) openDeviceChannels - ] - - channelsToWord8 Mono = 1 - channelsToWord8 Stereo = 2 - channelsToWord8 Quad = 4 - channelsToWord8 FivePointOne = 6 - - readChannels 1 = Just Mono - readChannels 2 = Just Stereo - readChannels 4 = Just Quad - readChannels 6 = Just FivePointOne - readChannels _ = Nothing - - desiredSpec cb = Raw.AudioSpec - { Raw.audioSpecFreq = unpackChangeable openDeviceFreq - , Raw.audioSpecFormat = encodeAudioFormat (unpackChangeable openDeviceFormat) - , Raw.audioSpecChannels = channelsToWord8 (unpackChangeable openDeviceChannels) - , Raw.audioSpecSilence = 0 - , Raw.audioSpecSize = 0 - , Raw.audioSpecSamples = openDeviceSamples - , Raw.audioSpecCallback = cb - , Raw.audioSpecUserdata = nullPtr - } - - -- Witness the 'Storable' instance for the sample type of any audio format. Needed in order to use 'MV.unsafeCast' - audioFormatStorable :: AudioFormat sampleType -> Dict (Storable sampleType) - audioFormatStorable Signed8BitAudio = Dict - audioFormatStorable Unsigned8BitAudio = Dict - audioFormatStorable Signed16BitLEAudio = Dict - audioFormatStorable Signed16BitBEAudio = Dict - audioFormatStorable Signed16BitNativeAudio = Dict - audioFormatStorable Unsigned16BitLEAudio = Dict - audioFormatStorable Unsigned16BitBEAudio = Dict - audioFormatStorable Unsigned16BitNativeAudio = Dict - audioFormatStorable Signed32BitLEAudio = Dict - audioFormatStorable Signed32BitBEAudio = Dict - audioFormatStorable Signed32BitNativeAudio = Dict - audioFormatStorable FloatingLEAudio = Dict - audioFormatStorable FloatingBEAudio = Dict - audioFormatStorable FloatingNativeAudio = Dict - -data Dict :: Constraint -> * where - Dict :: c => Dict c - --- | --- --- See @<https://wiki.libsdl.org/SDL_CloseAudioDevice SDL_CloseAudioDevice>@ for C documentation. -closeAudioDevice :: MonadIO m => AudioDevice -> m () -closeAudioDevice (AudioDevice d) = Raw.closeAudioDevice d - --- | An open audio device. These can be created via 'openAudioDevice' and should be closed with 'closeAudioDevice' -newtype AudioDevice = AudioDevice (Raw.AudioDeviceID) - deriving (Eq, Typeable) - --- | Enumerate all 'AudioDevice's attached to this system, that can be used as --- specified by the given 'AudioDeviceUsage'. SDL cannot always guarantee --- that this list can be produced, in which case 'Nothing' will be returned. -getAudioDeviceNames :: MonadIO m => AudioDeviceUsage -> m (Maybe (V.Vector Text)) -getAudioDeviceNames usage = liftIO $ do - n <- Raw.getNumAudioDevices usage' - if n == -1 - then return Nothing - else fmap (Just . V.fromList) $ - for [0 .. (n - 1)] $ \i -> do - cstr <- throwIfNull "SDL.Audio.getAudioDeviceNames" "SDL_GetAudioDeviceName" $ - Raw.getAudioDeviceName i usage' - Text.decodeUtf8 <$> BS.packCString cstr - - where usage' = encodeUsage usage - --- | Information about what format an audio bytestream is. The type variable --- @t@ indicates the type used for audio buffer samples. It is determined --- by the choice of the provided 'SampleBitSize'. For example: --- --- @AudioFormat UnsignedInteger Sample8Bit Native :: AudioFormat Word8@ --- --- Indicating that an 8-bit audio format in the platforms native endianness --- uses a buffer of 'Word8' values. -data AudioFormat sampleType where - Signed8BitAudio :: AudioFormat Int8 - Unsigned8BitAudio :: AudioFormat Word8 - Signed16BitLEAudio :: AudioFormat Int16 - Signed16BitBEAudio :: AudioFormat Int16 - Signed16BitNativeAudio :: AudioFormat Int16 - Unsigned16BitLEAudio :: AudioFormat Word16 - Unsigned16BitBEAudio :: AudioFormat Word16 - Unsigned16BitNativeAudio :: AudioFormat Word16 - Signed32BitLEAudio :: AudioFormat Int32 - Signed32BitBEAudio :: AudioFormat Int32 - Signed32BitNativeAudio :: AudioFormat Int32 - FloatingLEAudio :: AudioFormat Float - FloatingBEAudio :: AudioFormat Float - FloatingNativeAudio :: AudioFormat Float - -deriving instance Eq (AudioFormat sampleType) -deriving instance Ord (AudioFormat sampleType) -deriving instance Show (AudioFormat sampleType) - -data AnAudioFormat where - AnAudioFormat :: AudioFormat sampleType -> AnAudioFormat - -encodeAudioFormat :: AudioFormat sampleType -> Word16 -encodeAudioFormat Signed8BitAudio = Raw.SDL_AUDIO_S8 -encodeAudioFormat Unsigned8BitAudio = Raw.SDL_AUDIO_U8 -encodeAudioFormat Signed16BitLEAudio = Raw.SDL_AUDIO_S16LSB -encodeAudioFormat Signed16BitBEAudio = Raw.SDL_AUDIO_S16MSB -encodeAudioFormat Signed16BitNativeAudio = Raw.SDL_AUDIO_S16SYS -encodeAudioFormat Unsigned16BitLEAudio = Raw.SDL_AUDIO_U16LSB -encodeAudioFormat Unsigned16BitBEAudio = Raw.SDL_AUDIO_U16MSB -encodeAudioFormat Unsigned16BitNativeAudio = Raw.SDL_AUDIO_U16SYS -encodeAudioFormat Signed32BitLEAudio = Raw.SDL_AUDIO_S32LSB -encodeAudioFormat Signed32BitBEAudio = Raw.SDL_AUDIO_S32MSB -encodeAudioFormat Signed32BitNativeAudio = Raw.SDL_AUDIO_S32SYS -encodeAudioFormat FloatingLEAudio = Raw.SDL_AUDIO_F32LSB -encodeAudioFormat FloatingBEAudio = Raw.SDL_AUDIO_F32MSB -encodeAudioFormat FloatingNativeAudio = Raw.SDL_AUDIO_F32SYS - -decodeAudioFormat :: Word16 -> AnAudioFormat -decodeAudioFormat Raw.SDL_AUDIO_S8 = AnAudioFormat Signed8BitAudio -decodeAudioFormat Raw.SDL_AUDIO_U8 = AnAudioFormat Unsigned8BitAudio -decodeAudioFormat Raw.SDL_AUDIO_S16LSB = AnAudioFormat Signed16BitLEAudio -decodeAudioFormat Raw.SDL_AUDIO_S16MSB = AnAudioFormat Signed16BitBEAudio -decodeAudioFormat Raw.SDL_AUDIO_S16SYS = AnAudioFormat Signed16BitNativeAudio -decodeAudioFormat Raw.SDL_AUDIO_U16LSB = AnAudioFormat Unsigned16BitLEAudio -decodeAudioFormat Raw.SDL_AUDIO_U16MSB = AnAudioFormat Unsigned16BitBEAudio -decodeAudioFormat Raw.SDL_AUDIO_U16SYS = AnAudioFormat Unsigned16BitNativeAudio -decodeAudioFormat Raw.SDL_AUDIO_S32LSB = AnAudioFormat Signed32BitLEAudio -decodeAudioFormat Raw.SDL_AUDIO_S32MSB = AnAudioFormat Signed32BitBEAudio -decodeAudioFormat Raw.SDL_AUDIO_S32SYS = AnAudioFormat Signed32BitNativeAudio -decodeAudioFormat Raw.SDL_AUDIO_F32LSB = AnAudioFormat FloatingLEAudio -decodeAudioFormat Raw.SDL_AUDIO_F32MSB = AnAudioFormat FloatingBEAudio -decodeAudioFormat Raw.SDL_AUDIO_F32SYS = AnAudioFormat FloatingNativeAudio -decodeAudioFormat x = error ("decodeAudioFormat failed: Unknown format " ++ show x) - --- | How many channels audio should be played on -data Channels - = Mono -- ^ A single speaker configuration - | Stereo -- ^ A traditional left/right stereo system - | Quad - | FivePointOne -- ^ 5.1 surround sound - deriving (Bounded,Data,Enum,Eq,Generic,Ord,Read,Show,Typeable) - --- | 'AudioSpec' is the concrete specification of how an 'AudioDevice' was --- sucessfully opened. Unlike 'OpenDeviceSpec', which specifies what you --- /want/, 'AudioSpec' specifies what you /have/. -data AudioSpec = forall sampleType. AudioSpec - { audioSpecFreq :: !CInt - -- ^ DSP frequency (samples per second) - , audioSpecFormat :: !(AudioFormat sampleType) - -- ^ Audio data format - , audioSpecChannels :: !Channels - -- ^ Number of separate sound channels - , audioSpecSilence :: !Word8 - -- ^ Calculated udio buffer silence value - , audioSpecSamples :: !Word16 - -- ^ Audio buffer size in samples (power of 2) - , audioSpecSize :: !Word32 - -- ^ Calculated audio buffer size in bytes - , audioSpecCallback :: AudioFormat sampleType -> MV.IOVector sampleType -> IO () - -- ^ The function to call when the audio device needs more data - } - deriving (Typeable) - --- | How you intend to use an 'AudioDevice' -data AudioDeviceUsage - = ForPlayback -- ^ The device will be used for sample playback. - | ForCapture -- ^ The device will be used for sample capture. - deriving (Bounded, Data, Enum, Eq, Generic, Ord, Read, Show, Typeable) - -encodeUsage :: Num a => AudioDeviceUsage -> a -encodeUsage usage = - case usage of - ForPlayback -> 0 - ForCapture -> 1 - --- | Used to indicate to SDL whether it is allowed to open other audio devices (if a property is marked as a 'Desire') or if it should fail if the device is unavailable ('Mandate'). -data Changeable a - = Mandate !a - -- ^ 'Mandate' this exact property value, and fail if a matching audio device cannot be found. - | Desire !a - -- ^ 'Desire' this property value, but allow other audio devices to be opened. - deriving (Data, Foldable, Functor, Eq, Generic, Read, Show, Traversable, Typeable) - -foldChangeable :: (a -> b) -> (a -> b) -> Changeable a -> b -foldChangeable f _ (Mandate a) = f a -foldChangeable _ g (Desire a) = g a - -unpackChangeable :: Changeable a -> a -unpackChangeable = foldChangeable id id - --- | Whether a device should be locked or unlocked. -data LockState - = Locked -- ^ Lock the device, preventing the callback from producing data. - | Unlocked -- ^ Unlock the device, resuming calls to the callback. - deriving (Bounded, Data, Enum, Eq, Generic, Ord, Read, Show, Typeable) - --- | Lock an 'AudioDevice' such that its associated callback will not be called --- until the device is unlocked. -setAudioDeviceLocked :: MonadIO m => AudioDevice -> LockState -> m () -setAudioDeviceLocked (AudioDevice d) Locked = Raw.lockAudioDevice d -setAudioDeviceLocked (AudioDevice d) Unlocked = Raw.unlockAudioDevice d - --- | Whether to allow an 'AudioDevice' to play sound or remain paused. -data PlaybackState - = Pause -- ^ Pause the 'AudioDevice', which will stop producing/capturing audio. - | Play -- ^ Resume the 'AudioDevice'. - deriving (Bounded, Enum, Eq, Ord, Read, Data, Generic, Show, Typeable) - --- | Change the playback state of an 'AudioDevice'. -setAudioDevicePlaybackState :: MonadIO m => AudioDevice -> PlaybackState -> m () -setAudioDevicePlaybackState (AudioDevice d) Pause = Raw.pauseAudioDevice d 1 -setAudioDevicePlaybackState (AudioDevice d) Play = Raw.pauseAudioDevice d 0 - --- | Opened devices are always 'Playing' or 'Paused' in normal circumstances. A --- failing device may change its status to 'Stopped' at any time, and closing a --- device will progress to 'Stopped' too. -data AudioDeviceStatus - = Playing -- ^ The 'AudioDevice' is playing. - | Paused -- ^ The 'AudioDevice' is paused. - | Stopped -- ^ The 'AudioDevice' is stopped. - deriving (Bounded, Enum, Eq, Ord, Read, Data, Generic, Show, Typeable) - --- | Query the state of an 'AudioDevice'. -audioDeviceStatus :: MonadIO m => AudioDevice -> m AudioDeviceStatus -audioDeviceStatus (AudioDevice d) = liftIO $ - fromC "SDL.Audio.audioDeviceStatus" "SDL_AudioStatus" readStatus <$> Raw.getAudioDeviceStatus d - where - readStatus n = case n of - Raw.SDL_AUDIO_PLAYING -> Just Playing - Raw.SDL_AUDIO_STOPPED -> Just Stopped - Raw.SDL_AUDIO_PAUSED -> Just Paused - _ -> Nothing - --- clearQueuedAudio :: AudioDevice -> IO () --- clearQueuedAudio (AudioDevice d) = Raw.clearQueuedAudio d - --- | An abstract description of an audio driver on the host machine. -newtype AudioDriver = AudioDriver Text - deriving (Eq, Show, Typeable) - --- | Get the human readable name of an 'AudioDriver' -audioDriverName :: AudioDriver -> Text -audioDriverName (AudioDriver t) = t - --- | Obtain a list of all possible audio drivers for this system. These drivers --- can be used to specificially initialize the audio system. -getAudioDrivers :: MonadIO m => m (V.Vector AudioDriver) -getAudioDrivers = liftIO $ do - n <- Raw.getNumAudioDrivers - fmap V.fromList $ - for [0 .. (n - 1)] $ \i -> do - -- TODO This could return null if i is invalid, but it's not an SDL_Error. - cstr <- Raw.getAudioDriver i - AudioDriver . Text.decodeUtf8 <$> BS.packCString cstr - --- | Explicitly initialize the audio system against a specific --- 'AudioDriver'. Note that most users will not need to do this, as the normal --- initialization routines will already take care of this for you. -audioInit :: MonadIO m => AudioDriver -> m () -audioInit (AudioDriver n) = liftIO $ BS.useAsCString (Text.encodeUtf8 n) $ - throwIfNeg_ "SDL.Audio.audioInit" "SDL_AudioInit" . Raw.audioInit - --- | Query SDL for the name of the currently initialized audio driver, if --- possible. This will return 'Nothing' if no driver has been initialized. -currentAudioDriver :: MonadIO m => m (Maybe Text) -currentAudioDriver = - liftIO $ maybePeek (fmap Text.decodeUtf8 . BS.packCString) =<< Raw.getCurrentAudioDriver +{-# LANGUAGE CPP #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE ScopedTypeVariables #-}++{-|++"SDL.Audio" provides a high-level API to SDL's audio device capabilities.++-}++module SDL.Audio+ ( -- * Managing 'AudioDevice's+ -- $audioDevice+ AudioDevice++ -- ** Opening and Closing 'AudioDevice's+ , openAudioDevice+ , closeAudioDevice+ , OpenDeviceSpec(..)+ , AudioDeviceUsage(..)+ , Channels(..)+ , Changeable(..)++ -- ** Working with Opened Devices+ -- *** Locking 'AudioDevice's+ , setAudioDeviceLocked+ , LockState(..)++ -- *** Switching Playback States+ , PlaybackState(..)+ , setAudioDevicePlaybackState++ -- *** Querying an 'AudioDevice's Status.+ , AudioDeviceStatus(..)+ , audioDeviceStatus++ -- ** 'AudioFormat'+ , AudioFormat(..)++ -- ** Enumerating 'AudioDevice's+ , getAudioDeviceNames++ -- * 'AudioSpec'+ , AudioSpec+ , audioSpecFreq+ , audioSpecFormat+ , audioSpecChannels+ , audioSpecSilence+ , audioSpecSize+ , audioSpecCallback++ -- * Audio Drivers+ , getAudioDrivers+ , currentAudioDriver+ , AudioDriver+ , audioDriverName++ -- * Explicit Initialization+ , audioInit+ ) where++import Control.Monad.IO.Class (MonadIO, liftIO)+import Data.Bits+import Data.Data (Data)+import Data.IORef (newIORef, writeIORef, readIORef)+import Data.Int (Int8, Int16, Int32)+import Data.Text (Text)+import Data.Traversable (for)+import Data.Typeable+import Data.Word+import Foreign.C.Types+import Foreign.ForeignPtr+import Foreign.Marshal.Alloc+import Foreign.Marshal.Utils+import Foreign.Ptr+import Foreign.Storable+import GHC.Exts (Constraint)+import GHC.Generics (Generic)+import SDL.Exception+import qualified Data.ByteString as BS+import qualified Data.Text.Encoding as Text+import qualified Data.Vector as V+import qualified Data.Vector.Storable.Mutable as MV+import qualified SDL.Raw.Audio as Raw+import qualified SDL.Raw.Enum as Raw+import qualified SDL.Raw.Types as Raw++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+import Data.Foldable (Foldable)+import Data.Traversable (Traversable)+#endif++{-++$audioDevice++In order to produce sound, you must first open an 'AudioDevice'. To do so,+pass an 'OpenDeviceSpec' to 'openAudioDevice'.++-}++-- | A specification to 'openAudioDevice', indicating the desired output format.+-- Note that many of these properties are 'Changeable', meaning that you can+-- choose whether or not SDL should interpret your specification as an+-- unbreakable request ('Mandate'), or as an approximation 'Desire'.+data OpenDeviceSpec = forall sampleType. OpenDeviceSpec+ { openDeviceFreq :: !(Changeable CInt)+ -- ^ The output audio frequency in herts.+ , openDeviceFormat :: !(Changeable (AudioFormat sampleType))+ -- ^ The format of audio that will be sampled from the output buffer.+ , openDeviceChannels :: !(Changeable Channels)+ -- ^ The amount of audio channels.+ , openDeviceSamples :: !Word16+ -- ^ Output audio buffer size in samples. This should be a power of 2.+ , openDeviceCallback :: forall actualSampleType. AudioFormat actualSampleType -> MV.IOVector actualSampleType -> IO ()+ -- ^ A callback to invoke whenever new sample data is required. The callback+ -- will be passed a single 'MV.MVector' that must be filled with audio data.+ , openDeviceUsage :: !AudioDeviceUsage+ -- ^ How you intend to use the opened 'AudioDevice' - either for outputting+ -- or capturing audio.+ , openDeviceName :: !(Maybe Text)+ -- ^ The name of the 'AudioDevice' that should be opened. If 'Nothing',+ -- any suitable 'AudioDevice' will be used.+ } deriving (Typeable)++-- | Attempt to open the closest matching 'AudioDevice', as specified by the+-- given 'OpenDeviceSpec'.+--+-- See @<https://wiki.libsdl.org/SDL_OpenAudioDevice SDL_OpenAudioDevice>@ for C documentation.+openAudioDevice :: MonadIO m => OpenDeviceSpec -> m (AudioDevice, AudioSpec)+openAudioDevice OpenDeviceSpec{..} = liftIO $+ maybeWith (BS.useAsCString . Text.encodeUtf8) openDeviceName $ \cDevName -> do+ anAudioFormatRef <- newIORef undefined+ cb <- Raw.mkAudioCallback $ \_ buffer len -> do+ fp <- newForeignPtr_ buffer+ anAudioFormat <- readIORef anAudioFormatRef+ case anAudioFormat of+ AnAudioFormat audioFormat ->+ case audioFormatStorable audioFormat of+ Dict -> openDeviceCallback audioFormat+ (MV.unsafeCast (MV.unsafeFromForeignPtr0 fp (fromIntegral len)))+ with (desiredSpec cb) $ \desiredSpecPtr ->+ alloca $ \actualSpecPtr -> do+ devId <- throwIf0 "SDL.Audio.openAudioDevice" "SDL_OpenAudioDevice" $+ Raw.openAudioDevice cDevName (encodeUsage openDeviceUsage) desiredSpecPtr actualSpecPtr changes+ actual <- peek actualSpecPtr+ let audioDevice = AudioDevice devId+ anAudioFormat = decodeAudioFormat (Raw.audioSpecFormat actual)+ spec =+ case anAudioFormat of+ AnAudioFormat audioFormat ->+ AudioSpec { audioSpecFreq = Raw.audioSpecFreq actual+ , audioSpecFormat = audioFormat+ , audioSpecChannels = fromC "SDL.Audio.openAudioDevice" "audioSpecChannels" readChannels (Raw.audioSpecChannels actual)+ , audioSpecSilence = Raw.audioSpecSilence actual+ , audioSpecSize = Raw.audioSpecSize actual+ , audioSpecSamples = Raw.audioSpecSamples actual+ , audioSpecCallback = openDeviceCallback+ }+ writeIORef anAudioFormatRef anAudioFormat+ return (audioDevice, spec)++ where+ changes = foldl (.|.) 0 [ foldChangeable (const Raw.SDL_AUDIO_ALLOW_FREQUENCY_CHANGE) (const 0) openDeviceFreq+ , foldChangeable (const Raw.SDL_AUDIO_ALLOW_FORMAT_CHANGE) (const 0) openDeviceFormat+ , foldChangeable (const Raw.SDL_AUDIO_ALLOW_CHANNELS_CHANGE) (const 0) openDeviceChannels+ ]++ channelsToWord8 Mono = 1+ channelsToWord8 Stereo = 2+ channelsToWord8 Quad = 4+ channelsToWord8 FivePointOne = 6++ readChannels 1 = Just Mono+ readChannels 2 = Just Stereo+ readChannels 4 = Just Quad+ readChannels 6 = Just FivePointOne+ readChannels _ = Nothing++ desiredSpec cb = Raw.AudioSpec+ { Raw.audioSpecFreq = unpackChangeable openDeviceFreq+ , Raw.audioSpecFormat = encodeAudioFormat (unpackChangeable openDeviceFormat)+ , Raw.audioSpecChannels = channelsToWord8 (unpackChangeable openDeviceChannels)+ , Raw.audioSpecSilence = 0+ , Raw.audioSpecSize = 0+ , Raw.audioSpecSamples = openDeviceSamples+ , Raw.audioSpecCallback = cb+ , Raw.audioSpecUserdata = nullPtr+ }++ -- Witness the 'Storable' instance for the sample type of any audio format. Needed in order to use 'MV.unsafeCast'+ audioFormatStorable :: AudioFormat sampleType -> Dict (Storable sampleType)+ audioFormatStorable Signed8BitAudio = Dict+ audioFormatStorable Unsigned8BitAudio = Dict+ audioFormatStorable Signed16BitLEAudio = Dict+ audioFormatStorable Signed16BitBEAudio = Dict+ audioFormatStorable Signed16BitNativeAudio = Dict+ audioFormatStorable Unsigned16BitLEAudio = Dict+ audioFormatStorable Unsigned16BitBEAudio = Dict+ audioFormatStorable Unsigned16BitNativeAudio = Dict+ audioFormatStorable Signed32BitLEAudio = Dict+ audioFormatStorable Signed32BitBEAudio = Dict+ audioFormatStorable Signed32BitNativeAudio = Dict+ audioFormatStorable FloatingLEAudio = Dict+ audioFormatStorable FloatingBEAudio = Dict+ audioFormatStorable FloatingNativeAudio = Dict++data Dict :: Constraint -> * where+ Dict :: c => Dict c++-- |+--+-- See @<https://wiki.libsdl.org/SDL_CloseAudioDevice SDL_CloseAudioDevice>@ for C documentation.+closeAudioDevice :: MonadIO m => AudioDevice -> m ()+closeAudioDevice (AudioDevice d) = Raw.closeAudioDevice d++-- | An open audio device. These can be created via 'openAudioDevice' and should be closed with 'closeAudioDevice'+newtype AudioDevice = AudioDevice (Raw.AudioDeviceID)+ deriving (Eq, Typeable)++-- | Enumerate all 'AudioDevice's attached to this system, that can be used as+-- specified by the given 'AudioDeviceUsage'. SDL cannot always guarantee+-- that this list can be produced, in which case 'Nothing' will be returned.+getAudioDeviceNames :: MonadIO m => AudioDeviceUsage -> m (Maybe (V.Vector Text))+getAudioDeviceNames usage = liftIO $ do+ n <- Raw.getNumAudioDevices usage'+ if n == -1+ then return Nothing+ else fmap (Just . V.fromList) $+ for [0 .. (n - 1)] $ \i -> do+ cstr <- throwIfNull "SDL.Audio.getAudioDeviceNames" "SDL_GetAudioDeviceName" $+ Raw.getAudioDeviceName i usage'+ Text.decodeUtf8 <$> BS.packCString cstr++ where usage' = encodeUsage usage++-- | Information about what format an audio bytestream is. The type variable+-- @t@ indicates the type used for audio buffer samples. It is determined+-- by the choice of the provided 'SampleBitSize'. For example:+--+-- @AudioFormat UnsignedInteger Sample8Bit Native :: AudioFormat Word8@+--+-- Indicating that an 8-bit audio format in the platforms native endianness+-- uses a buffer of 'Word8' values.+data AudioFormat sampleType where+ Signed8BitAudio :: AudioFormat Int8+ Unsigned8BitAudio :: AudioFormat Word8+ Signed16BitLEAudio :: AudioFormat Int16+ Signed16BitBEAudio :: AudioFormat Int16+ Signed16BitNativeAudio :: AudioFormat Int16+ Unsigned16BitLEAudio :: AudioFormat Word16+ Unsigned16BitBEAudio :: AudioFormat Word16+ Unsigned16BitNativeAudio :: AudioFormat Word16+ Signed32BitLEAudio :: AudioFormat Int32+ Signed32BitBEAudio :: AudioFormat Int32+ Signed32BitNativeAudio :: AudioFormat Int32+ FloatingLEAudio :: AudioFormat Float+ FloatingBEAudio :: AudioFormat Float+ FloatingNativeAudio :: AudioFormat Float++deriving instance Eq (AudioFormat sampleType)+deriving instance Ord (AudioFormat sampleType)+deriving instance Show (AudioFormat sampleType)++data AnAudioFormat where+ AnAudioFormat :: AudioFormat sampleType -> AnAudioFormat++encodeAudioFormat :: AudioFormat sampleType -> Word16+encodeAudioFormat Signed8BitAudio = Raw.SDL_AUDIO_S8+encodeAudioFormat Unsigned8BitAudio = Raw.SDL_AUDIO_U8+encodeAudioFormat Signed16BitLEAudio = Raw.SDL_AUDIO_S16LSB+encodeAudioFormat Signed16BitBEAudio = Raw.SDL_AUDIO_S16MSB+encodeAudioFormat Signed16BitNativeAudio = Raw.SDL_AUDIO_S16SYS+encodeAudioFormat Unsigned16BitLEAudio = Raw.SDL_AUDIO_U16LSB+encodeAudioFormat Unsigned16BitBEAudio = Raw.SDL_AUDIO_U16MSB+encodeAudioFormat Unsigned16BitNativeAudio = Raw.SDL_AUDIO_U16SYS+encodeAudioFormat Signed32BitLEAudio = Raw.SDL_AUDIO_S32LSB+encodeAudioFormat Signed32BitBEAudio = Raw.SDL_AUDIO_S32MSB+encodeAudioFormat Signed32BitNativeAudio = Raw.SDL_AUDIO_S32SYS+encodeAudioFormat FloatingLEAudio = Raw.SDL_AUDIO_F32LSB+encodeAudioFormat FloatingBEAudio = Raw.SDL_AUDIO_F32MSB+encodeAudioFormat FloatingNativeAudio = Raw.SDL_AUDIO_F32SYS++decodeAudioFormat :: Word16 -> AnAudioFormat+decodeAudioFormat Raw.SDL_AUDIO_S8 = AnAudioFormat Signed8BitAudio+decodeAudioFormat Raw.SDL_AUDIO_U8 = AnAudioFormat Unsigned8BitAudio+decodeAudioFormat Raw.SDL_AUDIO_S16LSB = AnAudioFormat Signed16BitLEAudio+decodeAudioFormat Raw.SDL_AUDIO_S16MSB = AnAudioFormat Signed16BitBEAudio+decodeAudioFormat Raw.SDL_AUDIO_S16SYS = AnAudioFormat Signed16BitNativeAudio+decodeAudioFormat Raw.SDL_AUDIO_U16LSB = AnAudioFormat Unsigned16BitLEAudio+decodeAudioFormat Raw.SDL_AUDIO_U16MSB = AnAudioFormat Unsigned16BitBEAudio+decodeAudioFormat Raw.SDL_AUDIO_U16SYS = AnAudioFormat Unsigned16BitNativeAudio+decodeAudioFormat Raw.SDL_AUDIO_S32LSB = AnAudioFormat Signed32BitLEAudio+decodeAudioFormat Raw.SDL_AUDIO_S32MSB = AnAudioFormat Signed32BitBEAudio+decodeAudioFormat Raw.SDL_AUDIO_S32SYS = AnAudioFormat Signed32BitNativeAudio+decodeAudioFormat Raw.SDL_AUDIO_F32LSB = AnAudioFormat FloatingLEAudio+decodeAudioFormat Raw.SDL_AUDIO_F32MSB = AnAudioFormat FloatingBEAudio+decodeAudioFormat Raw.SDL_AUDIO_F32SYS = AnAudioFormat FloatingNativeAudio+decodeAudioFormat x = error ("decodeAudioFormat failed: Unknown format " ++ show x)++-- | How many channels audio should be played on+data Channels+ = Mono -- ^ A single speaker configuration+ | Stereo -- ^ A traditional left/right stereo system+ | Quad+ | FivePointOne -- ^ 5.1 surround sound+ deriving (Bounded,Data,Enum,Eq,Generic,Ord,Read,Show,Typeable)++-- | 'AudioSpec' is the concrete specification of how an 'AudioDevice' was+-- sucessfully opened. Unlike 'OpenDeviceSpec', which specifies what you+-- /want/, 'AudioSpec' specifies what you /have/.+data AudioSpec = forall sampleType. AudioSpec+ { audioSpecFreq :: !CInt+ -- ^ DSP frequency (samples per second)+ , audioSpecFormat :: !(AudioFormat sampleType)+ -- ^ Audio data format+ , audioSpecChannels :: !Channels+ -- ^ Number of separate sound channels+ , audioSpecSilence :: !Word8+ -- ^ Calculated udio buffer silence value+ , audioSpecSamples :: !Word16+ -- ^ Audio buffer size in samples (power of 2)+ , audioSpecSize :: !Word32+ -- ^ Calculated audio buffer size in bytes+ , audioSpecCallback :: AudioFormat sampleType -> MV.IOVector sampleType -> IO ()+ -- ^ The function to call when the audio device needs more data+ }+ deriving (Typeable)++-- | How you intend to use an 'AudioDevice'+data AudioDeviceUsage+ = ForPlayback -- ^ The device will be used for sample playback.+ | ForCapture -- ^ The device will be used for sample capture.+ deriving (Bounded, Data, Enum, Eq, Generic, Ord, Read, Show, Typeable)++encodeUsage :: Num a => AudioDeviceUsage -> a+encodeUsage usage =+ case usage of+ ForPlayback -> 0+ ForCapture -> 1++-- | Used to indicate to SDL whether it is allowed to open other audio devices (if a property is marked as a 'Desire') or if it should fail if the device is unavailable ('Mandate').+data Changeable a+ = Mandate !a+ -- ^ 'Mandate' this exact property value, and fail if a matching audio device cannot be found.+ | Desire !a+ -- ^ 'Desire' this property value, but allow other audio devices to be opened.+ deriving (Data, Foldable, Functor, Eq, Generic, Read, Show, Traversable, Typeable)++foldChangeable :: (a -> b) -> (a -> b) -> Changeable a -> b+foldChangeable f _ (Mandate a) = f a+foldChangeable _ g (Desire a) = g a++unpackChangeable :: Changeable a -> a+unpackChangeable = foldChangeable id id++-- | Whether a device should be locked or unlocked.+data LockState+ = Locked -- ^ Lock the device, preventing the callback from producing data.+ | Unlocked -- ^ Unlock the device, resuming calls to the callback.+ deriving (Bounded, Data, Enum, Eq, Generic, Ord, Read, Show, Typeable)++-- | Lock an 'AudioDevice' such that its associated callback will not be called+-- until the device is unlocked.+setAudioDeviceLocked :: MonadIO m => AudioDevice -> LockState -> m ()+setAudioDeviceLocked (AudioDevice d) Locked = Raw.lockAudioDevice d+setAudioDeviceLocked (AudioDevice d) Unlocked = Raw.unlockAudioDevice d++-- | Whether to allow an 'AudioDevice' to play sound or remain paused.+data PlaybackState+ = Pause -- ^ Pause the 'AudioDevice', which will stop producing/capturing audio.+ | Play -- ^ Resume the 'AudioDevice'.+ deriving (Bounded, Enum, Eq, Ord, Read, Data, Generic, Show, Typeable)++-- | Change the playback state of an 'AudioDevice'.+setAudioDevicePlaybackState :: MonadIO m => AudioDevice -> PlaybackState -> m ()+setAudioDevicePlaybackState (AudioDevice d) Pause = Raw.pauseAudioDevice d 1+setAudioDevicePlaybackState (AudioDevice d) Play = Raw.pauseAudioDevice d 0++-- | Opened devices are always 'Playing' or 'Paused' in normal circumstances. A+-- failing device may change its status to 'Stopped' at any time, and closing a+-- device will progress to 'Stopped' too.+data AudioDeviceStatus+ = Playing -- ^ The 'AudioDevice' is playing.+ | Paused -- ^ The 'AudioDevice' is paused.+ | Stopped -- ^ The 'AudioDevice' is stopped.+ deriving (Bounded, Enum, Eq, Ord, Read, Data, Generic, Show, Typeable)++-- | Query the state of an 'AudioDevice'.+audioDeviceStatus :: MonadIO m => AudioDevice -> m AudioDeviceStatus+audioDeviceStatus (AudioDevice d) = liftIO $+ fromC "SDL.Audio.audioDeviceStatus" "SDL_AudioStatus" readStatus <$> Raw.getAudioDeviceStatus d+ where+ readStatus n = case n of+ Raw.SDL_AUDIO_PLAYING -> Just Playing+ Raw.SDL_AUDIO_STOPPED -> Just Stopped+ Raw.SDL_AUDIO_PAUSED -> Just Paused+ _ -> Nothing++-- clearQueuedAudio :: AudioDevice -> IO ()+-- clearQueuedAudio (AudioDevice d) = Raw.clearQueuedAudio d++-- | An abstract description of an audio driver on the host machine.+newtype AudioDriver = AudioDriver Text+ deriving (Eq, Show, Typeable)++-- | Get the human readable name of an 'AudioDriver'+audioDriverName :: AudioDriver -> Text+audioDriverName (AudioDriver t) = t++-- | Obtain a list of all possible audio drivers for this system. These drivers+-- can be used to specificially initialize the audio system.+getAudioDrivers :: MonadIO m => m (V.Vector AudioDriver)+getAudioDrivers = liftIO $ do+ n <- Raw.getNumAudioDrivers+ fmap V.fromList $+ for [0 .. (n - 1)] $ \i -> do+ -- TODO This could return null if i is invalid, but it's not an SDL_Error.+ cstr <- Raw.getAudioDriver i+ AudioDriver . Text.decodeUtf8 <$> BS.packCString cstr++-- | Explicitly initialize the audio system against a specific+-- 'AudioDriver'. Note that most users will not need to do this, as the normal+-- initialization routines will already take care of this for you.+audioInit :: MonadIO m => AudioDriver -> m ()+audioInit (AudioDriver n) = liftIO $ BS.useAsCString (Text.encodeUtf8 n) $+ throwIfNeg_ "SDL.Audio.audioInit" "SDL_AudioInit" . Raw.audioInit++-- | Query SDL for the name of the currently initialized audio driver, if+-- possible. This will return 'Nothing' if no driver has been initialized.+currentAudioDriver :: MonadIO m => m (Maybe Text)+currentAudioDriver =+ liftIO $ maybePeek (fmap Text.decodeUtf8 . BS.packCString) =<< Raw.getCurrentAudioDriver
src/SDL/Exception.hs view
@@ -1,107 +1,107 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} - -module SDL.Exception - ( SDLException(..) - , fromC - , getError - , throwIf - , throwIf_ - , throwIf0 - , throwIfNeg - , throwIfNeg_ - , throwIfNot0 - , throwIfNot0_ - , throwIfNull - ) where - -import Control.Exception -import Control.Monad -import Control.Monad.IO.Class (MonadIO, liftIO) -import Data.Data (Data) -import Data.Maybe (fromMaybe) -import Data.Text (Text) -import Data.Typeable (Typeable) -import Foreign (Ptr, nullPtr) -import GHC.Generics (Generic) -import qualified Data.ByteString as BS -import qualified Data.Text.Encoding as Text -import qualified SDL.Raw as Raw - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - --- | Error details about a failure to call an SDL routine. Almost all functions in this library have the --- ability to produce exceptions of this type. Inspection should help you learn more about what has --- gone wrong. -data SDLException - = -- | A call to a low-level SDL C function failed unexpectedly. - SDLCallFailed - {sdlExceptionCaller :: !Text - -- ^ The Haskell routine that was trying to call a C function - ,sdlFunction :: !Text - -- ^ The C function that was called and produced an error - ,sdlExceptionError :: !Text - -- ^ SDL's understanding of what has gone wrong - } - | -- | An SDL C function was called with an unexpected argument. - SDLUnexpectedArgument - {sdlExceptionCaller :: !Text - -- ^ The Haskell routine that was trying to call a C function - ,sdlFunction :: !Text - -- ^ The C function that was called and produced an error - ,sdlUnknownValue :: !String - -- ^ The argument that SDL failed to understand - } - | -- | A hint was attempted to be set, but SDL does not know about this hint. - SDLUnknownHintValue - {sdlHint :: !String - -- ^ The hint that could not be set - ,sdlUnknownValue :: !String - -- ^ The value that could not be set - } - deriving (Data,Eq,Generic,Ord,Read,Show,Typeable) - -instance Exception SDLException - -getError :: MonadIO m => m Text -getError = liftIO $ do - cstr <- Raw.getError - Text.decodeUtf8 <$> BS.packCString cstr - -throwIf :: MonadIO m => (a -> Bool) -> Text -> Text -> m a -> m a -throwIf f caller funName m = do - a <- m - liftIO $ when (f a) $ - (SDLCallFailed caller funName <$> getError) >>= throwIO - return a - -throwIf_ :: MonadIO m => (a -> Bool) -> Text -> Text -> m a -> m () -throwIf_ f caller funName m = throwIf f caller funName m >> return () - -throwIfNeg :: (MonadIO m, Num a, Ord a) => Text -> Text -> m a -> m a -throwIfNeg = throwIf (< 0) - -throwIfNeg_ :: (MonadIO m, Num a, Ord a) => Text -> Text -> m a -> m () -throwIfNeg_ = throwIf_ (< 0) - -throwIfNull :: (MonadIO m) => Text -> Text -> m (Ptr a) -> m (Ptr a) -throwIfNull = throwIf (== nullPtr) - -throwIf0 :: (Eq a, MonadIO m, Num a) => Text -> Text -> m a -> m a -throwIf0 = throwIf (== 0) - -throwIfNot0 :: (Eq a, MonadIO m, Num a) => Text -> Text -> m a -> m a -throwIfNot0 = throwIf (/= 0) - -throwIfNot0_ :: (Eq a, MonadIO m, Num a) => Text -> Text -> m a -> m () -throwIfNot0_ = throwIf_ (/= 0) - -fromC :: Show a => Text -> Text -> (a -> Maybe b) -> a -> b -fromC caller funName f x = - fromMaybe (throw (SDLUnexpectedArgument caller - funName - (show x))) - (f x) +{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}++module SDL.Exception+ ( SDLException(..)+ , fromC+ , getError+ , throwIf+ , throwIf_+ , throwIf0+ , throwIfNeg+ , throwIfNeg_+ , throwIfNot0+ , throwIfNot0_+ , throwIfNull+ ) where++import Control.Exception+import Control.Monad+import Control.Monad.IO.Class (MonadIO, liftIO)+import Data.Data (Data)+import Data.Maybe (fromMaybe)+import Data.Text (Text)+import Data.Typeable (Typeable)+import Foreign (Ptr, nullPtr)+import GHC.Generics (Generic)+import qualified Data.ByteString as BS+import qualified Data.Text.Encoding as Text+import qualified SDL.Raw as Raw++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++-- | Error details about a failure to call an SDL routine. Almost all functions in this library have the+-- ability to produce exceptions of this type. Inspection should help you learn more about what has+-- gone wrong.+data SDLException+ = -- | A call to a low-level SDL C function failed unexpectedly.+ SDLCallFailed+ {sdlExceptionCaller :: !Text+ -- ^ The Haskell routine that was trying to call a C function+ ,sdlFunction :: !Text+ -- ^ The C function that was called and produced an error+ ,sdlExceptionError :: !Text+ -- ^ SDL's understanding of what has gone wrong+ }+ | -- | An SDL C function was called with an unexpected argument.+ SDLUnexpectedArgument+ {sdlExceptionCaller :: !Text+ -- ^ The Haskell routine that was trying to call a C function+ ,sdlFunction :: !Text+ -- ^ The C function that was called and produced an error+ ,sdlUnknownValue :: !String+ -- ^ The argument that SDL failed to understand+ }+ | -- | A hint was attempted to be set, but SDL does not know about this hint.+ SDLUnknownHintValue+ {sdlHint :: !String+ -- ^ The hint that could not be set+ ,sdlUnknownValue :: !String+ -- ^ The value that could not be set+ }+ deriving (Data,Eq,Generic,Ord,Read,Show,Typeable)++instance Exception SDLException++getError :: MonadIO m => m Text+getError = liftIO $ do+ cstr <- Raw.getError+ Text.decodeUtf8 <$> BS.packCString cstr++throwIf :: MonadIO m => (a -> Bool) -> Text -> Text -> m a -> m a+throwIf f caller funName m = do+ a <- m+ liftIO $ when (f a) $+ (SDLCallFailed caller funName <$> getError) >>= throwIO+ return a++throwIf_ :: MonadIO m => (a -> Bool) -> Text -> Text -> m a -> m ()+throwIf_ f caller funName m = throwIf f caller funName m >> return ()++throwIfNeg :: (MonadIO m, Num a, Ord a) => Text -> Text -> m a -> m a+throwIfNeg = throwIf (< 0)++throwIfNeg_ :: (MonadIO m, Num a, Ord a) => Text -> Text -> m a -> m ()+throwIfNeg_ = throwIf_ (< 0)++throwIfNull :: (MonadIO m) => Text -> Text -> m (Ptr a) -> m (Ptr a)+throwIfNull = throwIf (== nullPtr)++throwIf0 :: (Eq a, MonadIO m, Num a) => Text -> Text -> m a -> m a+throwIf0 = throwIf (== 0)++throwIfNot0 :: (Eq a, MonadIO m, Num a) => Text -> Text -> m a -> m a+throwIfNot0 = throwIf (/= 0)++throwIfNot0_ :: (Eq a, MonadIO m, Num a) => Text -> Text -> m a -> m ()+throwIfNot0_ = throwIf_ (/= 0)++fromC :: Show a => Text -> Text -> (a -> Maybe b) -> a -> b+fromC caller funName f x =+ fromMaybe (throw (SDLUnexpectedArgument caller+ funName+ (show x)))+ (f x)
src/SDL/Filesystem.hs view
@@ -1,51 +1,51 @@-{-# LANGUAGE CPP#-} -{-# LANGUAGE OverloadedStrings #-} - -module SDL.Filesystem - ( -- * Filesystem Paths - getBasePath - , getPrefPath -) where - -import Control.Exception -import Control.Monad.IO.Class (MonadIO, liftIO) -import Data.Text (Text) -import Foreign.Marshal.Alloc -import SDL.Exception -import qualified Data.ByteString as BS -import qualified Data.Text.Encoding as Text -import qualified SDL.Raw.Filesystem as Raw - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - --- | An absolute path to the application data directory. --- --- The path is guaranteed to end with a path separator. --- --- Throws 'SDLException' on failure, or if the platform does not implement this --- functionality. -getBasePath :: MonadIO m => m Text -getBasePath = liftIO $ mask_ $ do - cpath <- throwIfNull "SDL.Filesystem.getBasePath" "SDL_GetBasePath" - Raw.getBasePath - finally (Text.decodeUtf8 <$> BS.packCString cpath) (free cpath) - --- | A path to a unique per user and per application directory for the given --- organization and application name, intended for writing preferences and --- other personal files. --- --- The path is guaranteed to end with a path separator. --- --- You should assume the path returned by this function is the only safe place --- to write files to. --- --- Throws 'SDLException' on failure. -getPrefPath :: MonadIO m => Text -> Text -> m Text -getPrefPath organization application = liftIO $ mask_ $ do - cpath <- throwIfNull "SDL.Filesystem.getPrefPath" "SDL_GetPrefPath" $ - BS.useAsCString (Text.encodeUtf8 organization) $ \org -> - BS.useAsCString (Text.encodeUtf8 application) $ \app -> - Raw.getPrefPath org app - finally (Text.decodeUtf8 <$> BS.packCString cpath) (free cpath) +{-# LANGUAGE CPP#-}+{-# LANGUAGE OverloadedStrings #-}++module SDL.Filesystem+ ( -- * Filesystem Paths+ getBasePath+ , getPrefPath+) where++import Control.Exception+import Control.Monad.IO.Class (MonadIO, liftIO)+import Data.Text (Text)+import Foreign.Marshal.Alloc+import SDL.Exception+import qualified Data.ByteString as BS+import qualified Data.Text.Encoding as Text+import qualified SDL.Raw.Filesystem as Raw++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++-- | An absolute path to the application data directory.+--+-- The path is guaranteed to end with a path separator.+--+-- Throws 'SDLException' on failure, or if the platform does not implement this+-- functionality.+getBasePath :: MonadIO m => m Text+getBasePath = liftIO $ mask_ $ do+ cpath <- throwIfNull "SDL.Filesystem.getBasePath" "SDL_GetBasePath"+ Raw.getBasePath+ finally (Text.decodeUtf8 <$> BS.packCString cpath) (free cpath)++-- | A path to a unique per user and per application directory for the given+-- organization and application name, intended for writing preferences and+-- other personal files.+--+-- The path is guaranteed to end with a path separator.+--+-- You should assume the path returned by this function is the only safe place+-- to write files to.+--+-- Throws 'SDLException' on failure.+getPrefPath :: MonadIO m => Text -> Text -> m Text+getPrefPath organization application = liftIO $ mask_ $ do+ cpath <- throwIfNull "SDL.Filesystem.getPrefPath" "SDL_GetPrefPath" $+ BS.useAsCString (Text.encodeUtf8 organization) $ \org ->+ BS.useAsCString (Text.encodeUtf8 application) $ \app ->+ Raw.getPrefPath org app+ finally (Text.decodeUtf8 <$> BS.packCString cpath) (free cpath)
src/SDL/Init.hs view
@@ -1,80 +1,80 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE OverloadedStrings #-} - -module SDL.Init - ( initialize - , initializeAll - , InitFlag(..) - , quit - , version - ) where - -import Control.Monad.IO.Class (MonadIO, liftIO) -import Data.Bitmask (foldFlags) -import Data.Data (Data) -import Data.Typeable -import Data.Word -import Foreign.Marshal.Alloc -import Foreign.Storable -import GHC.Generics -import SDL.Exception -import SDL.Internal.Numbered -import qualified SDL.Raw as Raw - -#if !MIN_VERSION_base(4,8,0) -import Data.Foldable -#endif - -{-# DEPRECATED InitEverything "Instead of initialize [InitEverything], use initializeAll" #-} -data InitFlag - = InitTimer - | InitAudio - | InitVideo - | InitJoystick - | InitHaptic - | InitGameController - | InitEvents - | InitEverything - deriving (Bounded, Data, Enum, Eq, Generic, Ord, Read, Show, Typeable) - -instance ToNumber InitFlag Word32 where - toNumber InitTimer = Raw.SDL_INIT_TIMER - toNumber InitAudio = Raw.SDL_INIT_AUDIO - toNumber InitVideo = Raw.SDL_INIT_VIDEO - toNumber InitJoystick = Raw.SDL_INIT_JOYSTICK - toNumber InitHaptic = Raw.SDL_INIT_HAPTIC - toNumber InitGameController = Raw.SDL_INIT_GAMECONTROLLER - toNumber InitEvents = Raw.SDL_INIT_EVENTS - toNumber InitEverything = Raw.SDL_INIT_EVERYTHING - --- | Initializes SDL and the given subsystems. Do not call any SDL functions --- prior to this one, unless otherwise documented that you may do so. --- --- You may call this function again with additional subsystems to initialize. --- --- Throws 'SDLEx.SDLException' if initialization fails. -initialize :: (Foldable f, Functor m, MonadIO m) => f InitFlag -> m () -initialize flags = - throwIfNeg_ "SDL.Init.init" "SDL_Init" $ - Raw.init (foldFlags toNumber flags) - --- | Equivalent to @'initialize' ['minBound' .. 'maxBound']@. -initializeAll :: (Functor m, MonadIO m) => m () -initializeAll = initialize [minBound .. maxBound] - --- | Quit and shutdown SDL, freeing any resources that may have been in use. --- Do not call any SDL functions after you've called this function, unless --- otherwise documented that you may do so. -quit :: MonadIO m => m () -quit = Raw.quit - --- | The major, minor, and patch versions of the SDL library linked with. --- Does not require initialization. -version :: (Integral a, MonadIO m) => m (a, a, a) -version = liftIO $ do - Raw.Version major minor patch <- alloca $ \v -> Raw.getVersion v >> peek v - return (fromIntegral major, fromIntegral minor, fromIntegral patch) +{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}++module SDL.Init+ ( initialize+ , initializeAll+ , InitFlag(..)+ , quit+ , version+ ) where++import Control.Monad.IO.Class (MonadIO, liftIO)+import Data.Bitmask (foldFlags)+import Data.Data (Data)+import Data.Typeable+import Data.Word+import Foreign.Marshal.Alloc+import Foreign.Storable+import GHC.Generics+import SDL.Exception+import SDL.Internal.Numbered+import qualified SDL.Raw as Raw++#if !MIN_VERSION_base(4,8,0)+import Data.Foldable+#endif++{-# DEPRECATED InitEverything "Instead of initialize [InitEverything], use initializeAll" #-}+data InitFlag+ = InitTimer+ | InitAudio+ | InitVideo+ | InitJoystick+ | InitHaptic+ | InitGameController+ | InitEvents+ | InitEverything+ deriving (Bounded, Data, Enum, Eq, Generic, Ord, Read, Show, Typeable)++instance ToNumber InitFlag Word32 where+ toNumber InitTimer = Raw.SDL_INIT_TIMER+ toNumber InitAudio = Raw.SDL_INIT_AUDIO+ toNumber InitVideo = Raw.SDL_INIT_VIDEO+ toNumber InitJoystick = Raw.SDL_INIT_JOYSTICK+ toNumber InitHaptic = Raw.SDL_INIT_HAPTIC+ toNumber InitGameController = Raw.SDL_INIT_GAMECONTROLLER+ toNumber InitEvents = Raw.SDL_INIT_EVENTS+ toNumber InitEverything = Raw.SDL_INIT_EVERYTHING++-- | Initializes SDL and the given subsystems. Do not call any SDL functions+-- prior to this one, unless otherwise documented that you may do so.+--+-- You may call this function again with additional subsystems to initialize.+--+-- Throws 'SDLEx.SDLException' if initialization fails.+initialize :: (Foldable f, Functor m, MonadIO m) => f InitFlag -> m ()+initialize flags =+ throwIfNeg_ "SDL.Init.init" "SDL_Init" $+ Raw.init (foldFlags toNumber flags)++-- | Equivalent to @'initialize' ['minBound' .. 'maxBound']@.+initializeAll :: (Functor m, MonadIO m) => m ()+initializeAll = initialize [minBound .. maxBound]++-- | Quit and shutdown SDL, freeing any resources that may have been in use.+-- Do not call any SDL functions after you've called this function, unless+-- otherwise documented that you may do so.+quit :: MonadIO m => m ()+quit = Raw.quit++-- | The major, minor, and patch versions of the SDL library linked with.+-- Does not require initialization.+version :: (Integral a, MonadIO m) => m (a, a, a)+version = liftIO $ do+ Raw.Version major minor patch <- alloca $ \v -> Raw.getVersion v >> peek v+ return (fromIntegral major, fromIntegral minor, fromIntegral patch)
src/SDL/Input.hs view
@@ -1,10 +1,10 @@-module SDL.Input - ( module SDL.Input.Joystick - , module SDL.Input.Keyboard - , module SDL.Input.Mouse - ) where - - -import SDL.Input.Joystick -import SDL.Input.Keyboard -import SDL.Input.Mouse +module SDL.Input+ ( module SDL.Input.Joystick+ , module SDL.Input.Keyboard+ , module SDL.Input.Mouse+ ) where+++import SDL.Input.Joystick+import SDL.Input.Keyboard+import SDL.Input.Mouse
src/SDL/Input/Keyboard.hs view
@@ -1,166 +1,166 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE MultiParamTypeClasses #-} - -module SDL.Input.Keyboard - ( -- * Keyboard Modifiers - getModState - , KeyModifier(..) - - , getKeyboardState - - -- * Text Input - , startTextInput - , stopTextInput - - -- * Screen Keyboard - , hasScreenKeyboardSupport - , isScreenKeyboardShown - - -- * Scancodes - , getScancodeName - , Scancode(..) - - -- * Keycodes - , Keycode(..) - - -- * Keysym - , Keysym(..) - - -- * Keycodes and Scancodes - , module SDL.Input.Keyboard.Codes -) where - -import Control.Monad.IO.Class (MonadIO, liftIO) -import Data.Bits -import Data.Data (Data) -import Data.Typeable -import Data.Word -import Foreign.C.String -import Foreign.Marshal.Alloc -import Foreign.Marshal.Array -import Foreign.Storable -import GHC.Generics (Generic) -import SDL.Input.Keyboard.Codes -import SDL.Internal.Numbered -import SDL.Internal.Types -import qualified Data.Vector as V -import qualified SDL.Raw.Enum as Raw -import qualified SDL.Raw.Event as Raw -import qualified SDL.Raw.Types as Raw - -#if !MIN_VERSION_base(4,8,0) -import Control.Applicative -#endif - --- | Get the current key modifier state for the keyboard. The key modifier state is a mask special keys that are held down. --- --- See @<https://wiki.libsdl.org/SDL_GetModState SDL_GetModState>@ for C documentation. -getModState :: (Functor m, MonadIO m) => m KeyModifier -getModState = fromNumber <$> Raw.getModState - --- | Information about which keys are currently held down. Use 'getModState' to generate this information. -data KeyModifier = KeyModifier - { keyModifierLeftShift :: Bool - , keyModifierRightShift :: Bool - , keyModifierLeftCtrl :: Bool - , keyModifierRightCtrl :: Bool - , keyModifierLeftAlt :: Bool - , keyModifierRightAlt :: Bool - , keyModifierLeftGUI :: Bool - , keyModifierRightGUI :: Bool - , keyModifierNumLock :: Bool - , keyModifierCapsLock :: Bool - , keyModifierAltGr :: Bool - } deriving (Data, Eq, Ord, Read, Generic, Show, Typeable) - -instance FromNumber KeyModifier Word32 where - fromNumber m' = let m = m' in KeyModifier - { keyModifierLeftShift = m .&. Raw.KMOD_LSHIFT > 0 - , keyModifierRightShift = m .&. Raw.KMOD_RSHIFT > 0 - , keyModifierLeftCtrl = m .&. Raw.KMOD_LCTRL > 0 - , keyModifierRightCtrl = m .&. Raw.KMOD_RCTRL > 0 - , keyModifierLeftAlt = m .&. Raw.KMOD_LALT > 0 - , keyModifierRightAlt = m .&. Raw.KMOD_RALT > 0 - , keyModifierLeftGUI = m .&. Raw.KMOD_LGUI > 0 - , keyModifierRightGUI = m .&. Raw.KMOD_RGUI > 0 - , keyModifierNumLock = m .&. Raw.KMOD_NUM > 0 - , keyModifierCapsLock = m .&. Raw.KMOD_CAPS > 0 - , keyModifierAltGr = m .&. Raw.KMOD_MODE > 0 - } - -instance ToNumber KeyModifier Word32 where - toNumber m = foldr (.|.) 0 - [ if keyModifierLeftShift m then Raw.KMOD_LSHIFT else 0 - , if keyModifierRightShift m then Raw.KMOD_RSHIFT else 0 - , if keyModifierLeftCtrl m then Raw.KMOD_LCTRL else 0 - , if keyModifierRightCtrl m then Raw.KMOD_RCTRL else 0 - , if keyModifierLeftAlt m then Raw.KMOD_LALT else 0 - , if keyModifierRightAlt m then Raw.KMOD_RALT else 0 - , if keyModifierLeftGUI m then Raw.KMOD_LGUI else 0 - , if keyModifierRightGUI m then Raw.KMOD_RGUI else 0 - , if keyModifierNumLock m then Raw.KMOD_NUM else 0 - , if keyModifierCapsLock m then Raw.KMOD_CAPS else 0 - , if keyModifierAltGr m then Raw.KMOD_MODE else 0 - ] - --- | Set the rectangle used to type text inputs and start accepting text input --- events. --- --- See @<https://wiki.libsdl.org/SDL_StartTextInput SDL_StartTextInput>@ for C documentation. -startTextInput :: MonadIO m => Raw.Rect -> m () -startTextInput rect = liftIO $ do - alloca $ \ptr -> do - poke ptr rect - Raw.setTextInputRect ptr - Raw.startTextInput - --- | Stop receiving any text input events. --- --- See @<https://wiki.libsdl.org/SDL_StopTextInput SDL_StopTextInput>@ for C documentation. -stopTextInput :: MonadIO m => m () -stopTextInput = Raw.stopTextInput - --- | Check whether the platform has screen keyboard support. --- --- See @<https://wiki.libsdl.org/SDL_HasScreenKeyboardSupport SDL_HasScreenKeyboardSupport>@ for C documentation. -hasScreenKeyboardSupport :: MonadIO m => m Bool -hasScreenKeyboardSupport = Raw.hasScreenKeyboardSupport - --- | Check whether the screen keyboard is shown for the given window. --- --- See @<https://wiki.libsdl.org/SDL_IsScreenKeyboardShown SDL_IsScreenKeyboardShown>@ for C documentation. -isScreenKeyboardShown :: MonadIO m => Window -> m Bool -isScreenKeyboardShown (Window w) = Raw.isScreenKeyboardShown w - --- | Get a human-readable name for a scancode. If the scancode doesn't have a name this function returns the empty string. --- --- See @<https://wiki.libsdl.org/SDL_GetScancodeName SDL_GetScancodeName>@ for C documentation. -getScancodeName :: MonadIO m => Scancode -> m String -getScancodeName scancode = liftIO $ do - name <- Raw.getScancodeName $ toNumber scancode - peekCString name - --- | Information about a key press or key release event. -data Keysym = Keysym - { keysymScancode :: Scancode - -- ^ The keyboard 'Scancode' - , keysymKeycode :: Keycode - -- ^ SDL's virtual key representation for this key - , keysymModifier :: KeyModifier - -- ^ A set of modifiers that were held at the time this data was generated - } deriving (Data, Eq, Generic, Ord, Read, Show, Typeable) - --- | Get a snapshot of the current state of the keyboard. --- --- This computation generates a mapping from 'Scancode' to 'Bool' - evaluating the function at specific 'Scancode's will inform you as to whether or not that key was held down when 'getKeyboardState' was called. --- --- See @<https://wiki.libsdl.org/SDL_GetKeyboardState SDL_GetKeyboardState>@ for C documentation. -getKeyboardState :: MonadIO m => m (Scancode -> Bool) -getKeyboardState = liftIO $ do - alloca $ \nkeys -> do - keyptr <- Raw.getKeyboardState nkeys - n <- peek nkeys - keys <- V.fromList <$> peekArray (fromIntegral n) keyptr - return $ \scancode -> 1 == keys V.! fromIntegral (toNumber scancode) +{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE MultiParamTypeClasses #-}++module SDL.Input.Keyboard+ ( -- * Keyboard Modifiers+ getModState+ , KeyModifier(..)++ , getKeyboardState++ -- * Text Input+ , startTextInput+ , stopTextInput++ -- * Screen Keyboard+ , hasScreenKeyboardSupport+ , isScreenKeyboardShown++ -- * Scancodes+ , getScancodeName+ , Scancode(..)++ -- * Keycodes+ , Keycode(..)++ -- * Keysym+ , Keysym(..)++ -- * Keycodes and Scancodes+ , module SDL.Input.Keyboard.Codes+) where++import Control.Monad.IO.Class (MonadIO, liftIO)+import Data.Bits+import Data.Data (Data)+import Data.Typeable+import Data.Word+import Foreign.C.String+import Foreign.Marshal.Alloc+import Foreign.Marshal.Array+import Foreign.Storable+import GHC.Generics (Generic)+import SDL.Input.Keyboard.Codes+import SDL.Internal.Numbered+import SDL.Internal.Types+import qualified Data.Vector as V+import qualified SDL.Raw.Enum as Raw+import qualified SDL.Raw.Event as Raw+import qualified SDL.Raw.Types as Raw++#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif++-- | Get the current key modifier state for the keyboard. The key modifier state is a mask special keys that are held down.+--+-- See @<https://wiki.libsdl.org/SDL_GetModState SDL_GetModState>@ for C documentation.+getModState :: (Functor m, MonadIO m) => m KeyModifier+getModState = fromNumber <$> Raw.getModState++-- | Information about which keys are currently held down. Use 'getModState' to generate this information.+data KeyModifier = KeyModifier+ { keyModifierLeftShift :: Bool+ , keyModifierRightShift :: Bool+ , keyModifierLeftCtrl :: Bool+ , keyModifierRightCtrl :: Bool+ , keyModifierLeftAlt :: Bool+ , keyModifierRightAlt :: Bool+ , keyModifierLeftGUI :: Bool+ , keyModifierRightGUI :: Bool+ , keyModifierNumLock :: Bool+ , keyModifierCapsLock :: Bool+ , keyModifierAltGr :: Bool+ } deriving (Data, Eq, Ord, Read, Generic, Show, Typeable)++instance FromNumber KeyModifier Word32 where+ fromNumber m' = let m = m' in KeyModifier+ { keyModifierLeftShift = m .&. Raw.KMOD_LSHIFT > 0+ , keyModifierRightShift = m .&. Raw.KMOD_RSHIFT > 0+ , keyModifierLeftCtrl = m .&. Raw.KMOD_LCTRL > 0+ , keyModifierRightCtrl = m .&. Raw.KMOD_RCTRL > 0+ , keyModifierLeftAlt = m .&. Raw.KMOD_LALT > 0+ , keyModifierRightAlt = m .&. Raw.KMOD_RALT > 0+ , keyModifierLeftGUI = m .&. Raw.KMOD_LGUI > 0+ , keyModifierRightGUI = m .&. Raw.KMOD_RGUI > 0+ , keyModifierNumLock = m .&. Raw.KMOD_NUM > 0+ , keyModifierCapsLock = m .&. Raw.KMOD_CAPS > 0+ , keyModifierAltGr = m .&. Raw.KMOD_MODE > 0+ }++instance ToNumber KeyModifier Word32 where+ toNumber m = foldr (.|.) 0+ [ if keyModifierLeftShift m then Raw.KMOD_LSHIFT else 0+ , if keyModifierRightShift m then Raw.KMOD_RSHIFT else 0+ , if keyModifierLeftCtrl m then Raw.KMOD_LCTRL else 0+ , if keyModifierRightCtrl m then Raw.KMOD_RCTRL else 0+ , if keyModifierLeftAlt m then Raw.KMOD_LALT else 0+ , if keyModifierRightAlt m then Raw.KMOD_RALT else 0+ , if keyModifierLeftGUI m then Raw.KMOD_LGUI else 0+ , if keyModifierRightGUI m then Raw.KMOD_RGUI else 0+ , if keyModifierNumLock m then Raw.KMOD_NUM else 0+ , if keyModifierCapsLock m then Raw.KMOD_CAPS else 0+ , if keyModifierAltGr m then Raw.KMOD_MODE else 0+ ]++-- | Set the rectangle used to type text inputs and start accepting text input+-- events.+--+-- See @<https://wiki.libsdl.org/SDL_StartTextInput SDL_StartTextInput>@ for C documentation.+startTextInput :: MonadIO m => Raw.Rect -> m ()+startTextInput rect = liftIO $ do+ alloca $ \ptr -> do+ poke ptr rect+ Raw.setTextInputRect ptr+ Raw.startTextInput++-- | Stop receiving any text input events.+--+-- See @<https://wiki.libsdl.org/SDL_StopTextInput SDL_StopTextInput>@ for C documentation.+stopTextInput :: MonadIO m => m ()+stopTextInput = Raw.stopTextInput++-- | Check whether the platform has screen keyboard support.+--+-- See @<https://wiki.libsdl.org/SDL_HasScreenKeyboardSupport SDL_HasScreenKeyboardSupport>@ for C documentation.+hasScreenKeyboardSupport :: MonadIO m => m Bool+hasScreenKeyboardSupport = Raw.hasScreenKeyboardSupport++-- | Check whether the screen keyboard is shown for the given window.+--+-- See @<https://wiki.libsdl.org/SDL_IsScreenKeyboardShown SDL_IsScreenKeyboardShown>@ for C documentation.+isScreenKeyboardShown :: MonadIO m => Window -> m Bool+isScreenKeyboardShown (Window w) = Raw.isScreenKeyboardShown w++-- | Get a human-readable name for a scancode. If the scancode doesn't have a name this function returns the empty string.+--+-- See @<https://wiki.libsdl.org/SDL_GetScancodeName SDL_GetScancodeName>@ for C documentation.+getScancodeName :: MonadIO m => Scancode -> m String+getScancodeName scancode = liftIO $ do+ name <- Raw.getScancodeName $ toNumber scancode+ peekCString name++-- | Information about a key press or key release event.+data Keysym = Keysym+ { keysymScancode :: Scancode+ -- ^ The keyboard 'Scancode'+ , keysymKeycode :: Keycode+ -- ^ SDL's virtual key representation for this key+ , keysymModifier :: KeyModifier+ -- ^ A set of modifiers that were held at the time this data was generated+ } deriving (Data, Eq, Generic, Ord, Read, Show, Typeable)++-- | Get a snapshot of the current state of the keyboard.+--+-- This computation generates a mapping from 'Scancode' to 'Bool' - evaluating the function at specific 'Scancode's will inform you as to whether or not that key was held down when 'getKeyboardState' was called.+--+-- See @<https://wiki.libsdl.org/SDL_GetKeyboardState SDL_GetKeyboardState>@ for C documentation.+getKeyboardState :: MonadIO m => m (Scancode -> Bool)+getKeyboardState = liftIO $ do+ alloca $ \nkeys -> do+ keyptr <- Raw.getKeyboardState nkeys+ n <- peek nkeys+ keys <- V.fromList <$> peekArray (fromIntegral n) keyptr+ return $ \scancode -> 1 == keys V.! fromIntegral (toNumber scancode)
src/SDL/Input/Keyboard/Codes.hs view
@@ -1,1011 +1,1011 @@-{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE PatternSynonyms #-} - -{-| - -An enumeration of scancodes and keycodes, allowing you to pattern match on keyboard keys. - -This module uses a relatively new GHC feature called @PatternSynonyms@ in order to provide pattern -matches over the underlying 'Scancode' or 'Keycode'. We do this so that you are also able to -work with vendor-specific or otherwise unknown codes. - --} - -module SDL.Input.Keyboard.Codes - (-- * Scancodes - -- | Scancodes are codes that correspond to the physical position of a key, independent of the current keyboard layout. - -- Scancodes are meant to be layout-independent. Think of this as \"the user pressed the Q key as it would be on a US QWERTY keyboard\" regardless of whether this is actually a European keyboard or a Dvorak keyboard or whatever. The scancode is always the same key position. - -- 'Scancode' makes sense when you want key presses based on their location on a keyboard - for example, the traditional \"WASD\" layout used in first-person shooters. - Scancode(..), - pattern ScancodeUnknown, - pattern ScancodeA, - pattern ScancodeB, - pattern ScancodeC, - pattern ScancodeD, - pattern ScancodeE, - pattern ScancodeF, - pattern ScancodeG, - pattern ScancodeH, - pattern ScancodeI, - pattern ScancodeJ, - pattern ScancodeK, - pattern ScancodeL, - pattern ScancodeM, - pattern ScancodeN, - pattern ScancodeO, - pattern ScancodeP, - pattern ScancodeQ, - pattern ScancodeR, - pattern ScancodeS, - pattern ScancodeT, - pattern ScancodeU, - pattern ScancodeV, - pattern ScancodeW, - pattern ScancodeX, - pattern ScancodeY, - pattern ScancodeZ, - pattern Scancode1, - pattern Scancode2, - pattern Scancode3, - pattern Scancode4, - pattern Scancode5, - pattern Scancode6, - pattern Scancode7, - pattern Scancode8, - pattern Scancode9, - pattern Scancode0, - pattern ScancodeReturn, - pattern ScancodeEscape, - pattern ScancodeBackspace, - pattern ScancodeTab, - pattern ScancodeSpace, - pattern ScancodeMinus, - pattern ScancodeEquals, - pattern ScancodeLeftBracket, - pattern ScancodeRightBracket, - pattern ScancodeBackslash, - pattern ScancodeNonUSHash, - pattern ScancodeSemicolon, - pattern ScancodeApostrophe, - pattern ScancodeGrave, - pattern ScancodeComma, - pattern ScancodePeriod, - pattern ScancodeSlash, - pattern ScancodeCapsLock, - pattern ScancodeF1, - pattern ScancodeF2, - pattern ScancodeF3, - pattern ScancodeF4, - pattern ScancodeF5, - pattern ScancodeF6, - pattern ScancodeF7, - pattern ScancodeF8, - pattern ScancodeF9, - pattern ScancodeF10, - pattern ScancodeF11, - pattern ScancodeF12, - pattern ScancodePrintScreen, - pattern ScancodeScrollLock, - pattern ScancodePause, - pattern ScancodeInsert, - pattern ScancodeHome, - pattern ScancodePageUp, - pattern ScancodeDelete, - pattern ScancodeEnd, - pattern ScancodePageDown, - pattern ScancodeRight, - pattern ScancodeLeft, - pattern ScancodeDown, - pattern ScancodeUp, - pattern ScancodeNumLockClear, - pattern ScancodeKPDivide, - pattern ScancodeKPMultiply, - pattern ScancodeKPMinus, - pattern ScancodeKPPlus, - pattern ScancodeKPEnter, - pattern ScancodeKP1, - pattern ScancodeKP2, - pattern ScancodeKP3, - pattern ScancodeKP4, - pattern ScancodeKP5, - pattern ScancodeKP6, - pattern ScancodeKP7, - pattern ScancodeKP8, - pattern ScancodeKP9, - pattern ScancodeKP0, - pattern ScancodeKPPeriod, - pattern ScancodeNonUSBackslash, - pattern ScancodeApplication, - pattern ScancodePower, - pattern ScancodeKPEquals, - pattern ScancodeF13, - pattern ScancodeF14, - pattern ScancodeF15, - pattern ScancodeF16, - pattern ScancodeF17, - pattern ScancodeF18, - pattern ScancodeF19, - pattern ScancodeF20, - pattern ScancodeF21, - pattern ScancodeF22, - pattern ScancodeF23, - pattern ScancodeF24, - pattern ScancodeExecute, - pattern ScancodeHelp, - pattern ScancodeMenu, - pattern ScancodeSelect, - pattern ScancodeStop, - pattern ScancodeAgain, - pattern ScancodeUndo, - pattern ScancodeCut, - pattern ScancodeCopy, - pattern ScancodePaste, - pattern ScancodeFind, - pattern ScancodeMute, - pattern ScancodeVolumeUp, - pattern ScancodeVolumeDown, - pattern ScancodeKPComma, - pattern ScancodeKPEqualsAS400, - pattern ScancodeInternational1, - pattern ScancodeInternational2, - pattern ScancodeInternational3, - pattern ScancodeInternational4, - pattern ScancodeInternational5, - pattern ScancodeInternational6, - pattern ScancodeInternational7, - pattern ScancodeInternational8, - pattern ScancodeInternational9, - pattern ScancodeLang1, - pattern ScancodeLang2, - pattern ScancodeLang3, - pattern ScancodeLang4, - pattern ScancodeLang5, - pattern ScancodeLang6, - pattern ScancodeLang7, - pattern ScancodeLang8, - pattern ScancodeLang9, - pattern ScancodeAltErase, - pattern ScancodeSysReq, - pattern ScancodeCancel, - pattern ScancodeClear, - pattern ScancodePrior, - pattern ScancodeReturn2, - pattern ScancodeSeparator, - pattern ScancodeOut, - pattern ScancodeOper, - pattern ScancodeClearAgain, - pattern ScancodeCrSel, - pattern ScancodeExSel, - pattern ScancodeKP00, - pattern ScancodeKP000, - pattern ScancodeThousandsSeparator, - pattern ScancodeDecimalSeparator, - pattern ScancodeCurrencyUnit, - pattern ScancodeCurrencySubunit, - pattern ScancodeLeftParen, - pattern ScancodeRightParen, - pattern ScancodeLeftBrace, - pattern ScancodeRightBrace, - pattern ScancodeKPTab, - pattern ScancodeKPBackspace, - pattern ScancodeKPA, - pattern ScancodeKPB, - pattern ScancodeKPC, - pattern ScancodeKPD, - pattern ScancodeKPE, - pattern ScancodeKPF, - pattern ScancodeKPXOR, - pattern ScancodeKPPower, - pattern ScancodeKPPercent, - pattern ScancodeKPLess, - pattern ScancodeKPGreater, - pattern ScancodeKPAmpersand, - pattern ScancodeKPDblAmpersand, - pattern ScancodeKPVerticalBar, - pattern ScancodeKPDblVerticalBar, - pattern ScancodeKPColon, - pattern ScancodeKPHash, - pattern ScancodeKPSpace, - pattern ScancodeKPAt, - pattern ScancodeKPExclam, - pattern ScancodeKPMemStore, - pattern ScancodeKPMemRecall, - pattern ScancodeKPMemClear, - pattern ScancodeKPMemAdd, - pattern ScancodeKPMemSubtract, - pattern ScancodeKPMemMultiply, - pattern ScancodeKPMemDivide, - pattern ScancodeKPPlusMinus, - pattern ScancodeKPClear, - pattern ScancodeKPClearEntry, - pattern ScancodeKPBinary, - pattern ScancodeKPOctal, - pattern ScancodeKPDecimal, - pattern ScancodeKPHexadecimal, - pattern ScancodeLCtrl, - pattern ScancodeLShift, - pattern ScancodeLAlt, - pattern ScancodeLGUI, - pattern ScancodeRCtrl, - pattern ScancodeRShift, - pattern ScancodeRAlt, - pattern ScancodeRGUI, - pattern ScancodeMode, - pattern ScancodeAudioNext, - pattern ScancodeAudioPrev, - pattern ScancodeAudioStop, - pattern ScancodeAudioPlay, - pattern ScancodeAudioMute, - pattern ScancodeMediaSelect, - pattern ScancodeWWW, - pattern ScancodeMail, - pattern ScancodeCalculator, - pattern ScancodeComputer, - pattern ScancodeACSearch, - pattern ScancodeACHome, - pattern ScancodeACBack, - pattern ScancodeACForward, - pattern ScancodeACStop, - pattern ScancodeACRefresh, - pattern ScancodeACBookmarks, - pattern ScancodeBrightnessDown, - pattern ScancodeBrightnessUp, - pattern ScancodeDisplaySwitch, - pattern ScancodeKBDIllumToggle, - pattern ScancodeKBDIllumDown, - pattern ScancodeKBDIllumUp, - pattern ScancodeEject, - pattern ScancodeSleep, - pattern ScancodeApp1, - pattern ScancodeApp2, - - -- * Keycode - -- | Keycodes are layout-dependent codes, in that the code you receive can change for the same physical key depending on the users keyboard layout. - -- Think of this as "the user pressed the key that is labelled 'Q' on a specific keyboard." - -- 'Keycode' makes sense when you are anticipating the user to press either keys that match some mneumonic, or they are entering text. - Keycode(..), - pattern KeycodeUnknown, - pattern KeycodeReturn, - pattern KeycodeEscape, - pattern KeycodeBackspace, - pattern KeycodeTab, - pattern KeycodeSpace, - pattern KeycodeExclaim, - pattern KeycodeQuoteDbl, - pattern KeycodeHash, - pattern KeycodePercent, - pattern KeycodeDollar, - pattern KeycodeAmpersand, - pattern KeycodeQuote, - pattern KeycodeLeftParen, - pattern KeycodeRightParen, - pattern KeycodeAsterisk, - pattern KeycodePlus, - pattern KeycodeComma, - pattern KeycodeMinus, - pattern KeycodePeriod, - pattern KeycodeSlash, - pattern Keycode0, - pattern Keycode1, - pattern Keycode2, - pattern Keycode3, - pattern Keycode4, - pattern Keycode5, - pattern Keycode6, - pattern Keycode7, - pattern Keycode8, - pattern Keycode9, - pattern KeycodeColon, - pattern KeycodeSemicolon, - pattern KeycodeLess, - pattern KeycodeEquals, - pattern KeycodeGreater, - pattern KeycodeQuestion, - pattern KeycodeAt, - pattern KeycodeLeftBracket, - pattern KeycodeBackslash, - pattern KeycodeRightBracket, - pattern KeycodeCaret, - pattern KeycodeUnderscore, - pattern KeycodeBackquote, - pattern KeycodeA, - pattern KeycodeB, - pattern KeycodeC, - pattern KeycodeD, - pattern KeycodeE, - pattern KeycodeF, - pattern KeycodeG, - pattern KeycodeH, - pattern KeycodeI, - pattern KeycodeJ, - pattern KeycodeK, - pattern KeycodeL, - pattern KeycodeM, - pattern KeycodeN, - pattern KeycodeO, - pattern KeycodeP, - pattern KeycodeQ, - pattern KeycodeR, - pattern KeycodeS, - pattern KeycodeT, - pattern KeycodeU, - pattern KeycodeV, - pattern KeycodeW, - pattern KeycodeX, - pattern KeycodeY, - pattern KeycodeZ, - pattern KeycodeCapsLock, - pattern KeycodeF1, - pattern KeycodeF2, - pattern KeycodeF3, - pattern KeycodeF4, - pattern KeycodeF5, - pattern KeycodeF6, - pattern KeycodeF7, - pattern KeycodeF8, - pattern KeycodeF9, - pattern KeycodeF10, - pattern KeycodeF11, - pattern KeycodeF12, - pattern KeycodePrintScreen, - pattern KeycodeScrollLock, - pattern KeycodePause, - pattern KeycodeInsert, - pattern KeycodeHome, - pattern KeycodePageUp, - pattern KeycodeDelete, - pattern KeycodeEnd, - pattern KeycodePageDown, - pattern KeycodeRight, - pattern KeycodeLeft, - pattern KeycodeDown, - pattern KeycodeUp, - pattern KeycodeNumLockClear, - pattern KeycodeKPDivide, - pattern KeycodeKPMultiply, - pattern KeycodeKPMinus, - pattern KeycodeKPPlus, - pattern KeycodeKPEnter, - pattern KeycodeKP1, - pattern KeycodeKP2, - pattern KeycodeKP3, - pattern KeycodeKP4, - pattern KeycodeKP5, - pattern KeycodeKP6, - pattern KeycodeKP7, - pattern KeycodeKP8, - pattern KeycodeKP9, - pattern KeycodeKP0, - pattern KeycodeKPPeriod, - pattern KeycodeApplication, - pattern KeycodePower, - pattern KeycodeKPEquals, - pattern KeycodeF13, - pattern KeycodeF14, - pattern KeycodeF15, - pattern KeycodeF16, - pattern KeycodeF17, - pattern KeycodeF18, - pattern KeycodeF19, - pattern KeycodeF20, - pattern KeycodeF21, - pattern KeycodeF22, - pattern KeycodeF23, - pattern KeycodeF24, - pattern KeycodeExecute, - pattern KeycodeHelp, - pattern KeycodeMenu, - pattern KeycodeSelect, - pattern KeycodeStop, - pattern KeycodeAgain, - pattern KeycodeUndo, - pattern KeycodeCut, - pattern KeycodeCopy, - pattern KeycodePaste, - pattern KeycodeFind, - pattern KeycodeMute, - pattern KeycodeVolumeUp, - pattern KeycodeVolumeDown, - pattern KeycodeKPComma, - pattern KeycodeKPEqualsAS400, - pattern KeycodeAltErase, - pattern KeycodeSysReq, - pattern KeycodeCancel, - pattern KeycodeClear, - pattern KeycodePrior, - pattern KeycodeReturn2, - pattern KeycodeSeparator, - pattern KeycodeOut, - pattern KeycodeOper, - pattern KeycodeClearAgain, - pattern KeycodeCrSel, - pattern KeycodeExSel, - pattern KeycodeKP00, - pattern KeycodeKP000, - pattern KeycodeThousandsSeparator, - pattern KeycodeDecimalSeparator, - pattern KeycodeCurrencyUnit, - pattern KeycodeCurrencySubunit, - pattern KeycodeKPLeftParen, - pattern KeycodeKPRightParen, - pattern KeycodeKPLeftBrace, - pattern KeycodeKPRightBrace, - pattern KeycodeKPTab, - pattern KeycodeKPBackspace, - pattern KeycodeKPA, - pattern KeycodeKPB, - pattern KeycodeKPC, - pattern KeycodeKPD, - pattern KeycodeKPE, - pattern KeycodeKPF, - pattern KeycodeKPXor, - pattern KeycodeKPPower, - pattern KeycodeKPPercent, - pattern KeycodeKPLess, - pattern KeycodeKPGreater, - pattern KeycodeKPAmpersand, - pattern KeycodeKPDblAmpersand, - pattern KeycodeKPVerticalBar, - pattern KeycodeKPDblVerticalBar, - pattern KeycodeKPColon, - pattern KeycodeKPHash, - pattern KeycodeKPSpace, - pattern KeycodeKPAt, - pattern KeycodeKPExclam, - pattern KeycodeKPMemStore, - pattern KeycodeKPMemRecall, - pattern KeycodeKPMemClear, - pattern KeycodeKPMemAdd, - pattern KeycodeKPMemSubtract, - pattern KeycodeKPMemMultiply, - pattern KeycodeKPMemDivide, - pattern KeycodeKPPlusMinus, - pattern KeycodeKPClear, - pattern KeycodeKPClearEntry, - pattern KeycodeKPBinary, - pattern KeycodeKPOctal, - pattern KeycodeKPDecimal, - pattern KeycodeKPHexadecimal, - pattern KeycodeLCtrl, - pattern KeycodeLShift, - pattern KeycodeLAlt, - pattern KeycodeLGUI, - pattern KeycodeRCtrl, - pattern KeycodeRShift, - pattern KeycodeRAlt, - pattern KeycodeRGUI, - pattern KeycodeMode, - pattern KeycodeAudioNext, - pattern KeycodeAudioPrev, - pattern KeycodeAudioStop, - pattern KeycodeAudioPlay, - pattern KeycodeAudioMute, - pattern KeycodeMediaSelect, - pattern KeycodeWWW, - pattern KeycodeMail, - pattern KeycodeCalculator, - pattern KeycodeComputer, - pattern KeycodeACSearch, - pattern KeycodeACHome, - pattern KeycodeACBack, - pattern KeycodeACForward, - pattern KeycodeACStop, - pattern KeycodeACRefresh, - pattern KeycodeACBookmarks, - pattern KeycodeBrightnessDown, - pattern KeycodeBrightnessUp, - pattern KeycodeDisplaySwitch, - pattern KeycodeKbdIllumToggle, - pattern KeycodeKbdIllumDown, - pattern KeycodeKbdIllumUp, - pattern KeycodeEject, - pattern KeycodeSleep) - - where - -import GHC.Generics (Generic) -import Data.Data (Data) -import Data.Int -import Data.Typeable -import Data.Word -import SDL.Internal.Numbered -import qualified SDL.Raw.Enum as Raw - -newtype Scancode = Scancode { unwrapScancode :: Word32 } - deriving (Bounded, Data, Eq, Ord, Read, Generic, Show, Typeable) - -pattern ScancodeUnknown = Scancode Raw.SDL_SCANCODE_UNKNOWN -pattern ScancodeA = Scancode Raw.SDL_SCANCODE_A -pattern ScancodeB = Scancode Raw.SDL_SCANCODE_B -pattern ScancodeC = Scancode Raw.SDL_SCANCODE_C -pattern ScancodeD = Scancode Raw.SDL_SCANCODE_D -pattern ScancodeE = Scancode Raw.SDL_SCANCODE_E -pattern ScancodeF = Scancode Raw.SDL_SCANCODE_F -pattern ScancodeG = Scancode Raw.SDL_SCANCODE_G -pattern ScancodeH = Scancode Raw.SDL_SCANCODE_H -pattern ScancodeI = Scancode Raw.SDL_SCANCODE_I -pattern ScancodeJ = Scancode Raw.SDL_SCANCODE_J -pattern ScancodeK = Scancode Raw.SDL_SCANCODE_K -pattern ScancodeL = Scancode Raw.SDL_SCANCODE_L -pattern ScancodeM = Scancode Raw.SDL_SCANCODE_M -pattern ScancodeN = Scancode Raw.SDL_SCANCODE_N -pattern ScancodeO = Scancode Raw.SDL_SCANCODE_O -pattern ScancodeP = Scancode Raw.SDL_SCANCODE_P -pattern ScancodeQ = Scancode Raw.SDL_SCANCODE_Q -pattern ScancodeR = Scancode Raw.SDL_SCANCODE_R -pattern ScancodeS = Scancode Raw.SDL_SCANCODE_S -pattern ScancodeT = Scancode Raw.SDL_SCANCODE_T -pattern ScancodeU = Scancode Raw.SDL_SCANCODE_U -pattern ScancodeV = Scancode Raw.SDL_SCANCODE_V -pattern ScancodeW = Scancode Raw.SDL_SCANCODE_W -pattern ScancodeX = Scancode Raw.SDL_SCANCODE_X -pattern ScancodeY = Scancode Raw.SDL_SCANCODE_Y -pattern ScancodeZ = Scancode Raw.SDL_SCANCODE_Z -pattern Scancode1 = Scancode Raw.SDL_SCANCODE_1 -pattern Scancode2 = Scancode Raw.SDL_SCANCODE_2 -pattern Scancode3 = Scancode Raw.SDL_SCANCODE_3 -pattern Scancode4 = Scancode Raw.SDL_SCANCODE_4 -pattern Scancode5 = Scancode Raw.SDL_SCANCODE_5 -pattern Scancode6 = Scancode Raw.SDL_SCANCODE_6 -pattern Scancode7 = Scancode Raw.SDL_SCANCODE_7 -pattern Scancode8 = Scancode Raw.SDL_SCANCODE_8 -pattern Scancode9 = Scancode Raw.SDL_SCANCODE_9 -pattern Scancode0 = Scancode Raw.SDL_SCANCODE_0 -pattern ScancodeReturn = Scancode Raw.SDL_SCANCODE_RETURN -pattern ScancodeEscape = Scancode Raw.SDL_SCANCODE_ESCAPE -pattern ScancodeBackspace = Scancode Raw.SDL_SCANCODE_BACKSPACE -pattern ScancodeTab = Scancode Raw.SDL_SCANCODE_TAB -pattern ScancodeSpace = Scancode Raw.SDL_SCANCODE_SPACE -pattern ScancodeMinus = Scancode Raw.SDL_SCANCODE_MINUS -pattern ScancodeEquals = Scancode Raw.SDL_SCANCODE_EQUALS -pattern ScancodeLeftBracket = Scancode Raw.SDL_SCANCODE_LEFTBRACKET -pattern ScancodeRightBracket = Scancode Raw.SDL_SCANCODE_RIGHTBRACKET -pattern ScancodeBackslash = Scancode Raw.SDL_SCANCODE_BACKSLASH -pattern ScancodeNonUSHash = Scancode Raw.SDL_SCANCODE_NONUSHASH -pattern ScancodeSemicolon = Scancode Raw.SDL_SCANCODE_SEMICOLON -pattern ScancodeApostrophe = Scancode Raw.SDL_SCANCODE_APOSTROPHE -pattern ScancodeGrave = Scancode Raw.SDL_SCANCODE_GRAVE -pattern ScancodeComma = Scancode Raw.SDL_SCANCODE_COMMA -pattern ScancodePeriod = Scancode Raw.SDL_SCANCODE_PERIOD -pattern ScancodeSlash = Scancode Raw.SDL_SCANCODE_SLASH -pattern ScancodeCapsLock = Scancode Raw.SDL_SCANCODE_CAPSLOCK -pattern ScancodeF1 = Scancode Raw.SDL_SCANCODE_F1 -pattern ScancodeF2 = Scancode Raw.SDL_SCANCODE_F2 -pattern ScancodeF3 = Scancode Raw.SDL_SCANCODE_F3 -pattern ScancodeF4 = Scancode Raw.SDL_SCANCODE_F4 -pattern ScancodeF5 = Scancode Raw.SDL_SCANCODE_F5 -pattern ScancodeF6 = Scancode Raw.SDL_SCANCODE_F6 -pattern ScancodeF7 = Scancode Raw.SDL_SCANCODE_F7 -pattern ScancodeF8 = Scancode Raw.SDL_SCANCODE_F8 -pattern ScancodeF9 = Scancode Raw.SDL_SCANCODE_F9 -pattern ScancodeF10 = Scancode Raw.SDL_SCANCODE_F10 -pattern ScancodeF11 = Scancode Raw.SDL_SCANCODE_F11 -pattern ScancodeF12 = Scancode Raw.SDL_SCANCODE_F12 -pattern ScancodePrintScreen = Scancode Raw.SDL_SCANCODE_PRINTSCREEN -pattern ScancodeScrollLock = Scancode Raw.SDL_SCANCODE_SCROLLLOCK -pattern ScancodePause = Scancode Raw.SDL_SCANCODE_PAUSE -pattern ScancodeInsert = Scancode Raw.SDL_SCANCODE_INSERT -pattern ScancodeHome = Scancode Raw.SDL_SCANCODE_HOME -pattern ScancodePageUp = Scancode Raw.SDL_SCANCODE_PAGEUP -pattern ScancodeDelete = Scancode Raw.SDL_SCANCODE_DELETE -pattern ScancodeEnd = Scancode Raw.SDL_SCANCODE_END -pattern ScancodePageDown = Scancode Raw.SDL_SCANCODE_PAGEDOWN -pattern ScancodeRight = Scancode Raw.SDL_SCANCODE_RIGHT -pattern ScancodeLeft = Scancode Raw.SDL_SCANCODE_LEFT -pattern ScancodeDown = Scancode Raw.SDL_SCANCODE_DOWN -pattern ScancodeUp = Scancode Raw.SDL_SCANCODE_UP -pattern ScancodeNumLockClear = Scancode Raw.SDL_SCANCODE_NUMLOCKCLEAR -pattern ScancodeKPDivide = Scancode Raw.SDL_SCANCODE_KP_DIVIDE -pattern ScancodeKPMultiply = Scancode Raw.SDL_SCANCODE_KP_MULTIPLY -pattern ScancodeKPMinus = Scancode Raw.SDL_SCANCODE_KP_MINUS -pattern ScancodeKPPlus = Scancode Raw.SDL_SCANCODE_KP_PLUS -pattern ScancodeKPEnter = Scancode Raw.SDL_SCANCODE_KP_ENTER -pattern ScancodeKP1 = Scancode Raw.SDL_SCANCODE_KP_1 -pattern ScancodeKP2 = Scancode Raw.SDL_SCANCODE_KP_2 -pattern ScancodeKP3 = Scancode Raw.SDL_SCANCODE_KP_3 -pattern ScancodeKP4 = Scancode Raw.SDL_SCANCODE_KP_4 -pattern ScancodeKP5 = Scancode Raw.SDL_SCANCODE_KP_5 -pattern ScancodeKP6 = Scancode Raw.SDL_SCANCODE_KP_6 -pattern ScancodeKP7 = Scancode Raw.SDL_SCANCODE_KP_7 -pattern ScancodeKP8 = Scancode Raw.SDL_SCANCODE_KP_8 -pattern ScancodeKP9 = Scancode Raw.SDL_SCANCODE_KP_9 -pattern ScancodeKP0 = Scancode Raw.SDL_SCANCODE_KP_0 -pattern ScancodeKPPeriod = Scancode Raw.SDL_SCANCODE_KP_PERIOD -pattern ScancodeNonUSBackslash = Scancode Raw.SDL_SCANCODE_NONUSBACKSLASH -pattern ScancodeApplication = Scancode Raw.SDL_SCANCODE_APPLICATION -pattern ScancodePower = Scancode Raw.SDL_SCANCODE_POWER -pattern ScancodeKPEquals = Scancode Raw.SDL_SCANCODE_KP_EQUALS -pattern ScancodeF13 = Scancode Raw.SDL_SCANCODE_F13 -pattern ScancodeF14 = Scancode Raw.SDL_SCANCODE_F14 -pattern ScancodeF15 = Scancode Raw.SDL_SCANCODE_F15 -pattern ScancodeF16 = Scancode Raw.SDL_SCANCODE_F16 -pattern ScancodeF17 = Scancode Raw.SDL_SCANCODE_F17 -pattern ScancodeF18 = Scancode Raw.SDL_SCANCODE_F18 -pattern ScancodeF19 = Scancode Raw.SDL_SCANCODE_F19 -pattern ScancodeF20 = Scancode Raw.SDL_SCANCODE_F20 -pattern ScancodeF21 = Scancode Raw.SDL_SCANCODE_F21 -pattern ScancodeF22 = Scancode Raw.SDL_SCANCODE_F22 -pattern ScancodeF23 = Scancode Raw.SDL_SCANCODE_F23 -pattern ScancodeF24 = Scancode Raw.SDL_SCANCODE_F24 -pattern ScancodeExecute = Scancode Raw.SDL_SCANCODE_EXECUTE -pattern ScancodeHelp = Scancode Raw.SDL_SCANCODE_HELP -pattern ScancodeMenu = Scancode Raw.SDL_SCANCODE_MENU -pattern ScancodeSelect = Scancode Raw.SDL_SCANCODE_SELECT -pattern ScancodeStop = Scancode Raw.SDL_SCANCODE_STOP -pattern ScancodeAgain = Scancode Raw.SDL_SCANCODE_AGAIN -pattern ScancodeUndo = Scancode Raw.SDL_SCANCODE_UNDO -pattern ScancodeCut = Scancode Raw.SDL_SCANCODE_CUT -pattern ScancodeCopy = Scancode Raw.SDL_SCANCODE_COPY -pattern ScancodePaste = Scancode Raw.SDL_SCANCODE_PASTE -pattern ScancodeFind = Scancode Raw.SDL_SCANCODE_FIND -pattern ScancodeMute = Scancode Raw.SDL_SCANCODE_MUTE -pattern ScancodeVolumeUp = Scancode Raw.SDL_SCANCODE_VOLUMEUP -pattern ScancodeVolumeDown = Scancode Raw.SDL_SCANCODE_VOLUMEDOWN -pattern ScancodeKPComma = Scancode Raw.SDL_SCANCODE_KP_COMMA -pattern ScancodeKPEqualsAS400 = Scancode Raw.SDL_SCANCODE_KP_EQUALSAS400 -pattern ScancodeInternational1 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL1 -pattern ScancodeInternational2 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL2 -pattern ScancodeInternational3 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL3 -pattern ScancodeInternational4 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL4 -pattern ScancodeInternational5 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL5 -pattern ScancodeInternational6 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL6 -pattern ScancodeInternational7 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL7 -pattern ScancodeInternational8 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL8 -pattern ScancodeInternational9 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL9 -pattern ScancodeLang1 = Scancode Raw.SDL_SCANCODE_LANG1 -pattern ScancodeLang2 = Scancode Raw.SDL_SCANCODE_LANG2 -pattern ScancodeLang3 = Scancode Raw.SDL_SCANCODE_LANG3 -pattern ScancodeLang4 = Scancode Raw.SDL_SCANCODE_LANG4 -pattern ScancodeLang5 = Scancode Raw.SDL_SCANCODE_LANG5 -pattern ScancodeLang6 = Scancode Raw.SDL_SCANCODE_LANG6 -pattern ScancodeLang7 = Scancode Raw.SDL_SCANCODE_LANG7 -pattern ScancodeLang8 = Scancode Raw.SDL_SCANCODE_LANG8 -pattern ScancodeLang9 = Scancode Raw.SDL_SCANCODE_LANG9 -pattern ScancodeAltErase = Scancode Raw.SDL_SCANCODE_ALTERASE -pattern ScancodeSysReq = Scancode Raw.SDL_SCANCODE_SYSREQ -pattern ScancodeCancel = Scancode Raw.SDL_SCANCODE_CANCEL -pattern ScancodeClear = Scancode Raw.SDL_SCANCODE_CLEAR -pattern ScancodePrior = Scancode Raw.SDL_SCANCODE_PRIOR -pattern ScancodeReturn2 = Scancode Raw.SDL_SCANCODE_RETURN2 -pattern ScancodeSeparator = Scancode Raw.SDL_SCANCODE_SEPARATOR -pattern ScancodeOut = Scancode Raw.SDL_SCANCODE_OUT -pattern ScancodeOper = Scancode Raw.SDL_SCANCODE_OPER -pattern ScancodeClearAgain = Scancode Raw.SDL_SCANCODE_CLEARAGAIN -pattern ScancodeCrSel = Scancode Raw.SDL_SCANCODE_CRSEL -pattern ScancodeExSel = Scancode Raw.SDL_SCANCODE_EXSEL -pattern ScancodeKP00 = Scancode Raw.SDL_SCANCODE_KP_00 -pattern ScancodeKP000 = Scancode Raw.SDL_SCANCODE_KP_000 -pattern ScancodeThousandsSeparator = Scancode Raw.SDL_SCANCODE_THOUSANDSSEPARATOR -pattern ScancodeDecimalSeparator = Scancode Raw.SDL_SCANCODE_DECIMALSEPARATOR -pattern ScancodeCurrencyUnit = Scancode Raw.SDL_SCANCODE_CURRENCYUNIT -pattern ScancodeCurrencySubunit = Scancode Raw.SDL_SCANCODE_CURRENCYSUBUNIT -pattern ScancodeLeftParen = Scancode Raw.SDL_SCANCODE_KP_LEFTPAREN -pattern ScancodeRightParen = Scancode Raw.SDL_SCANCODE_KP_RIGHTPAREN -pattern ScancodeLeftBrace = Scancode Raw.SDL_SCANCODE_KP_LEFTBRACE -pattern ScancodeRightBrace = Scancode Raw.SDL_SCANCODE_KP_RIGHTBRACE -pattern ScancodeKPTab = Scancode Raw.SDL_SCANCODE_KP_TAB -pattern ScancodeKPBackspace = Scancode Raw.SDL_SCANCODE_KP_BACKSPACE -pattern ScancodeKPA = Scancode Raw.SDL_SCANCODE_KP_A -pattern ScancodeKPB = Scancode Raw.SDL_SCANCODE_KP_B -pattern ScancodeKPC = Scancode Raw.SDL_SCANCODE_KP_C -pattern ScancodeKPD = Scancode Raw.SDL_SCANCODE_KP_D -pattern ScancodeKPE = Scancode Raw.SDL_SCANCODE_KP_E -pattern ScancodeKPF = Scancode Raw.SDL_SCANCODE_KP_F -pattern ScancodeKPXOR = Scancode Raw.SDL_SCANCODE_KP_XOR -pattern ScancodeKPPower = Scancode Raw.SDL_SCANCODE_KP_POWER -pattern ScancodeKPPercent = Scancode Raw.SDL_SCANCODE_KP_PERCENT -pattern ScancodeKPLess = Scancode Raw.SDL_SCANCODE_KP_LESS -pattern ScancodeKPGreater = Scancode Raw.SDL_SCANCODE_KP_GREATER -pattern ScancodeKPAmpersand = Scancode Raw.SDL_SCANCODE_KP_AMPERSAND -pattern ScancodeKPDblAmpersand = Scancode Raw.SDL_SCANCODE_KP_DBLAMPERSAND -pattern ScancodeKPVerticalBar = Scancode Raw.SDL_SCANCODE_KP_VERTICALBAR -pattern ScancodeKPDblVerticalBar = Scancode Raw.SDL_SCANCODE_KP_DBLVERTICALBAR -pattern ScancodeKPColon = Scancode Raw.SDL_SCANCODE_KP_COLON -pattern ScancodeKPHash = Scancode Raw.SDL_SCANCODE_KP_HASH -pattern ScancodeKPSpace = Scancode Raw.SDL_SCANCODE_KP_SPACE -pattern ScancodeKPAt = Scancode Raw.SDL_SCANCODE_KP_AT -pattern ScancodeKPExclam = Scancode Raw.SDL_SCANCODE_KP_EXCLAM -pattern ScancodeKPMemStore = Scancode Raw.SDL_SCANCODE_KP_MEMSTORE -pattern ScancodeKPMemRecall = Scancode Raw.SDL_SCANCODE_KP_MEMRECALL -pattern ScancodeKPMemClear = Scancode Raw.SDL_SCANCODE_KP_MEMCLEAR -pattern ScancodeKPMemAdd = Scancode Raw.SDL_SCANCODE_KP_MEMADD -pattern ScancodeKPMemSubtract = Scancode Raw.SDL_SCANCODE_KP_MEMSUBTRACT -pattern ScancodeKPMemMultiply = Scancode Raw.SDL_SCANCODE_KP_MEMMULTIPLY -pattern ScancodeKPMemDivide = Scancode Raw.SDL_SCANCODE_KP_MEMDIVIDE -pattern ScancodeKPPlusMinus = Scancode Raw.SDL_SCANCODE_KP_PLUSMINUS -pattern ScancodeKPClear = Scancode Raw.SDL_SCANCODE_KP_CLEAR -pattern ScancodeKPClearEntry = Scancode Raw.SDL_SCANCODE_KP_CLEARENTRY -pattern ScancodeKPBinary = Scancode Raw.SDL_SCANCODE_KP_BINARY -pattern ScancodeKPOctal = Scancode Raw.SDL_SCANCODE_KP_OCTAL -pattern ScancodeKPDecimal = Scancode Raw.SDL_SCANCODE_KP_DECIMAL -pattern ScancodeKPHexadecimal = Scancode Raw.SDL_SCANCODE_KP_HEXADECIMAL -pattern ScancodeLCtrl = Scancode Raw.SDL_SCANCODE_LCTRL -pattern ScancodeLShift = Scancode Raw.SDL_SCANCODE_LSHIFT -pattern ScancodeLAlt = Scancode Raw.SDL_SCANCODE_LALT -pattern ScancodeLGUI = Scancode Raw.SDL_SCANCODE_LGUI -pattern ScancodeRCtrl = Scancode Raw.SDL_SCANCODE_RCTRL -pattern ScancodeRShift = Scancode Raw.SDL_SCANCODE_RSHIFT -pattern ScancodeRAlt = Scancode Raw.SDL_SCANCODE_RALT -pattern ScancodeRGUI = Scancode Raw.SDL_SCANCODE_RGUI -pattern ScancodeMode = Scancode Raw.SDL_SCANCODE_MODE -pattern ScancodeAudioNext = Scancode Raw.SDL_SCANCODE_AUDIONEXT -pattern ScancodeAudioPrev = Scancode Raw.SDL_SCANCODE_AUDIOPREV -pattern ScancodeAudioStop = Scancode Raw.SDL_SCANCODE_AUDIOSTOP -pattern ScancodeAudioPlay = Scancode Raw.SDL_SCANCODE_AUDIOPLAY -pattern ScancodeAudioMute = Scancode Raw.SDL_SCANCODE_AUDIOMUTE -pattern ScancodeMediaSelect = Scancode Raw.SDL_SCANCODE_MEDIASELECT -pattern ScancodeWWW = Scancode Raw.SDL_SCANCODE_WWW -pattern ScancodeMail = Scancode Raw.SDL_SCANCODE_MAIL -pattern ScancodeCalculator = Scancode Raw.SDL_SCANCODE_CALCULATOR -pattern ScancodeComputer = Scancode Raw.SDL_SCANCODE_COMPUTER -pattern ScancodeACSearch = Scancode Raw.SDL_SCANCODE_AC_SEARCH -pattern ScancodeACHome = Scancode Raw.SDL_SCANCODE_AC_HOME -pattern ScancodeACBack = Scancode Raw.SDL_SCANCODE_AC_BACK -pattern ScancodeACForward = Scancode Raw.SDL_SCANCODE_AC_FORWARD -pattern ScancodeACStop = Scancode Raw.SDL_SCANCODE_AC_STOP -pattern ScancodeACRefresh = Scancode Raw.SDL_SCANCODE_AC_REFRESH -pattern ScancodeACBookmarks = Scancode Raw.SDL_SCANCODE_AC_BOOKMARKS -pattern ScancodeBrightnessDown = Scancode Raw.SDL_SCANCODE_BRIGHTNESSDOWN -pattern ScancodeBrightnessUp = Scancode Raw.SDL_SCANCODE_BRIGHTNESSUP -pattern ScancodeDisplaySwitch = Scancode Raw.SDL_SCANCODE_DISPLAYSWITCH -pattern ScancodeKBDIllumToggle = Scancode Raw.SDL_SCANCODE_KBDILLUMTOGGLE -pattern ScancodeKBDIllumDown = Scancode Raw.SDL_SCANCODE_KBDILLUMDOWN -pattern ScancodeKBDIllumUp = Scancode Raw.SDL_SCANCODE_KBDILLUMUP -pattern ScancodeEject = Scancode Raw.SDL_SCANCODE_EJECT -pattern ScancodeSleep = Scancode Raw.SDL_SCANCODE_SLEEP -pattern ScancodeApp1 = Scancode Raw.SDL_SCANCODE_APP1 -pattern ScancodeApp2 = Scancode Raw.SDL_SCANCODE_APP2 - -instance FromNumber Scancode Word32 where - fromNumber = Scancode - -instance ToNumber Scancode Word32 where - toNumber = unwrapScancode - -newtype Keycode = Keycode { unwrapKeycode :: Int32 } - deriving (Bounded, Data, Eq, Ord, Read, Generic, Show, Typeable) - -pattern KeycodeUnknown = Keycode Raw.SDLK_UNKNOWN -pattern KeycodeReturn = Keycode Raw.SDLK_RETURN -pattern KeycodeEscape = Keycode Raw.SDLK_ESCAPE -pattern KeycodeBackspace = Keycode Raw.SDLK_BACKSPACE -pattern KeycodeTab = Keycode Raw.SDLK_TAB -pattern KeycodeSpace = Keycode Raw.SDLK_SPACE -pattern KeycodeExclaim = Keycode Raw.SDLK_EXCLAIM -pattern KeycodeQuoteDbl = Keycode Raw.SDLK_QUOTEDBL -pattern KeycodeHash = Keycode Raw.SDLK_HASH -pattern KeycodePercent = Keycode Raw.SDLK_PERCENT -pattern KeycodeDollar = Keycode Raw.SDLK_DOLLAR -pattern KeycodeAmpersand = Keycode Raw.SDLK_AMPERSAND -pattern KeycodeQuote = Keycode Raw.SDLK_QUOTE -pattern KeycodeLeftParen = Keycode Raw.SDLK_LEFTPAREN -pattern KeycodeRightParen = Keycode Raw.SDLK_RIGHTPAREN -pattern KeycodeAsterisk = Keycode Raw.SDLK_ASTERISK -pattern KeycodePlus = Keycode Raw.SDLK_PLUS -pattern KeycodeComma = Keycode Raw.SDLK_COMMA -pattern KeycodeMinus = Keycode Raw.SDLK_MINUS -pattern KeycodePeriod = Keycode Raw.SDLK_PERIOD -pattern KeycodeSlash = Keycode Raw.SDLK_SLASH -pattern Keycode0 = Keycode Raw.SDLK_0 -pattern Keycode1 = Keycode Raw.SDLK_1 -pattern Keycode2 = Keycode Raw.SDLK_2 -pattern Keycode3 = Keycode Raw.SDLK_3 -pattern Keycode4 = Keycode Raw.SDLK_4 -pattern Keycode5 = Keycode Raw.SDLK_5 -pattern Keycode6 = Keycode Raw.SDLK_6 -pattern Keycode7 = Keycode Raw.SDLK_7 -pattern Keycode8 = Keycode Raw.SDLK_8 -pattern Keycode9 = Keycode Raw.SDLK_9 -pattern KeycodeColon = Keycode Raw.SDLK_COLON -pattern KeycodeSemicolon = Keycode Raw.SDLK_SEMICOLON -pattern KeycodeLess = Keycode Raw.SDLK_LESS -pattern KeycodeEquals = Keycode Raw.SDLK_EQUALS -pattern KeycodeGreater = Keycode Raw.SDLK_GREATER -pattern KeycodeQuestion = Keycode Raw.SDLK_QUESTION -pattern KeycodeAt = Keycode Raw.SDLK_AT -pattern KeycodeLeftBracket = Keycode Raw.SDLK_LEFTBRACKET -pattern KeycodeBackslash = Keycode Raw.SDLK_BACKSLASH -pattern KeycodeRightBracket = Keycode Raw.SDLK_RIGHTBRACKET -pattern KeycodeCaret = Keycode Raw.SDLK_CARET -pattern KeycodeUnderscore = Keycode Raw.SDLK_UNDERSCORE -pattern KeycodeBackquote = Keycode Raw.SDLK_BACKQUOTE -pattern KeycodeA = Keycode Raw.SDLK_a -pattern KeycodeB = Keycode Raw.SDLK_b -pattern KeycodeC = Keycode Raw.SDLK_c -pattern KeycodeD = Keycode Raw.SDLK_d -pattern KeycodeE = Keycode Raw.SDLK_e -pattern KeycodeF = Keycode Raw.SDLK_f -pattern KeycodeG = Keycode Raw.SDLK_g -pattern KeycodeH = Keycode Raw.SDLK_h -pattern KeycodeI = Keycode Raw.SDLK_i -pattern KeycodeJ = Keycode Raw.SDLK_j -pattern KeycodeK = Keycode Raw.SDLK_k -pattern KeycodeL = Keycode Raw.SDLK_l -pattern KeycodeM = Keycode Raw.SDLK_m -pattern KeycodeN = Keycode Raw.SDLK_n -pattern KeycodeO = Keycode Raw.SDLK_o -pattern KeycodeP = Keycode Raw.SDLK_p -pattern KeycodeQ = Keycode Raw.SDLK_q -pattern KeycodeR = Keycode Raw.SDLK_r -pattern KeycodeS = Keycode Raw.SDLK_s -pattern KeycodeT = Keycode Raw.SDLK_t -pattern KeycodeU = Keycode Raw.SDLK_u -pattern KeycodeV = Keycode Raw.SDLK_v -pattern KeycodeW = Keycode Raw.SDLK_w -pattern KeycodeX = Keycode Raw.SDLK_x -pattern KeycodeY = Keycode Raw.SDLK_y -pattern KeycodeZ = Keycode Raw.SDLK_z -pattern KeycodeCapsLock = Keycode Raw.SDLK_CAPSLOCK -pattern KeycodeF1 = Keycode Raw.SDLK_F1 -pattern KeycodeF2 = Keycode Raw.SDLK_F2 -pattern KeycodeF3 = Keycode Raw.SDLK_F3 -pattern KeycodeF4 = Keycode Raw.SDLK_F4 -pattern KeycodeF5 = Keycode Raw.SDLK_F5 -pattern KeycodeF6 = Keycode Raw.SDLK_F6 -pattern KeycodeF7 = Keycode Raw.SDLK_F7 -pattern KeycodeF8 = Keycode Raw.SDLK_F8 -pattern KeycodeF9 = Keycode Raw.SDLK_F9 -pattern KeycodeF10 = Keycode Raw.SDLK_F10 -pattern KeycodeF11 = Keycode Raw.SDLK_F11 -pattern KeycodeF12 = Keycode Raw.SDLK_F12 -pattern KeycodePrintScreen = Keycode Raw.SDLK_PRINTSCREEN -pattern KeycodeScrollLock = Keycode Raw.SDLK_SCROLLLOCK -pattern KeycodePause = Keycode Raw.SDLK_PAUSE -pattern KeycodeInsert = Keycode Raw.SDLK_INSERT -pattern KeycodeHome = Keycode Raw.SDLK_HOME -pattern KeycodePageUp = Keycode Raw.SDLK_PAGEUP -pattern KeycodeDelete = Keycode Raw.SDLK_DELETE -pattern KeycodeEnd = Keycode Raw.SDLK_END -pattern KeycodePageDown = Keycode Raw.SDLK_PAGEDOWN -pattern KeycodeRight = Keycode Raw.SDLK_RIGHT -pattern KeycodeLeft = Keycode Raw.SDLK_LEFT -pattern KeycodeDown = Keycode Raw.SDLK_DOWN -pattern KeycodeUp = Keycode Raw.SDLK_UP -pattern KeycodeNumLockClear = Keycode Raw.SDLK_NUMLOCKCLEAR -pattern KeycodeKPDivide = Keycode Raw.SDLK_KP_DIVIDE -pattern KeycodeKPMultiply = Keycode Raw.SDLK_KP_MULTIPLY -pattern KeycodeKPMinus = Keycode Raw.SDLK_KP_MINUS -pattern KeycodeKPPlus = Keycode Raw.SDLK_KP_PLUS -pattern KeycodeKPEnter = Keycode Raw.SDLK_KP_ENTER -pattern KeycodeKP1 = Keycode Raw.SDLK_KP_1 -pattern KeycodeKP2 = Keycode Raw.SDLK_KP_2 -pattern KeycodeKP3 = Keycode Raw.SDLK_KP_3 -pattern KeycodeKP4 = Keycode Raw.SDLK_KP_4 -pattern KeycodeKP5 = Keycode Raw.SDLK_KP_5 -pattern KeycodeKP6 = Keycode Raw.SDLK_KP_6 -pattern KeycodeKP7 = Keycode Raw.SDLK_KP_7 -pattern KeycodeKP8 = Keycode Raw.SDLK_KP_8 -pattern KeycodeKP9 = Keycode Raw.SDLK_KP_9 -pattern KeycodeKP0 = Keycode Raw.SDLK_KP_0 -pattern KeycodeKPPeriod = Keycode Raw.SDLK_KP_PERIOD -pattern KeycodeApplication = Keycode Raw.SDLK_APPLICATION -pattern KeycodePower = Keycode Raw.SDLK_POWER -pattern KeycodeKPEquals = Keycode Raw.SDLK_KP_EQUALS -pattern KeycodeF13 = Keycode Raw.SDLK_F13 -pattern KeycodeF14 = Keycode Raw.SDLK_F14 -pattern KeycodeF15 = Keycode Raw.SDLK_F15 -pattern KeycodeF16 = Keycode Raw.SDLK_F16 -pattern KeycodeF17 = Keycode Raw.SDLK_F17 -pattern KeycodeF18 = Keycode Raw.SDLK_F18 -pattern KeycodeF19 = Keycode Raw.SDLK_F19 -pattern KeycodeF20 = Keycode Raw.SDLK_F20 -pattern KeycodeF21 = Keycode Raw.SDLK_F21 -pattern KeycodeF22 = Keycode Raw.SDLK_F22 -pattern KeycodeF23 = Keycode Raw.SDLK_F23 -pattern KeycodeF24 = Keycode Raw.SDLK_F24 -pattern KeycodeExecute = Keycode Raw.SDLK_EXECUTE -pattern KeycodeHelp = Keycode Raw.SDLK_HELP -pattern KeycodeMenu = Keycode Raw.SDLK_MENU -pattern KeycodeSelect = Keycode Raw.SDLK_SELECT -pattern KeycodeStop = Keycode Raw.SDLK_STOP -pattern KeycodeAgain = Keycode Raw.SDLK_AGAIN -pattern KeycodeUndo = Keycode Raw.SDLK_UNDO -pattern KeycodeCut = Keycode Raw.SDLK_CUT -pattern KeycodeCopy = Keycode Raw.SDLK_COPY -pattern KeycodePaste = Keycode Raw.SDLK_PASTE -pattern KeycodeFind = Keycode Raw.SDLK_FIND -pattern KeycodeMute = Keycode Raw.SDLK_MUTE -pattern KeycodeVolumeUp = Keycode Raw.SDLK_VOLUMEUP -pattern KeycodeVolumeDown = Keycode Raw.SDLK_VOLUMEDOWN -pattern KeycodeKPComma = Keycode Raw.SDLK_KP_COMMA -pattern KeycodeKPEqualsAS400 = Keycode Raw.SDLK_KP_EQUALSAS400 -pattern KeycodeAltErase = Keycode Raw.SDLK_ALTERASE -pattern KeycodeSysReq = Keycode Raw.SDLK_SYSREQ -pattern KeycodeCancel = Keycode Raw.SDLK_CANCEL -pattern KeycodeClear = Keycode Raw.SDLK_CLEAR -pattern KeycodePrior = Keycode Raw.SDLK_PRIOR -pattern KeycodeReturn2 = Keycode Raw.SDLK_RETURN2 -pattern KeycodeSeparator = Keycode Raw.SDLK_SEPARATOR -pattern KeycodeOut = Keycode Raw.SDLK_OUT -pattern KeycodeOper = Keycode Raw.SDLK_OPER -pattern KeycodeClearAgain = Keycode Raw.SDLK_CLEARAGAIN -pattern KeycodeCrSel = Keycode Raw.SDLK_CRSEL -pattern KeycodeExSel = Keycode Raw.SDLK_EXSEL -pattern KeycodeKP00 = Keycode Raw.SDLK_KP_00 -pattern KeycodeKP000 = Keycode Raw.SDLK_KP_000 -pattern KeycodeThousandsSeparator = Keycode Raw.SDLK_THOUSANDSSEPARATOR -pattern KeycodeDecimalSeparator = Keycode Raw.SDLK_DECIMALSEPARATOR -pattern KeycodeCurrencyUnit = Keycode Raw.SDLK_CURRENCYUNIT -pattern KeycodeCurrencySubunit = Keycode Raw.SDLK_CURRENCYSUBUNIT -pattern KeycodeKPLeftParen = Keycode Raw.SDLK_KP_LEFTPAREN -pattern KeycodeKPRightParen = Keycode Raw.SDLK_KP_RIGHTPAREN -pattern KeycodeKPLeftBrace = Keycode Raw.SDLK_KP_LEFTBRACE -pattern KeycodeKPRightBrace = Keycode Raw.SDLK_KP_RIGHTBRACE -pattern KeycodeKPTab = Keycode Raw.SDLK_KP_TAB -pattern KeycodeKPBackspace = Keycode Raw.SDLK_KP_BACKSPACE -pattern KeycodeKPA = Keycode Raw.SDLK_KP_A -pattern KeycodeKPB = Keycode Raw.SDLK_KP_B -pattern KeycodeKPC = Keycode Raw.SDLK_KP_C -pattern KeycodeKPD = Keycode Raw.SDLK_KP_D -pattern KeycodeKPE = Keycode Raw.SDLK_KP_E -pattern KeycodeKPF = Keycode Raw.SDLK_KP_F -pattern KeycodeKPXor = Keycode Raw.SDLK_KP_XOR -pattern KeycodeKPPower = Keycode Raw.SDLK_KP_POWER -pattern KeycodeKPPercent = Keycode Raw.SDLK_KP_PERCENT -pattern KeycodeKPLess = Keycode Raw.SDLK_KP_LESS -pattern KeycodeKPGreater = Keycode Raw.SDLK_KP_GREATER -pattern KeycodeKPAmpersand = Keycode Raw.SDLK_KP_AMPERSAND -pattern KeycodeKPDblAmpersand = Keycode Raw.SDLK_KP_DBLAMPERSAND -pattern KeycodeKPVerticalBar = Keycode Raw.SDLK_KP_VERTICALBAR -pattern KeycodeKPDblVerticalBar = Keycode Raw.SDLK_KP_DBLVERTICALBAR -pattern KeycodeKPColon = Keycode Raw.SDLK_KP_COLON -pattern KeycodeKPHash = Keycode Raw.SDLK_KP_HASH -pattern KeycodeKPSpace = Keycode Raw.SDLK_KP_SPACE -pattern KeycodeKPAt = Keycode Raw.SDLK_KP_AT -pattern KeycodeKPExclam = Keycode Raw.SDLK_KP_EXCLAM -pattern KeycodeKPMemStore = Keycode Raw.SDLK_KP_MEMSTORE -pattern KeycodeKPMemRecall = Keycode Raw.SDLK_KP_MEMRECALL -pattern KeycodeKPMemClear = Keycode Raw.SDLK_KP_MEMCLEAR -pattern KeycodeKPMemAdd = Keycode Raw.SDLK_KP_MEMADD -pattern KeycodeKPMemSubtract = Keycode Raw.SDLK_KP_MEMSUBTRACT -pattern KeycodeKPMemMultiply = Keycode Raw.SDLK_KP_MEMMULTIPLY -pattern KeycodeKPMemDivide = Keycode Raw.SDLK_KP_MEMDIVIDE -pattern KeycodeKPPlusMinus = Keycode Raw.SDLK_KP_PLUSMINUS -pattern KeycodeKPClear = Keycode Raw.SDLK_KP_CLEAR -pattern KeycodeKPClearEntry = Keycode Raw.SDLK_KP_CLEARENTRY -pattern KeycodeKPBinary = Keycode Raw.SDLK_KP_BINARY -pattern KeycodeKPOctal = Keycode Raw.SDLK_KP_OCTAL -pattern KeycodeKPDecimal = Keycode Raw.SDLK_KP_DECIMAL -pattern KeycodeKPHexadecimal = Keycode Raw.SDLK_KP_HEXADECIMAL -pattern KeycodeLCtrl = Keycode Raw.SDLK_LCTRL -pattern KeycodeLShift = Keycode Raw.SDLK_LSHIFT -pattern KeycodeLAlt = Keycode Raw.SDLK_LALT -pattern KeycodeLGUI = Keycode Raw.SDLK_LGUI -pattern KeycodeRCtrl = Keycode Raw.SDLK_RCTRL -pattern KeycodeRShift = Keycode Raw.SDLK_RSHIFT -pattern KeycodeRAlt = Keycode Raw.SDLK_RALT -pattern KeycodeRGUI = Keycode Raw.SDLK_RGUI -pattern KeycodeMode = Keycode Raw.SDLK_MODE -pattern KeycodeAudioNext = Keycode Raw.SDLK_AUDIONEXT -pattern KeycodeAudioPrev = Keycode Raw.SDLK_AUDIOPREV -pattern KeycodeAudioStop = Keycode Raw.SDLK_AUDIOSTOP -pattern KeycodeAudioPlay = Keycode Raw.SDLK_AUDIOPLAY -pattern KeycodeAudioMute = Keycode Raw.SDLK_AUDIOMUTE -pattern KeycodeMediaSelect = Keycode Raw.SDLK_MEDIASELECT -pattern KeycodeWWW = Keycode Raw.SDLK_WWW -pattern KeycodeMail = Keycode Raw.SDLK_MAIL -pattern KeycodeCalculator = Keycode Raw.SDLK_CALCULATOR -pattern KeycodeComputer = Keycode Raw.SDLK_COMPUTER -pattern KeycodeACSearch = Keycode Raw.SDLK_AC_SEARCH -pattern KeycodeACHome = Keycode Raw.SDLK_AC_HOME -pattern KeycodeACBack = Keycode Raw.SDLK_AC_BACK -pattern KeycodeACForward = Keycode Raw.SDLK_AC_FORWARD -pattern KeycodeACStop = Keycode Raw.SDLK_AC_STOP -pattern KeycodeACRefresh = Keycode Raw.SDLK_AC_REFRESH -pattern KeycodeACBookmarks = Keycode Raw.SDLK_AC_BOOKMARKS -pattern KeycodeBrightnessDown = Keycode Raw.SDLK_BRIGHTNESSDOWN -pattern KeycodeBrightnessUp = Keycode Raw.SDLK_BRIGHTNESSUP -pattern KeycodeDisplaySwitch = Keycode Raw.SDLK_DISPLAYSWITCH -pattern KeycodeKbdIllumToggle = Keycode Raw.SDLK_KBDILLUMTOGGLE -pattern KeycodeKbdIllumDown = Keycode Raw.SDLK_KBDILLUMDOWN -pattern KeycodeKbdIllumUp = Keycode Raw.SDLK_KBDILLUMUP -pattern KeycodeEject = Keycode Raw.SDLK_EJECT -pattern KeycodeSleep = Keycode Raw.SDLK_SLEEP - -instance FromNumber Keycode Int32 where - fromNumber = Keycode - -instance ToNumber Keycode Int32 where - toNumber = unwrapKeycode +{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternSynonyms #-}++{-|++An enumeration of scancodes and keycodes, allowing you to pattern match on keyboard keys.++This module uses a relatively new GHC feature called @PatternSynonyms@ in order to provide pattern+matches over the underlying 'Scancode' or 'Keycode'. We do this so that you are also able to+work with vendor-specific or otherwise unknown codes.++-}++module SDL.Input.Keyboard.Codes+ (-- * Scancodes+ -- | Scancodes are codes that correspond to the physical position of a key, independent of the current keyboard layout.+ -- Scancodes are meant to be layout-independent. Think of this as \"the user pressed the Q key as it would be on a US QWERTY keyboard\" regardless of whether this is actually a European keyboard or a Dvorak keyboard or whatever. The scancode is always the same key position.+ -- 'Scancode' makes sense when you want key presses based on their location on a keyboard - for example, the traditional \"WASD\" layout used in first-person shooters.+ Scancode(..),+ pattern ScancodeUnknown,+ pattern ScancodeA,+ pattern ScancodeB,+ pattern ScancodeC,+ pattern ScancodeD,+ pattern ScancodeE,+ pattern ScancodeF,+ pattern ScancodeG,+ pattern ScancodeH,+ pattern ScancodeI,+ pattern ScancodeJ,+ pattern ScancodeK,+ pattern ScancodeL,+ pattern ScancodeM,+ pattern ScancodeN,+ pattern ScancodeO,+ pattern ScancodeP,+ pattern ScancodeQ,+ pattern ScancodeR,+ pattern ScancodeS,+ pattern ScancodeT,+ pattern ScancodeU,+ pattern ScancodeV,+ pattern ScancodeW,+ pattern ScancodeX,+ pattern ScancodeY,+ pattern ScancodeZ,+ pattern Scancode1,+ pattern Scancode2,+ pattern Scancode3,+ pattern Scancode4,+ pattern Scancode5,+ pattern Scancode6,+ pattern Scancode7,+ pattern Scancode8,+ pattern Scancode9,+ pattern Scancode0,+ pattern ScancodeReturn,+ pattern ScancodeEscape,+ pattern ScancodeBackspace,+ pattern ScancodeTab,+ pattern ScancodeSpace,+ pattern ScancodeMinus,+ pattern ScancodeEquals,+ pattern ScancodeLeftBracket,+ pattern ScancodeRightBracket,+ pattern ScancodeBackslash,+ pattern ScancodeNonUSHash,+ pattern ScancodeSemicolon,+ pattern ScancodeApostrophe,+ pattern ScancodeGrave,+ pattern ScancodeComma,+ pattern ScancodePeriod,+ pattern ScancodeSlash,+ pattern ScancodeCapsLock,+ pattern ScancodeF1,+ pattern ScancodeF2,+ pattern ScancodeF3,+ pattern ScancodeF4,+ pattern ScancodeF5,+ pattern ScancodeF6,+ pattern ScancodeF7,+ pattern ScancodeF8,+ pattern ScancodeF9,+ pattern ScancodeF10,+ pattern ScancodeF11,+ pattern ScancodeF12,+ pattern ScancodePrintScreen,+ pattern ScancodeScrollLock,+ pattern ScancodePause,+ pattern ScancodeInsert,+ pattern ScancodeHome,+ pattern ScancodePageUp,+ pattern ScancodeDelete,+ pattern ScancodeEnd,+ pattern ScancodePageDown,+ pattern ScancodeRight,+ pattern ScancodeLeft,+ pattern ScancodeDown,+ pattern ScancodeUp,+ pattern ScancodeNumLockClear,+ pattern ScancodeKPDivide,+ pattern ScancodeKPMultiply,+ pattern ScancodeKPMinus,+ pattern ScancodeKPPlus,+ pattern ScancodeKPEnter,+ pattern ScancodeKP1,+ pattern ScancodeKP2,+ pattern ScancodeKP3,+ pattern ScancodeKP4,+ pattern ScancodeKP5,+ pattern ScancodeKP6,+ pattern ScancodeKP7,+ pattern ScancodeKP8,+ pattern ScancodeKP9,+ pattern ScancodeKP0,+ pattern ScancodeKPPeriod,+ pattern ScancodeNonUSBackslash,+ pattern ScancodeApplication,+ pattern ScancodePower,+ pattern ScancodeKPEquals,+ pattern ScancodeF13,+ pattern ScancodeF14,+ pattern ScancodeF15,+ pattern ScancodeF16,+ pattern ScancodeF17,+ pattern ScancodeF18,+ pattern ScancodeF19,+ pattern ScancodeF20,+ pattern ScancodeF21,+ pattern ScancodeF22,+ pattern ScancodeF23,+ pattern ScancodeF24,+ pattern ScancodeExecute,+ pattern ScancodeHelp,+ pattern ScancodeMenu,+ pattern ScancodeSelect,+ pattern ScancodeStop,+ pattern ScancodeAgain,+ pattern ScancodeUndo,+ pattern ScancodeCut,+ pattern ScancodeCopy,+ pattern ScancodePaste,+ pattern ScancodeFind,+ pattern ScancodeMute,+ pattern ScancodeVolumeUp,+ pattern ScancodeVolumeDown,+ pattern ScancodeKPComma,+ pattern ScancodeKPEqualsAS400,+ pattern ScancodeInternational1,+ pattern ScancodeInternational2,+ pattern ScancodeInternational3,+ pattern ScancodeInternational4,+ pattern ScancodeInternational5,+ pattern ScancodeInternational6,+ pattern ScancodeInternational7,+ pattern ScancodeInternational8,+ pattern ScancodeInternational9,+ pattern ScancodeLang1,+ pattern ScancodeLang2,+ pattern ScancodeLang3,+ pattern ScancodeLang4,+ pattern ScancodeLang5,+ pattern ScancodeLang6,+ pattern ScancodeLang7,+ pattern ScancodeLang8,+ pattern ScancodeLang9,+ pattern ScancodeAltErase,+ pattern ScancodeSysReq,+ pattern ScancodeCancel,+ pattern ScancodeClear,+ pattern ScancodePrior,+ pattern ScancodeReturn2,+ pattern ScancodeSeparator,+ pattern ScancodeOut,+ pattern ScancodeOper,+ pattern ScancodeClearAgain,+ pattern ScancodeCrSel,+ pattern ScancodeExSel,+ pattern ScancodeKP00,+ pattern ScancodeKP000,+ pattern ScancodeThousandsSeparator,+ pattern ScancodeDecimalSeparator,+ pattern ScancodeCurrencyUnit,+ pattern ScancodeCurrencySubunit,+ pattern ScancodeLeftParen,+ pattern ScancodeRightParen,+ pattern ScancodeLeftBrace,+ pattern ScancodeRightBrace,+ pattern ScancodeKPTab,+ pattern ScancodeKPBackspace,+ pattern ScancodeKPA,+ pattern ScancodeKPB,+ pattern ScancodeKPC,+ pattern ScancodeKPD,+ pattern ScancodeKPE,+ pattern ScancodeKPF,+ pattern ScancodeKPXOR,+ pattern ScancodeKPPower,+ pattern ScancodeKPPercent,+ pattern ScancodeKPLess,+ pattern ScancodeKPGreater,+ pattern ScancodeKPAmpersand,+ pattern ScancodeKPDblAmpersand,+ pattern ScancodeKPVerticalBar,+ pattern ScancodeKPDblVerticalBar,+ pattern ScancodeKPColon,+ pattern ScancodeKPHash,+ pattern ScancodeKPSpace,+ pattern ScancodeKPAt,+ pattern ScancodeKPExclam,+ pattern ScancodeKPMemStore,+ pattern ScancodeKPMemRecall,+ pattern ScancodeKPMemClear,+ pattern ScancodeKPMemAdd,+ pattern ScancodeKPMemSubtract,+ pattern ScancodeKPMemMultiply,+ pattern ScancodeKPMemDivide,+ pattern ScancodeKPPlusMinus,+ pattern ScancodeKPClear,+ pattern ScancodeKPClearEntry,+ pattern ScancodeKPBinary,+ pattern ScancodeKPOctal,+ pattern ScancodeKPDecimal,+ pattern ScancodeKPHexadecimal,+ pattern ScancodeLCtrl,+ pattern ScancodeLShift,+ pattern ScancodeLAlt,+ pattern ScancodeLGUI,+ pattern ScancodeRCtrl,+ pattern ScancodeRShift,+ pattern ScancodeRAlt,+ pattern ScancodeRGUI,+ pattern ScancodeMode,+ pattern ScancodeAudioNext,+ pattern ScancodeAudioPrev,+ pattern ScancodeAudioStop,+ pattern ScancodeAudioPlay,+ pattern ScancodeAudioMute,+ pattern ScancodeMediaSelect,+ pattern ScancodeWWW,+ pattern ScancodeMail,+ pattern ScancodeCalculator,+ pattern ScancodeComputer,+ pattern ScancodeACSearch,+ pattern ScancodeACHome,+ pattern ScancodeACBack,+ pattern ScancodeACForward,+ pattern ScancodeACStop,+ pattern ScancodeACRefresh,+ pattern ScancodeACBookmarks,+ pattern ScancodeBrightnessDown,+ pattern ScancodeBrightnessUp,+ pattern ScancodeDisplaySwitch,+ pattern ScancodeKBDIllumToggle,+ pattern ScancodeKBDIllumDown,+ pattern ScancodeKBDIllumUp,+ pattern ScancodeEject,+ pattern ScancodeSleep,+ pattern ScancodeApp1,+ pattern ScancodeApp2,++ -- * Keycode+ -- | Keycodes are layout-dependent codes, in that the code you receive can change for the same physical key depending on the users keyboard layout.+ -- Think of this as "the user pressed the key that is labelled 'Q' on a specific keyboard."+ -- 'Keycode' makes sense when you are anticipating the user to press either keys that match some mneumonic, or they are entering text.+ Keycode(..),+ pattern KeycodeUnknown,+ pattern KeycodeReturn,+ pattern KeycodeEscape,+ pattern KeycodeBackspace,+ pattern KeycodeTab,+ pattern KeycodeSpace,+ pattern KeycodeExclaim,+ pattern KeycodeQuoteDbl,+ pattern KeycodeHash,+ pattern KeycodePercent,+ pattern KeycodeDollar,+ pattern KeycodeAmpersand,+ pattern KeycodeQuote,+ pattern KeycodeLeftParen,+ pattern KeycodeRightParen,+ pattern KeycodeAsterisk,+ pattern KeycodePlus,+ pattern KeycodeComma,+ pattern KeycodeMinus,+ pattern KeycodePeriod,+ pattern KeycodeSlash,+ pattern Keycode0,+ pattern Keycode1,+ pattern Keycode2,+ pattern Keycode3,+ pattern Keycode4,+ pattern Keycode5,+ pattern Keycode6,+ pattern Keycode7,+ pattern Keycode8,+ pattern Keycode9,+ pattern KeycodeColon,+ pattern KeycodeSemicolon,+ pattern KeycodeLess,+ pattern KeycodeEquals,+ pattern KeycodeGreater,+ pattern KeycodeQuestion,+ pattern KeycodeAt,+ pattern KeycodeLeftBracket,+ pattern KeycodeBackslash,+ pattern KeycodeRightBracket,+ pattern KeycodeCaret,+ pattern KeycodeUnderscore,+ pattern KeycodeBackquote,+ pattern KeycodeA,+ pattern KeycodeB,+ pattern KeycodeC,+ pattern KeycodeD,+ pattern KeycodeE,+ pattern KeycodeF,+ pattern KeycodeG,+ pattern KeycodeH,+ pattern KeycodeI,+ pattern KeycodeJ,+ pattern KeycodeK,+ pattern KeycodeL,+ pattern KeycodeM,+ pattern KeycodeN,+ pattern KeycodeO,+ pattern KeycodeP,+ pattern KeycodeQ,+ pattern KeycodeR,+ pattern KeycodeS,+ pattern KeycodeT,+ pattern KeycodeU,+ pattern KeycodeV,+ pattern KeycodeW,+ pattern KeycodeX,+ pattern KeycodeY,+ pattern KeycodeZ,+ pattern KeycodeCapsLock,+ pattern KeycodeF1,+ pattern KeycodeF2,+ pattern KeycodeF3,+ pattern KeycodeF4,+ pattern KeycodeF5,+ pattern KeycodeF6,+ pattern KeycodeF7,+ pattern KeycodeF8,+ pattern KeycodeF9,+ pattern KeycodeF10,+ pattern KeycodeF11,+ pattern KeycodeF12,+ pattern KeycodePrintScreen,+ pattern KeycodeScrollLock,+ pattern KeycodePause,+ pattern KeycodeInsert,+ pattern KeycodeHome,+ pattern KeycodePageUp,+ pattern KeycodeDelete,+ pattern KeycodeEnd,+ pattern KeycodePageDown,+ pattern KeycodeRight,+ pattern KeycodeLeft,+ pattern KeycodeDown,+ pattern KeycodeUp,+ pattern KeycodeNumLockClear,+ pattern KeycodeKPDivide,+ pattern KeycodeKPMultiply,+ pattern KeycodeKPMinus,+ pattern KeycodeKPPlus,+ pattern KeycodeKPEnter,+ pattern KeycodeKP1,+ pattern KeycodeKP2,+ pattern KeycodeKP3,+ pattern KeycodeKP4,+ pattern KeycodeKP5,+ pattern KeycodeKP6,+ pattern KeycodeKP7,+ pattern KeycodeKP8,+ pattern KeycodeKP9,+ pattern KeycodeKP0,+ pattern KeycodeKPPeriod,+ pattern KeycodeApplication,+ pattern KeycodePower,+ pattern KeycodeKPEquals,+ pattern KeycodeF13,+ pattern KeycodeF14,+ pattern KeycodeF15,+ pattern KeycodeF16,+ pattern KeycodeF17,+ pattern KeycodeF18,+ pattern KeycodeF19,+ pattern KeycodeF20,+ pattern KeycodeF21,+ pattern KeycodeF22,+ pattern KeycodeF23,+ pattern KeycodeF24,+ pattern KeycodeExecute,+ pattern KeycodeHelp,+ pattern KeycodeMenu,+ pattern KeycodeSelect,+ pattern KeycodeStop,+ pattern KeycodeAgain,+ pattern KeycodeUndo,+ pattern KeycodeCut,+ pattern KeycodeCopy,+ pattern KeycodePaste,+ pattern KeycodeFind,+ pattern KeycodeMute,+ pattern KeycodeVolumeUp,+ pattern KeycodeVolumeDown,+ pattern KeycodeKPComma,+ pattern KeycodeKPEqualsAS400,+ pattern KeycodeAltErase,+ pattern KeycodeSysReq,+ pattern KeycodeCancel,+ pattern KeycodeClear,+ pattern KeycodePrior,+ pattern KeycodeReturn2,+ pattern KeycodeSeparator,+ pattern KeycodeOut,+ pattern KeycodeOper,+ pattern KeycodeClearAgain,+ pattern KeycodeCrSel,+ pattern KeycodeExSel,+ pattern KeycodeKP00,+ pattern KeycodeKP000,+ pattern KeycodeThousandsSeparator,+ pattern KeycodeDecimalSeparator,+ pattern KeycodeCurrencyUnit,+ pattern KeycodeCurrencySubunit,+ pattern KeycodeKPLeftParen,+ pattern KeycodeKPRightParen,+ pattern KeycodeKPLeftBrace,+ pattern KeycodeKPRightBrace,+ pattern KeycodeKPTab,+ pattern KeycodeKPBackspace,+ pattern KeycodeKPA,+ pattern KeycodeKPB,+ pattern KeycodeKPC,+ pattern KeycodeKPD,+ pattern KeycodeKPE,+ pattern KeycodeKPF,+ pattern KeycodeKPXor,+ pattern KeycodeKPPower,+ pattern KeycodeKPPercent,+ pattern KeycodeKPLess,+ pattern KeycodeKPGreater,+ pattern KeycodeKPAmpersand,+ pattern KeycodeKPDblAmpersand,+ pattern KeycodeKPVerticalBar,+ pattern KeycodeKPDblVerticalBar,+ pattern KeycodeKPColon,+ pattern KeycodeKPHash,+ pattern KeycodeKPSpace,+ pattern KeycodeKPAt,+ pattern KeycodeKPExclam,+ pattern KeycodeKPMemStore,+ pattern KeycodeKPMemRecall,+ pattern KeycodeKPMemClear,+ pattern KeycodeKPMemAdd,+ pattern KeycodeKPMemSubtract,+ pattern KeycodeKPMemMultiply,+ pattern KeycodeKPMemDivide,+ pattern KeycodeKPPlusMinus,+ pattern KeycodeKPClear,+ pattern KeycodeKPClearEntry,+ pattern KeycodeKPBinary,+ pattern KeycodeKPOctal,+ pattern KeycodeKPDecimal,+ pattern KeycodeKPHexadecimal,+ pattern KeycodeLCtrl,+ pattern KeycodeLShift,+ pattern KeycodeLAlt,+ pattern KeycodeLGUI,+ pattern KeycodeRCtrl,+ pattern KeycodeRShift,+ pattern KeycodeRAlt,+ pattern KeycodeRGUI,+ pattern KeycodeMode,+ pattern KeycodeAudioNext,+ pattern KeycodeAudioPrev,+ pattern KeycodeAudioStop,+ pattern KeycodeAudioPlay,+ pattern KeycodeAudioMute,+ pattern KeycodeMediaSelect,+ pattern KeycodeWWW,+ pattern KeycodeMail,+ pattern KeycodeCalculator,+ pattern KeycodeComputer,+ pattern KeycodeACSearch,+ pattern KeycodeACHome,+ pattern KeycodeACBack,+ pattern KeycodeACForward,+ pattern KeycodeACStop,+ pattern KeycodeACRefresh,+ pattern KeycodeACBookmarks,+ pattern KeycodeBrightnessDown,+ pattern KeycodeBrightnessUp,+ pattern KeycodeDisplaySwitch,+ pattern KeycodeKbdIllumToggle,+ pattern KeycodeKbdIllumDown,+ pattern KeycodeKbdIllumUp,+ pattern KeycodeEject,+ pattern KeycodeSleep)++ where++import GHC.Generics (Generic)+import Data.Data (Data)+import Data.Int+import Data.Typeable+import Data.Word+import SDL.Internal.Numbered+import qualified SDL.Raw.Enum as Raw++newtype Scancode = Scancode { unwrapScancode :: Word32 }+ deriving (Bounded, Data, Eq, Ord, Read, Generic, Show, Typeable)++pattern ScancodeUnknown = Scancode Raw.SDL_SCANCODE_UNKNOWN+pattern ScancodeA = Scancode Raw.SDL_SCANCODE_A+pattern ScancodeB = Scancode Raw.SDL_SCANCODE_B+pattern ScancodeC = Scancode Raw.SDL_SCANCODE_C+pattern ScancodeD = Scancode Raw.SDL_SCANCODE_D+pattern ScancodeE = Scancode Raw.SDL_SCANCODE_E+pattern ScancodeF = Scancode Raw.SDL_SCANCODE_F+pattern ScancodeG = Scancode Raw.SDL_SCANCODE_G+pattern ScancodeH = Scancode Raw.SDL_SCANCODE_H+pattern ScancodeI = Scancode Raw.SDL_SCANCODE_I+pattern ScancodeJ = Scancode Raw.SDL_SCANCODE_J+pattern ScancodeK = Scancode Raw.SDL_SCANCODE_K+pattern ScancodeL = Scancode Raw.SDL_SCANCODE_L+pattern ScancodeM = Scancode Raw.SDL_SCANCODE_M+pattern ScancodeN = Scancode Raw.SDL_SCANCODE_N+pattern ScancodeO = Scancode Raw.SDL_SCANCODE_O+pattern ScancodeP = Scancode Raw.SDL_SCANCODE_P+pattern ScancodeQ = Scancode Raw.SDL_SCANCODE_Q+pattern ScancodeR = Scancode Raw.SDL_SCANCODE_R+pattern ScancodeS = Scancode Raw.SDL_SCANCODE_S+pattern ScancodeT = Scancode Raw.SDL_SCANCODE_T+pattern ScancodeU = Scancode Raw.SDL_SCANCODE_U+pattern ScancodeV = Scancode Raw.SDL_SCANCODE_V+pattern ScancodeW = Scancode Raw.SDL_SCANCODE_W+pattern ScancodeX = Scancode Raw.SDL_SCANCODE_X+pattern ScancodeY = Scancode Raw.SDL_SCANCODE_Y+pattern ScancodeZ = Scancode Raw.SDL_SCANCODE_Z+pattern Scancode1 = Scancode Raw.SDL_SCANCODE_1+pattern Scancode2 = Scancode Raw.SDL_SCANCODE_2+pattern Scancode3 = Scancode Raw.SDL_SCANCODE_3+pattern Scancode4 = Scancode Raw.SDL_SCANCODE_4+pattern Scancode5 = Scancode Raw.SDL_SCANCODE_5+pattern Scancode6 = Scancode Raw.SDL_SCANCODE_6+pattern Scancode7 = Scancode Raw.SDL_SCANCODE_7+pattern Scancode8 = Scancode Raw.SDL_SCANCODE_8+pattern Scancode9 = Scancode Raw.SDL_SCANCODE_9+pattern Scancode0 = Scancode Raw.SDL_SCANCODE_0+pattern ScancodeReturn = Scancode Raw.SDL_SCANCODE_RETURN+pattern ScancodeEscape = Scancode Raw.SDL_SCANCODE_ESCAPE+pattern ScancodeBackspace = Scancode Raw.SDL_SCANCODE_BACKSPACE+pattern ScancodeTab = Scancode Raw.SDL_SCANCODE_TAB+pattern ScancodeSpace = Scancode Raw.SDL_SCANCODE_SPACE+pattern ScancodeMinus = Scancode Raw.SDL_SCANCODE_MINUS+pattern ScancodeEquals = Scancode Raw.SDL_SCANCODE_EQUALS+pattern ScancodeLeftBracket = Scancode Raw.SDL_SCANCODE_LEFTBRACKET+pattern ScancodeRightBracket = Scancode Raw.SDL_SCANCODE_RIGHTBRACKET+pattern ScancodeBackslash = Scancode Raw.SDL_SCANCODE_BACKSLASH+pattern ScancodeNonUSHash = Scancode Raw.SDL_SCANCODE_NONUSHASH+pattern ScancodeSemicolon = Scancode Raw.SDL_SCANCODE_SEMICOLON+pattern ScancodeApostrophe = Scancode Raw.SDL_SCANCODE_APOSTROPHE+pattern ScancodeGrave = Scancode Raw.SDL_SCANCODE_GRAVE+pattern ScancodeComma = Scancode Raw.SDL_SCANCODE_COMMA+pattern ScancodePeriod = Scancode Raw.SDL_SCANCODE_PERIOD+pattern ScancodeSlash = Scancode Raw.SDL_SCANCODE_SLASH+pattern ScancodeCapsLock = Scancode Raw.SDL_SCANCODE_CAPSLOCK+pattern ScancodeF1 = Scancode Raw.SDL_SCANCODE_F1+pattern ScancodeF2 = Scancode Raw.SDL_SCANCODE_F2+pattern ScancodeF3 = Scancode Raw.SDL_SCANCODE_F3+pattern ScancodeF4 = Scancode Raw.SDL_SCANCODE_F4+pattern ScancodeF5 = Scancode Raw.SDL_SCANCODE_F5+pattern ScancodeF6 = Scancode Raw.SDL_SCANCODE_F6+pattern ScancodeF7 = Scancode Raw.SDL_SCANCODE_F7+pattern ScancodeF8 = Scancode Raw.SDL_SCANCODE_F8+pattern ScancodeF9 = Scancode Raw.SDL_SCANCODE_F9+pattern ScancodeF10 = Scancode Raw.SDL_SCANCODE_F10+pattern ScancodeF11 = Scancode Raw.SDL_SCANCODE_F11+pattern ScancodeF12 = Scancode Raw.SDL_SCANCODE_F12+pattern ScancodePrintScreen = Scancode Raw.SDL_SCANCODE_PRINTSCREEN+pattern ScancodeScrollLock = Scancode Raw.SDL_SCANCODE_SCROLLLOCK+pattern ScancodePause = Scancode Raw.SDL_SCANCODE_PAUSE+pattern ScancodeInsert = Scancode Raw.SDL_SCANCODE_INSERT+pattern ScancodeHome = Scancode Raw.SDL_SCANCODE_HOME+pattern ScancodePageUp = Scancode Raw.SDL_SCANCODE_PAGEUP+pattern ScancodeDelete = Scancode Raw.SDL_SCANCODE_DELETE+pattern ScancodeEnd = Scancode Raw.SDL_SCANCODE_END+pattern ScancodePageDown = Scancode Raw.SDL_SCANCODE_PAGEDOWN+pattern ScancodeRight = Scancode Raw.SDL_SCANCODE_RIGHT+pattern ScancodeLeft = Scancode Raw.SDL_SCANCODE_LEFT+pattern ScancodeDown = Scancode Raw.SDL_SCANCODE_DOWN+pattern ScancodeUp = Scancode Raw.SDL_SCANCODE_UP+pattern ScancodeNumLockClear = Scancode Raw.SDL_SCANCODE_NUMLOCKCLEAR+pattern ScancodeKPDivide = Scancode Raw.SDL_SCANCODE_KP_DIVIDE+pattern ScancodeKPMultiply = Scancode Raw.SDL_SCANCODE_KP_MULTIPLY+pattern ScancodeKPMinus = Scancode Raw.SDL_SCANCODE_KP_MINUS+pattern ScancodeKPPlus = Scancode Raw.SDL_SCANCODE_KP_PLUS+pattern ScancodeKPEnter = Scancode Raw.SDL_SCANCODE_KP_ENTER+pattern ScancodeKP1 = Scancode Raw.SDL_SCANCODE_KP_1+pattern ScancodeKP2 = Scancode Raw.SDL_SCANCODE_KP_2+pattern ScancodeKP3 = Scancode Raw.SDL_SCANCODE_KP_3+pattern ScancodeKP4 = Scancode Raw.SDL_SCANCODE_KP_4+pattern ScancodeKP5 = Scancode Raw.SDL_SCANCODE_KP_5+pattern ScancodeKP6 = Scancode Raw.SDL_SCANCODE_KP_6+pattern ScancodeKP7 = Scancode Raw.SDL_SCANCODE_KP_7+pattern ScancodeKP8 = Scancode Raw.SDL_SCANCODE_KP_8+pattern ScancodeKP9 = Scancode Raw.SDL_SCANCODE_KP_9+pattern ScancodeKP0 = Scancode Raw.SDL_SCANCODE_KP_0+pattern ScancodeKPPeriod = Scancode Raw.SDL_SCANCODE_KP_PERIOD+pattern ScancodeNonUSBackslash = Scancode Raw.SDL_SCANCODE_NONUSBACKSLASH+pattern ScancodeApplication = Scancode Raw.SDL_SCANCODE_APPLICATION+pattern ScancodePower = Scancode Raw.SDL_SCANCODE_POWER+pattern ScancodeKPEquals = Scancode Raw.SDL_SCANCODE_KP_EQUALS+pattern ScancodeF13 = Scancode Raw.SDL_SCANCODE_F13+pattern ScancodeF14 = Scancode Raw.SDL_SCANCODE_F14+pattern ScancodeF15 = Scancode Raw.SDL_SCANCODE_F15+pattern ScancodeF16 = Scancode Raw.SDL_SCANCODE_F16+pattern ScancodeF17 = Scancode Raw.SDL_SCANCODE_F17+pattern ScancodeF18 = Scancode Raw.SDL_SCANCODE_F18+pattern ScancodeF19 = Scancode Raw.SDL_SCANCODE_F19+pattern ScancodeF20 = Scancode Raw.SDL_SCANCODE_F20+pattern ScancodeF21 = Scancode Raw.SDL_SCANCODE_F21+pattern ScancodeF22 = Scancode Raw.SDL_SCANCODE_F22+pattern ScancodeF23 = Scancode Raw.SDL_SCANCODE_F23+pattern ScancodeF24 = Scancode Raw.SDL_SCANCODE_F24+pattern ScancodeExecute = Scancode Raw.SDL_SCANCODE_EXECUTE+pattern ScancodeHelp = Scancode Raw.SDL_SCANCODE_HELP+pattern ScancodeMenu = Scancode Raw.SDL_SCANCODE_MENU+pattern ScancodeSelect = Scancode Raw.SDL_SCANCODE_SELECT+pattern ScancodeStop = Scancode Raw.SDL_SCANCODE_STOP+pattern ScancodeAgain = Scancode Raw.SDL_SCANCODE_AGAIN+pattern ScancodeUndo = Scancode Raw.SDL_SCANCODE_UNDO+pattern ScancodeCut = Scancode Raw.SDL_SCANCODE_CUT+pattern ScancodeCopy = Scancode Raw.SDL_SCANCODE_COPY+pattern ScancodePaste = Scancode Raw.SDL_SCANCODE_PASTE+pattern ScancodeFind = Scancode Raw.SDL_SCANCODE_FIND+pattern ScancodeMute = Scancode Raw.SDL_SCANCODE_MUTE+pattern ScancodeVolumeUp = Scancode Raw.SDL_SCANCODE_VOLUMEUP+pattern ScancodeVolumeDown = Scancode Raw.SDL_SCANCODE_VOLUMEDOWN+pattern ScancodeKPComma = Scancode Raw.SDL_SCANCODE_KP_COMMA+pattern ScancodeKPEqualsAS400 = Scancode Raw.SDL_SCANCODE_KP_EQUALSAS400+pattern ScancodeInternational1 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL1+pattern ScancodeInternational2 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL2+pattern ScancodeInternational3 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL3+pattern ScancodeInternational4 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL4+pattern ScancodeInternational5 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL5+pattern ScancodeInternational6 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL6+pattern ScancodeInternational7 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL7+pattern ScancodeInternational8 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL8+pattern ScancodeInternational9 = Scancode Raw.SDL_SCANCODE_INTERNATIONAL9+pattern ScancodeLang1 = Scancode Raw.SDL_SCANCODE_LANG1+pattern ScancodeLang2 = Scancode Raw.SDL_SCANCODE_LANG2+pattern ScancodeLang3 = Scancode Raw.SDL_SCANCODE_LANG3+pattern ScancodeLang4 = Scancode Raw.SDL_SCANCODE_LANG4+pattern ScancodeLang5 = Scancode Raw.SDL_SCANCODE_LANG5+pattern ScancodeLang6 = Scancode Raw.SDL_SCANCODE_LANG6+pattern ScancodeLang7 = Scancode Raw.SDL_SCANCODE_LANG7+pattern ScancodeLang8 = Scancode Raw.SDL_SCANCODE_LANG8+pattern ScancodeLang9 = Scancode Raw.SDL_SCANCODE_LANG9+pattern ScancodeAltErase = Scancode Raw.SDL_SCANCODE_ALTERASE+pattern ScancodeSysReq = Scancode Raw.SDL_SCANCODE_SYSREQ+pattern ScancodeCancel = Scancode Raw.SDL_SCANCODE_CANCEL+pattern ScancodeClear = Scancode Raw.SDL_SCANCODE_CLEAR+pattern ScancodePrior = Scancode Raw.SDL_SCANCODE_PRIOR+pattern ScancodeReturn2 = Scancode Raw.SDL_SCANCODE_RETURN2+pattern ScancodeSeparator = Scancode Raw.SDL_SCANCODE_SEPARATOR+pattern ScancodeOut = Scancode Raw.SDL_SCANCODE_OUT+pattern ScancodeOper = Scancode Raw.SDL_SCANCODE_OPER+pattern ScancodeClearAgain = Scancode Raw.SDL_SCANCODE_CLEARAGAIN+pattern ScancodeCrSel = Scancode Raw.SDL_SCANCODE_CRSEL+pattern ScancodeExSel = Scancode Raw.SDL_SCANCODE_EXSEL+pattern ScancodeKP00 = Scancode Raw.SDL_SCANCODE_KP_00+pattern ScancodeKP000 = Scancode Raw.SDL_SCANCODE_KP_000+pattern ScancodeThousandsSeparator = Scancode Raw.SDL_SCANCODE_THOUSANDSSEPARATOR+pattern ScancodeDecimalSeparator = Scancode Raw.SDL_SCANCODE_DECIMALSEPARATOR+pattern ScancodeCurrencyUnit = Scancode Raw.SDL_SCANCODE_CURRENCYUNIT+pattern ScancodeCurrencySubunit = Scancode Raw.SDL_SCANCODE_CURRENCYSUBUNIT+pattern ScancodeLeftParen = Scancode Raw.SDL_SCANCODE_KP_LEFTPAREN+pattern ScancodeRightParen = Scancode Raw.SDL_SCANCODE_KP_RIGHTPAREN+pattern ScancodeLeftBrace = Scancode Raw.SDL_SCANCODE_KP_LEFTBRACE+pattern ScancodeRightBrace = Scancode Raw.SDL_SCANCODE_KP_RIGHTBRACE+pattern ScancodeKPTab = Scancode Raw.SDL_SCANCODE_KP_TAB+pattern ScancodeKPBackspace = Scancode Raw.SDL_SCANCODE_KP_BACKSPACE+pattern ScancodeKPA = Scancode Raw.SDL_SCANCODE_KP_A+pattern ScancodeKPB = Scancode Raw.SDL_SCANCODE_KP_B+pattern ScancodeKPC = Scancode Raw.SDL_SCANCODE_KP_C+pattern ScancodeKPD = Scancode Raw.SDL_SCANCODE_KP_D+pattern ScancodeKPE = Scancode Raw.SDL_SCANCODE_KP_E+pattern ScancodeKPF = Scancode Raw.SDL_SCANCODE_KP_F+pattern ScancodeKPXOR = Scancode Raw.SDL_SCANCODE_KP_XOR+pattern ScancodeKPPower = Scancode Raw.SDL_SCANCODE_KP_POWER+pattern ScancodeKPPercent = Scancode Raw.SDL_SCANCODE_KP_PERCENT+pattern ScancodeKPLess = Scancode Raw.SDL_SCANCODE_KP_LESS+pattern ScancodeKPGreater = Scancode Raw.SDL_SCANCODE_KP_GREATER+pattern ScancodeKPAmpersand = Scancode Raw.SDL_SCANCODE_KP_AMPERSAND+pattern ScancodeKPDblAmpersand = Scancode Raw.SDL_SCANCODE_KP_DBLAMPERSAND+pattern ScancodeKPVerticalBar = Scancode Raw.SDL_SCANCODE_KP_VERTICALBAR+pattern ScancodeKPDblVerticalBar = Scancode Raw.SDL_SCANCODE_KP_DBLVERTICALBAR+pattern ScancodeKPColon = Scancode Raw.SDL_SCANCODE_KP_COLON+pattern ScancodeKPHash = Scancode Raw.SDL_SCANCODE_KP_HASH+pattern ScancodeKPSpace = Scancode Raw.SDL_SCANCODE_KP_SPACE+pattern ScancodeKPAt = Scancode Raw.SDL_SCANCODE_KP_AT+pattern ScancodeKPExclam = Scancode Raw.SDL_SCANCODE_KP_EXCLAM+pattern ScancodeKPMemStore = Scancode Raw.SDL_SCANCODE_KP_MEMSTORE+pattern ScancodeKPMemRecall = Scancode Raw.SDL_SCANCODE_KP_MEMRECALL+pattern ScancodeKPMemClear = Scancode Raw.SDL_SCANCODE_KP_MEMCLEAR+pattern ScancodeKPMemAdd = Scancode Raw.SDL_SCANCODE_KP_MEMADD+pattern ScancodeKPMemSubtract = Scancode Raw.SDL_SCANCODE_KP_MEMSUBTRACT+pattern ScancodeKPMemMultiply = Scancode Raw.SDL_SCANCODE_KP_MEMMULTIPLY+pattern ScancodeKPMemDivide = Scancode Raw.SDL_SCANCODE_KP_MEMDIVIDE+pattern ScancodeKPPlusMinus = Scancode Raw.SDL_SCANCODE_KP_PLUSMINUS+pattern ScancodeKPClear = Scancode Raw.SDL_SCANCODE_KP_CLEAR+pattern ScancodeKPClearEntry = Scancode Raw.SDL_SCANCODE_KP_CLEARENTRY+pattern ScancodeKPBinary = Scancode Raw.SDL_SCANCODE_KP_BINARY+pattern ScancodeKPOctal = Scancode Raw.SDL_SCANCODE_KP_OCTAL+pattern ScancodeKPDecimal = Scancode Raw.SDL_SCANCODE_KP_DECIMAL+pattern ScancodeKPHexadecimal = Scancode Raw.SDL_SCANCODE_KP_HEXADECIMAL+pattern ScancodeLCtrl = Scancode Raw.SDL_SCANCODE_LCTRL+pattern ScancodeLShift = Scancode Raw.SDL_SCANCODE_LSHIFT+pattern ScancodeLAlt = Scancode Raw.SDL_SCANCODE_LALT+pattern ScancodeLGUI = Scancode Raw.SDL_SCANCODE_LGUI+pattern ScancodeRCtrl = Scancode Raw.SDL_SCANCODE_RCTRL+pattern ScancodeRShift = Scancode Raw.SDL_SCANCODE_RSHIFT+pattern ScancodeRAlt = Scancode Raw.SDL_SCANCODE_RALT+pattern ScancodeRGUI = Scancode Raw.SDL_SCANCODE_RGUI+pattern ScancodeMode = Scancode Raw.SDL_SCANCODE_MODE+pattern ScancodeAudioNext = Scancode Raw.SDL_SCANCODE_AUDIONEXT+pattern ScancodeAudioPrev = Scancode Raw.SDL_SCANCODE_AUDIOPREV+pattern ScancodeAudioStop = Scancode Raw.SDL_SCANCODE_AUDIOSTOP+pattern ScancodeAudioPlay = Scancode Raw.SDL_SCANCODE_AUDIOPLAY+pattern ScancodeAudioMute = Scancode Raw.SDL_SCANCODE_AUDIOMUTE+pattern ScancodeMediaSelect = Scancode Raw.SDL_SCANCODE_MEDIASELECT+pattern ScancodeWWW = Scancode Raw.SDL_SCANCODE_WWW+pattern ScancodeMail = Scancode Raw.SDL_SCANCODE_MAIL+pattern ScancodeCalculator = Scancode Raw.SDL_SCANCODE_CALCULATOR+pattern ScancodeComputer = Scancode Raw.SDL_SCANCODE_COMPUTER+pattern ScancodeACSearch = Scancode Raw.SDL_SCANCODE_AC_SEARCH+pattern ScancodeACHome = Scancode Raw.SDL_SCANCODE_AC_HOME+pattern ScancodeACBack = Scancode Raw.SDL_SCANCODE_AC_BACK+pattern ScancodeACForward = Scancode Raw.SDL_SCANCODE_AC_FORWARD+pattern ScancodeACStop = Scancode Raw.SDL_SCANCODE_AC_STOP+pattern ScancodeACRefresh = Scancode Raw.SDL_SCANCODE_AC_REFRESH+pattern ScancodeACBookmarks = Scancode Raw.SDL_SCANCODE_AC_BOOKMARKS+pattern ScancodeBrightnessDown = Scancode Raw.SDL_SCANCODE_BRIGHTNESSDOWN+pattern ScancodeBrightnessUp = Scancode Raw.SDL_SCANCODE_BRIGHTNESSUP+pattern ScancodeDisplaySwitch = Scancode Raw.SDL_SCANCODE_DISPLAYSWITCH+pattern ScancodeKBDIllumToggle = Scancode Raw.SDL_SCANCODE_KBDILLUMTOGGLE+pattern ScancodeKBDIllumDown = Scancode Raw.SDL_SCANCODE_KBDILLUMDOWN+pattern ScancodeKBDIllumUp = Scancode Raw.SDL_SCANCODE_KBDILLUMUP+pattern ScancodeEject = Scancode Raw.SDL_SCANCODE_EJECT+pattern ScancodeSleep = Scancode Raw.SDL_SCANCODE_SLEEP+pattern ScancodeApp1 = Scancode Raw.SDL_SCANCODE_APP1+pattern ScancodeApp2 = Scancode Raw.SDL_SCANCODE_APP2++instance FromNumber Scancode Word32 where+ fromNumber = Scancode++instance ToNumber Scancode Word32 where+ toNumber = unwrapScancode++newtype Keycode = Keycode { unwrapKeycode :: Int32 }+ deriving (Bounded, Data, Eq, Ord, Read, Generic, Show, Typeable)++pattern KeycodeUnknown = Keycode Raw.SDLK_UNKNOWN+pattern KeycodeReturn = Keycode Raw.SDLK_RETURN+pattern KeycodeEscape = Keycode Raw.SDLK_ESCAPE+pattern KeycodeBackspace = Keycode Raw.SDLK_BACKSPACE+pattern KeycodeTab = Keycode Raw.SDLK_TAB+pattern KeycodeSpace = Keycode Raw.SDLK_SPACE+pattern KeycodeExclaim = Keycode Raw.SDLK_EXCLAIM+pattern KeycodeQuoteDbl = Keycode Raw.SDLK_QUOTEDBL+pattern KeycodeHash = Keycode Raw.SDLK_HASH+pattern KeycodePercent = Keycode Raw.SDLK_PERCENT+pattern KeycodeDollar = Keycode Raw.SDLK_DOLLAR+pattern KeycodeAmpersand = Keycode Raw.SDLK_AMPERSAND+pattern KeycodeQuote = Keycode Raw.SDLK_QUOTE+pattern KeycodeLeftParen = Keycode Raw.SDLK_LEFTPAREN+pattern KeycodeRightParen = Keycode Raw.SDLK_RIGHTPAREN+pattern KeycodeAsterisk = Keycode Raw.SDLK_ASTERISK+pattern KeycodePlus = Keycode Raw.SDLK_PLUS+pattern KeycodeComma = Keycode Raw.SDLK_COMMA+pattern KeycodeMinus = Keycode Raw.SDLK_MINUS+pattern KeycodePeriod = Keycode Raw.SDLK_PERIOD+pattern KeycodeSlash = Keycode Raw.SDLK_SLASH+pattern Keycode0 = Keycode Raw.SDLK_0+pattern Keycode1 = Keycode Raw.SDLK_1+pattern Keycode2 = Keycode Raw.SDLK_2+pattern Keycode3 = Keycode Raw.SDLK_3+pattern Keycode4 = Keycode Raw.SDLK_4+pattern Keycode5 = Keycode Raw.SDLK_5+pattern Keycode6 = Keycode Raw.SDLK_6+pattern Keycode7 = Keycode Raw.SDLK_7+pattern Keycode8 = Keycode Raw.SDLK_8+pattern Keycode9 = Keycode Raw.SDLK_9+pattern KeycodeColon = Keycode Raw.SDLK_COLON+pattern KeycodeSemicolon = Keycode Raw.SDLK_SEMICOLON+pattern KeycodeLess = Keycode Raw.SDLK_LESS+pattern KeycodeEquals = Keycode Raw.SDLK_EQUALS+pattern KeycodeGreater = Keycode Raw.SDLK_GREATER+pattern KeycodeQuestion = Keycode Raw.SDLK_QUESTION+pattern KeycodeAt = Keycode Raw.SDLK_AT+pattern KeycodeLeftBracket = Keycode Raw.SDLK_LEFTBRACKET+pattern KeycodeBackslash = Keycode Raw.SDLK_BACKSLASH+pattern KeycodeRightBracket = Keycode Raw.SDLK_RIGHTBRACKET+pattern KeycodeCaret = Keycode Raw.SDLK_CARET+pattern KeycodeUnderscore = Keycode Raw.SDLK_UNDERSCORE+pattern KeycodeBackquote = Keycode Raw.SDLK_BACKQUOTE+pattern KeycodeA = Keycode Raw.SDLK_a+pattern KeycodeB = Keycode Raw.SDLK_b+pattern KeycodeC = Keycode Raw.SDLK_c+pattern KeycodeD = Keycode Raw.SDLK_d+pattern KeycodeE = Keycode Raw.SDLK_e+pattern KeycodeF = Keycode Raw.SDLK_f+pattern KeycodeG = Keycode Raw.SDLK_g+pattern KeycodeH = Keycode Raw.SDLK_h+pattern KeycodeI = Keycode Raw.SDLK_i+pattern KeycodeJ = Keycode Raw.SDLK_j+pattern KeycodeK = Keycode Raw.SDLK_k+pattern KeycodeL = Keycode Raw.SDLK_l+pattern KeycodeM = Keycode Raw.SDLK_m+pattern KeycodeN = Keycode Raw.SDLK_n+pattern KeycodeO = Keycode Raw.SDLK_o+pattern KeycodeP = Keycode Raw.SDLK_p+pattern KeycodeQ = Keycode Raw.SDLK_q+pattern KeycodeR = Keycode Raw.SDLK_r+pattern KeycodeS = Keycode Raw.SDLK_s+pattern KeycodeT = Keycode Raw.SDLK_t+pattern KeycodeU = Keycode Raw.SDLK_u+pattern KeycodeV = Keycode Raw.SDLK_v+pattern KeycodeW = Keycode Raw.SDLK_w+pattern KeycodeX = Keycode Raw.SDLK_x+pattern KeycodeY = Keycode Raw.SDLK_y+pattern KeycodeZ = Keycode Raw.SDLK_z+pattern KeycodeCapsLock = Keycode Raw.SDLK_CAPSLOCK+pattern KeycodeF1 = Keycode Raw.SDLK_F1+pattern KeycodeF2 = Keycode Raw.SDLK_F2+pattern KeycodeF3 = Keycode Raw.SDLK_F3+pattern KeycodeF4 = Keycode Raw.SDLK_F4+pattern KeycodeF5 = Keycode Raw.SDLK_F5+pattern KeycodeF6 = Keycode Raw.SDLK_F6+pattern KeycodeF7 = Keycode Raw.SDLK_F7+pattern KeycodeF8 = Keycode Raw.SDLK_F8+pattern KeycodeF9 = Keycode Raw.SDLK_F9+pattern KeycodeF10 = Keycode Raw.SDLK_F10+pattern KeycodeF11 = Keycode Raw.SDLK_F11+pattern KeycodeF12 = Keycode Raw.SDLK_F12+pattern KeycodePrintScreen = Keycode Raw.SDLK_PRINTSCREEN+pattern KeycodeScrollLock = Keycode Raw.SDLK_SCROLLLOCK+pattern KeycodePause = Keycode Raw.SDLK_PAUSE+pattern KeycodeInsert = Keycode Raw.SDLK_INSERT+pattern KeycodeHome = Keycode Raw.SDLK_HOME+pattern KeycodePageUp = Keycode Raw.SDLK_PAGEUP+pattern KeycodeDelete = Keycode Raw.SDLK_DELETE+pattern KeycodeEnd = Keycode Raw.SDLK_END+pattern KeycodePageDown = Keycode Raw.SDLK_PAGEDOWN+pattern KeycodeRight = Keycode Raw.SDLK_RIGHT+pattern KeycodeLeft = Keycode Raw.SDLK_LEFT+pattern KeycodeDown = Keycode Raw.SDLK_DOWN+pattern KeycodeUp = Keycode Raw.SDLK_UP+pattern KeycodeNumLockClear = Keycode Raw.SDLK_NUMLOCKCLEAR+pattern KeycodeKPDivide = Keycode Raw.SDLK_KP_DIVIDE+pattern KeycodeKPMultiply = Keycode Raw.SDLK_KP_MULTIPLY+pattern KeycodeKPMinus = Keycode Raw.SDLK_KP_MINUS+pattern KeycodeKPPlus = Keycode Raw.SDLK_KP_PLUS+pattern KeycodeKPEnter = Keycode Raw.SDLK_KP_ENTER+pattern KeycodeKP1 = Keycode Raw.SDLK_KP_1+pattern KeycodeKP2 = Keycode Raw.SDLK_KP_2+pattern KeycodeKP3 = Keycode Raw.SDLK_KP_3+pattern KeycodeKP4 = Keycode Raw.SDLK_KP_4+pattern KeycodeKP5 = Keycode Raw.SDLK_KP_5+pattern KeycodeKP6 = Keycode Raw.SDLK_KP_6+pattern KeycodeKP7 = Keycode Raw.SDLK_KP_7+pattern KeycodeKP8 = Keycode Raw.SDLK_KP_8+pattern KeycodeKP9 = Keycode Raw.SDLK_KP_9+pattern KeycodeKP0 = Keycode Raw.SDLK_KP_0+pattern KeycodeKPPeriod = Keycode Raw.SDLK_KP_PERIOD+pattern KeycodeApplication = Keycode Raw.SDLK_APPLICATION+pattern KeycodePower = Keycode Raw.SDLK_POWER+pattern KeycodeKPEquals = Keycode Raw.SDLK_KP_EQUALS+pattern KeycodeF13 = Keycode Raw.SDLK_F13+pattern KeycodeF14 = Keycode Raw.SDLK_F14+pattern KeycodeF15 = Keycode Raw.SDLK_F15+pattern KeycodeF16 = Keycode Raw.SDLK_F16+pattern KeycodeF17 = Keycode Raw.SDLK_F17+pattern KeycodeF18 = Keycode Raw.SDLK_F18+pattern KeycodeF19 = Keycode Raw.SDLK_F19+pattern KeycodeF20 = Keycode Raw.SDLK_F20+pattern KeycodeF21 = Keycode Raw.SDLK_F21+pattern KeycodeF22 = Keycode Raw.SDLK_F22+pattern KeycodeF23 = Keycode Raw.SDLK_F23+pattern KeycodeF24 = Keycode Raw.SDLK_F24+pattern KeycodeExecute = Keycode Raw.SDLK_EXECUTE+pattern KeycodeHelp = Keycode Raw.SDLK_HELP+pattern KeycodeMenu = Keycode Raw.SDLK_MENU+pattern KeycodeSelect = Keycode Raw.SDLK_SELECT+pattern KeycodeStop = Keycode Raw.SDLK_STOP+pattern KeycodeAgain = Keycode Raw.SDLK_AGAIN+pattern KeycodeUndo = Keycode Raw.SDLK_UNDO+pattern KeycodeCut = Keycode Raw.SDLK_CUT+pattern KeycodeCopy = Keycode Raw.SDLK_COPY+pattern KeycodePaste = Keycode Raw.SDLK_PASTE+pattern KeycodeFind = Keycode Raw.SDLK_FIND+pattern KeycodeMute = Keycode Raw.SDLK_MUTE+pattern KeycodeVolumeUp = Keycode Raw.SDLK_VOLUMEUP+pattern KeycodeVolumeDown = Keycode Raw.SDLK_VOLUMEDOWN+pattern KeycodeKPComma = Keycode Raw.SDLK_KP_COMMA+pattern KeycodeKPEqualsAS400 = Keycode Raw.SDLK_KP_EQUALSAS400+pattern KeycodeAltErase = Keycode Raw.SDLK_ALTERASE+pattern KeycodeSysReq = Keycode Raw.SDLK_SYSREQ+pattern KeycodeCancel = Keycode Raw.SDLK_CANCEL+pattern KeycodeClear = Keycode Raw.SDLK_CLEAR+pattern KeycodePrior = Keycode Raw.SDLK_PRIOR+pattern KeycodeReturn2 = Keycode Raw.SDLK_RETURN2+pattern KeycodeSeparator = Keycode Raw.SDLK_SEPARATOR+pattern KeycodeOut = Keycode Raw.SDLK_OUT+pattern KeycodeOper = Keycode Raw.SDLK_OPER+pattern KeycodeClearAgain = Keycode Raw.SDLK_CLEARAGAIN+pattern KeycodeCrSel = Keycode Raw.SDLK_CRSEL+pattern KeycodeExSel = Keycode Raw.SDLK_EXSEL+pattern KeycodeKP00 = Keycode Raw.SDLK_KP_00+pattern KeycodeKP000 = Keycode Raw.SDLK_KP_000+pattern KeycodeThousandsSeparator = Keycode Raw.SDLK_THOUSANDSSEPARATOR+pattern KeycodeDecimalSeparator = Keycode Raw.SDLK_DECIMALSEPARATOR+pattern KeycodeCurrencyUnit = Keycode Raw.SDLK_CURRENCYUNIT+pattern KeycodeCurrencySubunit = Keycode Raw.SDLK_CURRENCYSUBUNIT+pattern KeycodeKPLeftParen = Keycode Raw.SDLK_KP_LEFTPAREN+pattern KeycodeKPRightParen = Keycode Raw.SDLK_KP_RIGHTPAREN+pattern KeycodeKPLeftBrace = Keycode Raw.SDLK_KP_LEFTBRACE+pattern KeycodeKPRightBrace = Keycode Raw.SDLK_KP_RIGHTBRACE+pattern KeycodeKPTab = Keycode Raw.SDLK_KP_TAB+pattern KeycodeKPBackspace = Keycode Raw.SDLK_KP_BACKSPACE+pattern KeycodeKPA = Keycode Raw.SDLK_KP_A+pattern KeycodeKPB = Keycode Raw.SDLK_KP_B+pattern KeycodeKPC = Keycode Raw.SDLK_KP_C+pattern KeycodeKPD = Keycode Raw.SDLK_KP_D+pattern KeycodeKPE = Keycode Raw.SDLK_KP_E+pattern KeycodeKPF = Keycode Raw.SDLK_KP_F+pattern KeycodeKPXor = Keycode Raw.SDLK_KP_XOR+pattern KeycodeKPPower = Keycode Raw.SDLK_KP_POWER+pattern KeycodeKPPercent = Keycode Raw.SDLK_KP_PERCENT+pattern KeycodeKPLess = Keycode Raw.SDLK_KP_LESS+pattern KeycodeKPGreater = Keycode Raw.SDLK_KP_GREATER+pattern KeycodeKPAmpersand = Keycode Raw.SDLK_KP_AMPERSAND+pattern KeycodeKPDblAmpersand = Keycode Raw.SDLK_KP_DBLAMPERSAND+pattern KeycodeKPVerticalBar = Keycode Raw.SDLK_KP_VERTICALBAR+pattern KeycodeKPDblVerticalBar = Keycode Raw.SDLK_KP_DBLVERTICALBAR+pattern KeycodeKPColon = Keycode Raw.SDLK_KP_COLON+pattern KeycodeKPHash = Keycode Raw.SDLK_KP_HASH+pattern KeycodeKPSpace = Keycode Raw.SDLK_KP_SPACE+pattern KeycodeKPAt = Keycode Raw.SDLK_KP_AT+pattern KeycodeKPExclam = Keycode Raw.SDLK_KP_EXCLAM+pattern KeycodeKPMemStore = Keycode Raw.SDLK_KP_MEMSTORE+pattern KeycodeKPMemRecall = Keycode Raw.SDLK_KP_MEMRECALL+pattern KeycodeKPMemClear = Keycode Raw.SDLK_KP_MEMCLEAR+pattern KeycodeKPMemAdd = Keycode Raw.SDLK_KP_MEMADD+pattern KeycodeKPMemSubtract = Keycode Raw.SDLK_KP_MEMSUBTRACT+pattern KeycodeKPMemMultiply = Keycode Raw.SDLK_KP_MEMMULTIPLY+pattern KeycodeKPMemDivide = Keycode Raw.SDLK_KP_MEMDIVIDE+pattern KeycodeKPPlusMinus = Keycode Raw.SDLK_KP_PLUSMINUS+pattern KeycodeKPClear = Keycode Raw.SDLK_KP_CLEAR+pattern KeycodeKPClearEntry = Keycode Raw.SDLK_KP_CLEARENTRY+pattern KeycodeKPBinary = Keycode Raw.SDLK_KP_BINARY+pattern KeycodeKPOctal = Keycode Raw.SDLK_KP_OCTAL+pattern KeycodeKPDecimal = Keycode Raw.SDLK_KP_DECIMAL+pattern KeycodeKPHexadecimal = Keycode Raw.SDLK_KP_HEXADECIMAL+pattern KeycodeLCtrl = Keycode Raw.SDLK_LCTRL+pattern KeycodeLShift = Keycode Raw.SDLK_LSHIFT+pattern KeycodeLAlt = Keycode Raw.SDLK_LALT+pattern KeycodeLGUI = Keycode Raw.SDLK_LGUI+pattern KeycodeRCtrl = Keycode Raw.SDLK_RCTRL+pattern KeycodeRShift = Keycode Raw.SDLK_RSHIFT+pattern KeycodeRAlt = Keycode Raw.SDLK_RALT+pattern KeycodeRGUI = Keycode Raw.SDLK_RGUI+pattern KeycodeMode = Keycode Raw.SDLK_MODE+pattern KeycodeAudioNext = Keycode Raw.SDLK_AUDIONEXT+pattern KeycodeAudioPrev = Keycode Raw.SDLK_AUDIOPREV+pattern KeycodeAudioStop = Keycode Raw.SDLK_AUDIOSTOP+pattern KeycodeAudioPlay = Keycode Raw.SDLK_AUDIOPLAY+pattern KeycodeAudioMute = Keycode Raw.SDLK_AUDIOMUTE+pattern KeycodeMediaSelect = Keycode Raw.SDLK_MEDIASELECT+pattern KeycodeWWW = Keycode Raw.SDLK_WWW+pattern KeycodeMail = Keycode Raw.SDLK_MAIL+pattern KeycodeCalculator = Keycode Raw.SDLK_CALCULATOR+pattern KeycodeComputer = Keycode Raw.SDLK_COMPUTER+pattern KeycodeACSearch = Keycode Raw.SDLK_AC_SEARCH+pattern KeycodeACHome = Keycode Raw.SDLK_AC_HOME+pattern KeycodeACBack = Keycode Raw.SDLK_AC_BACK+pattern KeycodeACForward = Keycode Raw.SDLK_AC_FORWARD+pattern KeycodeACStop = Keycode Raw.SDLK_AC_STOP+pattern KeycodeACRefresh = Keycode Raw.SDLK_AC_REFRESH+pattern KeycodeACBookmarks = Keycode Raw.SDLK_AC_BOOKMARKS+pattern KeycodeBrightnessDown = Keycode Raw.SDLK_BRIGHTNESSDOWN+pattern KeycodeBrightnessUp = Keycode Raw.SDLK_BRIGHTNESSUP+pattern KeycodeDisplaySwitch = Keycode Raw.SDLK_DISPLAYSWITCH+pattern KeycodeKbdIllumToggle = Keycode Raw.SDLK_KBDILLUMTOGGLE+pattern KeycodeKbdIllumDown = Keycode Raw.SDLK_KBDILLUMDOWN+pattern KeycodeKbdIllumUp = Keycode Raw.SDLK_KBDILLUMUP+pattern KeycodeEject = Keycode Raw.SDLK_EJECT+pattern KeycodeSleep = Keycode Raw.SDLK_SLEEP++instance FromNumber Keycode Int32 where+ fromNumber = Keycode++instance ToNumber Keycode Int32 where+ toNumber = unwrapKeycode
src/SDL/Internal/Numbered.hs view
@@ -1,11 +1,11 @@-{-# LANGUAGE FunctionalDependencies #-} -module SDL.Internal.Numbered - ( FromNumber(..) - , ToNumber(..) - ) where - -class (Integral b) => FromNumber a b | a -> b where - fromNumber :: b -> a - -class (Integral b) => ToNumber a b | a -> b where - toNumber :: a -> b +{-# LANGUAGE FunctionalDependencies #-}+module SDL.Internal.Numbered+ ( FromNumber(..)+ , ToNumber(..)+ ) where++class (Integral b) => FromNumber a b | a -> b where+ fromNumber :: b -> a++class (Integral b) => ToNumber a b | a -> b where+ toNumber :: a -> b
src/SDL/Internal/Types.hs view
@@ -1,23 +1,23 @@-{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -module SDL.Internal.Types - ( Joystick(..) - , Window(..) - , Renderer(..) - ) where - -import Data.Data (Data) -import Data.Typeable -import GHC.Generics (Generic) - -import qualified SDL.Raw as Raw - -newtype Joystick = Joystick { joystickPtr :: Raw.Joystick } - deriving (Data, Eq, Generic, Ord, Show, Typeable) - -newtype Window = Window (Raw.Window) - deriving (Data, Eq, Generic, Ord, Show, Typeable) - --- | An SDL rendering device. This can be created with 'SDL.Video.createRenderer'. -newtype Renderer = Renderer Raw.Renderer - deriving (Data, Eq, Generic, Ord, Show, Typeable) +{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+module SDL.Internal.Types+ ( Joystick(..)+ , Window(..)+ , Renderer(..)+ ) where++import Data.Data (Data)+import Data.Typeable+import GHC.Generics (Generic)++import qualified SDL.Raw as Raw++newtype Joystick = Joystick { joystickPtr :: Raw.Joystick }+ deriving (Data, Eq, Generic, Ord, Show, Typeable)++newtype Window = Window (Raw.Window)+ deriving (Data, Eq, Generic, Ord, Show, Typeable)++-- | An SDL rendering device. This can be created with 'SDL.Video.createRenderer'.+newtype Renderer = Renderer Raw.Renderer+ deriving (Data, Eq, Generic, Ord, Show, Typeable)
src/SDL/Internal/Vect.hs view
@@ -1,669 +1,669 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DeriveTraversable #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE Trustworthy #-} -{-# LANGUAGE TypeFamilies #-} - -#ifndef MIN_VERSION_vector -#define MIN_VERSION_vector(x,y,z) 1 -#endif - ------------------------------------------------------------------------------ --- | --- Copyright : (C) 2012-2015 Edward Kmett --- License : BSD-style (see the file LICENSE) --- --- Maintainer : Edward Kmett <ekmett@gmail.com> --- Stability : experimental --- Portability : non-portable ----------------------------------------------------------------------------- - -module SDL.Internal.Vect - ( Point (..) - , V2 (..) - , V3 (..) - , V4 (..) - ) where - -import Control.Applicative -import Control.Monad (liftM) -import Control.Monad.Fix -import Control.Monad.Zip -import Data.Data -import Data.Foldable -import Data.Monoid -import Data.Traversable -import qualified Data.Vector.Generic as G -import qualified Data.Vector.Generic.Mutable as M -import qualified Data.Vector.Unboxed.Base as U -import Foreign.Ptr (castPtr) -import Foreign.Storable (Storable (..)) -import GHC.Arr (Ix (..)) -import GHC.Generics (Generic, Generic1) -import Prelude --- Explicit Prelude import suppresses warnings about redundant imports. -{-# ANN module "HLint: ignore Reduce duplication" #-} -{-# ANN module "HLint: ignore Use fmap" #-} - - --- | A handy wrapper to help distinguish points from vectors at the --- type level -newtype Point f a = P (f a) - deriving ( Eq, Ord, Show, Read, Monad, Functor, Applicative, Foldable - , Traversable, Fractional , Num, Ix, Storable, Generic, Generic1 - , Typeable, Data - ) - -data instance U.Vector (Point f a) = V_P !(U.Vector (f a)) -data instance U.MVector s (Point f a) = MV_P !(U.MVector s (f a)) -instance U.Unbox (f a) => U.Unbox (Point f a) - -instance U.Unbox (f a) => M.MVector U.MVector (Point f a) where - {-# INLINE basicLength #-} - {-# INLINE basicUnsafeSlice #-} - {-# INLINE basicOverlaps #-} - {-# INLINE basicUnsafeNew #-} - {-# INLINE basicUnsafeRead #-} - {-# INLINE basicUnsafeWrite #-} - basicLength (MV_P v) = M.basicLength v - basicUnsafeSlice m n (MV_P v) = MV_P (M.basicUnsafeSlice m n v) - basicOverlaps (MV_P v) (MV_P u) = M.basicOverlaps v u - basicUnsafeNew n = MV_P `liftM` M.basicUnsafeNew n - basicUnsafeRead (MV_P v) i = P `liftM` M.basicUnsafeRead v i - basicUnsafeWrite (MV_P v) i (P x) = M.basicUnsafeWrite v i x -#if MIN_VERSION_vector(0,11,0) - basicInitialize (MV_P v) = M.basicInitialize v - {-# INLINE basicInitialize #-} -#endif - -instance U.Unbox (f a) => G.Vector U.Vector (Point f a) where - {-# INLINE basicUnsafeFreeze #-} - {-# INLINE basicUnsafeThaw #-} - {-# INLINE basicLength #-} - {-# INLINE basicUnsafeSlice #-} - {-# INLINE basicUnsafeIndexM #-} - basicUnsafeFreeze (MV_P v) = V_P `liftM` G.basicUnsafeFreeze v - basicUnsafeThaw ( V_P v) = MV_P `liftM` G.basicUnsafeThaw v - basicLength ( V_P v) = G.basicLength v - basicUnsafeSlice m n (V_P v) = V_P (G.basicUnsafeSlice m n v) - basicUnsafeIndexM (V_P v) i = P `liftM` G.basicUnsafeIndexM v i - - --- | A 2-dimensional vector --- --- >>> pure 1 :: V2 Int --- V2 1 1 --- --- >>> V2 1 2 + V2 3 4 --- V2 4 6 --- --- >>> V2 1 2 * V2 3 4 --- V2 3 8 --- --- >>> sum (V2 1 2) --- 3 -data V2 a = V2 !a !a - deriving (Eq, Ord, Show, Read, Data, Typeable, Generic, Generic1) - -instance Functor V2 where - fmap f (V2 a b) = V2 (f a) (f b) - {-# INLINE fmap #-} - a <$ _ = V2 a a - {-# INLINE (<$) #-} - -instance Foldable V2 where - foldMap f (V2 a b) = f a `mappend` f b - {-# INLINE foldMap #-} - -instance Traversable V2 where - traverse f (V2 a b) = V2 <$> f a <*> f b - {-# INLINE traverse #-} - -instance Applicative V2 where - pure a = V2 a a - {-# INLINE pure #-} - V2 a b <*> V2 d e = V2 (a d) (b e) - {-# INLINE (<*>) #-} - -instance Monad V2 where - return a = V2 a a - {-# INLINE return #-} - V2 a b >>= f = V2 a' b' where - V2 a' _ = f a - V2 _ b' = f b - {-# INLINE (>>=) #-} - -instance Num a => Num (V2 a) where - (+) = liftA2 (+) - {-# INLINE (+) #-} - (-) = liftA2 (-) - {-# INLINE (-) #-} - (*) = liftA2 (*) - {-# INLINE (*) #-} - negate = fmap negate - {-# INLINE negate #-} - abs = fmap abs - {-# INLINE abs #-} - signum = fmap signum - {-# INLINE signum #-} - fromInteger = pure . fromInteger - {-# INLINE fromInteger #-} - -instance Fractional a => Fractional (V2 a) where - recip = fmap recip - {-# INLINE recip #-} - (/) = liftA2 (/) - {-# INLINE (/) #-} - fromRational = pure . fromRational - {-# INLINE fromRational #-} - -instance Floating a => Floating (V2 a) where - pi = pure pi - {-# INLINE pi #-} - exp = fmap exp - {-# INLINE exp #-} - sqrt = fmap sqrt - {-# INLINE sqrt #-} - log = fmap log - {-# INLINE log #-} - (**) = liftA2 (**) - {-# INLINE (**) #-} - logBase = liftA2 logBase - {-# INLINE logBase #-} - sin = fmap sin - {-# INLINE sin #-} - tan = fmap tan - {-# INLINE tan #-} - cos = fmap cos - {-# INLINE cos #-} - asin = fmap asin - {-# INLINE asin #-} - atan = fmap atan - {-# INLINE atan #-} - acos = fmap acos - {-# INLINE acos #-} - sinh = fmap sinh - {-# INLINE sinh #-} - tanh = fmap tanh - {-# INLINE tanh #-} - cosh = fmap cosh - {-# INLINE cosh #-} - asinh = fmap asinh - {-# INLINE asinh #-} - atanh = fmap atanh - {-# INLINE atanh #-} - acosh = fmap acosh - {-# INLINE acosh #-} - -instance Storable a => Storable (V2 a) where - sizeOf _ = 2 * sizeOf (undefined::a) - {-# INLINE sizeOf #-} - alignment _ = alignment (undefined::a) - {-# INLINE alignment #-} - poke ptr (V2 x y) = poke ptr' x >> pokeElemOff ptr' 1 y - where ptr' = castPtr ptr - {-# INLINE poke #-} - peek ptr = V2 <$> peek ptr' <*> peekElemOff ptr' 1 - where ptr' = castPtr ptr - {-# INLINE peek #-} - -instance Ix a => Ix (V2 a) where - {-# SPECIALISE instance Ix (V2 Int) #-} - - range (V2 l1 l2,V2 u1 u2) = - [ V2 i1 i2 | i1 <- range (l1,u1), i2 <- range (l2,u2) ] - {-# INLINE range #-} - - unsafeIndex (V2 l1 l2,V2 u1 u2) (V2 i1 i2) = - unsafeIndex (l1,u1) i1 * unsafeRangeSize (l2,u2) + unsafeIndex (l2,u2) i2 - {-# INLINE unsafeIndex #-} - - inRange (V2 l1 l2,V2 u1 u2) (V2 i1 i2) = - inRange (l1,u1) i1 && inRange (l2,u2) i2 - {-# INLINE inRange #-} - -data instance U.Vector (V2 a) = V_V2 {-# UNPACK #-} !Int !(U.Vector a) -data instance U.MVector s (V2 a) = MV_V2 {-# UNPACK #-} !Int !(U.MVector s a) -instance U.Unbox a => U.Unbox (V2 a) - -instance U.Unbox a => M.MVector U.MVector (V2 a) where - {-# INLINE basicLength #-} - {-# INLINE basicUnsafeSlice #-} - {-# INLINE basicOverlaps #-} - {-# INLINE basicUnsafeNew #-} - {-# INLINE basicUnsafeRead #-} - {-# INLINE basicUnsafeWrite #-} - basicLength (MV_V2 n _) = n - basicUnsafeSlice m n (MV_V2 _ v) = MV_V2 n (M.basicUnsafeSlice (2*m) (2*n) v) - basicOverlaps (MV_V2 _ v) (MV_V2 _ u) = M.basicOverlaps v u - basicUnsafeNew n = liftM (MV_V2 n) (M.basicUnsafeNew (2*n)) - basicUnsafeRead (MV_V2 _ v) i = - do let o = 2*i - x <- M.basicUnsafeRead v o - y <- M.basicUnsafeRead v (o+1) - return (V2 x y) - basicUnsafeWrite (MV_V2 _ v) i (V2 x y) = - do let o = 2*i - M.basicUnsafeWrite v o x - M.basicUnsafeWrite v (o+1) y -#if MIN_VERSION_vector(0,11,0) - basicInitialize (MV_V2 _ v) = M.basicInitialize v - {-# INLINE basicInitialize #-} -#endif - -instance U.Unbox a => G.Vector U.Vector (V2 a) where - {-# INLINE basicUnsafeFreeze #-} - {-# INLINE basicUnsafeThaw #-} - {-# INLINE basicLength #-} - {-# INLINE basicUnsafeSlice #-} - {-# INLINE basicUnsafeIndexM #-} - basicUnsafeFreeze (MV_V2 n v) = liftM ( V_V2 n) (G.basicUnsafeFreeze v) - basicUnsafeThaw ( V_V2 n v) = liftM (MV_V2 n) (G.basicUnsafeThaw v) - basicLength ( V_V2 n _) = n - basicUnsafeSlice m n (V_V2 _ v) = V_V2 n (G.basicUnsafeSlice (2*m) (2*n) v) - basicUnsafeIndexM (V_V2 _ v) i = - do let o = 2*i - x <- G.basicUnsafeIndexM v o - y <- G.basicUnsafeIndexM v (o+1) - return (V2 x y) - -instance MonadZip V2 where - mzipWith = liftA2 - -instance MonadFix V2 where - mfix f = V2 (let V2 a _ = f a in a) - (let V2 _ a = f a in a) - -instance Bounded a => Bounded (V2 a) where - minBound = pure minBound - {-# INLINE minBound #-} - maxBound = pure maxBound - {-# INLINE maxBound #-} - - --- | A 3-dimensional vector -data V3 a = V3 !a !a !a - deriving (Eq, Ord, Show, Read, Data, Typeable, Generic, Generic1) - -instance Functor V3 where - fmap f (V3 a b c) = V3 (f a) (f b) (f c) - {-# INLINE fmap #-} - a <$ _ = V3 a a a - {-# INLINE (<$) #-} - -instance Foldable V3 where - foldMap f (V3 a b c) = f a `mappend` f b `mappend` f c - {-# INLINE foldMap #-} - -instance Traversable V3 where - traverse f (V3 a b c) = V3 <$> f a <*> f b <*> f c - {-# INLINE traverse #-} - -instance Applicative V3 where - pure a = V3 a a a - {-# INLINE pure #-} - V3 a b c <*> V3 d e f = V3 (a d) (b e) (c f) - {-# INLINE (<*>) #-} - -instance Monad V3 where - return a = V3 a a a - {-# INLINE return #-} - V3 a b c >>= f = V3 a' b' c' where - V3 a' _ _ = f a - V3 _ b' _ = f b - V3 _ _ c' = f c - {-# INLINE (>>=) #-} - -instance Num a => Num (V3 a) where - (+) = liftA2 (+) - {-# INLINE (+) #-} - (-) = liftA2 (-) - {-# INLINE (-) #-} - (*) = liftA2 (*) - {-# INLINE (*) #-} - negate = fmap negate - {-# INLINE negate #-} - abs = fmap abs - {-# INLINE abs #-} - signum = fmap signum - {-# INLINE signum #-} - fromInteger = pure . fromInteger - {-# INLINE fromInteger #-} - -instance Fractional a => Fractional (V3 a) where - recip = fmap recip - {-# INLINE recip #-} - (/) = liftA2 (/) - {-# INLINE (/) #-} - fromRational = pure . fromRational - {-# INLINE fromRational #-} - -instance Floating a => Floating (V3 a) where - pi = pure pi - {-# INLINE pi #-} - exp = fmap exp - {-# INLINE exp #-} - sqrt = fmap sqrt - {-# INLINE sqrt #-} - log = fmap log - {-# INLINE log #-} - (**) = liftA2 (**) - {-# INLINE (**) #-} - logBase = liftA2 logBase - {-# INLINE logBase #-} - sin = fmap sin - {-# INLINE sin #-} - tan = fmap tan - {-# INLINE tan #-} - cos = fmap cos - {-# INLINE cos #-} - asin = fmap asin - {-# INLINE asin #-} - atan = fmap atan - {-# INLINE atan #-} - acos = fmap acos - {-# INLINE acos #-} - sinh = fmap sinh - {-# INLINE sinh #-} - tanh = fmap tanh - {-# INLINE tanh #-} - cosh = fmap cosh - {-# INLINE cosh #-} - asinh = fmap asinh - {-# INLINE asinh #-} - atanh = fmap atanh - {-# INLINE atanh #-} - acosh = fmap acosh - {-# INLINE acosh #-} - -instance Storable a => Storable (V3 a) where - sizeOf _ = 3 * sizeOf (undefined::a) - {-# INLINE sizeOf #-} - alignment _ = alignment (undefined::a) - {-# INLINE alignment #-} - poke ptr (V3 x y z) = do poke ptr' x - pokeElemOff ptr' 1 y - pokeElemOff ptr' 2 z - where ptr' = castPtr ptr - {-# INLINE poke #-} - peek ptr = V3 <$> peek ptr' <*> peekElemOff ptr' 1 <*> peekElemOff ptr' 2 - where ptr' = castPtr ptr - {-# INLINE peek #-} - -instance Ix a => Ix (V3 a) where - {-# SPECIALISE instance Ix (V3 Int) #-} - - range (V3 l1 l2 l3,V3 u1 u2 u3) = - [V3 i1 i2 i3 | i1 <- range (l1,u1) - , i2 <- range (l2,u2) - , i3 <- range (l3,u3) - ] - {-# INLINE range #-} - - unsafeIndex (V3 l1 l2 l3,V3 u1 u2 u3) (V3 i1 i2 i3) = - unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( - unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * - unsafeIndex (l1,u1) i1) - {-# INLINE unsafeIndex #-} - - inRange (V3 l1 l2 l3,V3 u1 u2 u3) (V3 i1 i2 i3) = - inRange (l1,u1) i1 && inRange (l2,u2) i2 && - inRange (l3,u3) i3 - {-# INLINE inRange #-} - -data instance U.Vector (V3 a) = V_V3 {-# UNPACK #-} !Int !(U.Vector a) -data instance U.MVector s (V3 a) = MV_V3 {-# UNPACK #-} !Int !(U.MVector s a) -instance U.Unbox a => U.Unbox (V3 a) - -instance U.Unbox a => M.MVector U.MVector (V3 a) where - {-# INLINE basicLength #-} - {-# INLINE basicUnsafeSlice #-} - {-# INLINE basicOverlaps #-} - {-# INLINE basicUnsafeNew #-} - {-# INLINE basicUnsafeRead #-} - {-# INLINE basicUnsafeWrite #-} - basicLength (MV_V3 n _) = n - basicUnsafeSlice m n (MV_V3 _ v) = MV_V3 n (M.basicUnsafeSlice (3*m) (3*n) v) - basicOverlaps (MV_V3 _ v) (MV_V3 _ u) = M.basicOverlaps v u - basicUnsafeNew n = liftM (MV_V3 n) (M.basicUnsafeNew (3*n)) - basicUnsafeRead (MV_V3 _ v) i = - do let o = 3*i - x <- M.basicUnsafeRead v o - y <- M.basicUnsafeRead v (o+1) - z <- M.basicUnsafeRead v (o+2) - return (V3 x y z) - basicUnsafeWrite (MV_V3 _ v) i (V3 x y z) = - do let o = 3*i - M.basicUnsafeWrite v o x - M.basicUnsafeWrite v (o+1) y - M.basicUnsafeWrite v (o+2) z -#if MIN_VERSION_vector(0,11,0) - basicInitialize (MV_V3 _ v) = M.basicInitialize v - {-# INLINE basicInitialize #-} -#endif - -instance U.Unbox a => G.Vector U.Vector (V3 a) where - {-# INLINE basicUnsafeFreeze #-} - {-# INLINE basicUnsafeThaw #-} - {-# INLINE basicLength #-} - {-# INLINE basicUnsafeSlice #-} - {-# INLINE basicUnsafeIndexM #-} - basicUnsafeFreeze (MV_V3 n v) = liftM ( V_V3 n) (G.basicUnsafeFreeze v) - basicUnsafeThaw ( V_V3 n v) = liftM (MV_V3 n) (G.basicUnsafeThaw v) - basicLength ( V_V3 n _) = n - basicUnsafeSlice m n (V_V3 _ v) = V_V3 n (G.basicUnsafeSlice (3*m) (3*n) v) - basicUnsafeIndexM (V_V3 _ v) i = - do let o = 3*i - x <- G.basicUnsafeIndexM v o - y <- G.basicUnsafeIndexM v (o+1) - z <- G.basicUnsafeIndexM v (o+2) - return (V3 x y z) - -instance MonadZip V3 where - mzipWith = liftA2 - -instance MonadFix V3 where - mfix f = V3 (let V3 a _ _ = f a in a) - (let V3 _ a _ = f a in a) - (let V3 _ _ a = f a in a) - -instance Bounded a => Bounded (V3 a) where - minBound = pure minBound - {-# INLINE minBound #-} - maxBound = pure maxBound - {-# INLINE maxBound #-} - - --- | A 4-dimensional vector. -data V4 a = V4 !a !a !a !a - deriving (Eq, Ord, Show, Read, Data, Typeable, Generic, Generic1) - -instance Functor V4 where - fmap f (V4 a b c d) = V4 (f a) (f b) (f c) (f d) - {-# INLINE fmap #-} - a <$ _ = V4 a a a a - {-# INLINE (<$) #-} - -instance Foldable V4 where - foldMap f (V4 a b c d) = f a `mappend` f b `mappend` f c `mappend` f d - {-# INLINE foldMap #-} - -instance Traversable V4 where - traverse f (V4 a b c d) = V4 <$> f a <*> f b <*> f c <*> f d - {-# INLINE traverse #-} - -instance Applicative V4 where - pure a = V4 a a a a - {-# INLINE pure #-} - V4 a b c d <*> V4 e f g h = V4 (a e) (b f) (c g) (d h) - {-# INLINE (<*>) #-} - -instance Monad V4 where - return a = V4 a a a a - {-# INLINE return #-} - V4 a b c d >>= f = V4 a' b' c' d' where - V4 a' _ _ _ = f a - V4 _ b' _ _ = f b - V4 _ _ c' _ = f c - V4 _ _ _ d' = f d - {-# INLINE (>>=) #-} - -instance Num a => Num (V4 a) where - (+) = liftA2 (+) - {-# INLINE (+) #-} - (*) = liftA2 (*) - {-# INLINE (-) #-} - (-) = liftA2 (-) - {-# INLINE (*) #-} - negate = fmap negate - {-# INLINE negate #-} - abs = fmap abs - {-# INLINE abs #-} - signum = fmap signum - {-# INLINE signum #-} - fromInteger = pure . fromInteger - {-# INLINE fromInteger #-} - -instance Fractional a => Fractional (V4 a) where - recip = fmap recip - {-# INLINE recip #-} - (/) = liftA2 (/) - {-# INLINE (/) #-} - fromRational = pure . fromRational - {-# INLINE fromRational #-} - -instance Floating a => Floating (V4 a) where - pi = pure pi - {-# INLINE pi #-} - exp = fmap exp - {-# INLINE exp #-} - sqrt = fmap sqrt - {-# INLINE sqrt #-} - log = fmap log - {-# INLINE log #-} - (**) = liftA2 (**) - {-# INLINE (**) #-} - logBase = liftA2 logBase - {-# INLINE logBase #-} - sin = fmap sin - {-# INLINE sin #-} - tan = fmap tan - {-# INLINE tan #-} - cos = fmap cos - {-# INLINE cos #-} - asin = fmap asin - {-# INLINE asin #-} - atan = fmap atan - {-# INLINE atan #-} - acos = fmap acos - {-# INLINE acos #-} - sinh = fmap sinh - {-# INLINE sinh #-} - tanh = fmap tanh - {-# INLINE tanh #-} - cosh = fmap cosh - {-# INLINE cosh #-} - asinh = fmap asinh - {-# INLINE asinh #-} - atanh = fmap atanh - {-# INLINE atanh #-} - acosh = fmap acosh - {-# INLINE acosh #-} - -instance Storable a => Storable (V4 a) where - sizeOf _ = 4 * sizeOf (undefined::a) - {-# INLINE sizeOf #-} - alignment _ = alignment (undefined::a) - {-# INLINE alignment #-} - poke ptr (V4 x y z w) = do poke ptr' x - pokeElemOff ptr' 1 y - pokeElemOff ptr' 2 z - pokeElemOff ptr' 3 w - where ptr' = castPtr ptr - {-# INLINE poke #-} - peek ptr = V4 <$> peek ptr' <*> peekElemOff ptr' 1 - <*> peekElemOff ptr' 2 <*> peekElemOff ptr' 3 - where ptr' = castPtr ptr - {-# INLINE peek #-} - -instance Ix a => Ix (V4 a) where - {-# SPECIALISE instance Ix (V4 Int) #-} - - range (V4 l1 l2 l3 l4,V4 u1 u2 u3 u4) = - [V4 i1 i2 i3 i4 | i1 <- range (l1,u1) - , i2 <- range (l2,u2) - , i3 <- range (l3,u3) - , i4 <- range (l4,u4) - ] - {-# INLINE range #-} - - unsafeIndex (V4 l1 l2 l3 l4,V4 u1 u2 u3 u4) (V4 i1 i2 i3 i4) = - unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * ( - unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * ( - unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) * - unsafeIndex (l1,u1) i1)) - {-# INLINE unsafeIndex #-} - - inRange (V4 l1 l2 l3 l4,V4 u1 u2 u3 u4) (V4 i1 i2 i3 i4) = - inRange (l1,u1) i1 && inRange (l2,u2) i2 && - inRange (l3,u3) i3 && inRange (l4,u4) i4 - {-# INLINE inRange #-} - -data instance U.Vector (V4 a) = V_V4 {-# UNPACK #-} !Int !(U.Vector a) -data instance U.MVector s (V4 a) = MV_V4 {-# UNPACK #-} !Int !(U.MVector s a) -instance U.Unbox a => U.Unbox (V4 a) - -instance U.Unbox a => M.MVector U.MVector (V4 a) where - basicLength (MV_V4 n _) = n - basicUnsafeSlice m n (MV_V4 _ v) = MV_V4 n (M.basicUnsafeSlice (4*m) (4*n) v) - basicOverlaps (MV_V4 _ v) (MV_V4 _ u) = M.basicOverlaps v u - basicUnsafeNew n = liftM (MV_V4 n) (M.basicUnsafeNew (4*n)) - basicUnsafeRead (MV_V4 _ v) i = - do let o = 4*i - x <- M.basicUnsafeRead v o - y <- M.basicUnsafeRead v (o+1) - z <- M.basicUnsafeRead v (o+2) - w <- M.basicUnsafeRead v (o+3) - return (V4 x y z w) - basicUnsafeWrite (MV_V4 _ v) i (V4 x y z w) = - do let o = 4*i - M.basicUnsafeWrite v o x - M.basicUnsafeWrite v (o+1) y - M.basicUnsafeWrite v (o+2) z - M.basicUnsafeWrite v (o+3) w -#if MIN_VERSION_vector(0,11,0) - basicInitialize (MV_V4 _ v) = M.basicInitialize v -#endif - -instance U.Unbox a => G.Vector U.Vector (V4 a) where - basicUnsafeFreeze (MV_V4 n v) = liftM ( V_V4 n) (G.basicUnsafeFreeze v) - basicUnsafeThaw ( V_V4 n v) = liftM (MV_V4 n) (G.basicUnsafeThaw v) - basicLength ( V_V4 n _) = n - basicUnsafeSlice m n (V_V4 _ v) = V_V4 n (G.basicUnsafeSlice (4*m) (4*n) v) - basicUnsafeIndexM (V_V4 _ v) i = - do let o = 4*i - x <- G.basicUnsafeIndexM v o - y <- G.basicUnsafeIndexM v (o+1) - z <- G.basicUnsafeIndexM v (o+2) - w <- G.basicUnsafeIndexM v (o+3) - return (V4 x y z w) - -instance MonadZip V4 where - mzipWith = liftA2 - -instance MonadFix V4 where - mfix f = V4 (let V4 a _ _ _ = f a in a) - (let V4 _ a _ _ = f a in a) - (let V4 _ _ a _ = f a in a) - (let V4 _ _ _ a = f a in a) - -instance Bounded a => Bounded (V4 a) where - minBound = pure minBound - {-# INLINE minBound #-} - maxBound = pure maxBound - {-# INLINE maxBound #-} +{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE TypeFamilies #-}++#ifndef MIN_VERSION_vector+#define MIN_VERSION_vector(x,y,z) 1+#endif++-----------------------------------------------------------------------------+-- |+-- Copyright : (C) 2012-2015 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable+----------------------------------------------------------------------------++module SDL.Internal.Vect+ ( Point (..)+ , V2 (..)+ , V3 (..)+ , V4 (..)+ ) where++import Control.Applicative+import Control.Monad (liftM)+import Control.Monad.Fix+import Control.Monad.Zip+import Data.Data+import Data.Foldable+import Data.Monoid+import Data.Traversable+import qualified Data.Vector.Generic as G+import qualified Data.Vector.Generic.Mutable as M+import qualified Data.Vector.Unboxed.Base as U+import Foreign.Ptr (castPtr)+import Foreign.Storable (Storable (..))+import GHC.Arr (Ix (..))+import GHC.Generics (Generic, Generic1)+import Prelude+-- Explicit Prelude import suppresses warnings about redundant imports.+{-# ANN module "HLint: ignore Reduce duplication" #-}+{-# ANN module "HLint: ignore Use fmap" #-}+++-- | A handy wrapper to help distinguish points from vectors at the+-- type level+newtype Point f a = P (f a)+ deriving ( Eq, Ord, Show, Read, Monad, Functor, Applicative, Foldable+ , Traversable, Fractional , Num, Ix, Storable, Generic, Generic1+ , Typeable, Data+ )++data instance U.Vector (Point f a) = V_P !(U.Vector (f a))+data instance U.MVector s (Point f a) = MV_P !(U.MVector s (f a))+instance U.Unbox (f a) => U.Unbox (Point f a)++instance U.Unbox (f a) => M.MVector U.MVector (Point f a) where+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicOverlaps #-}+ {-# INLINE basicUnsafeNew #-}+ {-# INLINE basicUnsafeRead #-}+ {-# INLINE basicUnsafeWrite #-}+ basicLength (MV_P v) = M.basicLength v+ basicUnsafeSlice m n (MV_P v) = MV_P (M.basicUnsafeSlice m n v)+ basicOverlaps (MV_P v) (MV_P u) = M.basicOverlaps v u+ basicUnsafeNew n = MV_P `liftM` M.basicUnsafeNew n+ basicUnsafeRead (MV_P v) i = P `liftM` M.basicUnsafeRead v i+ basicUnsafeWrite (MV_P v) i (P x) = M.basicUnsafeWrite v i x+#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV_P v) = M.basicInitialize v+ {-# INLINE basicInitialize #-}+#endif++instance U.Unbox (f a) => G.Vector U.Vector (Point f a) where+ {-# INLINE basicUnsafeFreeze #-}+ {-# INLINE basicUnsafeThaw #-}+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicUnsafeIndexM #-}+ basicUnsafeFreeze (MV_P v) = V_P `liftM` G.basicUnsafeFreeze v+ basicUnsafeThaw ( V_P v) = MV_P `liftM` G.basicUnsafeThaw v+ basicLength ( V_P v) = G.basicLength v+ basicUnsafeSlice m n (V_P v) = V_P (G.basicUnsafeSlice m n v)+ basicUnsafeIndexM (V_P v) i = P `liftM` G.basicUnsafeIndexM v i+++-- | A 2-dimensional vector+--+-- >>> pure 1 :: V2 Int+-- V2 1 1+--+-- >>> V2 1 2 + V2 3 4+-- V2 4 6+--+-- >>> V2 1 2 * V2 3 4+-- V2 3 8+--+-- >>> sum (V2 1 2)+-- 3+data V2 a = V2 !a !a+ deriving (Eq, Ord, Show, Read, Data, Typeable, Generic, Generic1)++instance Functor V2 where+ fmap f (V2 a b) = V2 (f a) (f b)+ {-# INLINE fmap #-}+ a <$ _ = V2 a a+ {-# INLINE (<$) #-}++instance Foldable V2 where+ foldMap f (V2 a b) = f a `mappend` f b+ {-# INLINE foldMap #-}++instance Traversable V2 where+ traverse f (V2 a b) = V2 <$> f a <*> f b+ {-# INLINE traverse #-}++instance Applicative V2 where+ pure a = V2 a a+ {-# INLINE pure #-}+ V2 a b <*> V2 d e = V2 (a d) (b e)+ {-# INLINE (<*>) #-}++instance Monad V2 where+ return a = V2 a a+ {-# INLINE return #-}+ V2 a b >>= f = V2 a' b' where+ V2 a' _ = f a+ V2 _ b' = f b+ {-# INLINE (>>=) #-}++instance Num a => Num (V2 a) where+ (+) = liftA2 (+)+ {-# INLINE (+) #-}+ (-) = liftA2 (-)+ {-# INLINE (-) #-}+ (*) = liftA2 (*)+ {-# INLINE (*) #-}+ negate = fmap negate+ {-# INLINE negate #-}+ abs = fmap abs+ {-# INLINE abs #-}+ signum = fmap signum+ {-# INLINE signum #-}+ fromInteger = pure . fromInteger+ {-# INLINE fromInteger #-}++instance Fractional a => Fractional (V2 a) where+ recip = fmap recip+ {-# INLINE recip #-}+ (/) = liftA2 (/)+ {-# INLINE (/) #-}+ fromRational = pure . fromRational+ {-# INLINE fromRational #-}++instance Floating a => Floating (V2 a) where+ pi = pure pi+ {-# INLINE pi #-}+ exp = fmap exp+ {-# INLINE exp #-}+ sqrt = fmap sqrt+ {-# INLINE sqrt #-}+ log = fmap log+ {-# INLINE log #-}+ (**) = liftA2 (**)+ {-# INLINE (**) #-}+ logBase = liftA2 logBase+ {-# INLINE logBase #-}+ sin = fmap sin+ {-# INLINE sin #-}+ tan = fmap tan+ {-# INLINE tan #-}+ cos = fmap cos+ {-# INLINE cos #-}+ asin = fmap asin+ {-# INLINE asin #-}+ atan = fmap atan+ {-# INLINE atan #-}+ acos = fmap acos+ {-# INLINE acos #-}+ sinh = fmap sinh+ {-# INLINE sinh #-}+ tanh = fmap tanh+ {-# INLINE tanh #-}+ cosh = fmap cosh+ {-# INLINE cosh #-}+ asinh = fmap asinh+ {-# INLINE asinh #-}+ atanh = fmap atanh+ {-# INLINE atanh #-}+ acosh = fmap acosh+ {-# INLINE acosh #-}++instance Storable a => Storable (V2 a) where+ sizeOf _ = 2 * sizeOf (undefined::a)+ {-# INLINE sizeOf #-}+ alignment _ = alignment (undefined::a)+ {-# INLINE alignment #-}+ poke ptr (V2 x y) = poke ptr' x >> pokeElemOff ptr' 1 y+ where ptr' = castPtr ptr+ {-# INLINE poke #-}+ peek ptr = V2 <$> peek ptr' <*> peekElemOff ptr' 1+ where ptr' = castPtr ptr+ {-# INLINE peek #-}++instance Ix a => Ix (V2 a) where+ {-# SPECIALISE instance Ix (V2 Int) #-}++ range (V2 l1 l2,V2 u1 u2) =+ [ V2 i1 i2 | i1 <- range (l1,u1), i2 <- range (l2,u2) ]+ {-# INLINE range #-}++ unsafeIndex (V2 l1 l2,V2 u1 u2) (V2 i1 i2) =+ unsafeIndex (l1,u1) i1 * unsafeRangeSize (l2,u2) + unsafeIndex (l2,u2) i2+ {-# INLINE unsafeIndex #-}++ inRange (V2 l1 l2,V2 u1 u2) (V2 i1 i2) =+ inRange (l1,u1) i1 && inRange (l2,u2) i2+ {-# INLINE inRange #-}++data instance U.Vector (V2 a) = V_V2 {-# UNPACK #-} !Int !(U.Vector a)+data instance U.MVector s (V2 a) = MV_V2 {-# UNPACK #-} !Int !(U.MVector s a)+instance U.Unbox a => U.Unbox (V2 a)++instance U.Unbox a => M.MVector U.MVector (V2 a) where+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicOverlaps #-}+ {-# INLINE basicUnsafeNew #-}+ {-# INLINE basicUnsafeRead #-}+ {-# INLINE basicUnsafeWrite #-}+ basicLength (MV_V2 n _) = n+ basicUnsafeSlice m n (MV_V2 _ v) = MV_V2 n (M.basicUnsafeSlice (2*m) (2*n) v)+ basicOverlaps (MV_V2 _ v) (MV_V2 _ u) = M.basicOverlaps v u+ basicUnsafeNew n = liftM (MV_V2 n) (M.basicUnsafeNew (2*n))+ basicUnsafeRead (MV_V2 _ v) i =+ do let o = 2*i+ x <- M.basicUnsafeRead v o+ y <- M.basicUnsafeRead v (o+1)+ return (V2 x y)+ basicUnsafeWrite (MV_V2 _ v) i (V2 x y) =+ do let o = 2*i+ M.basicUnsafeWrite v o x+ M.basicUnsafeWrite v (o+1) y+#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV_V2 _ v) = M.basicInitialize v+ {-# INLINE basicInitialize #-}+#endif++instance U.Unbox a => G.Vector U.Vector (V2 a) where+ {-# INLINE basicUnsafeFreeze #-}+ {-# INLINE basicUnsafeThaw #-}+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicUnsafeIndexM #-}+ basicUnsafeFreeze (MV_V2 n v) = liftM ( V_V2 n) (G.basicUnsafeFreeze v)+ basicUnsafeThaw ( V_V2 n v) = liftM (MV_V2 n) (G.basicUnsafeThaw v)+ basicLength ( V_V2 n _) = n+ basicUnsafeSlice m n (V_V2 _ v) = V_V2 n (G.basicUnsafeSlice (2*m) (2*n) v)+ basicUnsafeIndexM (V_V2 _ v) i =+ do let o = 2*i+ x <- G.basicUnsafeIndexM v o+ y <- G.basicUnsafeIndexM v (o+1)+ return (V2 x y)++instance MonadZip V2 where+ mzipWith = liftA2++instance MonadFix V2 where+ mfix f = V2 (let V2 a _ = f a in a)+ (let V2 _ a = f a in a)++instance Bounded a => Bounded (V2 a) where+ minBound = pure minBound+ {-# INLINE minBound #-}+ maxBound = pure maxBound+ {-# INLINE maxBound #-}+++-- | A 3-dimensional vector+data V3 a = V3 !a !a !a+ deriving (Eq, Ord, Show, Read, Data, Typeable, Generic, Generic1)++instance Functor V3 where+ fmap f (V3 a b c) = V3 (f a) (f b) (f c)+ {-# INLINE fmap #-}+ a <$ _ = V3 a a a+ {-# INLINE (<$) #-}++instance Foldable V3 where+ foldMap f (V3 a b c) = f a `mappend` f b `mappend` f c+ {-# INLINE foldMap #-}++instance Traversable V3 where+ traverse f (V3 a b c) = V3 <$> f a <*> f b <*> f c+ {-# INLINE traverse #-}++instance Applicative V3 where+ pure a = V3 a a a+ {-# INLINE pure #-}+ V3 a b c <*> V3 d e f = V3 (a d) (b e) (c f)+ {-# INLINE (<*>) #-}++instance Monad V3 where+ return a = V3 a a a+ {-# INLINE return #-}+ V3 a b c >>= f = V3 a' b' c' where+ V3 a' _ _ = f a+ V3 _ b' _ = f b+ V3 _ _ c' = f c+ {-# INLINE (>>=) #-}++instance Num a => Num (V3 a) where+ (+) = liftA2 (+)+ {-# INLINE (+) #-}+ (-) = liftA2 (-)+ {-# INLINE (-) #-}+ (*) = liftA2 (*)+ {-# INLINE (*) #-}+ negate = fmap negate+ {-# INLINE negate #-}+ abs = fmap abs+ {-# INLINE abs #-}+ signum = fmap signum+ {-# INLINE signum #-}+ fromInteger = pure . fromInteger+ {-# INLINE fromInteger #-}++instance Fractional a => Fractional (V3 a) where+ recip = fmap recip+ {-# INLINE recip #-}+ (/) = liftA2 (/)+ {-# INLINE (/) #-}+ fromRational = pure . fromRational+ {-# INLINE fromRational #-}++instance Floating a => Floating (V3 a) where+ pi = pure pi+ {-# INLINE pi #-}+ exp = fmap exp+ {-# INLINE exp #-}+ sqrt = fmap sqrt+ {-# INLINE sqrt #-}+ log = fmap log+ {-# INLINE log #-}+ (**) = liftA2 (**)+ {-# INLINE (**) #-}+ logBase = liftA2 logBase+ {-# INLINE logBase #-}+ sin = fmap sin+ {-# INLINE sin #-}+ tan = fmap tan+ {-# INLINE tan #-}+ cos = fmap cos+ {-# INLINE cos #-}+ asin = fmap asin+ {-# INLINE asin #-}+ atan = fmap atan+ {-# INLINE atan #-}+ acos = fmap acos+ {-# INLINE acos #-}+ sinh = fmap sinh+ {-# INLINE sinh #-}+ tanh = fmap tanh+ {-# INLINE tanh #-}+ cosh = fmap cosh+ {-# INLINE cosh #-}+ asinh = fmap asinh+ {-# INLINE asinh #-}+ atanh = fmap atanh+ {-# INLINE atanh #-}+ acosh = fmap acosh+ {-# INLINE acosh #-}++instance Storable a => Storable (V3 a) where+ sizeOf _ = 3 * sizeOf (undefined::a)+ {-# INLINE sizeOf #-}+ alignment _ = alignment (undefined::a)+ {-# INLINE alignment #-}+ poke ptr (V3 x y z) = do poke ptr' x+ pokeElemOff ptr' 1 y+ pokeElemOff ptr' 2 z+ where ptr' = castPtr ptr+ {-# INLINE poke #-}+ peek ptr = V3 <$> peek ptr' <*> peekElemOff ptr' 1 <*> peekElemOff ptr' 2+ where ptr' = castPtr ptr+ {-# INLINE peek #-}++instance Ix a => Ix (V3 a) where+ {-# SPECIALISE instance Ix (V3 Int) #-}++ range (V3 l1 l2 l3,V3 u1 u2 u3) =+ [V3 i1 i2 i3 | i1 <- range (l1,u1)+ , i2 <- range (l2,u2)+ , i3 <- range (l3,u3)+ ]+ {-# INLINE range #-}++ unsafeIndex (V3 l1 l2 l3,V3 u1 u2 u3) (V3 i1 i2 i3) =+ unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * (+ unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) *+ unsafeIndex (l1,u1) i1)+ {-# INLINE unsafeIndex #-}++ inRange (V3 l1 l2 l3,V3 u1 u2 u3) (V3 i1 i2 i3) =+ inRange (l1,u1) i1 && inRange (l2,u2) i2 &&+ inRange (l3,u3) i3+ {-# INLINE inRange #-}++data instance U.Vector (V3 a) = V_V3 {-# UNPACK #-} !Int !(U.Vector a)+data instance U.MVector s (V3 a) = MV_V3 {-# UNPACK #-} !Int !(U.MVector s a)+instance U.Unbox a => U.Unbox (V3 a)++instance U.Unbox a => M.MVector U.MVector (V3 a) where+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicOverlaps #-}+ {-# INLINE basicUnsafeNew #-}+ {-# INLINE basicUnsafeRead #-}+ {-# INLINE basicUnsafeWrite #-}+ basicLength (MV_V3 n _) = n+ basicUnsafeSlice m n (MV_V3 _ v) = MV_V3 n (M.basicUnsafeSlice (3*m) (3*n) v)+ basicOverlaps (MV_V3 _ v) (MV_V3 _ u) = M.basicOverlaps v u+ basicUnsafeNew n = liftM (MV_V3 n) (M.basicUnsafeNew (3*n))+ basicUnsafeRead (MV_V3 _ v) i =+ do let o = 3*i+ x <- M.basicUnsafeRead v o+ y <- M.basicUnsafeRead v (o+1)+ z <- M.basicUnsafeRead v (o+2)+ return (V3 x y z)+ basicUnsafeWrite (MV_V3 _ v) i (V3 x y z) =+ do let o = 3*i+ M.basicUnsafeWrite v o x+ M.basicUnsafeWrite v (o+1) y+ M.basicUnsafeWrite v (o+2) z+#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV_V3 _ v) = M.basicInitialize v+ {-# INLINE basicInitialize #-}+#endif++instance U.Unbox a => G.Vector U.Vector (V3 a) where+ {-# INLINE basicUnsafeFreeze #-}+ {-# INLINE basicUnsafeThaw #-}+ {-# INLINE basicLength #-}+ {-# INLINE basicUnsafeSlice #-}+ {-# INLINE basicUnsafeIndexM #-}+ basicUnsafeFreeze (MV_V3 n v) = liftM ( V_V3 n) (G.basicUnsafeFreeze v)+ basicUnsafeThaw ( V_V3 n v) = liftM (MV_V3 n) (G.basicUnsafeThaw v)+ basicLength ( V_V3 n _) = n+ basicUnsafeSlice m n (V_V3 _ v) = V_V3 n (G.basicUnsafeSlice (3*m) (3*n) v)+ basicUnsafeIndexM (V_V3 _ v) i =+ do let o = 3*i+ x <- G.basicUnsafeIndexM v o+ y <- G.basicUnsafeIndexM v (o+1)+ z <- G.basicUnsafeIndexM v (o+2)+ return (V3 x y z)++instance MonadZip V3 where+ mzipWith = liftA2++instance MonadFix V3 where+ mfix f = V3 (let V3 a _ _ = f a in a)+ (let V3 _ a _ = f a in a)+ (let V3 _ _ a = f a in a)++instance Bounded a => Bounded (V3 a) where+ minBound = pure minBound+ {-# INLINE minBound #-}+ maxBound = pure maxBound+ {-# INLINE maxBound #-}+++-- | A 4-dimensional vector.+data V4 a = V4 !a !a !a !a+ deriving (Eq, Ord, Show, Read, Data, Typeable, Generic, Generic1)++instance Functor V4 where+ fmap f (V4 a b c d) = V4 (f a) (f b) (f c) (f d)+ {-# INLINE fmap #-}+ a <$ _ = V4 a a a a+ {-# INLINE (<$) #-}++instance Foldable V4 where+ foldMap f (V4 a b c d) = f a `mappend` f b `mappend` f c `mappend` f d+ {-# INLINE foldMap #-}++instance Traversable V4 where+ traverse f (V4 a b c d) = V4 <$> f a <*> f b <*> f c <*> f d+ {-# INLINE traverse #-}++instance Applicative V4 where+ pure a = V4 a a a a+ {-# INLINE pure #-}+ V4 a b c d <*> V4 e f g h = V4 (a e) (b f) (c g) (d h)+ {-# INLINE (<*>) #-}++instance Monad V4 where+ return a = V4 a a a a+ {-# INLINE return #-}+ V4 a b c d >>= f = V4 a' b' c' d' where+ V4 a' _ _ _ = f a+ V4 _ b' _ _ = f b+ V4 _ _ c' _ = f c+ V4 _ _ _ d' = f d+ {-# INLINE (>>=) #-}++instance Num a => Num (V4 a) where+ (+) = liftA2 (+)+ {-# INLINE (+) #-}+ (*) = liftA2 (*)+ {-# INLINE (-) #-}+ (-) = liftA2 (-)+ {-# INLINE (*) #-}+ negate = fmap negate+ {-# INLINE negate #-}+ abs = fmap abs+ {-# INLINE abs #-}+ signum = fmap signum+ {-# INLINE signum #-}+ fromInteger = pure . fromInteger+ {-# INLINE fromInteger #-}++instance Fractional a => Fractional (V4 a) where+ recip = fmap recip+ {-# INLINE recip #-}+ (/) = liftA2 (/)+ {-# INLINE (/) #-}+ fromRational = pure . fromRational+ {-# INLINE fromRational #-}++instance Floating a => Floating (V4 a) where+ pi = pure pi+ {-# INLINE pi #-}+ exp = fmap exp+ {-# INLINE exp #-}+ sqrt = fmap sqrt+ {-# INLINE sqrt #-}+ log = fmap log+ {-# INLINE log #-}+ (**) = liftA2 (**)+ {-# INLINE (**) #-}+ logBase = liftA2 logBase+ {-# INLINE logBase #-}+ sin = fmap sin+ {-# INLINE sin #-}+ tan = fmap tan+ {-# INLINE tan #-}+ cos = fmap cos+ {-# INLINE cos #-}+ asin = fmap asin+ {-# INLINE asin #-}+ atan = fmap atan+ {-# INLINE atan #-}+ acos = fmap acos+ {-# INLINE acos #-}+ sinh = fmap sinh+ {-# INLINE sinh #-}+ tanh = fmap tanh+ {-# INLINE tanh #-}+ cosh = fmap cosh+ {-# INLINE cosh #-}+ asinh = fmap asinh+ {-# INLINE asinh #-}+ atanh = fmap atanh+ {-# INLINE atanh #-}+ acosh = fmap acosh+ {-# INLINE acosh #-}++instance Storable a => Storable (V4 a) where+ sizeOf _ = 4 * sizeOf (undefined::a)+ {-# INLINE sizeOf #-}+ alignment _ = alignment (undefined::a)+ {-# INLINE alignment #-}+ poke ptr (V4 x y z w) = do poke ptr' x+ pokeElemOff ptr' 1 y+ pokeElemOff ptr' 2 z+ pokeElemOff ptr' 3 w+ where ptr' = castPtr ptr+ {-# INLINE poke #-}+ peek ptr = V4 <$> peek ptr' <*> peekElemOff ptr' 1+ <*> peekElemOff ptr' 2 <*> peekElemOff ptr' 3+ where ptr' = castPtr ptr+ {-# INLINE peek #-}++instance Ix a => Ix (V4 a) where+ {-# SPECIALISE instance Ix (V4 Int) #-}++ range (V4 l1 l2 l3 l4,V4 u1 u2 u3 u4) =+ [V4 i1 i2 i3 i4 | i1 <- range (l1,u1)+ , i2 <- range (l2,u2)+ , i3 <- range (l3,u3)+ , i4 <- range (l4,u4)+ ]+ {-# INLINE range #-}++ unsafeIndex (V4 l1 l2 l3 l4,V4 u1 u2 u3 u4) (V4 i1 i2 i3 i4) =+ unsafeIndex (l4,u4) i4 + unsafeRangeSize (l4,u4) * (+ unsafeIndex (l3,u3) i3 + unsafeRangeSize (l3,u3) * (+ unsafeIndex (l2,u2) i2 + unsafeRangeSize (l2,u2) *+ unsafeIndex (l1,u1) i1))+ {-# INLINE unsafeIndex #-}++ inRange (V4 l1 l2 l3 l4,V4 u1 u2 u3 u4) (V4 i1 i2 i3 i4) =+ inRange (l1,u1) i1 && inRange (l2,u2) i2 &&+ inRange (l3,u3) i3 && inRange (l4,u4) i4+ {-# INLINE inRange #-}++data instance U.Vector (V4 a) = V_V4 {-# UNPACK #-} !Int !(U.Vector a)+data instance U.MVector s (V4 a) = MV_V4 {-# UNPACK #-} !Int !(U.MVector s a)+instance U.Unbox a => U.Unbox (V4 a)++instance U.Unbox a => M.MVector U.MVector (V4 a) where+ basicLength (MV_V4 n _) = n+ basicUnsafeSlice m n (MV_V4 _ v) = MV_V4 n (M.basicUnsafeSlice (4*m) (4*n) v)+ basicOverlaps (MV_V4 _ v) (MV_V4 _ u) = M.basicOverlaps v u+ basicUnsafeNew n = liftM (MV_V4 n) (M.basicUnsafeNew (4*n))+ basicUnsafeRead (MV_V4 _ v) i =+ do let o = 4*i+ x <- M.basicUnsafeRead v o+ y <- M.basicUnsafeRead v (o+1)+ z <- M.basicUnsafeRead v (o+2)+ w <- M.basicUnsafeRead v (o+3)+ return (V4 x y z w)+ basicUnsafeWrite (MV_V4 _ v) i (V4 x y z w) =+ do let o = 4*i+ M.basicUnsafeWrite v o x+ M.basicUnsafeWrite v (o+1) y+ M.basicUnsafeWrite v (o+2) z+ M.basicUnsafeWrite v (o+3) w+#if MIN_VERSION_vector(0,11,0)+ basicInitialize (MV_V4 _ v) = M.basicInitialize v+#endif++instance U.Unbox a => G.Vector U.Vector (V4 a) where+ basicUnsafeFreeze (MV_V4 n v) = liftM ( V_V4 n) (G.basicUnsafeFreeze v)+ basicUnsafeThaw ( V_V4 n v) = liftM (MV_V4 n) (G.basicUnsafeThaw v)+ basicLength ( V_V4 n _) = n+ basicUnsafeSlice m n (V_V4 _ v) = V_V4 n (G.basicUnsafeSlice (4*m) (4*n) v)+ basicUnsafeIndexM (V_V4 _ v) i =+ do let o = 4*i+ x <- G.basicUnsafeIndexM v o+ y <- G.basicUnsafeIndexM v (o+1)+ z <- G.basicUnsafeIndexM v (o+2)+ w <- G.basicUnsafeIndexM v (o+3)+ return (V4 x y z w)++instance MonadZip V4 where+ mzipWith = liftA2++instance MonadFix V4 where+ mfix f = V4 (let V4 a _ _ _ = f a in a)+ (let V4 _ a _ _ = f a in a)+ (let V4 _ _ a _ = f a in a)+ (let V4 _ _ _ a = f a in a)++instance Bounded a => Bounded (V4 a) where+ minBound = pure minBound+ {-# INLINE minBound #-}+ maxBound = pure maxBound+ {-# INLINE maxBound #-}
src/SDL/Power.hs view
@@ -1,70 +1,70 @@-{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE PatternSynonyms #-} -module SDL.Power - ( -- * Power Status - getPowerInfo - , PowerState(..) - , BatteryState(..) - , Charge(..) - ) where - -import Control.Applicative -import Control.Monad.IO.Class (MonadIO, liftIO) -import Data.Data (Data) -import Data.Typeable -import Foreign.C.Types -import Foreign.Marshal.Alloc -import Foreign.Marshal.Utils -import Foreign.Storable -import GHC.Generics (Generic) - -import qualified SDL.Raw as Raw - --- | Current power supply details. --- --- Throws 'SDLException' if the current power state can not be determined. --- --- See @<https://wiki.libsdl.org/SDL_GetPowerInfo SDL_GetPowerInfo>@ for C documentation. -getPowerInfo :: (Functor m, MonadIO m) => m PowerState -getPowerInfo = - liftIO $ - alloca $ \secsPtr -> - alloca $ \pctPtr -> do - state <- Raw.getPowerInfo secsPtr pctPtr - let peekCharge = liftA2 Charge (maybePeek peek secsPtr) (maybePeek peek pctPtr) - case state of - Raw.SDL_POWERSTATE_ON_BATTERY -> fmap (Battery Draining) peekCharge - Raw.SDL_POWERSTATE_CHARGING -> fmap (Battery Charging) peekCharge - Raw.SDL_POWERSTATE_CHARGED -> fmap (Battery Charged) peekCharge - Raw.SDL_POWERSTATE_NO_BATTERY -> pure Mains - _ -> pure UnknownPowerState - --- | Information about the power supply for the user's environment -data PowerState - = Battery BatteryState Charge - -- ^ The user is on a battery powered device. See 'BatteryState' for charge information, and 'Charge' for charge information - | Mains - -- ^ The user is on a device connected to the mains. - | UnknownPowerState - -- ^ SDL could not determine the power for the device. - deriving (Eq, Generic, Ord, Read, Show, Typeable) - --- | Information on battery consumption for battery powered devices -data BatteryState - = Draining - -- ^ The battery is currently being drained. - | Charged - -- ^ The battery is fully charged. - | Charging - -- ^ The device is plugged in and the battery is charging. - deriving (Bounded, Data, Enum, Eq, Generic, Ord, Read, Show, Typeable) - --- | Information about how much charge a battery has. -data Charge = - Charge {chargeSecondsLeft :: Maybe CInt -- ^ How many seconds of battery life is left - ,chargePercent :: Maybe CInt -- ^ The percentage of battery charged - } - deriving (Eq, Generic, Ord, Read, Show, Typeable) +{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PatternSynonyms #-}+module SDL.Power+ ( -- * Power Status+ getPowerInfo+ , PowerState(..)+ , BatteryState(..)+ , Charge(..)+ ) where++import Control.Applicative+import Control.Monad.IO.Class (MonadIO, liftIO)+import Data.Data (Data)+import Data.Typeable+import Foreign.C.Types+import Foreign.Marshal.Alloc+import Foreign.Marshal.Utils+import Foreign.Storable+import GHC.Generics (Generic)++import qualified SDL.Raw as Raw++-- | Current power supply details.+--+-- Throws 'SDLException' if the current power state can not be determined.+--+-- See @<https://wiki.libsdl.org/SDL_GetPowerInfo SDL_GetPowerInfo>@ for C documentation.+getPowerInfo :: (Functor m, MonadIO m) => m PowerState+getPowerInfo =+ liftIO $+ alloca $ \secsPtr ->+ alloca $ \pctPtr -> do+ state <- Raw.getPowerInfo secsPtr pctPtr+ let peekCharge = liftA2 Charge (maybePeek peek secsPtr) (maybePeek peek pctPtr)+ case state of+ Raw.SDL_POWERSTATE_ON_BATTERY -> fmap (Battery Draining) peekCharge+ Raw.SDL_POWERSTATE_CHARGING -> fmap (Battery Charging) peekCharge+ Raw.SDL_POWERSTATE_CHARGED -> fmap (Battery Charged) peekCharge+ Raw.SDL_POWERSTATE_NO_BATTERY -> pure Mains+ _ -> pure UnknownPowerState++-- | Information about the power supply for the user's environment+data PowerState+ = Battery BatteryState Charge+ -- ^ The user is on a battery powered device. See 'BatteryState' for charge information, and 'Charge' for charge information+ | Mains+ -- ^ The user is on a device connected to the mains.+ | UnknownPowerState+ -- ^ SDL could not determine the power for the device.+ deriving (Eq, Generic, Ord, Read, Show, Typeable)++-- | Information on battery consumption for battery powered devices+data BatteryState+ = Draining+ -- ^ The battery is currently being drained.+ | Charged+ -- ^ The battery is fully charged.+ | Charging+ -- ^ The device is plugged in and the battery is charging.+ deriving (Bounded, Data, Enum, Eq, Generic, Ord, Read, Show, Typeable)++-- | Information about how much charge a battery has.+data Charge =+ Charge {chargeSecondsLeft :: Maybe CInt -- ^ How many seconds of battery life is left+ ,chargePercent :: Maybe CInt -- ^ The percentage of battery charged+ }+ deriving (Eq, Generic, Ord, Read, Show, Typeable)
src/SDL/Raw.hs view
@@ -1,31 +1,31 @@--- | Raw low-level FFI bindings to the sdl2 C library. Ease of use is not a --- design factor, use "SDL" instead if you can. -module SDL.Raw ( - module SDL.Raw.Audio, - module SDL.Raw.Basic, - module SDL.Raw.Enum, - module SDL.Raw.Error, - module SDL.Raw.Event, - module SDL.Raw.Filesystem, - module SDL.Raw.Haptic, - module SDL.Raw.Platform, - module SDL.Raw.Power, - module SDL.Raw.Thread, - module SDL.Raw.Timer, - module SDL.Raw.Types, - module SDL.Raw.Video -) where - -import SDL.Raw.Audio -import SDL.Raw.Basic -import SDL.Raw.Enum -import SDL.Raw.Error -import SDL.Raw.Event -import SDL.Raw.Filesystem -import SDL.Raw.Haptic -import SDL.Raw.Platform -import SDL.Raw.Power -import SDL.Raw.Thread -import SDL.Raw.Timer -import SDL.Raw.Types -import SDL.Raw.Video +-- | Raw low-level FFI bindings to the sdl2 C library. Ease of use is not a+-- design factor, use "SDL" instead if you can.+module SDL.Raw (+ module SDL.Raw.Audio,+ module SDL.Raw.Basic,+ module SDL.Raw.Enum,+ module SDL.Raw.Error,+ module SDL.Raw.Event,+ module SDL.Raw.Filesystem,+ module SDL.Raw.Haptic,+ module SDL.Raw.Platform,+ module SDL.Raw.Power,+ module SDL.Raw.Thread,+ module SDL.Raw.Timer,+ module SDL.Raw.Types,+ module SDL.Raw.Video+) where++import SDL.Raw.Audio+import SDL.Raw.Basic+import SDL.Raw.Enum+import SDL.Raw.Error+import SDL.Raw.Event+import SDL.Raw.Filesystem+import SDL.Raw.Haptic+import SDL.Raw.Platform+import SDL.Raw.Power+import SDL.Raw.Thread+import SDL.Raw.Timer+import SDL.Raw.Types+import SDL.Raw.Video
src/SDL/Raw/Audio.hs view
@@ -1,170 +1,170 @@-module SDL.Raw.Audio ( - -- * Audio Device Management, Playing and Recording - audioInit, - audioQuit, - buildAudioCVT, - closeAudio, - closeAudioDevice, - convertAudio, - freeWAV, - getAudioDeviceName, - getAudioDeviceStatus, - getAudioDriver, - getAudioStatus, - getCurrentAudioDriver, - getNumAudioDevices, - getNumAudioDrivers, - loadWAV, - loadWAV_RW, - lockAudio, - lockAudioDevice, - mixAudio, - mixAudioFormat, - openAudio, - openAudioDevice, - pauseAudio, - pauseAudioDevice, - unlockAudio, - unlockAudioDevice -) where - -import Control.Monad.IO.Class -import Data.Word -import Foreign.C.String -import Foreign.C.Types -import Foreign.Ptr -import SDL.Raw.Enum -import SDL.Raw.Filesystem -import SDL.Raw.Types - -foreign import ccall "SDL.h SDL_AudioInit" audioInitFFI :: CString -> IO CInt -foreign import ccall "SDL.h SDL_AudioQuit" audioQuitFFI :: IO () -foreign import ccall "SDL.h SDL_BuildAudioCVT" buildAudioCVTFFI :: Ptr AudioCVT -> AudioFormat -> Word8 -> CInt -> AudioFormat -> Word8 -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_CloseAudio" closeAudioFFI :: IO () -foreign import ccall "SDL.h SDL_CloseAudioDevice" closeAudioDeviceFFI :: AudioDeviceID -> IO () -foreign import ccall "SDL.h SDL_ConvertAudio" convertAudioFFI :: Ptr AudioCVT -> IO CInt -foreign import ccall "SDL.h SDL_FreeWAV" freeWAVFFI :: Ptr Word8 -> IO () -foreign import ccall "SDL.h SDL_GetAudioDeviceName" getAudioDeviceNameFFI :: CInt -> CInt -> IO CString -foreign import ccall "SDL.h SDL_GetAudioDeviceStatus" getAudioDeviceStatusFFI :: AudioDeviceID -> IO AudioStatus -foreign import ccall "SDL.h SDL_GetAudioDriver" getAudioDriverFFI :: CInt -> IO CString -foreign import ccall "SDL.h SDL_GetAudioStatus" getAudioStatusFFI :: IO AudioStatus -foreign import ccall "SDL.h SDL_GetCurrentAudioDriver" getCurrentAudioDriverFFI :: IO CString -foreign import ccall "SDL.h SDL_GetNumAudioDevices" getNumAudioDevicesFFI :: CInt -> IO CInt -foreign import ccall "SDL.h SDL_GetNumAudioDrivers" getNumAudioDriversFFI :: IO CInt -foreign import ccall "SDL.h SDL_LoadWAV_RW" loadWAV_RWFFI :: Ptr RWops -> CInt -> Ptr AudioSpec -> Ptr (Ptr Word8) -> Ptr Word32 -> IO (Ptr AudioSpec) -foreign import ccall "SDL.h SDL_LockAudio" lockAudioFFI :: IO () -foreign import ccall "SDL.h SDL_LockAudioDevice" lockAudioDeviceFFI :: AudioDeviceID -> IO () -foreign import ccall "SDL.h SDL_MixAudio" mixAudioFFI :: Ptr Word8 -> Ptr Word8 -> Word32 -> CInt -> IO () -foreign import ccall "SDL.h SDL_MixAudioFormat" mixAudioFormatFFI :: Ptr Word8 -> Ptr Word8 -> AudioFormat -> Word32 -> CInt -> IO () -foreign import ccall "SDL.h SDL_OpenAudio" openAudioFFI :: Ptr AudioSpec -> Ptr AudioSpec -> IO CInt -foreign import ccall "SDL.h SDL_OpenAudioDevice" openAudioDeviceFFI :: CString -> CInt -> Ptr AudioSpec -> Ptr AudioSpec -> CInt -> IO AudioDeviceID -foreign import ccall "SDL.h SDL_PauseAudio" pauseAudioFFI :: CInt -> IO () -foreign import ccall "SDL.h SDL_PauseAudioDevice" pauseAudioDeviceFFI :: AudioDeviceID -> CInt -> IO () -foreign import ccall "SDL.h SDL_UnlockAudio" unlockAudioFFI :: IO () -foreign import ccall "SDL.h SDL_UnlockAudioDevice" unlockAudioDeviceFFI :: AudioDeviceID -> IO () - -audioInit :: MonadIO m => CString -> m CInt -audioInit v1 = liftIO $ audioInitFFI v1 -{-# INLINE audioInit #-} - -audioQuit :: MonadIO m => m () -audioQuit = liftIO audioQuitFFI -{-# INLINE audioQuit #-} - -buildAudioCVT :: MonadIO m => Ptr AudioCVT -> AudioFormat -> Word8 -> CInt -> AudioFormat -> Word8 -> CInt -> m CInt -buildAudioCVT v1 v2 v3 v4 v5 v6 v7 = liftIO $ buildAudioCVTFFI v1 v2 v3 v4 v5 v6 v7 -{-# INLINE buildAudioCVT #-} - -closeAudio :: MonadIO m => m () -closeAudio = liftIO closeAudioFFI -{-# INLINE closeAudio #-} - -closeAudioDevice :: MonadIO m => AudioDeviceID -> m () -closeAudioDevice v1 = liftIO $ closeAudioDeviceFFI v1 -{-# INLINE closeAudioDevice #-} - -convertAudio :: MonadIO m => Ptr AudioCVT -> m CInt -convertAudio v1 = liftIO $ convertAudioFFI v1 -{-# INLINE convertAudio #-} - -freeWAV :: MonadIO m => Ptr Word8 -> m () -freeWAV v1 = liftIO $ freeWAVFFI v1 -{-# INLINE freeWAV #-} - -getAudioDeviceName :: MonadIO m => CInt -> CInt -> m CString -getAudioDeviceName v1 v2 = liftIO $ getAudioDeviceNameFFI v1 v2 -{-# INLINE getAudioDeviceName #-} - -getAudioDeviceStatus :: MonadIO m => AudioDeviceID -> m AudioStatus -getAudioDeviceStatus v1 = liftIO $ getAudioDeviceStatusFFI v1 -{-# INLINE getAudioDeviceStatus #-} - -getAudioDriver :: MonadIO m => CInt -> m CString -getAudioDriver v1 = liftIO $ getAudioDriverFFI v1 -{-# INLINE getAudioDriver #-} - -getAudioStatus :: MonadIO m => m AudioStatus -getAudioStatus = liftIO getAudioStatusFFI -{-# INLINE getAudioStatus #-} - -getCurrentAudioDriver :: MonadIO m => m CString -getCurrentAudioDriver = liftIO getCurrentAudioDriverFFI -{-# INLINE getCurrentAudioDriver #-} - -getNumAudioDevices :: MonadIO m => CInt -> m CInt -getNumAudioDevices v1 = liftIO $ getNumAudioDevicesFFI v1 -{-# INLINE getNumAudioDevices #-} - -getNumAudioDrivers :: MonadIO m => m CInt -getNumAudioDrivers = liftIO getNumAudioDriversFFI -{-# INLINE getNumAudioDrivers #-} - -loadWAV :: MonadIO m => CString -> Ptr AudioSpec -> Ptr (Ptr Word8) -> Ptr Word32 -> m (Ptr AudioSpec) -loadWAV file spec audio_buf audio_len = liftIO $ do - rw <- withCString "rb" $ rwFromFile file - loadWAV_RW rw 1 spec audio_buf audio_len -{-# INLINE loadWAV #-} - -loadWAV_RW :: MonadIO m => Ptr RWops -> CInt -> Ptr AudioSpec -> Ptr (Ptr Word8) -> Ptr Word32 -> m (Ptr AudioSpec) -loadWAV_RW v1 v2 v3 v4 v5 = liftIO $ loadWAV_RWFFI v1 v2 v3 v4 v5 -{-# INLINE loadWAV_RW #-} - -lockAudio :: MonadIO m => m () -lockAudio = liftIO lockAudioFFI -{-# INLINE lockAudio #-} - -lockAudioDevice :: MonadIO m => AudioDeviceID -> m () -lockAudioDevice v1 = liftIO $ lockAudioDeviceFFI v1 -{-# INLINE lockAudioDevice #-} - -mixAudio :: MonadIO m => Ptr Word8 -> Ptr Word8 -> Word32 -> CInt -> m () -mixAudio v1 v2 v3 v4 = liftIO $ mixAudioFFI v1 v2 v3 v4 -{-# INLINE mixAudio #-} - -mixAudioFormat :: MonadIO m => Ptr Word8 -> Ptr Word8 -> AudioFormat -> Word32 -> CInt -> m () -mixAudioFormat v1 v2 v3 v4 v5 = liftIO $ mixAudioFormatFFI v1 v2 v3 v4 v5 -{-# INLINE mixAudioFormat #-} - -openAudio :: MonadIO m => Ptr AudioSpec -> Ptr AudioSpec -> m CInt -openAudio v1 v2 = liftIO $ openAudioFFI v1 v2 -{-# INLINE openAudio #-} - -openAudioDevice :: MonadIO m => CString -> CInt -> Ptr AudioSpec -> Ptr AudioSpec -> CInt -> m AudioDeviceID -openAudioDevice v1 v2 v3 v4 v5 = liftIO $ openAudioDeviceFFI v1 v2 v3 v4 v5 -{-# INLINE openAudioDevice #-} - -pauseAudio :: MonadIO m => CInt -> m () -pauseAudio v1 = liftIO $ pauseAudioFFI v1 -{-# INLINE pauseAudio #-} - -pauseAudioDevice :: MonadIO m => AudioDeviceID -> CInt -> m () -pauseAudioDevice v1 v2 = liftIO $ pauseAudioDeviceFFI v1 v2 -{-# INLINE pauseAudioDevice #-} - -unlockAudio :: MonadIO m => m () -unlockAudio = liftIO unlockAudioFFI -{-# INLINE unlockAudio #-} - -unlockAudioDevice :: MonadIO m => AudioDeviceID -> m () -unlockAudioDevice v1 = liftIO $ unlockAudioDeviceFFI v1 -{-# INLINE unlockAudioDevice #-} +module SDL.Raw.Audio (+ -- * Audio Device Management, Playing and Recording+ audioInit,+ audioQuit,+ buildAudioCVT,+ closeAudio,+ closeAudioDevice,+ convertAudio,+ freeWAV,+ getAudioDeviceName,+ getAudioDeviceStatus,+ getAudioDriver,+ getAudioStatus,+ getCurrentAudioDriver,+ getNumAudioDevices,+ getNumAudioDrivers,+ loadWAV,+ loadWAV_RW,+ lockAudio,+ lockAudioDevice,+ mixAudio,+ mixAudioFormat,+ openAudio,+ openAudioDevice,+ pauseAudio,+ pauseAudioDevice,+ unlockAudio,+ unlockAudioDevice+) where++import Control.Monad.IO.Class+import Data.Word+import Foreign.C.String+import Foreign.C.Types+import Foreign.Ptr+import SDL.Raw.Enum+import SDL.Raw.Filesystem+import SDL.Raw.Types++foreign import ccall "SDL.h SDL_AudioInit" audioInitFFI :: CString -> IO CInt+foreign import ccall "SDL.h SDL_AudioQuit" audioQuitFFI :: IO ()+foreign import ccall "SDL.h SDL_BuildAudioCVT" buildAudioCVTFFI :: Ptr AudioCVT -> AudioFormat -> Word8 -> CInt -> AudioFormat -> Word8 -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_CloseAudio" closeAudioFFI :: IO ()+foreign import ccall "SDL.h SDL_CloseAudioDevice" closeAudioDeviceFFI :: AudioDeviceID -> IO ()+foreign import ccall "SDL.h SDL_ConvertAudio" convertAudioFFI :: Ptr AudioCVT -> IO CInt+foreign import ccall "SDL.h SDL_FreeWAV" freeWAVFFI :: Ptr Word8 -> IO ()+foreign import ccall "SDL.h SDL_GetAudioDeviceName" getAudioDeviceNameFFI :: CInt -> CInt -> IO CString+foreign import ccall "SDL.h SDL_GetAudioDeviceStatus" getAudioDeviceStatusFFI :: AudioDeviceID -> IO AudioStatus+foreign import ccall "SDL.h SDL_GetAudioDriver" getAudioDriverFFI :: CInt -> IO CString+foreign import ccall "SDL.h SDL_GetAudioStatus" getAudioStatusFFI :: IO AudioStatus+foreign import ccall "SDL.h SDL_GetCurrentAudioDriver" getCurrentAudioDriverFFI :: IO CString+foreign import ccall "SDL.h SDL_GetNumAudioDevices" getNumAudioDevicesFFI :: CInt -> IO CInt+foreign import ccall "SDL.h SDL_GetNumAudioDrivers" getNumAudioDriversFFI :: IO CInt+foreign import ccall "SDL.h SDL_LoadWAV_RW" loadWAV_RWFFI :: Ptr RWops -> CInt -> Ptr AudioSpec -> Ptr (Ptr Word8) -> Ptr Word32 -> IO (Ptr AudioSpec)+foreign import ccall "SDL.h SDL_LockAudio" lockAudioFFI :: IO ()+foreign import ccall "SDL.h SDL_LockAudioDevice" lockAudioDeviceFFI :: AudioDeviceID -> IO ()+foreign import ccall "SDL.h SDL_MixAudio" mixAudioFFI :: Ptr Word8 -> Ptr Word8 -> Word32 -> CInt -> IO ()+foreign import ccall "SDL.h SDL_MixAudioFormat" mixAudioFormatFFI :: Ptr Word8 -> Ptr Word8 -> AudioFormat -> Word32 -> CInt -> IO ()+foreign import ccall "SDL.h SDL_OpenAudio" openAudioFFI :: Ptr AudioSpec -> Ptr AudioSpec -> IO CInt+foreign import ccall "SDL.h SDL_OpenAudioDevice" openAudioDeviceFFI :: CString -> CInt -> Ptr AudioSpec -> Ptr AudioSpec -> CInt -> IO AudioDeviceID+foreign import ccall "SDL.h SDL_PauseAudio" pauseAudioFFI :: CInt -> IO ()+foreign import ccall "SDL.h SDL_PauseAudioDevice" pauseAudioDeviceFFI :: AudioDeviceID -> CInt -> IO ()+foreign import ccall "SDL.h SDL_UnlockAudio" unlockAudioFFI :: IO ()+foreign import ccall "SDL.h SDL_UnlockAudioDevice" unlockAudioDeviceFFI :: AudioDeviceID -> IO ()++audioInit :: MonadIO m => CString -> m CInt+audioInit v1 = liftIO $ audioInitFFI v1+{-# INLINE audioInit #-}++audioQuit :: MonadIO m => m ()+audioQuit = liftIO audioQuitFFI+{-# INLINE audioQuit #-}++buildAudioCVT :: MonadIO m => Ptr AudioCVT -> AudioFormat -> Word8 -> CInt -> AudioFormat -> Word8 -> CInt -> m CInt+buildAudioCVT v1 v2 v3 v4 v5 v6 v7 = liftIO $ buildAudioCVTFFI v1 v2 v3 v4 v5 v6 v7+{-# INLINE buildAudioCVT #-}++closeAudio :: MonadIO m => m ()+closeAudio = liftIO closeAudioFFI+{-# INLINE closeAudio #-}++closeAudioDevice :: MonadIO m => AudioDeviceID -> m ()+closeAudioDevice v1 = liftIO $ closeAudioDeviceFFI v1+{-# INLINE closeAudioDevice #-}++convertAudio :: MonadIO m => Ptr AudioCVT -> m CInt+convertAudio v1 = liftIO $ convertAudioFFI v1+{-# INLINE convertAudio #-}++freeWAV :: MonadIO m => Ptr Word8 -> m ()+freeWAV v1 = liftIO $ freeWAVFFI v1+{-# INLINE freeWAV #-}++getAudioDeviceName :: MonadIO m => CInt -> CInt -> m CString+getAudioDeviceName v1 v2 = liftIO $ getAudioDeviceNameFFI v1 v2+{-# INLINE getAudioDeviceName #-}++getAudioDeviceStatus :: MonadIO m => AudioDeviceID -> m AudioStatus+getAudioDeviceStatus v1 = liftIO $ getAudioDeviceStatusFFI v1+{-# INLINE getAudioDeviceStatus #-}++getAudioDriver :: MonadIO m => CInt -> m CString+getAudioDriver v1 = liftIO $ getAudioDriverFFI v1+{-# INLINE getAudioDriver #-}++getAudioStatus :: MonadIO m => m AudioStatus+getAudioStatus = liftIO getAudioStatusFFI+{-# INLINE getAudioStatus #-}++getCurrentAudioDriver :: MonadIO m => m CString+getCurrentAudioDriver = liftIO getCurrentAudioDriverFFI+{-# INLINE getCurrentAudioDriver #-}++getNumAudioDevices :: MonadIO m => CInt -> m CInt+getNumAudioDevices v1 = liftIO $ getNumAudioDevicesFFI v1+{-# INLINE getNumAudioDevices #-}++getNumAudioDrivers :: MonadIO m => m CInt+getNumAudioDrivers = liftIO getNumAudioDriversFFI+{-# INLINE getNumAudioDrivers #-}++loadWAV :: MonadIO m => CString -> Ptr AudioSpec -> Ptr (Ptr Word8) -> Ptr Word32 -> m (Ptr AudioSpec)+loadWAV file spec audio_buf audio_len = liftIO $ do+ rw <- withCString "rb" $ rwFromFile file+ loadWAV_RW rw 1 spec audio_buf audio_len+{-# INLINE loadWAV #-}++loadWAV_RW :: MonadIO m => Ptr RWops -> CInt -> Ptr AudioSpec -> Ptr (Ptr Word8) -> Ptr Word32 -> m (Ptr AudioSpec)+loadWAV_RW v1 v2 v3 v4 v5 = liftIO $ loadWAV_RWFFI v1 v2 v3 v4 v5+{-# INLINE loadWAV_RW #-}++lockAudio :: MonadIO m => m ()+lockAudio = liftIO lockAudioFFI+{-# INLINE lockAudio #-}++lockAudioDevice :: MonadIO m => AudioDeviceID -> m ()+lockAudioDevice v1 = liftIO $ lockAudioDeviceFFI v1+{-# INLINE lockAudioDevice #-}++mixAudio :: MonadIO m => Ptr Word8 -> Ptr Word8 -> Word32 -> CInt -> m ()+mixAudio v1 v2 v3 v4 = liftIO $ mixAudioFFI v1 v2 v3 v4+{-# INLINE mixAudio #-}++mixAudioFormat :: MonadIO m => Ptr Word8 -> Ptr Word8 -> AudioFormat -> Word32 -> CInt -> m ()+mixAudioFormat v1 v2 v3 v4 v5 = liftIO $ mixAudioFormatFFI v1 v2 v3 v4 v5+{-# INLINE mixAudioFormat #-}++openAudio :: MonadIO m => Ptr AudioSpec -> Ptr AudioSpec -> m CInt+openAudio v1 v2 = liftIO $ openAudioFFI v1 v2+{-# INLINE openAudio #-}++openAudioDevice :: MonadIO m => CString -> CInt -> Ptr AudioSpec -> Ptr AudioSpec -> CInt -> m AudioDeviceID+openAudioDevice v1 v2 v3 v4 v5 = liftIO $ openAudioDeviceFFI v1 v2 v3 v4 v5+{-# INLINE openAudioDevice #-}++pauseAudio :: MonadIO m => CInt -> m ()+pauseAudio v1 = liftIO $ pauseAudioFFI v1+{-# INLINE pauseAudio #-}++pauseAudioDevice :: MonadIO m => AudioDeviceID -> CInt -> m ()+pauseAudioDevice v1 v2 = liftIO $ pauseAudioDeviceFFI v1 v2+{-# INLINE pauseAudioDevice #-}++unlockAudio :: MonadIO m => m ()+unlockAudio = liftIO unlockAudioFFI+{-# INLINE unlockAudio #-}++unlockAudioDevice :: MonadIO m => AudioDeviceID -> m ()+unlockAudioDevice v1 = liftIO $ unlockAudioDeviceFFI v1+{-# INLINE unlockAudioDevice #-}
src/SDL/Raw/Basic.hs view
@@ -1,200 +1,200 @@-module SDL.Raw.Basic ( - -- * Initialization and Shutdown - init, - initSubSystem, - quit, - quitSubSystem, - setMainReady, - wasInit, - - -- * Memory Management - free, - - -- * Configuration Variables - addHintCallback, - clearHints, - delHintCallback, - getHint, - setHint, - setHintWithPriority, - - -- * Log Handling - log, - logCritical, - logDebug, - logError, - logGetOutputFunction, - logGetPriority, - logInfo, - logMessage, - logResetPriorities, - logSetAllPriority, - logSetOutputFunction, - logSetPriority, - logVerbose, - logWarn, - - -- * Assertions - -- | Use Haskell's own assertion primitives rather than SDL's. - - -- * Querying SDL Version - getRevision, - getRevisionNumber, - getVersion -) where - -import Control.Monad.IO.Class -import Foreign.C.String -import Foreign.C.Types -import Foreign.Ptr -import SDL.Raw.Enum -import SDL.Raw.Types -import Prelude hiding (init, log) - -foreign import ccall "SDL.h SDL_Init" initFFI :: InitFlag -> IO CInt -foreign import ccall "SDL.h SDL_InitSubSystem" initSubSystemFFI :: InitFlag -> IO CInt -foreign import ccall "SDL.h SDL_Quit" quitFFI :: IO () -foreign import ccall "SDL.h SDL_QuitSubSystem" quitSubSystemFFI :: InitFlag -> IO () -foreign import ccall "SDL.h SDL_SetMainReady" setMainReadyFFI :: IO () -foreign import ccall "SDL.h SDL_WasInit" wasInitFFI :: InitFlag -> IO InitFlag - -foreign import ccall "SDL.h SDL_free" freeFFI :: Ptr () -> IO () - -foreign import ccall "SDL.h SDL_AddHintCallback" addHintCallbackFFI :: CString -> HintCallback -> Ptr () -> IO () -foreign import ccall "SDL.h SDL_ClearHints" clearHintsFFI :: IO () -foreign import ccall "SDL.h SDL_DelHintCallback" delHintCallbackFFI :: CString -> HintCallback -> Ptr () -> IO () -foreign import ccall "SDL.h SDL_GetHint" getHintFFI :: CString -> IO CString -foreign import ccall "SDL.h SDL_SetHint" setHintFFI :: CString -> CString -> IO Bool -foreign import ccall "SDL.h SDL_SetHintWithPriority" setHintWithPriorityFFI :: CString -> CString -> HintPriority -> IO Bool - -foreign import ccall "SDL.h SDL_LogGetOutputFunction" logGetOutputFunctionFFI :: Ptr LogOutputFunction -> Ptr (Ptr ()) -> IO () -foreign import ccall "SDL.h SDL_LogGetPriority" logGetPriorityFFI :: CInt -> IO LogPriority -foreign import ccall "sdlhelper.c SDLHelper_LogMessage" logMessageFFI :: CInt -> LogPriority -> CString -> IO () -foreign import ccall "SDL.h SDL_LogResetPriorities" logResetPrioritiesFFI :: IO () -foreign import ccall "SDL.h SDL_LogSetAllPriority" logSetAllPriorityFFI :: LogPriority -> IO () -foreign import ccall "SDL.h SDL_LogSetOutputFunction" logSetOutputFunctionFFI :: LogOutputFunction -> Ptr () -> IO () -foreign import ccall "SDL.h SDL_LogSetPriority" logSetPriorityFFI :: CInt -> LogPriority -> IO () - -foreign import ccall "SDL.h SDL_GetRevision" getRevisionFFI :: IO CString -foreign import ccall "SDL.h SDL_GetRevisionNumber" getRevisionNumberFFI :: IO CInt -foreign import ccall "SDL.h SDL_GetVersion" getVersionFFI :: Ptr Version -> IO () - -init :: MonadIO m => InitFlag -> m CInt -init v1 = liftIO $ initFFI v1 -{-# INLINE init #-} - -initSubSystem :: MonadIO m => InitFlag -> m CInt -initSubSystem v1 = liftIO $ initSubSystemFFI v1 -{-# INLINE initSubSystem #-} - -quit :: MonadIO m => m () -quit = liftIO quitFFI -{-# INLINE quit #-} - -quitSubSystem :: MonadIO m => InitFlag -> m () -quitSubSystem v1 = liftIO $ quitSubSystemFFI v1 -{-# INLINE quitSubSystem #-} - -setMainReady :: MonadIO m => m () -setMainReady = liftIO setMainReadyFFI -{-# INLINE setMainReady #-} - -wasInit :: MonadIO m => InitFlag -> m InitFlag -wasInit v1 = liftIO $ wasInitFFI v1 -{-# INLINE wasInit #-} - -free :: MonadIO m => Ptr () -> m () -free v1 = liftIO $ freeFFI v1 -{-# INLINE free #-} - -addHintCallback :: MonadIO m => CString -> HintCallback -> Ptr () -> m () -addHintCallback v1 v2 v3 = liftIO $ addHintCallbackFFI v1 v2 v3 -{-# INLINE addHintCallback #-} - -clearHints :: MonadIO m => m () -clearHints = liftIO clearHintsFFI -{-# INLINE clearHints #-} - -delHintCallback :: MonadIO m => CString -> HintCallback -> Ptr () -> m () -delHintCallback v1 v2 v3 = liftIO $ delHintCallbackFFI v1 v2 v3 -{-# INLINE delHintCallback #-} - -getHint :: MonadIO m => CString -> m CString -getHint v1 = liftIO $ getHintFFI v1 -{-# INLINE getHint #-} - -setHint :: MonadIO m => CString -> CString -> m Bool -setHint v1 v2 = liftIO $ setHintFFI v1 v2 -{-# INLINE setHint #-} - -setHintWithPriority :: MonadIO m => CString -> CString -> HintPriority -> m Bool -setHintWithPriority v1 v2 v3 = liftIO $ setHintWithPriorityFFI v1 v2 v3 -{-# INLINE setHintWithPriority #-} - -log :: CString -> IO () -log = logMessage SDL_LOG_CATEGORY_APPLICATION SDL_LOG_PRIORITY_INFO -{-# INLINE log #-} - -logCritical :: CInt -> CString -> IO () -logCritical category = logMessage category SDL_LOG_PRIORITY_CRITICAL -{-# INLINE logCritical #-} - -logDebug :: CInt -> CString -> IO () -logDebug category = logMessage category SDL_LOG_PRIORITY_DEBUG -{-# INLINE logDebug #-} - -logError :: CInt -> CString -> IO () -logError category = logMessage category SDL_LOG_PRIORITY_ERROR -{-# INLINE logError #-} - -logGetOutputFunction :: MonadIO m => Ptr LogOutputFunction -> Ptr (Ptr ()) -> m () -logGetOutputFunction v1 v2 = liftIO $ logGetOutputFunctionFFI v1 v2 -{-# INLINE logGetOutputFunction #-} - -logGetPriority :: MonadIO m => CInt -> m LogPriority -logGetPriority v1 = liftIO $ logGetPriorityFFI v1 -{-# INLINE logGetPriority #-} - -logInfo :: CInt -> CString -> IO () -logInfo category = logMessage category SDL_LOG_PRIORITY_INFO -{-# INLINE logInfo #-} - -logMessage :: MonadIO m => CInt -> LogPriority -> CString -> m () -logMessage v1 v2 v3 = liftIO $ logMessageFFI v1 v2 v3 -{-# INLINE logMessage #-} - -logResetPriorities :: MonadIO m => m () -logResetPriorities = liftIO logResetPrioritiesFFI -{-# INLINE logResetPriorities #-} - -logSetAllPriority :: MonadIO m => LogPriority -> m () -logSetAllPriority v1 = liftIO $ logSetAllPriorityFFI v1 -{-# INLINE logSetAllPriority #-} - -logSetOutputFunction :: MonadIO m => LogOutputFunction -> Ptr () -> m () -logSetOutputFunction v1 v2 = liftIO $ logSetOutputFunctionFFI v1 v2 -{-# INLINE logSetOutputFunction #-} - -logSetPriority :: MonadIO m => CInt -> LogPriority -> m () -logSetPriority v1 v2 = liftIO $ logSetPriorityFFI v1 v2 -{-# INLINE logSetPriority #-} - -logVerbose :: CInt -> CString -> IO () -logVerbose category = logMessage category SDL_LOG_PRIORITY_VERBOSE -{-# INLINE logVerbose #-} - -logWarn :: CInt -> CString -> IO () -logWarn category = logMessage category SDL_LOG_PRIORITY_WARN -{-# INLINE logWarn #-} - -getRevision :: MonadIO m => m CString -getRevision = liftIO getRevisionFFI -{-# INLINE getRevision #-} - -getRevisionNumber :: MonadIO m => m CInt -getRevisionNumber = liftIO getRevisionNumberFFI -{-# INLINE getRevisionNumber #-} - -getVersion :: MonadIO m => Ptr Version -> m () -getVersion v1 = liftIO $ getVersionFFI v1 -{-# INLINE getVersion #-} +module SDL.Raw.Basic (+ -- * Initialization and Shutdown+ init,+ initSubSystem,+ quit,+ quitSubSystem,+ setMainReady,+ wasInit,++ -- * Memory Management+ free,++ -- * Configuration Variables+ addHintCallback,+ clearHints,+ delHintCallback,+ getHint,+ setHint,+ setHintWithPriority,++ -- * Log Handling+ log,+ logCritical,+ logDebug,+ logError,+ logGetOutputFunction,+ logGetPriority,+ logInfo,+ logMessage,+ logResetPriorities,+ logSetAllPriority,+ logSetOutputFunction,+ logSetPriority,+ logVerbose,+ logWarn,++ -- * Assertions+ -- | Use Haskell's own assertion primitives rather than SDL's.++ -- * Querying SDL Version+ getRevision,+ getRevisionNumber,+ getVersion+) where++import Control.Monad.IO.Class+import Foreign.C.String+import Foreign.C.Types+import Foreign.Ptr+import SDL.Raw.Enum+import SDL.Raw.Types+import Prelude hiding (init, log)++foreign import ccall "SDL.h SDL_Init" initFFI :: InitFlag -> IO CInt+foreign import ccall "SDL.h SDL_InitSubSystem" initSubSystemFFI :: InitFlag -> IO CInt+foreign import ccall "SDL.h SDL_Quit" quitFFI :: IO ()+foreign import ccall "SDL.h SDL_QuitSubSystem" quitSubSystemFFI :: InitFlag -> IO ()+foreign import ccall "SDL.h SDL_SetMainReady" setMainReadyFFI :: IO ()+foreign import ccall "SDL.h SDL_WasInit" wasInitFFI :: InitFlag -> IO InitFlag++foreign import ccall "SDL.h SDL_free" freeFFI :: Ptr () -> IO ()++foreign import ccall "SDL.h SDL_AddHintCallback" addHintCallbackFFI :: CString -> HintCallback -> Ptr () -> IO ()+foreign import ccall "SDL.h SDL_ClearHints" clearHintsFFI :: IO ()+foreign import ccall "SDL.h SDL_DelHintCallback" delHintCallbackFFI :: CString -> HintCallback -> Ptr () -> IO ()+foreign import ccall "SDL.h SDL_GetHint" getHintFFI :: CString -> IO CString+foreign import ccall "SDL.h SDL_SetHint" setHintFFI :: CString -> CString -> IO Bool+foreign import ccall "SDL.h SDL_SetHintWithPriority" setHintWithPriorityFFI :: CString -> CString -> HintPriority -> IO Bool++foreign import ccall "SDL.h SDL_LogGetOutputFunction" logGetOutputFunctionFFI :: Ptr LogOutputFunction -> Ptr (Ptr ()) -> IO ()+foreign import ccall "SDL.h SDL_LogGetPriority" logGetPriorityFFI :: CInt -> IO LogPriority+foreign import ccall "sdlhelper.c SDLHelper_LogMessage" logMessageFFI :: CInt -> LogPriority -> CString -> IO ()+foreign import ccall "SDL.h SDL_LogResetPriorities" logResetPrioritiesFFI :: IO ()+foreign import ccall "SDL.h SDL_LogSetAllPriority" logSetAllPriorityFFI :: LogPriority -> IO ()+foreign import ccall "SDL.h SDL_LogSetOutputFunction" logSetOutputFunctionFFI :: LogOutputFunction -> Ptr () -> IO ()+foreign import ccall "SDL.h SDL_LogSetPriority" logSetPriorityFFI :: CInt -> LogPriority -> IO ()++foreign import ccall "SDL.h SDL_GetRevision" getRevisionFFI :: IO CString+foreign import ccall "SDL.h SDL_GetRevisionNumber" getRevisionNumberFFI :: IO CInt+foreign import ccall "SDL.h SDL_GetVersion" getVersionFFI :: Ptr Version -> IO ()++init :: MonadIO m => InitFlag -> m CInt+init v1 = liftIO $ initFFI v1+{-# INLINE init #-}++initSubSystem :: MonadIO m => InitFlag -> m CInt+initSubSystem v1 = liftIO $ initSubSystemFFI v1+{-# INLINE initSubSystem #-}++quit :: MonadIO m => m ()+quit = liftIO quitFFI+{-# INLINE quit #-}++quitSubSystem :: MonadIO m => InitFlag -> m ()+quitSubSystem v1 = liftIO $ quitSubSystemFFI v1+{-# INLINE quitSubSystem #-}++setMainReady :: MonadIO m => m ()+setMainReady = liftIO setMainReadyFFI+{-# INLINE setMainReady #-}++wasInit :: MonadIO m => InitFlag -> m InitFlag+wasInit v1 = liftIO $ wasInitFFI v1+{-# INLINE wasInit #-}++free :: MonadIO m => Ptr () -> m ()+free v1 = liftIO $ freeFFI v1+{-# INLINE free #-}++addHintCallback :: MonadIO m => CString -> HintCallback -> Ptr () -> m ()+addHintCallback v1 v2 v3 = liftIO $ addHintCallbackFFI v1 v2 v3+{-# INLINE addHintCallback #-}++clearHints :: MonadIO m => m ()+clearHints = liftIO clearHintsFFI+{-# INLINE clearHints #-}++delHintCallback :: MonadIO m => CString -> HintCallback -> Ptr () -> m ()+delHintCallback v1 v2 v3 = liftIO $ delHintCallbackFFI v1 v2 v3+{-# INLINE delHintCallback #-}++getHint :: MonadIO m => CString -> m CString+getHint v1 = liftIO $ getHintFFI v1+{-# INLINE getHint #-}++setHint :: MonadIO m => CString -> CString -> m Bool+setHint v1 v2 = liftIO $ setHintFFI v1 v2+{-# INLINE setHint #-}++setHintWithPriority :: MonadIO m => CString -> CString -> HintPriority -> m Bool+setHintWithPriority v1 v2 v3 = liftIO $ setHintWithPriorityFFI v1 v2 v3+{-# INLINE setHintWithPriority #-}++log :: CString -> IO ()+log = logMessage SDL_LOG_CATEGORY_APPLICATION SDL_LOG_PRIORITY_INFO+{-# INLINE log #-}++logCritical :: CInt -> CString -> IO ()+logCritical category = logMessage category SDL_LOG_PRIORITY_CRITICAL+{-# INLINE logCritical #-}++logDebug :: CInt -> CString -> IO ()+logDebug category = logMessage category SDL_LOG_PRIORITY_DEBUG+{-# INLINE logDebug #-}++logError :: CInt -> CString -> IO ()+logError category = logMessage category SDL_LOG_PRIORITY_ERROR+{-# INLINE logError #-}++logGetOutputFunction :: MonadIO m => Ptr LogOutputFunction -> Ptr (Ptr ()) -> m ()+logGetOutputFunction v1 v2 = liftIO $ logGetOutputFunctionFFI v1 v2+{-# INLINE logGetOutputFunction #-}++logGetPriority :: MonadIO m => CInt -> m LogPriority+logGetPriority v1 = liftIO $ logGetPriorityFFI v1+{-# INLINE logGetPriority #-}++logInfo :: CInt -> CString -> IO ()+logInfo category = logMessage category SDL_LOG_PRIORITY_INFO+{-# INLINE logInfo #-}++logMessage :: MonadIO m => CInt -> LogPriority -> CString -> m ()+logMessage v1 v2 v3 = liftIO $ logMessageFFI v1 v2 v3+{-# INLINE logMessage #-}++logResetPriorities :: MonadIO m => m ()+logResetPriorities = liftIO logResetPrioritiesFFI+{-# INLINE logResetPriorities #-}++logSetAllPriority :: MonadIO m => LogPriority -> m ()+logSetAllPriority v1 = liftIO $ logSetAllPriorityFFI v1+{-# INLINE logSetAllPriority #-}++logSetOutputFunction :: MonadIO m => LogOutputFunction -> Ptr () -> m ()+logSetOutputFunction v1 v2 = liftIO $ logSetOutputFunctionFFI v1 v2+{-# INLINE logSetOutputFunction #-}++logSetPriority :: MonadIO m => CInt -> LogPriority -> m ()+logSetPriority v1 v2 = liftIO $ logSetPriorityFFI v1 v2+{-# INLINE logSetPriority #-}++logVerbose :: CInt -> CString -> IO ()+logVerbose category = logMessage category SDL_LOG_PRIORITY_VERBOSE+{-# INLINE logVerbose #-}++logWarn :: CInt -> CString -> IO ()+logWarn category = logMessage category SDL_LOG_PRIORITY_WARN+{-# INLINE logWarn #-}++getRevision :: MonadIO m => m CString+getRevision = liftIO getRevisionFFI+{-# INLINE getRevision #-}++getRevisionNumber :: MonadIO m => m CInt+getRevisionNumber = liftIO getRevisionNumberFFI+{-# INLINE getRevisionNumber #-}++getVersion :: MonadIO m => Ptr Version -> m ()+getVersion v1 = liftIO $ getVersionFFI v1+{-# INLINE getVersion #-}
src/SDL/Raw/Enum.hsc view
@@ -1,1727 +1,1727 @@-{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE PatternSynonyms #-} -module SDL.Raw.Enum ( - -- * Enumerations - - -- ** Audio Format - AudioFormat, - pattern SDL_AUDIO_S8, - pattern SDL_AUDIO_U8, - pattern SDL_AUDIO_S16LSB, - pattern SDL_AUDIO_S16MSB, - pattern SDL_AUDIO_S16SYS, - pattern SDL_AUDIO_U16LSB, - pattern SDL_AUDIO_U16MSB, - pattern SDL_AUDIO_U16SYS, - pattern SDL_AUDIO_S32LSB, - pattern SDL_AUDIO_S32MSB, - pattern SDL_AUDIO_S32SYS, - pattern SDL_AUDIO_F32LSB, - pattern SDL_AUDIO_F32MSB, - pattern SDL_AUDIO_F32SYS, - - -- ** Audio Status - AudioStatus, - pattern SDL_AUDIO_STOPPED, - pattern SDL_AUDIO_PLAYING, - pattern SDL_AUDIO_PAUSED, - - -- ** Blend Mode - BlendMode, - pattern SDL_BLENDMODE_NONE, - pattern SDL_BLENDMODE_BLEND, - pattern SDL_BLENDMODE_ADD, - pattern SDL_BLENDMODE_MOD, - - -- ** Endian Detetection - pattern SDL_BYTEORDER, - pattern SDL_LIL_ENDIAN, - pattern SDL_BIG_ENDIAN, - - -- ** Event Action - EventAction, - pattern SDL_ADDEVENT, - pattern SDL_PEEKEVENT, - pattern SDL_GETEVENT, - - -- ** Game Controller Axis - GameControllerAxis, - pattern SDL_CONTROLLER_AXIS_INVALID, - pattern SDL_CONTROLLER_AXIS_LEFTX, - pattern SDL_CONTROLLER_AXIS_LEFTY, - pattern SDL_CONTROLLER_AXIS_RIGHTX, - pattern SDL_CONTROLLER_AXIS_RIGHTY, - pattern SDL_CONTROLLER_AXIS_TRIGGERLEFT, - pattern SDL_CONTROLLER_AXIS_TRIGGERRIGHT, - pattern SDL_CONTROLLER_AXIS_MAX, - - -- ** Game Controller Button - GameControllerButton, - pattern SDL_CONTROLLER_BUTTON_INVALID, - pattern SDL_CONTROLLER_BUTTON_A, - pattern SDL_CONTROLLER_BUTTON_B, - pattern SDL_CONTROLLER_BUTTON_X, - pattern SDL_CONTROLLER_BUTTON_Y, - pattern SDL_CONTROLLER_BUTTON_BACK, - pattern SDL_CONTROLLER_BUTTON_GUIDE, - pattern SDL_CONTROLLER_BUTTON_START, - pattern SDL_CONTROLLER_BUTTON_LEFTSTICK, - pattern SDL_CONTROLLER_BUTTON_RIGHTSTICK, - pattern SDL_CONTROLLER_BUTTON_LEFTSHOULDER, - pattern SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, - pattern SDL_CONTROLLER_BUTTON_DPAD_UP, - pattern SDL_CONTROLLER_BUTTON_DPAD_DOWN, - pattern SDL_CONTROLLER_BUTTON_DPAD_LEFT, - pattern SDL_CONTROLLER_BUTTON_DPAD_RIGHT, - pattern SDL_CONTROLLER_BUTTON_MAX, - - -- ** OpenGL Attribute - GLattr, - pattern SDL_GL_RED_SIZE, - pattern SDL_GL_GREEN_SIZE, - pattern SDL_GL_BLUE_SIZE, - pattern SDL_GL_ALPHA_SIZE, - pattern SDL_GL_BUFFER_SIZE, - pattern SDL_GL_DOUBLEBUFFER, - pattern SDL_GL_DEPTH_SIZE, - pattern SDL_GL_STENCIL_SIZE, - pattern SDL_GL_ACCUM_RED_SIZE, - pattern SDL_GL_ACCUM_GREEN_SIZE, - pattern SDL_GL_ACCUM_BLUE_SIZE, - pattern SDL_GL_ACCUM_ALPHA_SIZE, - pattern SDL_GL_STEREO, - pattern SDL_GL_MULTISAMPLEBUFFERS, - pattern SDL_GL_MULTISAMPLESAMPLES, - pattern SDL_GL_ACCELERATED_VISUAL, - pattern SDL_GL_RETAINED_BACKING, - pattern SDL_GL_CONTEXT_MAJOR_VERSION, - pattern SDL_GL_CONTEXT_MINOR_VERSION, - pattern SDL_GL_CONTEXT_EGL, - pattern SDL_GL_CONTEXT_FLAGS, - pattern SDL_GL_CONTEXT_PROFILE_MASK, - pattern SDL_GL_SHARE_WITH_CURRENT_CONTEXT, - pattern SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, - - -- ** Hint Priority - HintPriority, - pattern SDL_HINT_DEFAULT, - pattern SDL_HINT_NORMAL, - pattern SDL_HINT_OVERRIDE, - - -- ** Initialization Flag - InitFlag, - pattern SDL_INIT_TIMER, - pattern SDL_INIT_AUDIO, - pattern SDL_INIT_VIDEO, - pattern SDL_INIT_JOYSTICK, - pattern SDL_INIT_HAPTIC, - pattern SDL_INIT_GAMECONTROLLER, - pattern SDL_INIT_EVENTS, - pattern SDL_INIT_NOPARACHUTE, - pattern SDL_INIT_EVERYTHING, - - -- ** Keycode - Keycode, - pattern SDLK_UNKNOWN, - pattern SDLK_RETURN, - pattern SDLK_ESCAPE, - pattern SDLK_BACKSPACE, - pattern SDLK_TAB, - pattern SDLK_SPACE, - pattern SDLK_EXCLAIM, - pattern SDLK_QUOTEDBL, - pattern SDLK_HASH, - pattern SDLK_PERCENT, - pattern SDLK_DOLLAR, - pattern SDLK_AMPERSAND, - pattern SDLK_QUOTE, - pattern SDLK_LEFTPAREN, - pattern SDLK_RIGHTPAREN, - pattern SDLK_ASTERISK, - pattern SDLK_PLUS, - pattern SDLK_COMMA, - pattern SDLK_MINUS, - pattern SDLK_PERIOD, - pattern SDLK_SLASH, - pattern SDLK_0, - pattern SDLK_1, - pattern SDLK_2, - pattern SDLK_3, - pattern SDLK_4, - pattern SDLK_5, - pattern SDLK_6, - pattern SDLK_7, - pattern SDLK_8, - pattern SDLK_9, - pattern SDLK_COLON, - pattern SDLK_SEMICOLON, - pattern SDLK_LESS, - pattern SDLK_EQUALS, - pattern SDLK_GREATER, - pattern SDLK_QUESTION, - pattern SDLK_AT, - pattern SDLK_LEFTBRACKET, - pattern SDLK_BACKSLASH, - pattern SDLK_RIGHTBRACKET, - pattern SDLK_CARET, - pattern SDLK_UNDERSCORE, - pattern SDLK_BACKQUOTE, - pattern SDLK_a, - pattern SDLK_b, - pattern SDLK_c, - pattern SDLK_d, - pattern SDLK_e, - pattern SDLK_f, - pattern SDLK_g, - pattern SDLK_h, - pattern SDLK_i, - pattern SDLK_j, - pattern SDLK_k, - pattern SDLK_l, - pattern SDLK_m, - pattern SDLK_n, - pattern SDLK_o, - pattern SDLK_p, - pattern SDLK_q, - pattern SDLK_r, - pattern SDLK_s, - pattern SDLK_t, - pattern SDLK_u, - pattern SDLK_v, - pattern SDLK_w, - pattern SDLK_x, - pattern SDLK_y, - pattern SDLK_z, - pattern SDLK_CAPSLOCK, - pattern SDLK_F1, - pattern SDLK_F2, - pattern SDLK_F3, - pattern SDLK_F4, - pattern SDLK_F5, - pattern SDLK_F6, - pattern SDLK_F7, - pattern SDLK_F8, - pattern SDLK_F9, - pattern SDLK_F10, - pattern SDLK_F11, - pattern SDLK_F12, - pattern SDLK_PRINTSCREEN, - pattern SDLK_SCROLLLOCK, - pattern SDLK_PAUSE, - pattern SDLK_INSERT, - pattern SDLK_HOME, - pattern SDLK_PAGEUP, - pattern SDLK_DELETE, - pattern SDLK_END, - pattern SDLK_PAGEDOWN, - pattern SDLK_RIGHT, - pattern SDLK_LEFT, - pattern SDLK_DOWN, - pattern SDLK_UP, - pattern SDLK_NUMLOCKCLEAR, - pattern SDLK_KP_DIVIDE, - pattern SDLK_KP_MULTIPLY, - pattern SDLK_KP_MINUS, - pattern SDLK_KP_PLUS, - pattern SDLK_KP_ENTER, - pattern SDLK_KP_1, - pattern SDLK_KP_2, - pattern SDLK_KP_3, - pattern SDLK_KP_4, - pattern SDLK_KP_5, - pattern SDLK_KP_6, - pattern SDLK_KP_7, - pattern SDLK_KP_8, - pattern SDLK_KP_9, - pattern SDLK_KP_0, - pattern SDLK_KP_PERIOD, - pattern SDLK_APPLICATION, - pattern SDLK_POWER, - pattern SDLK_KP_EQUALS, - pattern SDLK_F13, - pattern SDLK_F14, - pattern SDLK_F15, - pattern SDLK_F16, - pattern SDLK_F17, - pattern SDLK_F18, - pattern SDLK_F19, - pattern SDLK_F20, - pattern SDLK_F21, - pattern SDLK_F22, - pattern SDLK_F23, - pattern SDLK_F24, - pattern SDLK_EXECUTE, - pattern SDLK_HELP, - pattern SDLK_MENU, - pattern SDLK_SELECT, - pattern SDLK_STOP, - pattern SDLK_AGAIN, - pattern SDLK_UNDO, - pattern SDLK_CUT, - pattern SDLK_COPY, - pattern SDLK_PASTE, - pattern SDLK_FIND, - pattern SDLK_MUTE, - pattern SDLK_VOLUMEUP, - pattern SDLK_VOLUMEDOWN, - pattern SDLK_KP_COMMA, - pattern SDLK_KP_EQUALSAS400, - pattern SDLK_ALTERASE, - pattern SDLK_SYSREQ, - pattern SDLK_CANCEL, - pattern SDLK_CLEAR, - pattern SDLK_PRIOR, - pattern SDLK_RETURN2, - pattern SDLK_SEPARATOR, - pattern SDLK_OUT, - pattern SDLK_OPER, - pattern SDLK_CLEARAGAIN, - pattern SDLK_CRSEL, - pattern SDLK_EXSEL, - pattern SDLK_KP_00, - pattern SDLK_KP_000, - pattern SDLK_THOUSANDSSEPARATOR, - pattern SDLK_DECIMALSEPARATOR, - pattern SDLK_CURRENCYUNIT, - pattern SDLK_CURRENCYSUBUNIT, - pattern SDLK_KP_LEFTPAREN, - pattern SDLK_KP_RIGHTPAREN, - pattern SDLK_KP_LEFTBRACE, - pattern SDLK_KP_RIGHTBRACE, - pattern SDLK_KP_TAB, - pattern SDLK_KP_BACKSPACE, - pattern SDLK_KP_A, - pattern SDLK_KP_B, - pattern SDLK_KP_C, - pattern SDLK_KP_D, - pattern SDLK_KP_E, - pattern SDLK_KP_F, - pattern SDLK_KP_XOR, - pattern SDLK_KP_POWER, - pattern SDLK_KP_PERCENT, - pattern SDLK_KP_LESS, - pattern SDLK_KP_GREATER, - pattern SDLK_KP_AMPERSAND, - pattern SDLK_KP_DBLAMPERSAND, - pattern SDLK_KP_VERTICALBAR, - pattern SDLK_KP_DBLVERTICALBAR, - pattern SDLK_KP_COLON, - pattern SDLK_KP_HASH, - pattern SDLK_KP_SPACE, - pattern SDLK_KP_AT, - pattern SDLK_KP_EXCLAM, - pattern SDLK_KP_MEMSTORE, - pattern SDLK_KP_MEMRECALL, - pattern SDLK_KP_MEMCLEAR, - pattern SDLK_KP_MEMADD, - pattern SDLK_KP_MEMSUBTRACT, - pattern SDLK_KP_MEMMULTIPLY, - pattern SDLK_KP_MEMDIVIDE, - pattern SDLK_KP_PLUSMINUS, - pattern SDLK_KP_CLEAR, - pattern SDLK_KP_CLEARENTRY, - pattern SDLK_KP_BINARY, - pattern SDLK_KP_OCTAL, - pattern SDLK_KP_DECIMAL, - pattern SDLK_KP_HEXADECIMAL, - pattern SDLK_LCTRL, - pattern SDLK_LSHIFT, - pattern SDLK_LALT, - pattern SDLK_LGUI, - pattern SDLK_RCTRL, - pattern SDLK_RSHIFT, - pattern SDLK_RALT, - pattern SDLK_RGUI, - pattern SDLK_MODE, - pattern SDLK_AUDIONEXT, - pattern SDLK_AUDIOPREV, - pattern SDLK_AUDIOSTOP, - pattern SDLK_AUDIOPLAY, - pattern SDLK_AUDIOMUTE, - pattern SDLK_MEDIASELECT, - pattern SDLK_WWW, - pattern SDLK_MAIL, - pattern SDLK_CALCULATOR, - pattern SDLK_COMPUTER, - pattern SDLK_AC_SEARCH, - pattern SDLK_AC_HOME, - pattern SDLK_AC_BACK, - pattern SDLK_AC_FORWARD, - pattern SDLK_AC_STOP, - pattern SDLK_AC_REFRESH, - pattern SDLK_AC_BOOKMARKS, - pattern SDLK_BRIGHTNESSDOWN, - pattern SDLK_BRIGHTNESSUP, - pattern SDLK_DISPLAYSWITCH, - pattern SDLK_KBDILLUMTOGGLE, - pattern SDLK_KBDILLUMDOWN, - pattern SDLK_KBDILLUMUP, - pattern SDLK_EJECT, - pattern SDLK_SLEEP, - - -- ** Key Modifier - Keymod, - pattern KMOD_NONE, - pattern KMOD_LSHIFT, - pattern KMOD_RSHIFT, - pattern KMOD_SHIFT, - pattern KMOD_LCTRL, - pattern KMOD_RCTRL, - pattern KMOD_CTRL, - pattern KMOD_LALT, - pattern KMOD_RALT, - pattern KMOD_ALT, - pattern KMOD_LGUI, - pattern KMOD_RGUI, - pattern KMOD_GUI, - pattern KMOD_NUM, - pattern KMOD_CAPS, - pattern KMOD_MODE, - pattern KMOD_RESERVED, - - -- ** Log Priority - LogPriority, - pattern SDL_LOG_PRIORITY_VERBOSE, - pattern SDL_LOG_PRIORITY_DEBUG, - pattern SDL_LOG_PRIORITY_INFO, - pattern SDL_LOG_PRIORITY_WARN, - pattern SDL_LOG_PRIORITY_ERROR, - pattern SDL_LOG_PRIORITY_CRITICAL, - pattern SDL_NUM_LOG_PRIORITIES, - - -- ** Power State - PowerState, - pattern SDL_POWERSTATE_UNKNOWN, - pattern SDL_POWERSTATE_ON_BATTERY, - pattern SDL_POWERSTATE_NO_BATTERY, - pattern SDL_POWERSTATE_CHARGING, - pattern SDL_POWERSTATE_CHARGED, - - -- ** Renderer Flip - RendererFlip, - pattern SDL_FLIP_NONE, - pattern SDL_FLIP_HORIZONTAL, - pattern SDL_FLIP_VERTICAL, - - -- ** Scancode - Scancode, - pattern SDL_SCANCODE_UNKNOWN, - pattern SDL_SCANCODE_A, - pattern SDL_SCANCODE_B, - pattern SDL_SCANCODE_C, - pattern SDL_SCANCODE_D, - pattern SDL_SCANCODE_E, - pattern SDL_SCANCODE_F, - pattern SDL_SCANCODE_G, - pattern SDL_SCANCODE_H, - pattern SDL_SCANCODE_I, - pattern SDL_SCANCODE_J, - pattern SDL_SCANCODE_K, - pattern SDL_SCANCODE_L, - pattern SDL_SCANCODE_M, - pattern SDL_SCANCODE_N, - pattern SDL_SCANCODE_O, - pattern SDL_SCANCODE_P, - pattern SDL_SCANCODE_Q, - pattern SDL_SCANCODE_R, - pattern SDL_SCANCODE_S, - pattern SDL_SCANCODE_T, - pattern SDL_SCANCODE_U, - pattern SDL_SCANCODE_V, - pattern SDL_SCANCODE_W, - pattern SDL_SCANCODE_X, - pattern SDL_SCANCODE_Y, - pattern SDL_SCANCODE_Z, - pattern SDL_SCANCODE_1, - pattern SDL_SCANCODE_2, - pattern SDL_SCANCODE_3, - pattern SDL_SCANCODE_4, - pattern SDL_SCANCODE_5, - pattern SDL_SCANCODE_6, - pattern SDL_SCANCODE_7, - pattern SDL_SCANCODE_8, - pattern SDL_SCANCODE_9, - pattern SDL_SCANCODE_0, - pattern SDL_SCANCODE_RETURN, - pattern SDL_SCANCODE_ESCAPE, - pattern SDL_SCANCODE_BACKSPACE, - pattern SDL_SCANCODE_TAB, - pattern SDL_SCANCODE_SPACE, - pattern SDL_SCANCODE_MINUS, - pattern SDL_SCANCODE_EQUALS, - pattern SDL_SCANCODE_LEFTBRACKET, - pattern SDL_SCANCODE_RIGHTBRACKET, - pattern SDL_SCANCODE_BACKSLASH, - pattern SDL_SCANCODE_NONUSHASH, - pattern SDL_SCANCODE_SEMICOLON, - pattern SDL_SCANCODE_APOSTROPHE, - pattern SDL_SCANCODE_GRAVE, - pattern SDL_SCANCODE_COMMA, - pattern SDL_SCANCODE_PERIOD, - pattern SDL_SCANCODE_SLASH, - pattern SDL_SCANCODE_CAPSLOCK, - pattern SDL_SCANCODE_F1, - pattern SDL_SCANCODE_F2, - pattern SDL_SCANCODE_F3, - pattern SDL_SCANCODE_F4, - pattern SDL_SCANCODE_F5, - pattern SDL_SCANCODE_F6, - pattern SDL_SCANCODE_F7, - pattern SDL_SCANCODE_F8, - pattern SDL_SCANCODE_F9, - pattern SDL_SCANCODE_F10, - pattern SDL_SCANCODE_F11, - pattern SDL_SCANCODE_F12, - pattern SDL_SCANCODE_PRINTSCREEN, - pattern SDL_SCANCODE_SCROLLLOCK, - pattern SDL_SCANCODE_PAUSE, - pattern SDL_SCANCODE_INSERT, - pattern SDL_SCANCODE_HOME, - pattern SDL_SCANCODE_PAGEUP, - pattern SDL_SCANCODE_DELETE, - pattern SDL_SCANCODE_END, - pattern SDL_SCANCODE_PAGEDOWN, - pattern SDL_SCANCODE_RIGHT, - pattern SDL_SCANCODE_LEFT, - pattern SDL_SCANCODE_DOWN, - pattern SDL_SCANCODE_UP, - pattern SDL_SCANCODE_NUMLOCKCLEAR, - pattern SDL_SCANCODE_KP_DIVIDE, - pattern SDL_SCANCODE_KP_MULTIPLY, - pattern SDL_SCANCODE_KP_MINUS, - pattern SDL_SCANCODE_KP_PLUS, - pattern SDL_SCANCODE_KP_ENTER, - pattern SDL_SCANCODE_KP_1, - pattern SDL_SCANCODE_KP_2, - pattern SDL_SCANCODE_KP_3, - pattern SDL_SCANCODE_KP_4, - pattern SDL_SCANCODE_KP_5, - pattern SDL_SCANCODE_KP_6, - pattern SDL_SCANCODE_KP_7, - pattern SDL_SCANCODE_KP_8, - pattern SDL_SCANCODE_KP_9, - pattern SDL_SCANCODE_KP_0, - pattern SDL_SCANCODE_KP_PERIOD, - pattern SDL_SCANCODE_NONUSBACKSLASH, - pattern SDL_SCANCODE_APPLICATION, - pattern SDL_SCANCODE_POWER, - pattern SDL_SCANCODE_KP_EQUALS, - pattern SDL_SCANCODE_F13, - pattern SDL_SCANCODE_F14, - pattern SDL_SCANCODE_F15, - pattern SDL_SCANCODE_F16, - pattern SDL_SCANCODE_F17, - pattern SDL_SCANCODE_F18, - pattern SDL_SCANCODE_F19, - pattern SDL_SCANCODE_F20, - pattern SDL_SCANCODE_F21, - pattern SDL_SCANCODE_F22, - pattern SDL_SCANCODE_F23, - pattern SDL_SCANCODE_F24, - pattern SDL_SCANCODE_EXECUTE, - pattern SDL_SCANCODE_HELP, - pattern SDL_SCANCODE_MENU, - pattern SDL_SCANCODE_SELECT, - pattern SDL_SCANCODE_STOP, - pattern SDL_SCANCODE_AGAIN, - pattern SDL_SCANCODE_UNDO, - pattern SDL_SCANCODE_CUT, - pattern SDL_SCANCODE_COPY, - pattern SDL_SCANCODE_PASTE, - pattern SDL_SCANCODE_FIND, - pattern SDL_SCANCODE_MUTE, - pattern SDL_SCANCODE_VOLUMEUP, - pattern SDL_SCANCODE_VOLUMEDOWN, - pattern SDL_SCANCODE_KP_COMMA, - pattern SDL_SCANCODE_KP_EQUALSAS400, - pattern SDL_SCANCODE_INTERNATIONAL1, - pattern SDL_SCANCODE_INTERNATIONAL2, - pattern SDL_SCANCODE_INTERNATIONAL3, - pattern SDL_SCANCODE_INTERNATIONAL4, - pattern SDL_SCANCODE_INTERNATIONAL5, - pattern SDL_SCANCODE_INTERNATIONAL6, - pattern SDL_SCANCODE_INTERNATIONAL7, - pattern SDL_SCANCODE_INTERNATIONAL8, - pattern SDL_SCANCODE_INTERNATIONAL9, - pattern SDL_SCANCODE_LANG1, - pattern SDL_SCANCODE_LANG2, - pattern SDL_SCANCODE_LANG3, - pattern SDL_SCANCODE_LANG4, - pattern SDL_SCANCODE_LANG5, - pattern SDL_SCANCODE_LANG6, - pattern SDL_SCANCODE_LANG7, - pattern SDL_SCANCODE_LANG8, - pattern SDL_SCANCODE_LANG9, - pattern SDL_SCANCODE_ALTERASE, - pattern SDL_SCANCODE_SYSREQ, - pattern SDL_SCANCODE_CANCEL, - pattern SDL_SCANCODE_CLEAR, - pattern SDL_SCANCODE_PRIOR, - pattern SDL_SCANCODE_RETURN2, - pattern SDL_SCANCODE_SEPARATOR, - pattern SDL_SCANCODE_OUT, - pattern SDL_SCANCODE_OPER, - pattern SDL_SCANCODE_CLEARAGAIN, - pattern SDL_SCANCODE_CRSEL, - pattern SDL_SCANCODE_EXSEL, - pattern SDL_SCANCODE_KP_00, - pattern SDL_SCANCODE_KP_000, - pattern SDL_SCANCODE_THOUSANDSSEPARATOR, - pattern SDL_SCANCODE_DECIMALSEPARATOR, - pattern SDL_SCANCODE_CURRENCYUNIT, - pattern SDL_SCANCODE_CURRENCYSUBUNIT, - pattern SDL_SCANCODE_KP_LEFTPAREN, - pattern SDL_SCANCODE_KP_RIGHTPAREN, - pattern SDL_SCANCODE_KP_LEFTBRACE, - pattern SDL_SCANCODE_KP_RIGHTBRACE, - pattern SDL_SCANCODE_KP_TAB, - pattern SDL_SCANCODE_KP_BACKSPACE, - pattern SDL_SCANCODE_KP_A, - pattern SDL_SCANCODE_KP_B, - pattern SDL_SCANCODE_KP_C, - pattern SDL_SCANCODE_KP_D, - pattern SDL_SCANCODE_KP_E, - pattern SDL_SCANCODE_KP_F, - pattern SDL_SCANCODE_KP_XOR, - pattern SDL_SCANCODE_KP_POWER, - pattern SDL_SCANCODE_KP_PERCENT, - pattern SDL_SCANCODE_KP_LESS, - pattern SDL_SCANCODE_KP_GREATER, - pattern SDL_SCANCODE_KP_AMPERSAND, - pattern SDL_SCANCODE_KP_DBLAMPERSAND, - pattern SDL_SCANCODE_KP_VERTICALBAR, - pattern SDL_SCANCODE_KP_DBLVERTICALBAR, - pattern SDL_SCANCODE_KP_COLON, - pattern SDL_SCANCODE_KP_HASH, - pattern SDL_SCANCODE_KP_SPACE, - pattern SDL_SCANCODE_KP_AT, - pattern SDL_SCANCODE_KP_EXCLAM, - pattern SDL_SCANCODE_KP_MEMSTORE, - pattern SDL_SCANCODE_KP_MEMRECALL, - pattern SDL_SCANCODE_KP_MEMCLEAR, - pattern SDL_SCANCODE_KP_MEMADD, - pattern SDL_SCANCODE_KP_MEMSUBTRACT, - pattern SDL_SCANCODE_KP_MEMMULTIPLY, - pattern SDL_SCANCODE_KP_MEMDIVIDE, - pattern SDL_SCANCODE_KP_PLUSMINUS, - pattern SDL_SCANCODE_KP_CLEAR, - pattern SDL_SCANCODE_KP_CLEARENTRY, - pattern SDL_SCANCODE_KP_BINARY, - pattern SDL_SCANCODE_KP_OCTAL, - pattern SDL_SCANCODE_KP_DECIMAL, - pattern SDL_SCANCODE_KP_HEXADECIMAL, - pattern SDL_SCANCODE_LCTRL, - pattern SDL_SCANCODE_LSHIFT, - pattern SDL_SCANCODE_LALT, - pattern SDL_SCANCODE_LGUI, - pattern SDL_SCANCODE_RCTRL, - pattern SDL_SCANCODE_RSHIFT, - pattern SDL_SCANCODE_RALT, - pattern SDL_SCANCODE_RGUI, - pattern SDL_SCANCODE_MODE, - pattern SDL_SCANCODE_AUDIONEXT, - pattern SDL_SCANCODE_AUDIOPREV, - pattern SDL_SCANCODE_AUDIOSTOP, - pattern SDL_SCANCODE_AUDIOPLAY, - pattern SDL_SCANCODE_AUDIOMUTE, - pattern SDL_SCANCODE_MEDIASELECT, - pattern SDL_SCANCODE_WWW, - pattern SDL_SCANCODE_MAIL, - pattern SDL_SCANCODE_CALCULATOR, - pattern SDL_SCANCODE_COMPUTER, - pattern SDL_SCANCODE_AC_SEARCH, - pattern SDL_SCANCODE_AC_HOME, - pattern SDL_SCANCODE_AC_BACK, - pattern SDL_SCANCODE_AC_FORWARD, - pattern SDL_SCANCODE_AC_STOP, - pattern SDL_SCANCODE_AC_REFRESH, - pattern SDL_SCANCODE_AC_BOOKMARKS, - pattern SDL_SCANCODE_BRIGHTNESSDOWN, - pattern SDL_SCANCODE_BRIGHTNESSUP, - pattern SDL_SCANCODE_DISPLAYSWITCH, - pattern SDL_SCANCODE_KBDILLUMTOGGLE, - pattern SDL_SCANCODE_KBDILLUMDOWN, - pattern SDL_SCANCODE_KBDILLUMUP, - pattern SDL_SCANCODE_EJECT, - pattern SDL_SCANCODE_SLEEP, - pattern SDL_SCANCODE_APP1, - pattern SDL_SCANCODE_APP2, - pattern SDL_NUM_SCANCODES, - - pattern SDL_SYSTEM_CURSOR_ARROW, - pattern SDL_SYSTEM_CURSOR_IBEAM, - pattern SDL_SYSTEM_CURSOR_WAIT, - - -- ** System Cursor - SystemCursor, - pattern SDL_SYSTEM_CURSOR_CROSSHAIR, - pattern SDL_SYSTEM_CURSOR_WAITARROW, - pattern SDL_SYSTEM_CURSOR_SIZENWSE, - pattern SDL_SYSTEM_CURSOR_SIZENESW, - pattern SDL_SYSTEM_CURSOR_SIZEWE, - pattern SDL_SYSTEM_CURSOR_SIZENS, - pattern SDL_SYSTEM_CURSOR_SIZEALL, - pattern SDL_SYSTEM_CURSOR_NO, - pattern SDL_SYSTEM_CURSOR_HAND, - pattern SDL_NUM_SYSTEM_CURSORS, - - -- ** Thread Priority - ThreadPriority, - pattern SDL_THREAD_PRIORITY_LOW, - pattern SDL_THREAD_PRIORITY_NORMAL, - pattern SDL_THREAD_PRIORITY_HIGH, - - -- * Miscellaneous Enumerations - -- | These enumerations are not used directly by any SDL function, thus they have a polymorphic type. - - -- ** Audio Allowed Changes - pattern SDL_AUDIO_ALLOW_FREQUENCY_CHANGE, - pattern SDL_AUDIO_ALLOW_FORMAT_CHANGE, - pattern SDL_AUDIO_ALLOW_CHANNELS_CHANGE, - pattern SDL_AUDIO_ALLOW_ANY_CHANGE, - - -- ** Mouse Buttons - pattern SDL_BUTTON_LEFT, - pattern SDL_BUTTON_MIDDLE, - pattern SDL_BUTTON_RIGHT, - pattern SDL_BUTTON_X1, - pattern SDL_BUTTON_X2, - - -- ** Mouse Button Masks - pattern SDL_BUTTON_LMASK, - pattern SDL_BUTTON_MMASK, - pattern SDL_BUTTON_RMASK, - pattern SDL_BUTTON_X1MASK, - pattern SDL_BUTTON_X2MASK, - - -- ** Event Type - pattern SDL_FIRSTEVENT, - pattern SDL_QUIT, - pattern SDL_APP_TERMINATING, - pattern SDL_APP_LOWMEMORY, - pattern SDL_APP_WILLENTERBACKGROUND, - pattern SDL_APP_DIDENTERBACKGROUND, - pattern SDL_APP_WILLENTERFOREGROUND, - pattern SDL_APP_DIDENTERFOREGROUND, - pattern SDL_WINDOWEVENT, - pattern SDL_SYSWMEVENT, - pattern SDL_KEYDOWN, - pattern SDL_KEYUP, - pattern SDL_TEXTEDITING, - pattern SDL_TEXTINPUT, - pattern SDL_MOUSEMOTION, - pattern SDL_MOUSEBUTTONDOWN, - pattern SDL_MOUSEBUTTONUP, - pattern SDL_MOUSEWHEEL, - pattern SDL_JOYAXISMOTION, - pattern SDL_JOYBALLMOTION, - pattern SDL_JOYHATMOTION, - pattern SDL_JOYBUTTONDOWN, - pattern SDL_JOYBUTTONUP, - pattern SDL_JOYDEVICEADDED, - pattern SDL_JOYDEVICEREMOVED, - pattern SDL_CONTROLLERAXISMOTION, - pattern SDL_CONTROLLERBUTTONDOWN, - pattern SDL_CONTROLLERBUTTONUP, - pattern SDL_CONTROLLERDEVICEADDED, - pattern SDL_CONTROLLERDEVICEREMOVED, - pattern SDL_CONTROLLERDEVICEREMAPPED, - pattern SDL_FINGERDOWN, - pattern SDL_FINGERUP, - pattern SDL_FINGERMOTION, - pattern SDL_DOLLARGESTURE, - pattern SDL_DOLLARRECORD, - pattern SDL_MULTIGESTURE, - pattern SDL_CLIPBOARDUPDATE, - pattern SDL_DROPFILE, - pattern SDL_USEREVENT, - pattern SDL_LASTEVENT, - - -- ** Joystick Hat Position - pattern SDL_HAT_CENTERED, - pattern SDL_HAT_UP, - pattern SDL_HAT_RIGHT, - pattern SDL_HAT_DOWN, - pattern SDL_HAT_LEFT, - pattern SDL_HAT_RIGHTUP, - pattern SDL_HAT_RIGHTDOWN, - pattern SDL_HAT_LEFTUP, - pattern SDL_HAT_LEFTDOWN, - - -- ** Key States - pattern SDL_PRESSED, - pattern SDL_RELEASED, - - -- ** Log Category - pattern SDL_LOG_CATEGORY_APPLICATION, - pattern SDL_LOG_CATEGORY_ERROR, - pattern SDL_LOG_CATEGORY_ASSERT, - pattern SDL_LOG_CATEGORY_SYSTEM, - pattern SDL_LOG_CATEGORY_AUDIO, - pattern SDL_LOG_CATEGORY_VIDEO, - pattern SDL_LOG_CATEGORY_RENDER, - pattern SDL_LOG_CATEGORY_INPUT, - pattern SDL_LOG_CATEGORY_TEST, - pattern SDL_LOG_CATEGORY_CUSTOM, - - -- ** Message Box Flags - pattern SDL_MESSAGEBOX_ERROR, - pattern SDL_MESSAGEBOX_WARNING, - pattern SDL_MESSAGEBOX_INFORMATION, - - -- ** Message Box Button Flags - pattern SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, - pattern SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, - - -- ** OpenGL Profile - pattern SDL_GL_CONTEXT_PROFILE_CORE, - pattern SDL_GL_CONTEXT_PROFILE_COMPATIBILITY, - pattern SDL_GL_CONTEXT_PROFILE_ES, - - -- ** OpenGL Context Flag - pattern SDL_GL_CONTEXT_DEBUG_FLAG, - pattern SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG, - pattern SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG, - pattern SDL_GL_CONTEXT_RESET_ISOLATION_FLAG, - - -- ** Pixel Formats - pattern SDL_PIXELFORMAT_UNKNOWN, - pattern SDL_PIXELFORMAT_INDEX1LSB, - pattern SDL_PIXELFORMAT_INDEX1MSB, - pattern SDL_PIXELFORMAT_INDEX4LSB, - pattern SDL_PIXELFORMAT_INDEX4MSB, - pattern SDL_PIXELFORMAT_INDEX8, - pattern SDL_PIXELFORMAT_RGB332, - pattern SDL_PIXELFORMAT_RGB444, - pattern SDL_PIXELFORMAT_RGB555, - pattern SDL_PIXELFORMAT_BGR555, - pattern SDL_PIXELFORMAT_ARGB4444, - pattern SDL_PIXELFORMAT_RGBA4444, - pattern SDL_PIXELFORMAT_ABGR4444, - pattern SDL_PIXELFORMAT_BGRA4444, - pattern SDL_PIXELFORMAT_ARGB1555, - pattern SDL_PIXELFORMAT_RGBA5551, - pattern SDL_PIXELFORMAT_ABGR1555, - pattern SDL_PIXELFORMAT_BGRA5551, - pattern SDL_PIXELFORMAT_RGB565, - pattern SDL_PIXELFORMAT_BGR565, - pattern SDL_PIXELFORMAT_RGB24, - pattern SDL_PIXELFORMAT_BGR24, - pattern SDL_PIXELFORMAT_RGB888, - pattern SDL_PIXELFORMAT_RGBX8888, - pattern SDL_PIXELFORMAT_BGR888, - pattern SDL_PIXELFORMAT_BGRX8888, - pattern SDL_PIXELFORMAT_ARGB8888, - pattern SDL_PIXELFORMAT_RGBA8888, - pattern SDL_PIXELFORMAT_ABGR8888, - pattern SDL_PIXELFORMAT_BGRA8888, - pattern SDL_PIXELFORMAT_ARGB2101010, - pattern SDL_PIXELFORMAT_YV12, - pattern SDL_PIXELFORMAT_IYUV, - pattern SDL_PIXELFORMAT_YUY2, - pattern SDL_PIXELFORMAT_UYVY, - pattern SDL_PIXELFORMAT_YVYU, - - -- ** Renderer Flags - pattern SDL_RENDERER_SOFTWARE, - pattern SDL_RENDERER_ACCELERATED, - pattern SDL_RENDERER_PRESENTVSYNC, - pattern SDL_RENDERER_TARGETTEXTURE, - - -- ** Texture Access - pattern SDL_TEXTUREACCESS_STATIC, - pattern SDL_TEXTUREACCESS_STREAMING, - pattern SDL_TEXTUREACCESS_TARGET, - - -- ** Texture Modulate - pattern SDL_TEXTUREMODULATE_NONE, - pattern SDL_TEXTUREMODULATE_COLOR, - pattern SDL_TEXTUREMODULATE_ALPHA, - - -- ** Touch - pattern SDL_TOUCH_MOUSEID, - - -- ** Window Event - pattern SDL_WINDOWEVENT_NONE, - pattern SDL_WINDOWEVENT_SHOWN, - pattern SDL_WINDOWEVENT_HIDDEN, - pattern SDL_WINDOWEVENT_EXPOSED, - pattern SDL_WINDOWEVENT_MOVED, - pattern SDL_WINDOWEVENT_RESIZED, - pattern SDL_WINDOWEVENT_SIZE_CHANGED, - pattern SDL_WINDOWEVENT_MINIMIZED, - pattern SDL_WINDOWEVENT_MAXIMIZED, - pattern SDL_WINDOWEVENT_RESTORED, - pattern SDL_WINDOWEVENT_ENTER, - pattern SDL_WINDOWEVENT_LEAVE, - pattern SDL_WINDOWEVENT_FOCUS_GAINED, - pattern SDL_WINDOWEVENT_FOCUS_LOST, - pattern SDL_WINDOWEVENT_CLOSE, - - -- ** Window Flags - pattern SDL_WINDOW_FULLSCREEN, - pattern SDL_WINDOW_OPENGL, - pattern SDL_WINDOW_SHOWN, - pattern SDL_WINDOW_HIDDEN, - pattern SDL_WINDOW_BORDERLESS, - pattern SDL_WINDOW_RESIZABLE, - pattern SDL_WINDOW_MINIMIZED, - pattern SDL_WINDOW_MAXIMIZED, - pattern SDL_WINDOW_INPUT_GRABBED, - pattern SDL_WINDOW_INPUT_FOCUS, - pattern SDL_WINDOW_MOUSE_FOCUS, - pattern SDL_WINDOW_FULLSCREEN_DESKTOP, - pattern SDL_WINDOW_FOREIGN, - pattern SDL_WINDOW_ALLOW_HIGHDPI, - - -- ** Window Positioning - pattern SDL_WINDOWPOS_UNDEFINED, - pattern SDL_WINDOWPOS_CENTERED, - - -- ** Haptic Event Types - pattern SDL_HAPTIC_CONSTANT -) where - -#include "SDL.h" - -import Data.Int -import Data.Word - -import Foreign.C.Types - -type AudioFormat = (#type SDL_AudioFormat) -type AudioStatus = (#type SDL_AudioStatus) -type BlendMode = (#type SDL_BlendMode) -type Endian = CInt -type EventAction = (#type SDL_eventaction) -type GameControllerAxis = (#type SDL_GameControllerAxis) -type GameControllerButton = (#type SDL_GameControllerButton) -type GLattr = (#type SDL_GLattr) -type HintPriority = (#type SDL_HintPriority) -type InitFlag = Word32 -type Keycode = (#type SDL_Keycode) -type Keymod = (#type SDL_Keymod) -type LogPriority = (#type SDL_LogPriority) -type PowerState = (#type SDL_PowerState) -type RendererFlip = (#type SDL_RendererFlip) -type Scancode = (#type SDL_Scancode) -type SystemCursor = (#type SDL_SystemCursor) -type ThreadPriority = (#type SDL_ThreadPriority) - -pattern SDL_AUDIO_S8 = (#const AUDIO_S8) :: AudioFormat -pattern SDL_AUDIO_U8 = (#const AUDIO_U8) :: AudioFormat -pattern SDL_AUDIO_S16LSB = (#const AUDIO_S16LSB) :: AudioFormat -pattern SDL_AUDIO_S16MSB = (#const AUDIO_S16MSB) :: AudioFormat -pattern SDL_AUDIO_S16SYS = (#const AUDIO_S16SYS) :: AudioFormat -pattern SDL_AUDIO_U16LSB = (#const AUDIO_U16LSB) :: AudioFormat -pattern SDL_AUDIO_U16MSB = (#const AUDIO_U16MSB) :: AudioFormat -pattern SDL_AUDIO_U16SYS = (#const AUDIO_U16SYS) :: AudioFormat -pattern SDL_AUDIO_S32LSB = (#const AUDIO_S32LSB) :: AudioFormat -pattern SDL_AUDIO_S32MSB = (#const AUDIO_S32MSB) :: AudioFormat -pattern SDL_AUDIO_S32SYS = (#const AUDIO_S32SYS) :: AudioFormat -pattern SDL_AUDIO_F32LSB = (#const AUDIO_F32LSB) :: AudioFormat -pattern SDL_AUDIO_F32MSB = (#const AUDIO_F32MSB) :: AudioFormat -pattern SDL_AUDIO_F32SYS = (#const AUDIO_F32SYS) :: AudioFormat - -pattern SDL_AUDIO_STOPPED = (#const SDL_AUDIO_STOPPED) :: AudioStatus -pattern SDL_AUDIO_PLAYING = (#const SDL_AUDIO_PLAYING) :: AudioStatus -pattern SDL_AUDIO_PAUSED = (#const SDL_AUDIO_PAUSED) :: AudioStatus - -pattern SDL_BLENDMODE_NONE = (#const SDL_BLENDMODE_NONE) :: BlendMode -pattern SDL_BLENDMODE_BLEND = (#const SDL_BLENDMODE_BLEND) :: BlendMode -pattern SDL_BLENDMODE_ADD = (#const SDL_BLENDMODE_ADD) :: BlendMode -pattern SDL_BLENDMODE_MOD = (#const SDL_BLENDMODE_MOD) :: BlendMode - -pattern SDL_BYTEORDER = (#const SDL_BYTEORDER) :: Endian -pattern SDL_LIL_ENDIAN = (#const SDL_LIL_ENDIAN) :: Endian -pattern SDL_BIG_ENDIAN = (#const SDL_BIG_ENDIAN) :: Endian - -pattern SDL_ADDEVENT = (#const SDL_ADDEVENT) :: EventAction -pattern SDL_PEEKEVENT = (#const SDL_PEEKEVENT) :: EventAction -pattern SDL_GETEVENT = (#const SDL_GETEVENT) :: EventAction - -pattern SDL_CONTROLLER_AXIS_INVALID = (#const SDL_CONTROLLER_AXIS_INVALID) :: GameControllerAxis -pattern SDL_CONTROLLER_AXIS_LEFTX = (#const SDL_CONTROLLER_AXIS_LEFTX) :: GameControllerAxis -pattern SDL_CONTROLLER_AXIS_LEFTY = (#const SDL_CONTROLLER_AXIS_LEFTY) :: GameControllerAxis -pattern SDL_CONTROLLER_AXIS_RIGHTX = (#const SDL_CONTROLLER_AXIS_RIGHTX) :: GameControllerAxis -pattern SDL_CONTROLLER_AXIS_RIGHTY = (#const SDL_CONTROLLER_AXIS_RIGHTY) :: GameControllerAxis -pattern SDL_CONTROLLER_AXIS_TRIGGERLEFT = (#const SDL_CONTROLLER_AXIS_TRIGGERLEFT) :: GameControllerAxis -pattern SDL_CONTROLLER_AXIS_TRIGGERRIGHT = (#const SDL_CONTROLLER_AXIS_TRIGGERRIGHT) :: GameControllerAxis -pattern SDL_CONTROLLER_AXIS_MAX = (#const SDL_CONTROLLER_AXIS_MAX) :: GameControllerAxis - -pattern SDL_CONTROLLER_BUTTON_INVALID = (#const SDL_CONTROLLER_BUTTON_INVALID) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_A = (#const SDL_CONTROLLER_BUTTON_A) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_B = (#const SDL_CONTROLLER_BUTTON_B) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_X = (#const SDL_CONTROLLER_BUTTON_X) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_Y = (#const SDL_CONTROLLER_BUTTON_Y) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_BACK = (#const SDL_CONTROLLER_BUTTON_BACK) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_GUIDE = (#const SDL_CONTROLLER_BUTTON_GUIDE) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_START = (#const SDL_CONTROLLER_BUTTON_START) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_LEFTSTICK = (#const SDL_CONTROLLER_BUTTON_LEFTSTICK) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_RIGHTSTICK = (#const SDL_CONTROLLER_BUTTON_RIGHTSTICK) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_LEFTSHOULDER = (#const SDL_CONTROLLER_BUTTON_LEFTSHOULDER) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_RIGHTSHOULDER = (#const SDL_CONTROLLER_BUTTON_RIGHTSHOULDER) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_DPAD_UP = (#const SDL_CONTROLLER_BUTTON_DPAD_UP) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_DPAD_DOWN = (#const SDL_CONTROLLER_BUTTON_DPAD_DOWN) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_DPAD_LEFT = (#const SDL_CONTROLLER_BUTTON_DPAD_LEFT) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_DPAD_RIGHT = (#const SDL_CONTROLLER_BUTTON_DPAD_RIGHT) :: GameControllerButton -pattern SDL_CONTROLLER_BUTTON_MAX = (#const SDL_CONTROLLER_BUTTON_MAX) :: GameControllerButton - -pattern SDL_GL_RED_SIZE = (#const SDL_GL_RED_SIZE) :: GLattr -pattern SDL_GL_GREEN_SIZE = (#const SDL_GL_GREEN_SIZE) :: GLattr -pattern SDL_GL_BLUE_SIZE = (#const SDL_GL_BLUE_SIZE) :: GLattr -pattern SDL_GL_ALPHA_SIZE = (#const SDL_GL_ALPHA_SIZE) :: GLattr -pattern SDL_GL_BUFFER_SIZE = (#const SDL_GL_BUFFER_SIZE) :: GLattr -pattern SDL_GL_DOUBLEBUFFER = (#const SDL_GL_DOUBLEBUFFER) :: GLattr -pattern SDL_GL_DEPTH_SIZE = (#const SDL_GL_DEPTH_SIZE) :: GLattr -pattern SDL_GL_STENCIL_SIZE = (#const SDL_GL_STENCIL_SIZE) :: GLattr -pattern SDL_GL_ACCUM_RED_SIZE = (#const SDL_GL_ACCUM_RED_SIZE) :: GLattr -pattern SDL_GL_ACCUM_GREEN_SIZE = (#const SDL_GL_ACCUM_GREEN_SIZE) :: GLattr -pattern SDL_GL_ACCUM_BLUE_SIZE = (#const SDL_GL_ACCUM_BLUE_SIZE) :: GLattr -pattern SDL_GL_ACCUM_ALPHA_SIZE = (#const SDL_GL_ACCUM_ALPHA_SIZE) :: GLattr -pattern SDL_GL_STEREO = (#const SDL_GL_STEREO) :: GLattr -pattern SDL_GL_MULTISAMPLEBUFFERS = (#const SDL_GL_MULTISAMPLEBUFFERS) :: GLattr -pattern SDL_GL_MULTISAMPLESAMPLES = (#const SDL_GL_MULTISAMPLESAMPLES) :: GLattr -pattern SDL_GL_ACCELERATED_VISUAL = (#const SDL_GL_ACCELERATED_VISUAL) :: GLattr -pattern SDL_GL_RETAINED_BACKING = (#const SDL_GL_RETAINED_BACKING) :: GLattr -pattern SDL_GL_CONTEXT_MAJOR_VERSION = (#const SDL_GL_CONTEXT_MAJOR_VERSION) :: GLattr -pattern SDL_GL_CONTEXT_MINOR_VERSION = (#const SDL_GL_CONTEXT_MINOR_VERSION) :: GLattr -pattern SDL_GL_CONTEXT_EGL = (#const SDL_GL_CONTEXT_EGL) :: GLattr -pattern SDL_GL_CONTEXT_FLAGS = (#const SDL_GL_CONTEXT_FLAGS) :: GLattr -pattern SDL_GL_CONTEXT_PROFILE_MASK = (#const SDL_GL_CONTEXT_PROFILE_MASK) :: GLattr -pattern SDL_GL_SHARE_WITH_CURRENT_CONTEXT = (#const SDL_GL_SHARE_WITH_CURRENT_CONTEXT) :: GLattr -pattern SDL_GL_FRAMEBUFFER_SRGB_CAPABLE = (#const SDL_GL_FRAMEBUFFER_SRGB_CAPABLE) :: GLattr - -pattern SDL_HINT_DEFAULT = (#const SDL_HINT_DEFAULT) :: HintPriority -pattern SDL_HINT_NORMAL = (#const SDL_HINT_NORMAL) :: HintPriority -pattern SDL_HINT_OVERRIDE = (#const SDL_HINT_OVERRIDE) :: HintPriority - -pattern SDL_INIT_TIMER = (#const SDL_INIT_TIMER) :: InitFlag -pattern SDL_INIT_AUDIO = (#const SDL_INIT_AUDIO) :: InitFlag -pattern SDL_INIT_VIDEO = (#const SDL_INIT_VIDEO) :: InitFlag -pattern SDL_INIT_JOYSTICK = (#const SDL_INIT_JOYSTICK) :: InitFlag -pattern SDL_INIT_HAPTIC = (#const SDL_INIT_HAPTIC) :: InitFlag -pattern SDL_INIT_GAMECONTROLLER = (#const SDL_INIT_GAMECONTROLLER) :: InitFlag -pattern SDL_INIT_EVENTS = (#const SDL_INIT_EVENTS) :: InitFlag -pattern SDL_INIT_NOPARACHUTE = (#const SDL_INIT_NOPARACHUTE) :: InitFlag -pattern SDL_INIT_EVERYTHING = (#const SDL_INIT_EVERYTHING) :: InitFlag - -pattern SDLK_UNKNOWN = (#const SDLK_UNKNOWN) :: Keycode -pattern SDLK_RETURN = (#const SDLK_RETURN) :: Keycode -pattern SDLK_ESCAPE = (#const SDLK_ESCAPE) :: Keycode -pattern SDLK_BACKSPACE = (#const SDLK_BACKSPACE) :: Keycode -pattern SDLK_TAB = (#const SDLK_TAB) :: Keycode -pattern SDLK_SPACE = (#const SDLK_SPACE) :: Keycode -pattern SDLK_EXCLAIM = (#const SDLK_EXCLAIM) :: Keycode -pattern SDLK_QUOTEDBL = (#const SDLK_QUOTEDBL) :: Keycode -pattern SDLK_HASH = (#const SDLK_HASH) :: Keycode -pattern SDLK_PERCENT = (#const SDLK_PERCENT) :: Keycode -pattern SDLK_DOLLAR = (#const SDLK_DOLLAR) :: Keycode -pattern SDLK_AMPERSAND = (#const SDLK_AMPERSAND) :: Keycode -pattern SDLK_QUOTE = (#const SDLK_QUOTE) :: Keycode -pattern SDLK_LEFTPAREN = (#const SDLK_LEFTPAREN) :: Keycode -pattern SDLK_RIGHTPAREN = (#const SDLK_RIGHTPAREN) :: Keycode -pattern SDLK_ASTERISK = (#const SDLK_ASTERISK) :: Keycode -pattern SDLK_PLUS = (#const SDLK_PLUS) :: Keycode -pattern SDLK_COMMA = (#const SDLK_COMMA) :: Keycode -pattern SDLK_MINUS = (#const SDLK_MINUS) :: Keycode -pattern SDLK_PERIOD = (#const SDLK_PERIOD) :: Keycode -pattern SDLK_SLASH = (#const SDLK_SLASH) :: Keycode -pattern SDLK_0 = (#const SDLK_0) :: Keycode -pattern SDLK_1 = (#const SDLK_1) :: Keycode -pattern SDLK_2 = (#const SDLK_2) :: Keycode -pattern SDLK_3 = (#const SDLK_3) :: Keycode -pattern SDLK_4 = (#const SDLK_4) :: Keycode -pattern SDLK_5 = (#const SDLK_5) :: Keycode -pattern SDLK_6 = (#const SDLK_6) :: Keycode -pattern SDLK_7 = (#const SDLK_7) :: Keycode -pattern SDLK_8 = (#const SDLK_8) :: Keycode -pattern SDLK_9 = (#const SDLK_9) :: Keycode -pattern SDLK_COLON = (#const SDLK_COLON) :: Keycode -pattern SDLK_SEMICOLON = (#const SDLK_SEMICOLON) :: Keycode -pattern SDLK_LESS = (#const SDLK_LESS) :: Keycode -pattern SDLK_EQUALS = (#const SDLK_EQUALS) :: Keycode -pattern SDLK_GREATER = (#const SDLK_GREATER) :: Keycode -pattern SDLK_QUESTION = (#const SDLK_QUESTION) :: Keycode -pattern SDLK_AT = (#const SDLK_AT) :: Keycode -pattern SDLK_LEFTBRACKET = (#const SDLK_LEFTBRACKET) :: Keycode -pattern SDLK_BACKSLASH = (#const SDLK_BACKSLASH) :: Keycode -pattern SDLK_RIGHTBRACKET = (#const SDLK_RIGHTBRACKET) :: Keycode -pattern SDLK_CARET = (#const SDLK_CARET) :: Keycode -pattern SDLK_UNDERSCORE = (#const SDLK_UNDERSCORE) :: Keycode -pattern SDLK_BACKQUOTE = (#const SDLK_BACKQUOTE) :: Keycode -pattern SDLK_a = (#const SDLK_a) :: Keycode -pattern SDLK_b = (#const SDLK_b) :: Keycode -pattern SDLK_c = (#const SDLK_c) :: Keycode -pattern SDLK_d = (#const SDLK_d) :: Keycode -pattern SDLK_e = (#const SDLK_e) :: Keycode -pattern SDLK_f = (#const SDLK_f) :: Keycode -pattern SDLK_g = (#const SDLK_g) :: Keycode -pattern SDLK_h = (#const SDLK_h) :: Keycode -pattern SDLK_i = (#const SDLK_i) :: Keycode -pattern SDLK_j = (#const SDLK_j) :: Keycode -pattern SDLK_k = (#const SDLK_k) :: Keycode -pattern SDLK_l = (#const SDLK_l) :: Keycode -pattern SDLK_m = (#const SDLK_m) :: Keycode -pattern SDLK_n = (#const SDLK_n) :: Keycode -pattern SDLK_o = (#const SDLK_o) :: Keycode -pattern SDLK_p = (#const SDLK_p) :: Keycode -pattern SDLK_q = (#const SDLK_q) :: Keycode -pattern SDLK_r = (#const SDLK_r) :: Keycode -pattern SDLK_s = (#const SDLK_s) :: Keycode -pattern SDLK_t = (#const SDLK_t) :: Keycode -pattern SDLK_u = (#const SDLK_u) :: Keycode -pattern SDLK_v = (#const SDLK_v) :: Keycode -pattern SDLK_w = (#const SDLK_w) :: Keycode -pattern SDLK_x = (#const SDLK_x) :: Keycode -pattern SDLK_y = (#const SDLK_y) :: Keycode -pattern SDLK_z = (#const SDLK_z) :: Keycode -pattern SDLK_CAPSLOCK = (#const SDLK_CAPSLOCK) :: Keycode -pattern SDLK_F1 = (#const SDLK_F1) :: Keycode -pattern SDLK_F2 = (#const SDLK_F2) :: Keycode -pattern SDLK_F3 = (#const SDLK_F3) :: Keycode -pattern SDLK_F4 = (#const SDLK_F4) :: Keycode -pattern SDLK_F5 = (#const SDLK_F5) :: Keycode -pattern SDLK_F6 = (#const SDLK_F6) :: Keycode -pattern SDLK_F7 = (#const SDLK_F7) :: Keycode -pattern SDLK_F8 = (#const SDLK_F8) :: Keycode -pattern SDLK_F9 = (#const SDLK_F9) :: Keycode -pattern SDLK_F10 = (#const SDLK_F10) :: Keycode -pattern SDLK_F11 = (#const SDLK_F11) :: Keycode -pattern SDLK_F12 = (#const SDLK_F12) :: Keycode -pattern SDLK_PRINTSCREEN = (#const SDLK_PRINTSCREEN) :: Keycode -pattern SDLK_SCROLLLOCK = (#const SDLK_SCROLLLOCK) :: Keycode -pattern SDLK_PAUSE = (#const SDLK_PAUSE) :: Keycode -pattern SDLK_INSERT = (#const SDLK_INSERT) :: Keycode -pattern SDLK_HOME = (#const SDLK_HOME) :: Keycode -pattern SDLK_PAGEUP = (#const SDLK_PAGEUP) :: Keycode -pattern SDLK_DELETE = (#const SDLK_DELETE) :: Keycode -pattern SDLK_END = (#const SDLK_END) :: Keycode -pattern SDLK_PAGEDOWN = (#const SDLK_PAGEDOWN) :: Keycode -pattern SDLK_RIGHT = (#const SDLK_RIGHT) :: Keycode -pattern SDLK_LEFT = (#const SDLK_LEFT) :: Keycode -pattern SDLK_DOWN = (#const SDLK_DOWN) :: Keycode -pattern SDLK_UP = (#const SDLK_UP) :: Keycode -pattern SDLK_NUMLOCKCLEAR = (#const SDLK_NUMLOCKCLEAR) :: Keycode -pattern SDLK_KP_DIVIDE = (#const SDLK_KP_DIVIDE) :: Keycode -pattern SDLK_KP_MULTIPLY = (#const SDLK_KP_MULTIPLY) :: Keycode -pattern SDLK_KP_MINUS = (#const SDLK_KP_MINUS) :: Keycode -pattern SDLK_KP_PLUS = (#const SDLK_KP_PLUS) :: Keycode -pattern SDLK_KP_ENTER = (#const SDLK_KP_ENTER) :: Keycode -pattern SDLK_KP_1 = (#const SDLK_KP_1) :: Keycode -pattern SDLK_KP_2 = (#const SDLK_KP_2) :: Keycode -pattern SDLK_KP_3 = (#const SDLK_KP_3) :: Keycode -pattern SDLK_KP_4 = (#const SDLK_KP_4) :: Keycode -pattern SDLK_KP_5 = (#const SDLK_KP_5) :: Keycode -pattern SDLK_KP_6 = (#const SDLK_KP_6) :: Keycode -pattern SDLK_KP_7 = (#const SDLK_KP_7) :: Keycode -pattern SDLK_KP_8 = (#const SDLK_KP_8) :: Keycode -pattern SDLK_KP_9 = (#const SDLK_KP_9) :: Keycode -pattern SDLK_KP_0 = (#const SDLK_KP_0) :: Keycode -pattern SDLK_KP_PERIOD = (#const SDLK_KP_PERIOD) :: Keycode -pattern SDLK_APPLICATION = (#const SDLK_APPLICATION) :: Keycode -pattern SDLK_POWER = (#const SDLK_POWER) :: Keycode -pattern SDLK_KP_EQUALS = (#const SDLK_KP_EQUALS) :: Keycode -pattern SDLK_F13 = (#const SDLK_F13) :: Keycode -pattern SDLK_F14 = (#const SDLK_F14) :: Keycode -pattern SDLK_F15 = (#const SDLK_F15) :: Keycode -pattern SDLK_F16 = (#const SDLK_F16) :: Keycode -pattern SDLK_F17 = (#const SDLK_F17) :: Keycode -pattern SDLK_F18 = (#const SDLK_F18) :: Keycode -pattern SDLK_F19 = (#const SDLK_F19) :: Keycode -pattern SDLK_F20 = (#const SDLK_F20) :: Keycode -pattern SDLK_F21 = (#const SDLK_F21) :: Keycode -pattern SDLK_F22 = (#const SDLK_F22) :: Keycode -pattern SDLK_F23 = (#const SDLK_F23) :: Keycode -pattern SDLK_F24 = (#const SDLK_F24) :: Keycode -pattern SDLK_EXECUTE = (#const SDLK_EXECUTE) :: Keycode -pattern SDLK_HELP = (#const SDLK_HELP) :: Keycode -pattern SDLK_MENU = (#const SDLK_MENU) :: Keycode -pattern SDLK_SELECT = (#const SDLK_SELECT) :: Keycode -pattern SDLK_STOP = (#const SDLK_STOP) :: Keycode -pattern SDLK_AGAIN = (#const SDLK_AGAIN) :: Keycode -pattern SDLK_UNDO = (#const SDLK_UNDO) :: Keycode -pattern SDLK_CUT = (#const SDLK_CUT) :: Keycode -pattern SDLK_COPY = (#const SDLK_COPY) :: Keycode -pattern SDLK_PASTE = (#const SDLK_PASTE) :: Keycode -pattern SDLK_FIND = (#const SDLK_FIND) :: Keycode -pattern SDLK_MUTE = (#const SDLK_MUTE) :: Keycode -pattern SDLK_VOLUMEUP = (#const SDLK_VOLUMEUP) :: Keycode -pattern SDLK_VOLUMEDOWN = (#const SDLK_VOLUMEDOWN) :: Keycode -pattern SDLK_KP_COMMA = (#const SDLK_KP_COMMA) :: Keycode -pattern SDLK_KP_EQUALSAS400 = (#const SDLK_KP_EQUALSAS400) :: Keycode -pattern SDLK_ALTERASE = (#const SDLK_ALTERASE) :: Keycode -pattern SDLK_SYSREQ = (#const SDLK_SYSREQ) :: Keycode -pattern SDLK_CANCEL = (#const SDLK_CANCEL) :: Keycode -pattern SDLK_CLEAR = (#const SDLK_CLEAR) :: Keycode -pattern SDLK_PRIOR = (#const SDLK_PRIOR) :: Keycode -pattern SDLK_RETURN2 = (#const SDLK_RETURN2) :: Keycode -pattern SDLK_SEPARATOR = (#const SDLK_SEPARATOR) :: Keycode -pattern SDLK_OUT = (#const SDLK_OUT) :: Keycode -pattern SDLK_OPER = (#const SDLK_OPER) :: Keycode -pattern SDLK_CLEARAGAIN = (#const SDLK_CLEARAGAIN) :: Keycode -pattern SDLK_CRSEL = (#const SDLK_CRSEL) :: Keycode -pattern SDLK_EXSEL = (#const SDLK_EXSEL) :: Keycode -pattern SDLK_KP_00 = (#const SDLK_KP_00) :: Keycode -pattern SDLK_KP_000 = (#const SDLK_KP_000) :: Keycode -pattern SDLK_THOUSANDSSEPARATOR = (#const SDLK_THOUSANDSSEPARATOR) :: Keycode -pattern SDLK_DECIMALSEPARATOR = (#const SDLK_DECIMALSEPARATOR) :: Keycode -pattern SDLK_CURRENCYUNIT = (#const SDLK_CURRENCYUNIT) :: Keycode -pattern SDLK_CURRENCYSUBUNIT = (#const SDLK_CURRENCYSUBUNIT) :: Keycode -pattern SDLK_KP_LEFTPAREN = (#const SDLK_KP_LEFTPAREN) :: Keycode -pattern SDLK_KP_RIGHTPAREN = (#const SDLK_KP_RIGHTPAREN) :: Keycode -pattern SDLK_KP_LEFTBRACE = (#const SDLK_KP_LEFTBRACE) :: Keycode -pattern SDLK_KP_RIGHTBRACE = (#const SDLK_KP_RIGHTBRACE) :: Keycode -pattern SDLK_KP_TAB = (#const SDLK_KP_TAB) :: Keycode -pattern SDLK_KP_BACKSPACE = (#const SDLK_KP_BACKSPACE) :: Keycode -pattern SDLK_KP_A = (#const SDLK_KP_A) :: Keycode -pattern SDLK_KP_B = (#const SDLK_KP_B) :: Keycode -pattern SDLK_KP_C = (#const SDLK_KP_C) :: Keycode -pattern SDLK_KP_D = (#const SDLK_KP_D) :: Keycode -pattern SDLK_KP_E = (#const SDLK_KP_E) :: Keycode -pattern SDLK_KP_F = (#const SDLK_KP_F) :: Keycode -pattern SDLK_KP_XOR = (#const SDLK_KP_XOR) :: Keycode -pattern SDLK_KP_POWER = (#const SDLK_KP_POWER) :: Keycode -pattern SDLK_KP_PERCENT = (#const SDLK_KP_PERCENT) :: Keycode -pattern SDLK_KP_LESS = (#const SDLK_KP_LESS) :: Keycode -pattern SDLK_KP_GREATER = (#const SDLK_KP_GREATER) :: Keycode -pattern SDLK_KP_AMPERSAND = (#const SDLK_KP_AMPERSAND) :: Keycode -pattern SDLK_KP_DBLAMPERSAND = (#const SDLK_KP_DBLAMPERSAND) :: Keycode -pattern SDLK_KP_VERTICALBAR = (#const SDLK_KP_VERTICALBAR) :: Keycode -pattern SDLK_KP_DBLVERTICALBAR = (#const SDLK_KP_DBLVERTICALBAR) :: Keycode -pattern SDLK_KP_COLON = (#const SDLK_KP_COLON) :: Keycode -pattern SDLK_KP_HASH = (#const SDLK_KP_HASH) :: Keycode -pattern SDLK_KP_SPACE = (#const SDLK_KP_SPACE) :: Keycode -pattern SDLK_KP_AT = (#const SDLK_KP_AT) :: Keycode -pattern SDLK_KP_EXCLAM = (#const SDLK_KP_EXCLAM) :: Keycode -pattern SDLK_KP_MEMSTORE = (#const SDLK_KP_MEMSTORE) :: Keycode -pattern SDLK_KP_MEMRECALL = (#const SDLK_KP_MEMRECALL) :: Keycode -pattern SDLK_KP_MEMCLEAR = (#const SDLK_KP_MEMCLEAR) :: Keycode -pattern SDLK_KP_MEMADD = (#const SDLK_KP_MEMADD) :: Keycode -pattern SDLK_KP_MEMSUBTRACT = (#const SDLK_KP_MEMSUBTRACT) :: Keycode -pattern SDLK_KP_MEMMULTIPLY = (#const SDLK_KP_MEMMULTIPLY) :: Keycode -pattern SDLK_KP_MEMDIVIDE = (#const SDLK_KP_MEMDIVIDE) :: Keycode -pattern SDLK_KP_PLUSMINUS = (#const SDLK_KP_PLUSMINUS) :: Keycode -pattern SDLK_KP_CLEAR = (#const SDLK_KP_CLEAR) :: Keycode -pattern SDLK_KP_CLEARENTRY = (#const SDLK_KP_CLEARENTRY) :: Keycode -pattern SDLK_KP_BINARY = (#const SDLK_KP_BINARY) :: Keycode -pattern SDLK_KP_OCTAL = (#const SDLK_KP_OCTAL) :: Keycode -pattern SDLK_KP_DECIMAL = (#const SDLK_KP_DECIMAL) :: Keycode -pattern SDLK_KP_HEXADECIMAL = (#const SDLK_KP_HEXADECIMAL) :: Keycode -pattern SDLK_LCTRL = (#const SDLK_LCTRL) :: Keycode -pattern SDLK_LSHIFT = (#const SDLK_LSHIFT) :: Keycode -pattern SDLK_LALT = (#const SDLK_LALT) :: Keycode -pattern SDLK_LGUI = (#const SDLK_LGUI) :: Keycode -pattern SDLK_RCTRL = (#const SDLK_RCTRL) :: Keycode -pattern SDLK_RSHIFT = (#const SDLK_RSHIFT) :: Keycode -pattern SDLK_RALT = (#const SDLK_RALT) :: Keycode -pattern SDLK_RGUI = (#const SDLK_RGUI) :: Keycode -pattern SDLK_MODE = (#const SDLK_MODE) :: Keycode -pattern SDLK_AUDIONEXT = (#const SDLK_AUDIONEXT) :: Keycode -pattern SDLK_AUDIOPREV = (#const SDLK_AUDIOPREV) :: Keycode -pattern SDLK_AUDIOSTOP = (#const SDLK_AUDIOSTOP) :: Keycode -pattern SDLK_AUDIOPLAY = (#const SDLK_AUDIOPLAY) :: Keycode -pattern SDLK_AUDIOMUTE = (#const SDLK_AUDIOMUTE) :: Keycode -pattern SDLK_MEDIASELECT = (#const SDLK_MEDIASELECT) :: Keycode -pattern SDLK_WWW = (#const SDLK_WWW) :: Keycode -pattern SDLK_MAIL = (#const SDLK_MAIL) :: Keycode -pattern SDLK_CALCULATOR = (#const SDLK_CALCULATOR) :: Keycode -pattern SDLK_COMPUTER = (#const SDLK_COMPUTER) :: Keycode -pattern SDLK_AC_SEARCH = (#const SDLK_AC_SEARCH) :: Keycode -pattern SDLK_AC_HOME = (#const SDLK_AC_HOME) :: Keycode -pattern SDLK_AC_BACK = (#const SDLK_AC_BACK) :: Keycode -pattern SDLK_AC_FORWARD = (#const SDLK_AC_FORWARD) :: Keycode -pattern SDLK_AC_STOP = (#const SDLK_AC_STOP) :: Keycode -pattern SDLK_AC_REFRESH = (#const SDLK_AC_REFRESH) :: Keycode -pattern SDLK_AC_BOOKMARKS = (#const SDLK_AC_BOOKMARKS) :: Keycode -pattern SDLK_BRIGHTNESSDOWN = (#const SDLK_BRIGHTNESSDOWN) :: Keycode -pattern SDLK_BRIGHTNESSUP = (#const SDLK_BRIGHTNESSUP) :: Keycode -pattern SDLK_DISPLAYSWITCH = (#const SDLK_DISPLAYSWITCH) :: Keycode -pattern SDLK_KBDILLUMTOGGLE = (#const SDLK_KBDILLUMTOGGLE) :: Keycode -pattern SDLK_KBDILLUMDOWN = (#const SDLK_KBDILLUMDOWN) :: Keycode -pattern SDLK_KBDILLUMUP = (#const SDLK_KBDILLUMUP) :: Keycode -pattern SDLK_EJECT = (#const SDLK_EJECT) :: Keycode -pattern SDLK_SLEEP = (#const SDLK_SLEEP) :: Keycode - -pattern KMOD_NONE = (#const KMOD_NONE) -pattern KMOD_LSHIFT = (#const KMOD_LSHIFT) -pattern KMOD_RSHIFT = (#const KMOD_RSHIFT) -pattern KMOD_SHIFT = (#const KMOD_SHIFT) -pattern KMOD_LCTRL = (#const KMOD_LCTRL) -pattern KMOD_RCTRL = (#const KMOD_RCTRL) -pattern KMOD_CTRL = (#const KMOD_CTRL) -pattern KMOD_LALT = (#const KMOD_LALT) -pattern KMOD_RALT = (#const KMOD_RALT) -pattern KMOD_ALT = (#const KMOD_ALT) -pattern KMOD_LGUI = (#const KMOD_LGUI) -pattern KMOD_RGUI = (#const KMOD_RGUI) -pattern KMOD_GUI = (#const KMOD_GUI) -pattern KMOD_NUM = (#const KMOD_NUM) -pattern KMOD_CAPS = (#const KMOD_CAPS) -pattern KMOD_MODE = (#const KMOD_MODE) -pattern KMOD_RESERVED = (#const KMOD_RESERVED) - -pattern SDL_LOG_PRIORITY_VERBOSE = (#const SDL_LOG_PRIORITY_VERBOSE) :: LogPriority -pattern SDL_LOG_PRIORITY_DEBUG = (#const SDL_LOG_PRIORITY_DEBUG) :: LogPriority -pattern SDL_LOG_PRIORITY_INFO = (#const SDL_LOG_PRIORITY_INFO) :: LogPriority -pattern SDL_LOG_PRIORITY_WARN = (#const SDL_LOG_PRIORITY_WARN) :: LogPriority -pattern SDL_LOG_PRIORITY_ERROR = (#const SDL_LOG_PRIORITY_ERROR) :: LogPriority -pattern SDL_LOG_PRIORITY_CRITICAL = (#const SDL_LOG_PRIORITY_CRITICAL) :: LogPriority -pattern SDL_NUM_LOG_PRIORITIES = (#const SDL_NUM_LOG_PRIORITIES) :: LogPriority - -pattern SDL_POWERSTATE_UNKNOWN = (#const SDL_POWERSTATE_UNKNOWN) :: PowerState -pattern SDL_POWERSTATE_ON_BATTERY = (#const SDL_POWERSTATE_ON_BATTERY) :: PowerState -pattern SDL_POWERSTATE_NO_BATTERY = (#const SDL_POWERSTATE_NO_BATTERY) :: PowerState -pattern SDL_POWERSTATE_CHARGING = (#const SDL_POWERSTATE_CHARGING) :: PowerState -pattern SDL_POWERSTATE_CHARGED = (#const SDL_POWERSTATE_CHARGED) :: PowerState - -pattern SDL_FLIP_NONE = (#const SDL_FLIP_NONE) :: RendererFlip -pattern SDL_FLIP_HORIZONTAL = (#const SDL_FLIP_HORIZONTAL) :: RendererFlip -pattern SDL_FLIP_VERTICAL = (#const SDL_FLIP_VERTICAL) :: RendererFlip - -pattern SDL_SCANCODE_UNKNOWN = (#const SDL_SCANCODE_UNKNOWN) :: Scancode -pattern SDL_SCANCODE_A = (#const SDL_SCANCODE_A) :: Scancode -pattern SDL_SCANCODE_B = (#const SDL_SCANCODE_B) :: Scancode -pattern SDL_SCANCODE_C = (#const SDL_SCANCODE_C) :: Scancode -pattern SDL_SCANCODE_D = (#const SDL_SCANCODE_D) :: Scancode -pattern SDL_SCANCODE_E = (#const SDL_SCANCODE_E) :: Scancode -pattern SDL_SCANCODE_F = (#const SDL_SCANCODE_F) :: Scancode -pattern SDL_SCANCODE_G = (#const SDL_SCANCODE_G) :: Scancode -pattern SDL_SCANCODE_H = (#const SDL_SCANCODE_H) :: Scancode -pattern SDL_SCANCODE_I = (#const SDL_SCANCODE_I) :: Scancode -pattern SDL_SCANCODE_J = (#const SDL_SCANCODE_J) :: Scancode -pattern SDL_SCANCODE_K = (#const SDL_SCANCODE_K) :: Scancode -pattern SDL_SCANCODE_L = (#const SDL_SCANCODE_L) :: Scancode -pattern SDL_SCANCODE_M = (#const SDL_SCANCODE_M) :: Scancode -pattern SDL_SCANCODE_N = (#const SDL_SCANCODE_N) :: Scancode -pattern SDL_SCANCODE_O = (#const SDL_SCANCODE_O) :: Scancode -pattern SDL_SCANCODE_P = (#const SDL_SCANCODE_P) :: Scancode -pattern SDL_SCANCODE_Q = (#const SDL_SCANCODE_Q) :: Scancode -pattern SDL_SCANCODE_R = (#const SDL_SCANCODE_R) :: Scancode -pattern SDL_SCANCODE_S = (#const SDL_SCANCODE_S) :: Scancode -pattern SDL_SCANCODE_T = (#const SDL_SCANCODE_T) :: Scancode -pattern SDL_SCANCODE_U = (#const SDL_SCANCODE_U) :: Scancode -pattern SDL_SCANCODE_V = (#const SDL_SCANCODE_V) :: Scancode -pattern SDL_SCANCODE_W = (#const SDL_SCANCODE_W) :: Scancode -pattern SDL_SCANCODE_X = (#const SDL_SCANCODE_X) :: Scancode -pattern SDL_SCANCODE_Y = (#const SDL_SCANCODE_Y) :: Scancode -pattern SDL_SCANCODE_Z = (#const SDL_SCANCODE_Z) :: Scancode -pattern SDL_SCANCODE_1 = (#const SDL_SCANCODE_1) :: Scancode -pattern SDL_SCANCODE_2 = (#const SDL_SCANCODE_2) :: Scancode -pattern SDL_SCANCODE_3 = (#const SDL_SCANCODE_3) :: Scancode -pattern SDL_SCANCODE_4 = (#const SDL_SCANCODE_4) :: Scancode -pattern SDL_SCANCODE_5 = (#const SDL_SCANCODE_5) :: Scancode -pattern SDL_SCANCODE_6 = (#const SDL_SCANCODE_6) :: Scancode -pattern SDL_SCANCODE_7 = (#const SDL_SCANCODE_7) :: Scancode -pattern SDL_SCANCODE_8 = (#const SDL_SCANCODE_8) :: Scancode -pattern SDL_SCANCODE_9 = (#const SDL_SCANCODE_9) :: Scancode -pattern SDL_SCANCODE_0 = (#const SDL_SCANCODE_0) :: Scancode -pattern SDL_SCANCODE_RETURN = (#const SDL_SCANCODE_RETURN) :: Scancode -pattern SDL_SCANCODE_ESCAPE = (#const SDL_SCANCODE_ESCAPE) :: Scancode -pattern SDL_SCANCODE_BACKSPACE = (#const SDL_SCANCODE_BACKSPACE) :: Scancode -pattern SDL_SCANCODE_TAB = (#const SDL_SCANCODE_TAB) :: Scancode -pattern SDL_SCANCODE_SPACE = (#const SDL_SCANCODE_SPACE) :: Scancode -pattern SDL_SCANCODE_MINUS = (#const SDL_SCANCODE_MINUS) :: Scancode -pattern SDL_SCANCODE_EQUALS = (#const SDL_SCANCODE_EQUALS) :: Scancode -pattern SDL_SCANCODE_LEFTBRACKET = (#const SDL_SCANCODE_LEFTBRACKET) :: Scancode -pattern SDL_SCANCODE_RIGHTBRACKET = (#const SDL_SCANCODE_RIGHTBRACKET) :: Scancode -pattern SDL_SCANCODE_BACKSLASH = (#const SDL_SCANCODE_BACKSLASH) :: Scancode -pattern SDL_SCANCODE_NONUSHASH = (#const SDL_SCANCODE_NONUSHASH) :: Scancode -pattern SDL_SCANCODE_SEMICOLON = (#const SDL_SCANCODE_SEMICOLON) :: Scancode -pattern SDL_SCANCODE_APOSTROPHE = (#const SDL_SCANCODE_APOSTROPHE) :: Scancode -pattern SDL_SCANCODE_GRAVE = (#const SDL_SCANCODE_GRAVE) :: Scancode -pattern SDL_SCANCODE_COMMA = (#const SDL_SCANCODE_COMMA) :: Scancode -pattern SDL_SCANCODE_PERIOD = (#const SDL_SCANCODE_PERIOD) :: Scancode -pattern SDL_SCANCODE_SLASH = (#const SDL_SCANCODE_SLASH) :: Scancode -pattern SDL_SCANCODE_CAPSLOCK = (#const SDL_SCANCODE_CAPSLOCK) :: Scancode -pattern SDL_SCANCODE_F1 = (#const SDL_SCANCODE_F1) :: Scancode -pattern SDL_SCANCODE_F2 = (#const SDL_SCANCODE_F2) :: Scancode -pattern SDL_SCANCODE_F3 = (#const SDL_SCANCODE_F3) :: Scancode -pattern SDL_SCANCODE_F4 = (#const SDL_SCANCODE_F4) :: Scancode -pattern SDL_SCANCODE_F5 = (#const SDL_SCANCODE_F5) :: Scancode -pattern SDL_SCANCODE_F6 = (#const SDL_SCANCODE_F6) :: Scancode -pattern SDL_SCANCODE_F7 = (#const SDL_SCANCODE_F7) :: Scancode -pattern SDL_SCANCODE_F8 = (#const SDL_SCANCODE_F8) :: Scancode -pattern SDL_SCANCODE_F9 = (#const SDL_SCANCODE_F9) :: Scancode -pattern SDL_SCANCODE_F10 = (#const SDL_SCANCODE_F10) :: Scancode -pattern SDL_SCANCODE_F11 = (#const SDL_SCANCODE_F11) :: Scancode -pattern SDL_SCANCODE_F12 = (#const SDL_SCANCODE_F12) :: Scancode -pattern SDL_SCANCODE_PRINTSCREEN = (#const SDL_SCANCODE_PRINTSCREEN) :: Scancode -pattern SDL_SCANCODE_SCROLLLOCK = (#const SDL_SCANCODE_SCROLLLOCK) :: Scancode -pattern SDL_SCANCODE_PAUSE = (#const SDL_SCANCODE_PAUSE) :: Scancode -pattern SDL_SCANCODE_INSERT = (#const SDL_SCANCODE_INSERT) :: Scancode -pattern SDL_SCANCODE_HOME = (#const SDL_SCANCODE_HOME) :: Scancode -pattern SDL_SCANCODE_PAGEUP = (#const SDL_SCANCODE_PAGEUP) :: Scancode -pattern SDL_SCANCODE_DELETE = (#const SDL_SCANCODE_DELETE) :: Scancode -pattern SDL_SCANCODE_END = (#const SDL_SCANCODE_END) :: Scancode -pattern SDL_SCANCODE_PAGEDOWN = (#const SDL_SCANCODE_PAGEDOWN) :: Scancode -pattern SDL_SCANCODE_RIGHT = (#const SDL_SCANCODE_RIGHT) :: Scancode -pattern SDL_SCANCODE_LEFT = (#const SDL_SCANCODE_LEFT) :: Scancode -pattern SDL_SCANCODE_DOWN = (#const SDL_SCANCODE_DOWN) :: Scancode -pattern SDL_SCANCODE_UP = (#const SDL_SCANCODE_UP) :: Scancode -pattern SDL_SCANCODE_NUMLOCKCLEAR = (#const SDL_SCANCODE_NUMLOCKCLEAR) :: Scancode -pattern SDL_SCANCODE_KP_DIVIDE = (#const SDL_SCANCODE_KP_DIVIDE) :: Scancode -pattern SDL_SCANCODE_KP_MULTIPLY = (#const SDL_SCANCODE_KP_MULTIPLY) :: Scancode -pattern SDL_SCANCODE_KP_MINUS = (#const SDL_SCANCODE_KP_MINUS) :: Scancode -pattern SDL_SCANCODE_KP_PLUS = (#const SDL_SCANCODE_KP_PLUS) :: Scancode -pattern SDL_SCANCODE_KP_ENTER = (#const SDL_SCANCODE_KP_ENTER) :: Scancode -pattern SDL_SCANCODE_KP_1 = (#const SDL_SCANCODE_KP_1) :: Scancode -pattern SDL_SCANCODE_KP_2 = (#const SDL_SCANCODE_KP_2) :: Scancode -pattern SDL_SCANCODE_KP_3 = (#const SDL_SCANCODE_KP_3) :: Scancode -pattern SDL_SCANCODE_KP_4 = (#const SDL_SCANCODE_KP_4) :: Scancode -pattern SDL_SCANCODE_KP_5 = (#const SDL_SCANCODE_KP_5) :: Scancode -pattern SDL_SCANCODE_KP_6 = (#const SDL_SCANCODE_KP_6) :: Scancode -pattern SDL_SCANCODE_KP_7 = (#const SDL_SCANCODE_KP_7) :: Scancode -pattern SDL_SCANCODE_KP_8 = (#const SDL_SCANCODE_KP_8) :: Scancode -pattern SDL_SCANCODE_KP_9 = (#const SDL_SCANCODE_KP_9) :: Scancode -pattern SDL_SCANCODE_KP_0 = (#const SDL_SCANCODE_KP_0) :: Scancode -pattern SDL_SCANCODE_KP_PERIOD = (#const SDL_SCANCODE_KP_PERIOD) :: Scancode -pattern SDL_SCANCODE_NONUSBACKSLASH = (#const SDL_SCANCODE_NONUSBACKSLASH) :: Scancode -pattern SDL_SCANCODE_APPLICATION = (#const SDL_SCANCODE_APPLICATION) :: Scancode -pattern SDL_SCANCODE_POWER = (#const SDL_SCANCODE_POWER) :: Scancode -pattern SDL_SCANCODE_KP_EQUALS = (#const SDL_SCANCODE_KP_EQUALS) :: Scancode -pattern SDL_SCANCODE_F13 = (#const SDL_SCANCODE_F13) :: Scancode -pattern SDL_SCANCODE_F14 = (#const SDL_SCANCODE_F14) :: Scancode -pattern SDL_SCANCODE_F15 = (#const SDL_SCANCODE_F15) :: Scancode -pattern SDL_SCANCODE_F16 = (#const SDL_SCANCODE_F16) :: Scancode -pattern SDL_SCANCODE_F17 = (#const SDL_SCANCODE_F17) :: Scancode -pattern SDL_SCANCODE_F18 = (#const SDL_SCANCODE_F18) :: Scancode -pattern SDL_SCANCODE_F19 = (#const SDL_SCANCODE_F19) :: Scancode -pattern SDL_SCANCODE_F20 = (#const SDL_SCANCODE_F20) :: Scancode -pattern SDL_SCANCODE_F21 = (#const SDL_SCANCODE_F21) :: Scancode -pattern SDL_SCANCODE_F22 = (#const SDL_SCANCODE_F22) :: Scancode -pattern SDL_SCANCODE_F23 = (#const SDL_SCANCODE_F23) :: Scancode -pattern SDL_SCANCODE_F24 = (#const SDL_SCANCODE_F24) :: Scancode -pattern SDL_SCANCODE_EXECUTE = (#const SDL_SCANCODE_EXECUTE) :: Scancode -pattern SDL_SCANCODE_HELP = (#const SDL_SCANCODE_HELP) :: Scancode -pattern SDL_SCANCODE_MENU = (#const SDL_SCANCODE_MENU) :: Scancode -pattern SDL_SCANCODE_SELECT = (#const SDL_SCANCODE_SELECT) :: Scancode -pattern SDL_SCANCODE_STOP = (#const SDL_SCANCODE_STOP) :: Scancode -pattern SDL_SCANCODE_AGAIN = (#const SDL_SCANCODE_AGAIN) :: Scancode -pattern SDL_SCANCODE_UNDO = (#const SDL_SCANCODE_UNDO) :: Scancode -pattern SDL_SCANCODE_CUT = (#const SDL_SCANCODE_CUT) :: Scancode -pattern SDL_SCANCODE_COPY = (#const SDL_SCANCODE_COPY) :: Scancode -pattern SDL_SCANCODE_PASTE = (#const SDL_SCANCODE_PASTE) :: Scancode -pattern SDL_SCANCODE_FIND = (#const SDL_SCANCODE_FIND) :: Scancode -pattern SDL_SCANCODE_MUTE = (#const SDL_SCANCODE_MUTE) :: Scancode -pattern SDL_SCANCODE_VOLUMEUP = (#const SDL_SCANCODE_VOLUMEUP) :: Scancode -pattern SDL_SCANCODE_VOLUMEDOWN = (#const SDL_SCANCODE_VOLUMEDOWN) :: Scancode -pattern SDL_SCANCODE_KP_COMMA = (#const SDL_SCANCODE_KP_COMMA) :: Scancode -pattern SDL_SCANCODE_KP_EQUALSAS400 = (#const SDL_SCANCODE_KP_EQUALSAS400) :: Scancode -pattern SDL_SCANCODE_INTERNATIONAL1 = (#const SDL_SCANCODE_INTERNATIONAL1) :: Scancode -pattern SDL_SCANCODE_INTERNATIONAL2 = (#const SDL_SCANCODE_INTERNATIONAL2) :: Scancode -pattern SDL_SCANCODE_INTERNATIONAL3 = (#const SDL_SCANCODE_INTERNATIONAL3) :: Scancode -pattern SDL_SCANCODE_INTERNATIONAL4 = (#const SDL_SCANCODE_INTERNATIONAL4) :: Scancode -pattern SDL_SCANCODE_INTERNATIONAL5 = (#const SDL_SCANCODE_INTERNATIONAL5) :: Scancode -pattern SDL_SCANCODE_INTERNATIONAL6 = (#const SDL_SCANCODE_INTERNATIONAL6) :: Scancode -pattern SDL_SCANCODE_INTERNATIONAL7 = (#const SDL_SCANCODE_INTERNATIONAL7) :: Scancode -pattern SDL_SCANCODE_INTERNATIONAL8 = (#const SDL_SCANCODE_INTERNATIONAL8) :: Scancode -pattern SDL_SCANCODE_INTERNATIONAL9 = (#const SDL_SCANCODE_INTERNATIONAL9) :: Scancode -pattern SDL_SCANCODE_LANG1 = (#const SDL_SCANCODE_LANG1) :: Scancode -pattern SDL_SCANCODE_LANG2 = (#const SDL_SCANCODE_LANG2) :: Scancode -pattern SDL_SCANCODE_LANG3 = (#const SDL_SCANCODE_LANG3) :: Scancode -pattern SDL_SCANCODE_LANG4 = (#const SDL_SCANCODE_LANG4) :: Scancode -pattern SDL_SCANCODE_LANG5 = (#const SDL_SCANCODE_LANG5) :: Scancode -pattern SDL_SCANCODE_LANG6 = (#const SDL_SCANCODE_LANG6) :: Scancode -pattern SDL_SCANCODE_LANG7 = (#const SDL_SCANCODE_LANG7) :: Scancode -pattern SDL_SCANCODE_LANG8 = (#const SDL_SCANCODE_LANG8) :: Scancode -pattern SDL_SCANCODE_LANG9 = (#const SDL_SCANCODE_LANG9) :: Scancode -pattern SDL_SCANCODE_ALTERASE = (#const SDL_SCANCODE_ALTERASE) :: Scancode -pattern SDL_SCANCODE_SYSREQ = (#const SDL_SCANCODE_SYSREQ) :: Scancode -pattern SDL_SCANCODE_CANCEL = (#const SDL_SCANCODE_CANCEL) :: Scancode -pattern SDL_SCANCODE_CLEAR = (#const SDL_SCANCODE_CLEAR) :: Scancode -pattern SDL_SCANCODE_PRIOR = (#const SDL_SCANCODE_PRIOR) :: Scancode -pattern SDL_SCANCODE_RETURN2 = (#const SDL_SCANCODE_RETURN2) :: Scancode -pattern SDL_SCANCODE_SEPARATOR = (#const SDL_SCANCODE_SEPARATOR) :: Scancode -pattern SDL_SCANCODE_OUT = (#const SDL_SCANCODE_OUT) :: Scancode -pattern SDL_SCANCODE_OPER = (#const SDL_SCANCODE_OPER) :: Scancode -pattern SDL_SCANCODE_CLEARAGAIN = (#const SDL_SCANCODE_CLEARAGAIN) :: Scancode -pattern SDL_SCANCODE_CRSEL = (#const SDL_SCANCODE_CRSEL) :: Scancode -pattern SDL_SCANCODE_EXSEL = (#const SDL_SCANCODE_EXSEL) :: Scancode -pattern SDL_SCANCODE_KP_00 = (#const SDL_SCANCODE_KP_00) :: Scancode -pattern SDL_SCANCODE_KP_000 = (#const SDL_SCANCODE_KP_000) :: Scancode -pattern SDL_SCANCODE_THOUSANDSSEPARATOR = (#const SDL_SCANCODE_THOUSANDSSEPARATOR) :: Scancode -pattern SDL_SCANCODE_DECIMALSEPARATOR = (#const SDL_SCANCODE_DECIMALSEPARATOR) :: Scancode -pattern SDL_SCANCODE_CURRENCYUNIT = (#const SDL_SCANCODE_CURRENCYUNIT) :: Scancode -pattern SDL_SCANCODE_CURRENCYSUBUNIT = (#const SDL_SCANCODE_CURRENCYSUBUNIT) :: Scancode -pattern SDL_SCANCODE_KP_LEFTPAREN = (#const SDL_SCANCODE_KP_LEFTPAREN) :: Scancode -pattern SDL_SCANCODE_KP_RIGHTPAREN = (#const SDL_SCANCODE_KP_RIGHTPAREN) :: Scancode -pattern SDL_SCANCODE_KP_LEFTBRACE = (#const SDL_SCANCODE_KP_LEFTBRACE) :: Scancode -pattern SDL_SCANCODE_KP_RIGHTBRACE = (#const SDL_SCANCODE_KP_RIGHTBRACE) :: Scancode -pattern SDL_SCANCODE_KP_TAB = (#const SDL_SCANCODE_KP_TAB) :: Scancode -pattern SDL_SCANCODE_KP_BACKSPACE = (#const SDL_SCANCODE_KP_BACKSPACE) :: Scancode -pattern SDL_SCANCODE_KP_A = (#const SDL_SCANCODE_KP_A) :: Scancode -pattern SDL_SCANCODE_KP_B = (#const SDL_SCANCODE_KP_B) :: Scancode -pattern SDL_SCANCODE_KP_C = (#const SDL_SCANCODE_KP_C) :: Scancode -pattern SDL_SCANCODE_KP_D = (#const SDL_SCANCODE_KP_D) :: Scancode -pattern SDL_SCANCODE_KP_E = (#const SDL_SCANCODE_KP_E) :: Scancode -pattern SDL_SCANCODE_KP_F = (#const SDL_SCANCODE_KP_F) :: Scancode -pattern SDL_SCANCODE_KP_XOR = (#const SDL_SCANCODE_KP_XOR) :: Scancode -pattern SDL_SCANCODE_KP_POWER = (#const SDL_SCANCODE_KP_POWER) :: Scancode -pattern SDL_SCANCODE_KP_PERCENT = (#const SDL_SCANCODE_KP_PERCENT) :: Scancode -pattern SDL_SCANCODE_KP_LESS = (#const SDL_SCANCODE_KP_LESS) :: Scancode -pattern SDL_SCANCODE_KP_GREATER = (#const SDL_SCANCODE_KP_GREATER) :: Scancode -pattern SDL_SCANCODE_KP_AMPERSAND = (#const SDL_SCANCODE_KP_AMPERSAND) :: Scancode -pattern SDL_SCANCODE_KP_DBLAMPERSAND = (#const SDL_SCANCODE_KP_DBLAMPERSAND) :: Scancode -pattern SDL_SCANCODE_KP_VERTICALBAR = (#const SDL_SCANCODE_KP_VERTICALBAR) :: Scancode -pattern SDL_SCANCODE_KP_DBLVERTICALBAR = (#const SDL_SCANCODE_KP_DBLVERTICALBAR) :: Scancode -pattern SDL_SCANCODE_KP_COLON = (#const SDL_SCANCODE_KP_COLON) :: Scancode -pattern SDL_SCANCODE_KP_HASH = (#const SDL_SCANCODE_KP_HASH) :: Scancode -pattern SDL_SCANCODE_KP_SPACE = (#const SDL_SCANCODE_KP_SPACE) :: Scancode -pattern SDL_SCANCODE_KP_AT = (#const SDL_SCANCODE_KP_AT) :: Scancode -pattern SDL_SCANCODE_KP_EXCLAM = (#const SDL_SCANCODE_KP_EXCLAM) :: Scancode -pattern SDL_SCANCODE_KP_MEMSTORE = (#const SDL_SCANCODE_KP_MEMSTORE) :: Scancode -pattern SDL_SCANCODE_KP_MEMRECALL = (#const SDL_SCANCODE_KP_MEMRECALL) :: Scancode -pattern SDL_SCANCODE_KP_MEMCLEAR = (#const SDL_SCANCODE_KP_MEMCLEAR) :: Scancode -pattern SDL_SCANCODE_KP_MEMADD = (#const SDL_SCANCODE_KP_MEMADD) :: Scancode -pattern SDL_SCANCODE_KP_MEMSUBTRACT = (#const SDL_SCANCODE_KP_MEMSUBTRACT) :: Scancode -pattern SDL_SCANCODE_KP_MEMMULTIPLY = (#const SDL_SCANCODE_KP_MEMMULTIPLY) :: Scancode -pattern SDL_SCANCODE_KP_MEMDIVIDE = (#const SDL_SCANCODE_KP_MEMDIVIDE) :: Scancode -pattern SDL_SCANCODE_KP_PLUSMINUS = (#const SDL_SCANCODE_KP_PLUSMINUS) :: Scancode -pattern SDL_SCANCODE_KP_CLEAR = (#const SDL_SCANCODE_KP_CLEAR) :: Scancode -pattern SDL_SCANCODE_KP_CLEARENTRY = (#const SDL_SCANCODE_KP_CLEARENTRY) :: Scancode -pattern SDL_SCANCODE_KP_BINARY = (#const SDL_SCANCODE_KP_BINARY) :: Scancode -pattern SDL_SCANCODE_KP_OCTAL = (#const SDL_SCANCODE_KP_OCTAL) :: Scancode -pattern SDL_SCANCODE_KP_DECIMAL = (#const SDL_SCANCODE_KP_DECIMAL) :: Scancode -pattern SDL_SCANCODE_KP_HEXADECIMAL = (#const SDL_SCANCODE_KP_HEXADECIMAL) :: Scancode -pattern SDL_SCANCODE_LCTRL = (#const SDL_SCANCODE_LCTRL) :: Scancode -pattern SDL_SCANCODE_LSHIFT = (#const SDL_SCANCODE_LSHIFT) :: Scancode -pattern SDL_SCANCODE_LALT = (#const SDL_SCANCODE_LALT) :: Scancode -pattern SDL_SCANCODE_LGUI = (#const SDL_SCANCODE_LGUI) :: Scancode -pattern SDL_SCANCODE_RCTRL = (#const SDL_SCANCODE_RCTRL) :: Scancode -pattern SDL_SCANCODE_RSHIFT = (#const SDL_SCANCODE_RSHIFT) :: Scancode -pattern SDL_SCANCODE_RALT = (#const SDL_SCANCODE_RALT) :: Scancode -pattern SDL_SCANCODE_RGUI = (#const SDL_SCANCODE_RGUI) :: Scancode -pattern SDL_SCANCODE_MODE = (#const SDL_SCANCODE_MODE) :: Scancode -pattern SDL_SCANCODE_AUDIONEXT = (#const SDL_SCANCODE_AUDIONEXT) :: Scancode -pattern SDL_SCANCODE_AUDIOPREV = (#const SDL_SCANCODE_AUDIOPREV) :: Scancode -pattern SDL_SCANCODE_AUDIOSTOP = (#const SDL_SCANCODE_AUDIOSTOP) :: Scancode -pattern SDL_SCANCODE_AUDIOPLAY = (#const SDL_SCANCODE_AUDIOPLAY) :: Scancode -pattern SDL_SCANCODE_AUDIOMUTE = (#const SDL_SCANCODE_AUDIOMUTE) :: Scancode -pattern SDL_SCANCODE_MEDIASELECT = (#const SDL_SCANCODE_MEDIASELECT) :: Scancode -pattern SDL_SCANCODE_WWW = (#const SDL_SCANCODE_WWW) :: Scancode -pattern SDL_SCANCODE_MAIL = (#const SDL_SCANCODE_MAIL) :: Scancode -pattern SDL_SCANCODE_CALCULATOR = (#const SDL_SCANCODE_CALCULATOR) :: Scancode -pattern SDL_SCANCODE_COMPUTER = (#const SDL_SCANCODE_COMPUTER) :: Scancode -pattern SDL_SCANCODE_AC_SEARCH = (#const SDL_SCANCODE_AC_SEARCH) :: Scancode -pattern SDL_SCANCODE_AC_HOME = (#const SDL_SCANCODE_AC_HOME) :: Scancode -pattern SDL_SCANCODE_AC_BACK = (#const SDL_SCANCODE_AC_BACK) :: Scancode -pattern SDL_SCANCODE_AC_FORWARD = (#const SDL_SCANCODE_AC_FORWARD) :: Scancode -pattern SDL_SCANCODE_AC_STOP = (#const SDL_SCANCODE_AC_STOP) :: Scancode -pattern SDL_SCANCODE_AC_REFRESH = (#const SDL_SCANCODE_AC_REFRESH) :: Scancode -pattern SDL_SCANCODE_AC_BOOKMARKS = (#const SDL_SCANCODE_AC_BOOKMARKS) :: Scancode -pattern SDL_SCANCODE_BRIGHTNESSDOWN = (#const SDL_SCANCODE_BRIGHTNESSDOWN) :: Scancode -pattern SDL_SCANCODE_BRIGHTNESSUP = (#const SDL_SCANCODE_BRIGHTNESSUP) :: Scancode -pattern SDL_SCANCODE_DISPLAYSWITCH = (#const SDL_SCANCODE_DISPLAYSWITCH) :: Scancode -pattern SDL_SCANCODE_KBDILLUMTOGGLE = (#const SDL_SCANCODE_KBDILLUMTOGGLE) :: Scancode -pattern SDL_SCANCODE_KBDILLUMDOWN = (#const SDL_SCANCODE_KBDILLUMDOWN) :: Scancode -pattern SDL_SCANCODE_KBDILLUMUP = (#const SDL_SCANCODE_KBDILLUMUP) :: Scancode -pattern SDL_SCANCODE_EJECT = (#const SDL_SCANCODE_EJECT) :: Scancode -pattern SDL_SCANCODE_SLEEP = (#const SDL_SCANCODE_SLEEP) :: Scancode -pattern SDL_SCANCODE_APP1 = (#const SDL_SCANCODE_APP1) :: Scancode -pattern SDL_SCANCODE_APP2 = (#const SDL_SCANCODE_APP2) :: Scancode -pattern SDL_NUM_SCANCODES = (#const SDL_NUM_SCANCODES) :: Scancode - -pattern SDL_SYSTEM_CURSOR_ARROW = (#const SDL_SYSTEM_CURSOR_ARROW) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_IBEAM = (#const SDL_SYSTEM_CURSOR_IBEAM) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_WAIT = (#const SDL_SYSTEM_CURSOR_WAIT) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_CROSSHAIR = (#const SDL_SYSTEM_CURSOR_CROSSHAIR) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_WAITARROW = (#const SDL_SYSTEM_CURSOR_WAITARROW) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_SIZENWSE = (#const SDL_SYSTEM_CURSOR_SIZENWSE) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_SIZENESW = (#const SDL_SYSTEM_CURSOR_SIZENESW) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_SIZEWE = (#const SDL_SYSTEM_CURSOR_SIZEWE) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_SIZENS = (#const SDL_SYSTEM_CURSOR_SIZENS) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_SIZEALL = (#const SDL_SYSTEM_CURSOR_SIZEALL) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_NO = (#const SDL_SYSTEM_CURSOR_NO) :: SystemCursor -pattern SDL_SYSTEM_CURSOR_HAND = (#const SDL_SYSTEM_CURSOR_HAND) :: SystemCursor -pattern SDL_NUM_SYSTEM_CURSORS = (#const SDL_NUM_SYSTEM_CURSORS) :: SystemCursor - -pattern SDL_THREAD_PRIORITY_LOW = (#const SDL_THREAD_PRIORITY_LOW) :: ThreadPriority -pattern SDL_THREAD_PRIORITY_NORMAL = (#const SDL_THREAD_PRIORITY_NORMAL) :: ThreadPriority -pattern SDL_THREAD_PRIORITY_HIGH = (#const SDL_THREAD_PRIORITY_HIGH) :: ThreadPriority - -pattern SDL_AUDIO_ALLOW_FREQUENCY_CHANGE = (#const SDL_AUDIO_ALLOW_FREQUENCY_CHANGE) -pattern SDL_AUDIO_ALLOW_FORMAT_CHANGE = (#const SDL_AUDIO_ALLOW_FORMAT_CHANGE) -pattern SDL_AUDIO_ALLOW_CHANNELS_CHANGE = (#const SDL_AUDIO_ALLOW_CHANNELS_CHANGE) -pattern SDL_AUDIO_ALLOW_ANY_CHANGE = (#const SDL_AUDIO_ALLOW_ANY_CHANGE) - -pattern SDL_BUTTON_LEFT = (#const SDL_BUTTON_LEFT) -pattern SDL_BUTTON_MIDDLE = (#const SDL_BUTTON_MIDDLE) -pattern SDL_BUTTON_RIGHT = (#const SDL_BUTTON_RIGHT) -pattern SDL_BUTTON_X1 = (#const SDL_BUTTON_X1) -pattern SDL_BUTTON_X2 = (#const SDL_BUTTON_X2) -pattern SDL_BUTTON_LMASK = (#const SDL_BUTTON_LMASK) -pattern SDL_BUTTON_MMASK = (#const SDL_BUTTON_MMASK) -pattern SDL_BUTTON_RMASK = (#const SDL_BUTTON_RMASK) -pattern SDL_BUTTON_X1MASK = (#const SDL_BUTTON_X1MASK) -pattern SDL_BUTTON_X2MASK = (#const SDL_BUTTON_X2MASK) - -pattern SDL_FIRSTEVENT = (#const SDL_FIRSTEVENT) -pattern SDL_QUIT = (#const SDL_QUIT) -pattern SDL_APP_TERMINATING = (#const SDL_APP_TERMINATING) -pattern SDL_APP_LOWMEMORY = (#const SDL_APP_LOWMEMORY) -pattern SDL_APP_WILLENTERBACKGROUND = (#const SDL_APP_WILLENTERBACKGROUND) -pattern SDL_APP_DIDENTERBACKGROUND = (#const SDL_APP_DIDENTERBACKGROUND) -pattern SDL_APP_WILLENTERFOREGROUND = (#const SDL_APP_WILLENTERFOREGROUND) -pattern SDL_APP_DIDENTERFOREGROUND = (#const SDL_APP_DIDENTERFOREGROUND) -pattern SDL_WINDOWEVENT = (#const SDL_WINDOWEVENT) -pattern SDL_SYSWMEVENT = (#const SDL_SYSWMEVENT) -pattern SDL_KEYDOWN = (#const SDL_KEYDOWN) -pattern SDL_KEYUP = (#const SDL_KEYUP) -pattern SDL_TEXTEDITING = (#const SDL_TEXTEDITING) -pattern SDL_TEXTINPUT = (#const SDL_TEXTINPUT) -pattern SDL_MOUSEMOTION = (#const SDL_MOUSEMOTION) -pattern SDL_MOUSEBUTTONDOWN = (#const SDL_MOUSEBUTTONDOWN) -pattern SDL_MOUSEBUTTONUP = (#const SDL_MOUSEBUTTONUP) -pattern SDL_MOUSEWHEEL = (#const SDL_MOUSEWHEEL) -pattern SDL_JOYAXISMOTION = (#const SDL_JOYAXISMOTION) -pattern SDL_JOYBALLMOTION = (#const SDL_JOYBALLMOTION) -pattern SDL_JOYHATMOTION = (#const SDL_JOYHATMOTION) -pattern SDL_JOYBUTTONDOWN = (#const SDL_JOYBUTTONDOWN) -pattern SDL_JOYBUTTONUP = (#const SDL_JOYBUTTONUP) -pattern SDL_JOYDEVICEADDED = (#const SDL_JOYDEVICEADDED) -pattern SDL_JOYDEVICEREMOVED = (#const SDL_JOYDEVICEREMOVED) -pattern SDL_CONTROLLERAXISMOTION = (#const SDL_CONTROLLERAXISMOTION) -pattern SDL_CONTROLLERBUTTONDOWN = (#const SDL_CONTROLLERBUTTONDOWN) -pattern SDL_CONTROLLERBUTTONUP = (#const SDL_CONTROLLERBUTTONUP) -pattern SDL_CONTROLLERDEVICEADDED = (#const SDL_CONTROLLERDEVICEADDED) -pattern SDL_CONTROLLERDEVICEREMOVED = (#const SDL_CONTROLLERDEVICEREMOVED) -pattern SDL_CONTROLLERDEVICEREMAPPED = (#const SDL_CONTROLLERDEVICEREMAPPED) -pattern SDL_FINGERDOWN = (#const SDL_FINGERDOWN) -pattern SDL_FINGERUP = (#const SDL_FINGERUP) -pattern SDL_FINGERMOTION = (#const SDL_FINGERMOTION) -pattern SDL_DOLLARGESTURE = (#const SDL_DOLLARGESTURE) -pattern SDL_DOLLARRECORD = (#const SDL_DOLLARRECORD) -pattern SDL_MULTIGESTURE = (#const SDL_MULTIGESTURE) -pattern SDL_CLIPBOARDUPDATE = (#const SDL_CLIPBOARDUPDATE) -pattern SDL_DROPFILE = (#const SDL_DROPFILE) -pattern SDL_USEREVENT = (#const SDL_USEREVENT) -pattern SDL_LASTEVENT = (#const SDL_LASTEVENT) - -pattern SDL_HAT_CENTERED = (#const SDL_HAT_CENTERED) -pattern SDL_HAT_UP = (#const SDL_HAT_UP) -pattern SDL_HAT_RIGHT = (#const SDL_HAT_RIGHT) -pattern SDL_HAT_DOWN = (#const SDL_HAT_DOWN) -pattern SDL_HAT_LEFT = (#const SDL_HAT_LEFT) -pattern SDL_HAT_RIGHTUP = (#const SDL_HAT_RIGHTUP) -pattern SDL_HAT_RIGHTDOWN = (#const SDL_HAT_RIGHTDOWN) -pattern SDL_HAT_LEFTUP = (#const SDL_HAT_LEFTUP) -pattern SDL_HAT_LEFTDOWN = (#const SDL_HAT_LEFTDOWN) - -pattern SDL_PRESSED = (#const SDL_PRESSED) -pattern SDL_RELEASED = (#const SDL_RELEASED) - -pattern SDL_LOG_CATEGORY_APPLICATION = (#const SDL_LOG_CATEGORY_APPLICATION) -pattern SDL_LOG_CATEGORY_ERROR = (#const SDL_LOG_CATEGORY_ERROR) -pattern SDL_LOG_CATEGORY_ASSERT = (#const SDL_LOG_CATEGORY_ASSERT) -pattern SDL_LOG_CATEGORY_SYSTEM = (#const SDL_LOG_CATEGORY_SYSTEM) -pattern SDL_LOG_CATEGORY_AUDIO = (#const SDL_LOG_CATEGORY_AUDIO) -pattern SDL_LOG_CATEGORY_VIDEO = (#const SDL_LOG_CATEGORY_VIDEO) -pattern SDL_LOG_CATEGORY_RENDER = (#const SDL_LOG_CATEGORY_RENDER) -pattern SDL_LOG_CATEGORY_INPUT = (#const SDL_LOG_CATEGORY_INPUT) -pattern SDL_LOG_CATEGORY_TEST = (#const SDL_LOG_CATEGORY_TEST) -pattern SDL_LOG_CATEGORY_CUSTOM = (#const SDL_LOG_CATEGORY_CUSTOM) - -pattern SDL_MESSAGEBOX_ERROR = (#const SDL_MESSAGEBOX_ERROR) -pattern SDL_MESSAGEBOX_WARNING = (#const SDL_MESSAGEBOX_WARNING) -pattern SDL_MESSAGEBOX_INFORMATION = (#const SDL_MESSAGEBOX_INFORMATION) - -pattern SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = (#const SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT) -pattern SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = (#const SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) - -pattern SDL_GL_CONTEXT_PROFILE_CORE = (#const SDL_GL_CONTEXT_PROFILE_CORE) -pattern SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = (#const SDL_GL_CONTEXT_PROFILE_COMPATIBILITY) -pattern SDL_GL_CONTEXT_PROFILE_ES = (#const SDL_GL_CONTEXT_PROFILE_ES) - -pattern SDL_GL_CONTEXT_DEBUG_FLAG = (#const SDL_GL_CONTEXT_DEBUG_FLAG) -pattern SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = (#const SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG) -pattern SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = (#const SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG) -pattern SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = (#const SDL_GL_CONTEXT_RESET_ISOLATION_FLAG) - -pattern SDL_PIXELFORMAT_UNKNOWN = (#const SDL_PIXELFORMAT_UNKNOWN) -pattern SDL_PIXELFORMAT_INDEX1LSB = (#const SDL_PIXELFORMAT_INDEX1LSB) -pattern SDL_PIXELFORMAT_INDEX1MSB = (#const SDL_PIXELFORMAT_INDEX1MSB) -pattern SDL_PIXELFORMAT_INDEX4LSB = (#const SDL_PIXELFORMAT_INDEX4LSB) -pattern SDL_PIXELFORMAT_INDEX4MSB = (#const SDL_PIXELFORMAT_INDEX4MSB) -pattern SDL_PIXELFORMAT_INDEX8 = (#const SDL_PIXELFORMAT_INDEX8) -pattern SDL_PIXELFORMAT_RGB332 = (#const SDL_PIXELFORMAT_RGB332) -pattern SDL_PIXELFORMAT_RGB444 = (#const SDL_PIXELFORMAT_RGB444) -pattern SDL_PIXELFORMAT_RGB555 = (#const SDL_PIXELFORMAT_RGB555) -pattern SDL_PIXELFORMAT_BGR555 = (#const SDL_PIXELFORMAT_BGR555) -pattern SDL_PIXELFORMAT_ARGB4444 = (#const SDL_PIXELFORMAT_ARGB4444) -pattern SDL_PIXELFORMAT_RGBA4444 = (#const SDL_PIXELFORMAT_RGBA4444) -pattern SDL_PIXELFORMAT_ABGR4444 = (#const SDL_PIXELFORMAT_ABGR4444) -pattern SDL_PIXELFORMAT_BGRA4444 = (#const SDL_PIXELFORMAT_BGRA4444) -pattern SDL_PIXELFORMAT_ARGB1555 = (#const SDL_PIXELFORMAT_ARGB1555) -pattern SDL_PIXELFORMAT_RGBA5551 = (#const SDL_PIXELFORMAT_RGBA5551) -pattern SDL_PIXELFORMAT_ABGR1555 = (#const SDL_PIXELFORMAT_ABGR1555) -pattern SDL_PIXELFORMAT_BGRA5551 = (#const SDL_PIXELFORMAT_BGRA5551) -pattern SDL_PIXELFORMAT_RGB565 = (#const SDL_PIXELFORMAT_RGB565) -pattern SDL_PIXELFORMAT_BGR565 = (#const SDL_PIXELFORMAT_BGR565) -pattern SDL_PIXELFORMAT_RGB24 = (#const SDL_PIXELFORMAT_RGB24) -pattern SDL_PIXELFORMAT_BGR24 = (#const SDL_PIXELFORMAT_BGR24) -pattern SDL_PIXELFORMAT_RGB888 = (#const SDL_PIXELFORMAT_RGB888) -pattern SDL_PIXELFORMAT_RGBX8888 = (#const SDL_PIXELFORMAT_RGBX8888) -pattern SDL_PIXELFORMAT_BGR888 = (#const SDL_PIXELFORMAT_BGR888) -pattern SDL_PIXELFORMAT_BGRX8888 = (#const SDL_PIXELFORMAT_BGRX8888) -pattern SDL_PIXELFORMAT_ARGB8888 = (#const SDL_PIXELFORMAT_ARGB8888) -pattern SDL_PIXELFORMAT_RGBA8888 = (#const SDL_PIXELFORMAT_RGBA8888) -pattern SDL_PIXELFORMAT_ABGR8888 = (#const SDL_PIXELFORMAT_ABGR8888) -pattern SDL_PIXELFORMAT_BGRA8888 = (#const SDL_PIXELFORMAT_BGRA8888) -pattern SDL_PIXELFORMAT_ARGB2101010 = (#const SDL_PIXELFORMAT_ARGB2101010) -pattern SDL_PIXELFORMAT_YV12 = (#const SDL_PIXELFORMAT_YV12) -pattern SDL_PIXELFORMAT_IYUV = (#const SDL_PIXELFORMAT_IYUV) -pattern SDL_PIXELFORMAT_YUY2 = (#const SDL_PIXELFORMAT_YUY2) -pattern SDL_PIXELFORMAT_UYVY = (#const SDL_PIXELFORMAT_UYVY) -pattern SDL_PIXELFORMAT_YVYU = (#const SDL_PIXELFORMAT_YVYU) - -pattern SDL_RENDERER_SOFTWARE = (#const SDL_RENDERER_SOFTWARE) -pattern SDL_RENDERER_ACCELERATED = (#const SDL_RENDERER_ACCELERATED) -pattern SDL_RENDERER_PRESENTVSYNC = (#const SDL_RENDERER_PRESENTVSYNC) -pattern SDL_RENDERER_TARGETTEXTURE = (#const SDL_RENDERER_TARGETTEXTURE) - -pattern SDL_TEXTUREACCESS_STATIC = (#const SDL_TEXTUREACCESS_STATIC) -pattern SDL_TEXTUREACCESS_STREAMING = (#const SDL_TEXTUREACCESS_STREAMING) -pattern SDL_TEXTUREACCESS_TARGET = (#const SDL_TEXTUREACCESS_TARGET) - -pattern SDL_TEXTUREMODULATE_NONE = (#const SDL_TEXTUREMODULATE_NONE) -pattern SDL_TEXTUREMODULATE_COLOR = (#const SDL_TEXTUREMODULATE_COLOR) -pattern SDL_TEXTUREMODULATE_ALPHA = (#const SDL_TEXTUREMODULATE_ALPHA) - -pattern SDL_TOUCH_MOUSEID = (#const SDL_TOUCH_MOUSEID) - -pattern SDL_WINDOWEVENT_NONE = (#const SDL_WINDOWEVENT_NONE) -pattern SDL_WINDOWEVENT_SHOWN = (#const SDL_WINDOWEVENT_SHOWN) -pattern SDL_WINDOWEVENT_HIDDEN = (#const SDL_WINDOWEVENT_HIDDEN) -pattern SDL_WINDOWEVENT_EXPOSED = (#const SDL_WINDOWEVENT_EXPOSED) -pattern SDL_WINDOWEVENT_MOVED = (#const SDL_WINDOWEVENT_MOVED) -pattern SDL_WINDOWEVENT_RESIZED = (#const SDL_WINDOWEVENT_RESIZED) -pattern SDL_WINDOWEVENT_SIZE_CHANGED = (#const SDL_WINDOWEVENT_SIZE_CHANGED) -pattern SDL_WINDOWEVENT_MINIMIZED = (#const SDL_WINDOWEVENT_MINIMIZED) -pattern SDL_WINDOWEVENT_MAXIMIZED = (#const SDL_WINDOWEVENT_MAXIMIZED) -pattern SDL_WINDOWEVENT_RESTORED = (#const SDL_WINDOWEVENT_RESTORED) -pattern SDL_WINDOWEVENT_ENTER = (#const SDL_WINDOWEVENT_ENTER) -pattern SDL_WINDOWEVENT_LEAVE = (#const SDL_WINDOWEVENT_LEAVE) -pattern SDL_WINDOWEVENT_FOCUS_GAINED = (#const SDL_WINDOWEVENT_FOCUS_GAINED) -pattern SDL_WINDOWEVENT_FOCUS_LOST = (#const SDL_WINDOWEVENT_FOCUS_LOST) -pattern SDL_WINDOWEVENT_CLOSE = (#const SDL_WINDOWEVENT_CLOSE) - -pattern SDL_WINDOW_FULLSCREEN = (#const SDL_WINDOW_FULLSCREEN) -pattern SDL_WINDOW_OPENGL = (#const SDL_WINDOW_OPENGL) -pattern SDL_WINDOW_SHOWN = (#const SDL_WINDOW_SHOWN) -pattern SDL_WINDOW_HIDDEN = (#const SDL_WINDOW_HIDDEN) -pattern SDL_WINDOW_BORDERLESS = (#const SDL_WINDOW_BORDERLESS) -pattern SDL_WINDOW_RESIZABLE = (#const SDL_WINDOW_RESIZABLE) -pattern SDL_WINDOW_MINIMIZED = (#const SDL_WINDOW_MINIMIZED) -pattern SDL_WINDOW_MAXIMIZED = (#const SDL_WINDOW_MAXIMIZED) -pattern SDL_WINDOW_INPUT_GRABBED = (#const SDL_WINDOW_INPUT_GRABBED) -pattern SDL_WINDOW_INPUT_FOCUS = (#const SDL_WINDOW_INPUT_FOCUS) -pattern SDL_WINDOW_MOUSE_FOCUS = (#const SDL_WINDOW_MOUSE_FOCUS) -pattern SDL_WINDOW_FULLSCREEN_DESKTOP = (#const SDL_WINDOW_FULLSCREEN_DESKTOP) -pattern SDL_WINDOW_FOREIGN = (#const SDL_WINDOW_FOREIGN) -pattern SDL_WINDOW_ALLOW_HIGHDPI = (#const SDL_WINDOW_ALLOW_HIGHDPI) - -pattern SDL_WINDOWPOS_UNDEFINED = (#const SDL_WINDOWPOS_UNDEFINED) -pattern SDL_WINDOWPOS_CENTERED = (#const SDL_WINDOWPOS_CENTERED) - -pattern SDL_HAPTIC_CONSTANT = (#const SDL_HAPTIC_CONSTANT) +{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE PatternSynonyms #-}+module SDL.Raw.Enum (+ -- * Enumerations++ -- ** Audio Format+ AudioFormat,+ pattern SDL_AUDIO_S8,+ pattern SDL_AUDIO_U8,+ pattern SDL_AUDIO_S16LSB,+ pattern SDL_AUDIO_S16MSB,+ pattern SDL_AUDIO_S16SYS,+ pattern SDL_AUDIO_U16LSB,+ pattern SDL_AUDIO_U16MSB,+ pattern SDL_AUDIO_U16SYS,+ pattern SDL_AUDIO_S32LSB,+ pattern SDL_AUDIO_S32MSB,+ pattern SDL_AUDIO_S32SYS,+ pattern SDL_AUDIO_F32LSB,+ pattern SDL_AUDIO_F32MSB,+ pattern SDL_AUDIO_F32SYS,++ -- ** Audio Status+ AudioStatus,+ pattern SDL_AUDIO_STOPPED,+ pattern SDL_AUDIO_PLAYING,+ pattern SDL_AUDIO_PAUSED,++ -- ** Blend Mode+ BlendMode,+ pattern SDL_BLENDMODE_NONE,+ pattern SDL_BLENDMODE_BLEND,+ pattern SDL_BLENDMODE_ADD,+ pattern SDL_BLENDMODE_MOD,++ -- ** Endian Detetection+ pattern SDL_BYTEORDER,+ pattern SDL_LIL_ENDIAN,+ pattern SDL_BIG_ENDIAN,++ -- ** Event Action+ EventAction,+ pattern SDL_ADDEVENT,+ pattern SDL_PEEKEVENT,+ pattern SDL_GETEVENT,++ -- ** Game Controller Axis+ GameControllerAxis,+ pattern SDL_CONTROLLER_AXIS_INVALID,+ pattern SDL_CONTROLLER_AXIS_LEFTX,+ pattern SDL_CONTROLLER_AXIS_LEFTY,+ pattern SDL_CONTROLLER_AXIS_RIGHTX,+ pattern SDL_CONTROLLER_AXIS_RIGHTY,+ pattern SDL_CONTROLLER_AXIS_TRIGGERLEFT,+ pattern SDL_CONTROLLER_AXIS_TRIGGERRIGHT,+ pattern SDL_CONTROLLER_AXIS_MAX,++ -- ** Game Controller Button+ GameControllerButton,+ pattern SDL_CONTROLLER_BUTTON_INVALID,+ pattern SDL_CONTROLLER_BUTTON_A,+ pattern SDL_CONTROLLER_BUTTON_B,+ pattern SDL_CONTROLLER_BUTTON_X,+ pattern SDL_CONTROLLER_BUTTON_Y,+ pattern SDL_CONTROLLER_BUTTON_BACK,+ pattern SDL_CONTROLLER_BUTTON_GUIDE,+ pattern SDL_CONTROLLER_BUTTON_START,+ pattern SDL_CONTROLLER_BUTTON_LEFTSTICK,+ pattern SDL_CONTROLLER_BUTTON_RIGHTSTICK,+ pattern SDL_CONTROLLER_BUTTON_LEFTSHOULDER,+ pattern SDL_CONTROLLER_BUTTON_RIGHTSHOULDER,+ pattern SDL_CONTROLLER_BUTTON_DPAD_UP,+ pattern SDL_CONTROLLER_BUTTON_DPAD_DOWN,+ pattern SDL_CONTROLLER_BUTTON_DPAD_LEFT,+ pattern SDL_CONTROLLER_BUTTON_DPAD_RIGHT,+ pattern SDL_CONTROLLER_BUTTON_MAX,++ -- ** OpenGL Attribute+ GLattr,+ pattern SDL_GL_RED_SIZE,+ pattern SDL_GL_GREEN_SIZE,+ pattern SDL_GL_BLUE_SIZE,+ pattern SDL_GL_ALPHA_SIZE,+ pattern SDL_GL_BUFFER_SIZE,+ pattern SDL_GL_DOUBLEBUFFER,+ pattern SDL_GL_DEPTH_SIZE,+ pattern SDL_GL_STENCIL_SIZE,+ pattern SDL_GL_ACCUM_RED_SIZE,+ pattern SDL_GL_ACCUM_GREEN_SIZE,+ pattern SDL_GL_ACCUM_BLUE_SIZE,+ pattern SDL_GL_ACCUM_ALPHA_SIZE,+ pattern SDL_GL_STEREO,+ pattern SDL_GL_MULTISAMPLEBUFFERS,+ pattern SDL_GL_MULTISAMPLESAMPLES,+ pattern SDL_GL_ACCELERATED_VISUAL,+ pattern SDL_GL_RETAINED_BACKING,+ pattern SDL_GL_CONTEXT_MAJOR_VERSION,+ pattern SDL_GL_CONTEXT_MINOR_VERSION,+ pattern SDL_GL_CONTEXT_EGL,+ pattern SDL_GL_CONTEXT_FLAGS,+ pattern SDL_GL_CONTEXT_PROFILE_MASK,+ pattern SDL_GL_SHARE_WITH_CURRENT_CONTEXT,+ pattern SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,++ -- ** Hint Priority+ HintPriority,+ pattern SDL_HINT_DEFAULT,+ pattern SDL_HINT_NORMAL,+ pattern SDL_HINT_OVERRIDE,++ -- ** Initialization Flag+ InitFlag,+ pattern SDL_INIT_TIMER,+ pattern SDL_INIT_AUDIO,+ pattern SDL_INIT_VIDEO,+ pattern SDL_INIT_JOYSTICK,+ pattern SDL_INIT_HAPTIC,+ pattern SDL_INIT_GAMECONTROLLER,+ pattern SDL_INIT_EVENTS,+ pattern SDL_INIT_NOPARACHUTE,+ pattern SDL_INIT_EVERYTHING,++ -- ** Keycode+ Keycode,+ pattern SDLK_UNKNOWN,+ pattern SDLK_RETURN,+ pattern SDLK_ESCAPE,+ pattern SDLK_BACKSPACE,+ pattern SDLK_TAB,+ pattern SDLK_SPACE,+ pattern SDLK_EXCLAIM,+ pattern SDLK_QUOTEDBL,+ pattern SDLK_HASH,+ pattern SDLK_PERCENT,+ pattern SDLK_DOLLAR,+ pattern SDLK_AMPERSAND,+ pattern SDLK_QUOTE,+ pattern SDLK_LEFTPAREN,+ pattern SDLK_RIGHTPAREN,+ pattern SDLK_ASTERISK,+ pattern SDLK_PLUS,+ pattern SDLK_COMMA,+ pattern SDLK_MINUS,+ pattern SDLK_PERIOD,+ pattern SDLK_SLASH,+ pattern SDLK_0,+ pattern SDLK_1,+ pattern SDLK_2,+ pattern SDLK_3,+ pattern SDLK_4,+ pattern SDLK_5,+ pattern SDLK_6,+ pattern SDLK_7,+ pattern SDLK_8,+ pattern SDLK_9,+ pattern SDLK_COLON,+ pattern SDLK_SEMICOLON,+ pattern SDLK_LESS,+ pattern SDLK_EQUALS,+ pattern SDLK_GREATER,+ pattern SDLK_QUESTION,+ pattern SDLK_AT,+ pattern SDLK_LEFTBRACKET,+ pattern SDLK_BACKSLASH,+ pattern SDLK_RIGHTBRACKET,+ pattern SDLK_CARET,+ pattern SDLK_UNDERSCORE,+ pattern SDLK_BACKQUOTE,+ pattern SDLK_a,+ pattern SDLK_b,+ pattern SDLK_c,+ pattern SDLK_d,+ pattern SDLK_e,+ pattern SDLK_f,+ pattern SDLK_g,+ pattern SDLK_h,+ pattern SDLK_i,+ pattern SDLK_j,+ pattern SDLK_k,+ pattern SDLK_l,+ pattern SDLK_m,+ pattern SDLK_n,+ pattern SDLK_o,+ pattern SDLK_p,+ pattern SDLK_q,+ pattern SDLK_r,+ pattern SDLK_s,+ pattern SDLK_t,+ pattern SDLK_u,+ pattern SDLK_v,+ pattern SDLK_w,+ pattern SDLK_x,+ pattern SDLK_y,+ pattern SDLK_z,+ pattern SDLK_CAPSLOCK,+ pattern SDLK_F1,+ pattern SDLK_F2,+ pattern SDLK_F3,+ pattern SDLK_F4,+ pattern SDLK_F5,+ pattern SDLK_F6,+ pattern SDLK_F7,+ pattern SDLK_F8,+ pattern SDLK_F9,+ pattern SDLK_F10,+ pattern SDLK_F11,+ pattern SDLK_F12,+ pattern SDLK_PRINTSCREEN,+ pattern SDLK_SCROLLLOCK,+ pattern SDLK_PAUSE,+ pattern SDLK_INSERT,+ pattern SDLK_HOME,+ pattern SDLK_PAGEUP,+ pattern SDLK_DELETE,+ pattern SDLK_END,+ pattern SDLK_PAGEDOWN,+ pattern SDLK_RIGHT,+ pattern SDLK_LEFT,+ pattern SDLK_DOWN,+ pattern SDLK_UP,+ pattern SDLK_NUMLOCKCLEAR,+ pattern SDLK_KP_DIVIDE,+ pattern SDLK_KP_MULTIPLY,+ pattern SDLK_KP_MINUS,+ pattern SDLK_KP_PLUS,+ pattern SDLK_KP_ENTER,+ pattern SDLK_KP_1,+ pattern SDLK_KP_2,+ pattern SDLK_KP_3,+ pattern SDLK_KP_4,+ pattern SDLK_KP_5,+ pattern SDLK_KP_6,+ pattern SDLK_KP_7,+ pattern SDLK_KP_8,+ pattern SDLK_KP_9,+ pattern SDLK_KP_0,+ pattern SDLK_KP_PERIOD,+ pattern SDLK_APPLICATION,+ pattern SDLK_POWER,+ pattern SDLK_KP_EQUALS,+ pattern SDLK_F13,+ pattern SDLK_F14,+ pattern SDLK_F15,+ pattern SDLK_F16,+ pattern SDLK_F17,+ pattern SDLK_F18,+ pattern SDLK_F19,+ pattern SDLK_F20,+ pattern SDLK_F21,+ pattern SDLK_F22,+ pattern SDLK_F23,+ pattern SDLK_F24,+ pattern SDLK_EXECUTE,+ pattern SDLK_HELP,+ pattern SDLK_MENU,+ pattern SDLK_SELECT,+ pattern SDLK_STOP,+ pattern SDLK_AGAIN,+ pattern SDLK_UNDO,+ pattern SDLK_CUT,+ pattern SDLK_COPY,+ pattern SDLK_PASTE,+ pattern SDLK_FIND,+ pattern SDLK_MUTE,+ pattern SDLK_VOLUMEUP,+ pattern SDLK_VOLUMEDOWN,+ pattern SDLK_KP_COMMA,+ pattern SDLK_KP_EQUALSAS400,+ pattern SDLK_ALTERASE,+ pattern SDLK_SYSREQ,+ pattern SDLK_CANCEL,+ pattern SDLK_CLEAR,+ pattern SDLK_PRIOR,+ pattern SDLK_RETURN2,+ pattern SDLK_SEPARATOR,+ pattern SDLK_OUT,+ pattern SDLK_OPER,+ pattern SDLK_CLEARAGAIN,+ pattern SDLK_CRSEL,+ pattern SDLK_EXSEL,+ pattern SDLK_KP_00,+ pattern SDLK_KP_000,+ pattern SDLK_THOUSANDSSEPARATOR,+ pattern SDLK_DECIMALSEPARATOR,+ pattern SDLK_CURRENCYUNIT,+ pattern SDLK_CURRENCYSUBUNIT,+ pattern SDLK_KP_LEFTPAREN,+ pattern SDLK_KP_RIGHTPAREN,+ pattern SDLK_KP_LEFTBRACE,+ pattern SDLK_KP_RIGHTBRACE,+ pattern SDLK_KP_TAB,+ pattern SDLK_KP_BACKSPACE,+ pattern SDLK_KP_A,+ pattern SDLK_KP_B,+ pattern SDLK_KP_C,+ pattern SDLK_KP_D,+ pattern SDLK_KP_E,+ pattern SDLK_KP_F,+ pattern SDLK_KP_XOR,+ pattern SDLK_KP_POWER,+ pattern SDLK_KP_PERCENT,+ pattern SDLK_KP_LESS,+ pattern SDLK_KP_GREATER,+ pattern SDLK_KP_AMPERSAND,+ pattern SDLK_KP_DBLAMPERSAND,+ pattern SDLK_KP_VERTICALBAR,+ pattern SDLK_KP_DBLVERTICALBAR,+ pattern SDLK_KP_COLON,+ pattern SDLK_KP_HASH,+ pattern SDLK_KP_SPACE,+ pattern SDLK_KP_AT,+ pattern SDLK_KP_EXCLAM,+ pattern SDLK_KP_MEMSTORE,+ pattern SDLK_KP_MEMRECALL,+ pattern SDLK_KP_MEMCLEAR,+ pattern SDLK_KP_MEMADD,+ pattern SDLK_KP_MEMSUBTRACT,+ pattern SDLK_KP_MEMMULTIPLY,+ pattern SDLK_KP_MEMDIVIDE,+ pattern SDLK_KP_PLUSMINUS,+ pattern SDLK_KP_CLEAR,+ pattern SDLK_KP_CLEARENTRY,+ pattern SDLK_KP_BINARY,+ pattern SDLK_KP_OCTAL,+ pattern SDLK_KP_DECIMAL,+ pattern SDLK_KP_HEXADECIMAL,+ pattern SDLK_LCTRL,+ pattern SDLK_LSHIFT,+ pattern SDLK_LALT,+ pattern SDLK_LGUI,+ pattern SDLK_RCTRL,+ pattern SDLK_RSHIFT,+ pattern SDLK_RALT,+ pattern SDLK_RGUI,+ pattern SDLK_MODE,+ pattern SDLK_AUDIONEXT,+ pattern SDLK_AUDIOPREV,+ pattern SDLK_AUDIOSTOP,+ pattern SDLK_AUDIOPLAY,+ pattern SDLK_AUDIOMUTE,+ pattern SDLK_MEDIASELECT,+ pattern SDLK_WWW,+ pattern SDLK_MAIL,+ pattern SDLK_CALCULATOR,+ pattern SDLK_COMPUTER,+ pattern SDLK_AC_SEARCH,+ pattern SDLK_AC_HOME,+ pattern SDLK_AC_BACK,+ pattern SDLK_AC_FORWARD,+ pattern SDLK_AC_STOP,+ pattern SDLK_AC_REFRESH,+ pattern SDLK_AC_BOOKMARKS,+ pattern SDLK_BRIGHTNESSDOWN,+ pattern SDLK_BRIGHTNESSUP,+ pattern SDLK_DISPLAYSWITCH,+ pattern SDLK_KBDILLUMTOGGLE,+ pattern SDLK_KBDILLUMDOWN,+ pattern SDLK_KBDILLUMUP,+ pattern SDLK_EJECT,+ pattern SDLK_SLEEP,++ -- ** Key Modifier+ Keymod,+ pattern KMOD_NONE,+ pattern KMOD_LSHIFT,+ pattern KMOD_RSHIFT,+ pattern KMOD_SHIFT,+ pattern KMOD_LCTRL,+ pattern KMOD_RCTRL,+ pattern KMOD_CTRL,+ pattern KMOD_LALT,+ pattern KMOD_RALT,+ pattern KMOD_ALT,+ pattern KMOD_LGUI,+ pattern KMOD_RGUI,+ pattern KMOD_GUI,+ pattern KMOD_NUM,+ pattern KMOD_CAPS,+ pattern KMOD_MODE,+ pattern KMOD_RESERVED,++ -- ** Log Priority+ LogPriority,+ pattern SDL_LOG_PRIORITY_VERBOSE,+ pattern SDL_LOG_PRIORITY_DEBUG,+ pattern SDL_LOG_PRIORITY_INFO,+ pattern SDL_LOG_PRIORITY_WARN,+ pattern SDL_LOG_PRIORITY_ERROR,+ pattern SDL_LOG_PRIORITY_CRITICAL,+ pattern SDL_NUM_LOG_PRIORITIES,++ -- ** Power State+ PowerState,+ pattern SDL_POWERSTATE_UNKNOWN,+ pattern SDL_POWERSTATE_ON_BATTERY,+ pattern SDL_POWERSTATE_NO_BATTERY,+ pattern SDL_POWERSTATE_CHARGING,+ pattern SDL_POWERSTATE_CHARGED,++ -- ** Renderer Flip+ RendererFlip,+ pattern SDL_FLIP_NONE,+ pattern SDL_FLIP_HORIZONTAL,+ pattern SDL_FLIP_VERTICAL,++ -- ** Scancode+ Scancode,+ pattern SDL_SCANCODE_UNKNOWN,+ pattern SDL_SCANCODE_A,+ pattern SDL_SCANCODE_B,+ pattern SDL_SCANCODE_C,+ pattern SDL_SCANCODE_D,+ pattern SDL_SCANCODE_E,+ pattern SDL_SCANCODE_F,+ pattern SDL_SCANCODE_G,+ pattern SDL_SCANCODE_H,+ pattern SDL_SCANCODE_I,+ pattern SDL_SCANCODE_J,+ pattern SDL_SCANCODE_K,+ pattern SDL_SCANCODE_L,+ pattern SDL_SCANCODE_M,+ pattern SDL_SCANCODE_N,+ pattern SDL_SCANCODE_O,+ pattern SDL_SCANCODE_P,+ pattern SDL_SCANCODE_Q,+ pattern SDL_SCANCODE_R,+ pattern SDL_SCANCODE_S,+ pattern SDL_SCANCODE_T,+ pattern SDL_SCANCODE_U,+ pattern SDL_SCANCODE_V,+ pattern SDL_SCANCODE_W,+ pattern SDL_SCANCODE_X,+ pattern SDL_SCANCODE_Y,+ pattern SDL_SCANCODE_Z,+ pattern SDL_SCANCODE_1,+ pattern SDL_SCANCODE_2,+ pattern SDL_SCANCODE_3,+ pattern SDL_SCANCODE_4,+ pattern SDL_SCANCODE_5,+ pattern SDL_SCANCODE_6,+ pattern SDL_SCANCODE_7,+ pattern SDL_SCANCODE_8,+ pattern SDL_SCANCODE_9,+ pattern SDL_SCANCODE_0,+ pattern SDL_SCANCODE_RETURN,+ pattern SDL_SCANCODE_ESCAPE,+ pattern SDL_SCANCODE_BACKSPACE,+ pattern SDL_SCANCODE_TAB,+ pattern SDL_SCANCODE_SPACE,+ pattern SDL_SCANCODE_MINUS,+ pattern SDL_SCANCODE_EQUALS,+ pattern SDL_SCANCODE_LEFTBRACKET,+ pattern SDL_SCANCODE_RIGHTBRACKET,+ pattern SDL_SCANCODE_BACKSLASH,+ pattern SDL_SCANCODE_NONUSHASH,+ pattern SDL_SCANCODE_SEMICOLON,+ pattern SDL_SCANCODE_APOSTROPHE,+ pattern SDL_SCANCODE_GRAVE,+ pattern SDL_SCANCODE_COMMA,+ pattern SDL_SCANCODE_PERIOD,+ pattern SDL_SCANCODE_SLASH,+ pattern SDL_SCANCODE_CAPSLOCK,+ pattern SDL_SCANCODE_F1,+ pattern SDL_SCANCODE_F2,+ pattern SDL_SCANCODE_F3,+ pattern SDL_SCANCODE_F4,+ pattern SDL_SCANCODE_F5,+ pattern SDL_SCANCODE_F6,+ pattern SDL_SCANCODE_F7,+ pattern SDL_SCANCODE_F8,+ pattern SDL_SCANCODE_F9,+ pattern SDL_SCANCODE_F10,+ pattern SDL_SCANCODE_F11,+ pattern SDL_SCANCODE_F12,+ pattern SDL_SCANCODE_PRINTSCREEN,+ pattern SDL_SCANCODE_SCROLLLOCK,+ pattern SDL_SCANCODE_PAUSE,+ pattern SDL_SCANCODE_INSERT,+ pattern SDL_SCANCODE_HOME,+ pattern SDL_SCANCODE_PAGEUP,+ pattern SDL_SCANCODE_DELETE,+ pattern SDL_SCANCODE_END,+ pattern SDL_SCANCODE_PAGEDOWN,+ pattern SDL_SCANCODE_RIGHT,+ pattern SDL_SCANCODE_LEFT,+ pattern SDL_SCANCODE_DOWN,+ pattern SDL_SCANCODE_UP,+ pattern SDL_SCANCODE_NUMLOCKCLEAR,+ pattern SDL_SCANCODE_KP_DIVIDE,+ pattern SDL_SCANCODE_KP_MULTIPLY,+ pattern SDL_SCANCODE_KP_MINUS,+ pattern SDL_SCANCODE_KP_PLUS,+ pattern SDL_SCANCODE_KP_ENTER,+ pattern SDL_SCANCODE_KP_1,+ pattern SDL_SCANCODE_KP_2,+ pattern SDL_SCANCODE_KP_3,+ pattern SDL_SCANCODE_KP_4,+ pattern SDL_SCANCODE_KP_5,+ pattern SDL_SCANCODE_KP_6,+ pattern SDL_SCANCODE_KP_7,+ pattern SDL_SCANCODE_KP_8,+ pattern SDL_SCANCODE_KP_9,+ pattern SDL_SCANCODE_KP_0,+ pattern SDL_SCANCODE_KP_PERIOD,+ pattern SDL_SCANCODE_NONUSBACKSLASH,+ pattern SDL_SCANCODE_APPLICATION,+ pattern SDL_SCANCODE_POWER,+ pattern SDL_SCANCODE_KP_EQUALS,+ pattern SDL_SCANCODE_F13,+ pattern SDL_SCANCODE_F14,+ pattern SDL_SCANCODE_F15,+ pattern SDL_SCANCODE_F16,+ pattern SDL_SCANCODE_F17,+ pattern SDL_SCANCODE_F18,+ pattern SDL_SCANCODE_F19,+ pattern SDL_SCANCODE_F20,+ pattern SDL_SCANCODE_F21,+ pattern SDL_SCANCODE_F22,+ pattern SDL_SCANCODE_F23,+ pattern SDL_SCANCODE_F24,+ pattern SDL_SCANCODE_EXECUTE,+ pattern SDL_SCANCODE_HELP,+ pattern SDL_SCANCODE_MENU,+ pattern SDL_SCANCODE_SELECT,+ pattern SDL_SCANCODE_STOP,+ pattern SDL_SCANCODE_AGAIN,+ pattern SDL_SCANCODE_UNDO,+ pattern SDL_SCANCODE_CUT,+ pattern SDL_SCANCODE_COPY,+ pattern SDL_SCANCODE_PASTE,+ pattern SDL_SCANCODE_FIND,+ pattern SDL_SCANCODE_MUTE,+ pattern SDL_SCANCODE_VOLUMEUP,+ pattern SDL_SCANCODE_VOLUMEDOWN,+ pattern SDL_SCANCODE_KP_COMMA,+ pattern SDL_SCANCODE_KP_EQUALSAS400,+ pattern SDL_SCANCODE_INTERNATIONAL1,+ pattern SDL_SCANCODE_INTERNATIONAL2,+ pattern SDL_SCANCODE_INTERNATIONAL3,+ pattern SDL_SCANCODE_INTERNATIONAL4,+ pattern SDL_SCANCODE_INTERNATIONAL5,+ pattern SDL_SCANCODE_INTERNATIONAL6,+ pattern SDL_SCANCODE_INTERNATIONAL7,+ pattern SDL_SCANCODE_INTERNATIONAL8,+ pattern SDL_SCANCODE_INTERNATIONAL9,+ pattern SDL_SCANCODE_LANG1,+ pattern SDL_SCANCODE_LANG2,+ pattern SDL_SCANCODE_LANG3,+ pattern SDL_SCANCODE_LANG4,+ pattern SDL_SCANCODE_LANG5,+ pattern SDL_SCANCODE_LANG6,+ pattern SDL_SCANCODE_LANG7,+ pattern SDL_SCANCODE_LANG8,+ pattern SDL_SCANCODE_LANG9,+ pattern SDL_SCANCODE_ALTERASE,+ pattern SDL_SCANCODE_SYSREQ,+ pattern SDL_SCANCODE_CANCEL,+ pattern SDL_SCANCODE_CLEAR,+ pattern SDL_SCANCODE_PRIOR,+ pattern SDL_SCANCODE_RETURN2,+ pattern SDL_SCANCODE_SEPARATOR,+ pattern SDL_SCANCODE_OUT,+ pattern SDL_SCANCODE_OPER,+ pattern SDL_SCANCODE_CLEARAGAIN,+ pattern SDL_SCANCODE_CRSEL,+ pattern SDL_SCANCODE_EXSEL,+ pattern SDL_SCANCODE_KP_00,+ pattern SDL_SCANCODE_KP_000,+ pattern SDL_SCANCODE_THOUSANDSSEPARATOR,+ pattern SDL_SCANCODE_DECIMALSEPARATOR,+ pattern SDL_SCANCODE_CURRENCYUNIT,+ pattern SDL_SCANCODE_CURRENCYSUBUNIT,+ pattern SDL_SCANCODE_KP_LEFTPAREN,+ pattern SDL_SCANCODE_KP_RIGHTPAREN,+ pattern SDL_SCANCODE_KP_LEFTBRACE,+ pattern SDL_SCANCODE_KP_RIGHTBRACE,+ pattern SDL_SCANCODE_KP_TAB,+ pattern SDL_SCANCODE_KP_BACKSPACE,+ pattern SDL_SCANCODE_KP_A,+ pattern SDL_SCANCODE_KP_B,+ pattern SDL_SCANCODE_KP_C,+ pattern SDL_SCANCODE_KP_D,+ pattern SDL_SCANCODE_KP_E,+ pattern SDL_SCANCODE_KP_F,+ pattern SDL_SCANCODE_KP_XOR,+ pattern SDL_SCANCODE_KP_POWER,+ pattern SDL_SCANCODE_KP_PERCENT,+ pattern SDL_SCANCODE_KP_LESS,+ pattern SDL_SCANCODE_KP_GREATER,+ pattern SDL_SCANCODE_KP_AMPERSAND,+ pattern SDL_SCANCODE_KP_DBLAMPERSAND,+ pattern SDL_SCANCODE_KP_VERTICALBAR,+ pattern SDL_SCANCODE_KP_DBLVERTICALBAR,+ pattern SDL_SCANCODE_KP_COLON,+ pattern SDL_SCANCODE_KP_HASH,+ pattern SDL_SCANCODE_KP_SPACE,+ pattern SDL_SCANCODE_KP_AT,+ pattern SDL_SCANCODE_KP_EXCLAM,+ pattern SDL_SCANCODE_KP_MEMSTORE,+ pattern SDL_SCANCODE_KP_MEMRECALL,+ pattern SDL_SCANCODE_KP_MEMCLEAR,+ pattern SDL_SCANCODE_KP_MEMADD,+ pattern SDL_SCANCODE_KP_MEMSUBTRACT,+ pattern SDL_SCANCODE_KP_MEMMULTIPLY,+ pattern SDL_SCANCODE_KP_MEMDIVIDE,+ pattern SDL_SCANCODE_KP_PLUSMINUS,+ pattern SDL_SCANCODE_KP_CLEAR,+ pattern SDL_SCANCODE_KP_CLEARENTRY,+ pattern SDL_SCANCODE_KP_BINARY,+ pattern SDL_SCANCODE_KP_OCTAL,+ pattern SDL_SCANCODE_KP_DECIMAL,+ pattern SDL_SCANCODE_KP_HEXADECIMAL,+ pattern SDL_SCANCODE_LCTRL,+ pattern SDL_SCANCODE_LSHIFT,+ pattern SDL_SCANCODE_LALT,+ pattern SDL_SCANCODE_LGUI,+ pattern SDL_SCANCODE_RCTRL,+ pattern SDL_SCANCODE_RSHIFT,+ pattern SDL_SCANCODE_RALT,+ pattern SDL_SCANCODE_RGUI,+ pattern SDL_SCANCODE_MODE,+ pattern SDL_SCANCODE_AUDIONEXT,+ pattern SDL_SCANCODE_AUDIOPREV,+ pattern SDL_SCANCODE_AUDIOSTOP,+ pattern SDL_SCANCODE_AUDIOPLAY,+ pattern SDL_SCANCODE_AUDIOMUTE,+ pattern SDL_SCANCODE_MEDIASELECT,+ pattern SDL_SCANCODE_WWW,+ pattern SDL_SCANCODE_MAIL,+ pattern SDL_SCANCODE_CALCULATOR,+ pattern SDL_SCANCODE_COMPUTER,+ pattern SDL_SCANCODE_AC_SEARCH,+ pattern SDL_SCANCODE_AC_HOME,+ pattern SDL_SCANCODE_AC_BACK,+ pattern SDL_SCANCODE_AC_FORWARD,+ pattern SDL_SCANCODE_AC_STOP,+ pattern SDL_SCANCODE_AC_REFRESH,+ pattern SDL_SCANCODE_AC_BOOKMARKS,+ pattern SDL_SCANCODE_BRIGHTNESSDOWN,+ pattern SDL_SCANCODE_BRIGHTNESSUP,+ pattern SDL_SCANCODE_DISPLAYSWITCH,+ pattern SDL_SCANCODE_KBDILLUMTOGGLE,+ pattern SDL_SCANCODE_KBDILLUMDOWN,+ pattern SDL_SCANCODE_KBDILLUMUP,+ pattern SDL_SCANCODE_EJECT,+ pattern SDL_SCANCODE_SLEEP,+ pattern SDL_SCANCODE_APP1,+ pattern SDL_SCANCODE_APP2,+ pattern SDL_NUM_SCANCODES,++ pattern SDL_SYSTEM_CURSOR_ARROW,+ pattern SDL_SYSTEM_CURSOR_IBEAM,+ pattern SDL_SYSTEM_CURSOR_WAIT,++ -- ** System Cursor+ SystemCursor,+ pattern SDL_SYSTEM_CURSOR_CROSSHAIR,+ pattern SDL_SYSTEM_CURSOR_WAITARROW,+ pattern SDL_SYSTEM_CURSOR_SIZENWSE,+ pattern SDL_SYSTEM_CURSOR_SIZENESW,+ pattern SDL_SYSTEM_CURSOR_SIZEWE,+ pattern SDL_SYSTEM_CURSOR_SIZENS,+ pattern SDL_SYSTEM_CURSOR_SIZEALL,+ pattern SDL_SYSTEM_CURSOR_NO,+ pattern SDL_SYSTEM_CURSOR_HAND,+ pattern SDL_NUM_SYSTEM_CURSORS,++ -- ** Thread Priority+ ThreadPriority,+ pattern SDL_THREAD_PRIORITY_LOW,+ pattern SDL_THREAD_PRIORITY_NORMAL,+ pattern SDL_THREAD_PRIORITY_HIGH,++ -- * Miscellaneous Enumerations+ -- | These enumerations are not used directly by any SDL function, thus they have a polymorphic type.++ -- ** Audio Allowed Changes+ pattern SDL_AUDIO_ALLOW_FREQUENCY_CHANGE,+ pattern SDL_AUDIO_ALLOW_FORMAT_CHANGE,+ pattern SDL_AUDIO_ALLOW_CHANNELS_CHANGE,+ pattern SDL_AUDIO_ALLOW_ANY_CHANGE,++ -- ** Mouse Buttons+ pattern SDL_BUTTON_LEFT,+ pattern SDL_BUTTON_MIDDLE,+ pattern SDL_BUTTON_RIGHT,+ pattern SDL_BUTTON_X1,+ pattern SDL_BUTTON_X2,++ -- ** Mouse Button Masks+ pattern SDL_BUTTON_LMASK,+ pattern SDL_BUTTON_MMASK,+ pattern SDL_BUTTON_RMASK,+ pattern SDL_BUTTON_X1MASK,+ pattern SDL_BUTTON_X2MASK,++ -- ** Event Type+ pattern SDL_FIRSTEVENT,+ pattern SDL_QUIT,+ pattern SDL_APP_TERMINATING,+ pattern SDL_APP_LOWMEMORY,+ pattern SDL_APP_WILLENTERBACKGROUND,+ pattern SDL_APP_DIDENTERBACKGROUND,+ pattern SDL_APP_WILLENTERFOREGROUND,+ pattern SDL_APP_DIDENTERFOREGROUND,+ pattern SDL_WINDOWEVENT,+ pattern SDL_SYSWMEVENT,+ pattern SDL_KEYDOWN,+ pattern SDL_KEYUP,+ pattern SDL_TEXTEDITING,+ pattern SDL_TEXTINPUT,+ pattern SDL_MOUSEMOTION,+ pattern SDL_MOUSEBUTTONDOWN,+ pattern SDL_MOUSEBUTTONUP,+ pattern SDL_MOUSEWHEEL,+ pattern SDL_JOYAXISMOTION,+ pattern SDL_JOYBALLMOTION,+ pattern SDL_JOYHATMOTION,+ pattern SDL_JOYBUTTONDOWN,+ pattern SDL_JOYBUTTONUP,+ pattern SDL_JOYDEVICEADDED,+ pattern SDL_JOYDEVICEREMOVED,+ pattern SDL_CONTROLLERAXISMOTION,+ pattern SDL_CONTROLLERBUTTONDOWN,+ pattern SDL_CONTROLLERBUTTONUP,+ pattern SDL_CONTROLLERDEVICEADDED,+ pattern SDL_CONTROLLERDEVICEREMOVED,+ pattern SDL_CONTROLLERDEVICEREMAPPED,+ pattern SDL_FINGERDOWN,+ pattern SDL_FINGERUP,+ pattern SDL_FINGERMOTION,+ pattern SDL_DOLLARGESTURE,+ pattern SDL_DOLLARRECORD,+ pattern SDL_MULTIGESTURE,+ pattern SDL_CLIPBOARDUPDATE,+ pattern SDL_DROPFILE,+ pattern SDL_USEREVENT,+ pattern SDL_LASTEVENT,++ -- ** Joystick Hat Position+ pattern SDL_HAT_CENTERED,+ pattern SDL_HAT_UP,+ pattern SDL_HAT_RIGHT,+ pattern SDL_HAT_DOWN,+ pattern SDL_HAT_LEFT,+ pattern SDL_HAT_RIGHTUP,+ pattern SDL_HAT_RIGHTDOWN,+ pattern SDL_HAT_LEFTUP,+ pattern SDL_HAT_LEFTDOWN,++ -- ** Key States+ pattern SDL_PRESSED,+ pattern SDL_RELEASED,++ -- ** Log Category+ pattern SDL_LOG_CATEGORY_APPLICATION,+ pattern SDL_LOG_CATEGORY_ERROR,+ pattern SDL_LOG_CATEGORY_ASSERT,+ pattern SDL_LOG_CATEGORY_SYSTEM,+ pattern SDL_LOG_CATEGORY_AUDIO,+ pattern SDL_LOG_CATEGORY_VIDEO,+ pattern SDL_LOG_CATEGORY_RENDER,+ pattern SDL_LOG_CATEGORY_INPUT,+ pattern SDL_LOG_CATEGORY_TEST,+ pattern SDL_LOG_CATEGORY_CUSTOM,++ -- ** Message Box Flags+ pattern SDL_MESSAGEBOX_ERROR,+ pattern SDL_MESSAGEBOX_WARNING,+ pattern SDL_MESSAGEBOX_INFORMATION,++ -- ** Message Box Button Flags+ pattern SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT,+ pattern SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT,++ -- ** OpenGL Profile+ pattern SDL_GL_CONTEXT_PROFILE_CORE,+ pattern SDL_GL_CONTEXT_PROFILE_COMPATIBILITY,+ pattern SDL_GL_CONTEXT_PROFILE_ES,++ -- ** OpenGL Context Flag+ pattern SDL_GL_CONTEXT_DEBUG_FLAG,+ pattern SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG,+ pattern SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG,+ pattern SDL_GL_CONTEXT_RESET_ISOLATION_FLAG,++ -- ** Pixel Formats+ pattern SDL_PIXELFORMAT_UNKNOWN,+ pattern SDL_PIXELFORMAT_INDEX1LSB,+ pattern SDL_PIXELFORMAT_INDEX1MSB,+ pattern SDL_PIXELFORMAT_INDEX4LSB,+ pattern SDL_PIXELFORMAT_INDEX4MSB,+ pattern SDL_PIXELFORMAT_INDEX8,+ pattern SDL_PIXELFORMAT_RGB332,+ pattern SDL_PIXELFORMAT_RGB444,+ pattern SDL_PIXELFORMAT_RGB555,+ pattern SDL_PIXELFORMAT_BGR555,+ pattern SDL_PIXELFORMAT_ARGB4444,+ pattern SDL_PIXELFORMAT_RGBA4444,+ pattern SDL_PIXELFORMAT_ABGR4444,+ pattern SDL_PIXELFORMAT_BGRA4444,+ pattern SDL_PIXELFORMAT_ARGB1555,+ pattern SDL_PIXELFORMAT_RGBA5551,+ pattern SDL_PIXELFORMAT_ABGR1555,+ pattern SDL_PIXELFORMAT_BGRA5551,+ pattern SDL_PIXELFORMAT_RGB565,+ pattern SDL_PIXELFORMAT_BGR565,+ pattern SDL_PIXELFORMAT_RGB24,+ pattern SDL_PIXELFORMAT_BGR24,+ pattern SDL_PIXELFORMAT_RGB888,+ pattern SDL_PIXELFORMAT_RGBX8888,+ pattern SDL_PIXELFORMAT_BGR888,+ pattern SDL_PIXELFORMAT_BGRX8888,+ pattern SDL_PIXELFORMAT_ARGB8888,+ pattern SDL_PIXELFORMAT_RGBA8888,+ pattern SDL_PIXELFORMAT_ABGR8888,+ pattern SDL_PIXELFORMAT_BGRA8888,+ pattern SDL_PIXELFORMAT_ARGB2101010,+ pattern SDL_PIXELFORMAT_YV12,+ pattern SDL_PIXELFORMAT_IYUV,+ pattern SDL_PIXELFORMAT_YUY2,+ pattern SDL_PIXELFORMAT_UYVY,+ pattern SDL_PIXELFORMAT_YVYU,++ -- ** Renderer Flags+ pattern SDL_RENDERER_SOFTWARE,+ pattern SDL_RENDERER_ACCELERATED,+ pattern SDL_RENDERER_PRESENTVSYNC,+ pattern SDL_RENDERER_TARGETTEXTURE,++ -- ** Texture Access+ pattern SDL_TEXTUREACCESS_STATIC,+ pattern SDL_TEXTUREACCESS_STREAMING,+ pattern SDL_TEXTUREACCESS_TARGET,++ -- ** Texture Modulate+ pattern SDL_TEXTUREMODULATE_NONE,+ pattern SDL_TEXTUREMODULATE_COLOR,+ pattern SDL_TEXTUREMODULATE_ALPHA,++ -- ** Touch+ pattern SDL_TOUCH_MOUSEID,++ -- ** Window Event+ pattern SDL_WINDOWEVENT_NONE,+ pattern SDL_WINDOWEVENT_SHOWN,+ pattern SDL_WINDOWEVENT_HIDDEN,+ pattern SDL_WINDOWEVENT_EXPOSED,+ pattern SDL_WINDOWEVENT_MOVED,+ pattern SDL_WINDOWEVENT_RESIZED,+ pattern SDL_WINDOWEVENT_SIZE_CHANGED,+ pattern SDL_WINDOWEVENT_MINIMIZED,+ pattern SDL_WINDOWEVENT_MAXIMIZED,+ pattern SDL_WINDOWEVENT_RESTORED,+ pattern SDL_WINDOWEVENT_ENTER,+ pattern SDL_WINDOWEVENT_LEAVE,+ pattern SDL_WINDOWEVENT_FOCUS_GAINED,+ pattern SDL_WINDOWEVENT_FOCUS_LOST,+ pattern SDL_WINDOWEVENT_CLOSE,++ -- ** Window Flags+ pattern SDL_WINDOW_FULLSCREEN,+ pattern SDL_WINDOW_OPENGL,+ pattern SDL_WINDOW_SHOWN,+ pattern SDL_WINDOW_HIDDEN,+ pattern SDL_WINDOW_BORDERLESS,+ pattern SDL_WINDOW_RESIZABLE,+ pattern SDL_WINDOW_MINIMIZED,+ pattern SDL_WINDOW_MAXIMIZED,+ pattern SDL_WINDOW_INPUT_GRABBED,+ pattern SDL_WINDOW_INPUT_FOCUS,+ pattern SDL_WINDOW_MOUSE_FOCUS,+ pattern SDL_WINDOW_FULLSCREEN_DESKTOP,+ pattern SDL_WINDOW_FOREIGN,+ pattern SDL_WINDOW_ALLOW_HIGHDPI,++ -- ** Window Positioning+ pattern SDL_WINDOWPOS_UNDEFINED,+ pattern SDL_WINDOWPOS_CENTERED,++ -- ** Haptic Event Types+ pattern SDL_HAPTIC_CONSTANT+) where++#include "SDL.h"++import Data.Int+import Data.Word++import Foreign.C.Types++type AudioFormat = (#type SDL_AudioFormat)+type AudioStatus = (#type SDL_AudioStatus)+type BlendMode = (#type SDL_BlendMode)+type Endian = CInt+type EventAction = (#type SDL_eventaction)+type GameControllerAxis = (#type SDL_GameControllerAxis)+type GameControllerButton = (#type SDL_GameControllerButton)+type GLattr = (#type SDL_GLattr)+type HintPriority = (#type SDL_HintPriority)+type InitFlag = Word32+type Keycode = (#type SDL_Keycode)+type Keymod = (#type SDL_Keymod)+type LogPriority = (#type SDL_LogPriority)+type PowerState = (#type SDL_PowerState)+type RendererFlip = (#type SDL_RendererFlip)+type Scancode = (#type SDL_Scancode)+type SystemCursor = (#type SDL_SystemCursor)+type ThreadPriority = (#type SDL_ThreadPriority)++pattern SDL_AUDIO_S8 = (#const AUDIO_S8) :: AudioFormat+pattern SDL_AUDIO_U8 = (#const AUDIO_U8) :: AudioFormat+pattern SDL_AUDIO_S16LSB = (#const AUDIO_S16LSB) :: AudioFormat+pattern SDL_AUDIO_S16MSB = (#const AUDIO_S16MSB) :: AudioFormat+pattern SDL_AUDIO_S16SYS = (#const AUDIO_S16SYS) :: AudioFormat+pattern SDL_AUDIO_U16LSB = (#const AUDIO_U16LSB) :: AudioFormat+pattern SDL_AUDIO_U16MSB = (#const AUDIO_U16MSB) :: AudioFormat+pattern SDL_AUDIO_U16SYS = (#const AUDIO_U16SYS) :: AudioFormat+pattern SDL_AUDIO_S32LSB = (#const AUDIO_S32LSB) :: AudioFormat+pattern SDL_AUDIO_S32MSB = (#const AUDIO_S32MSB) :: AudioFormat+pattern SDL_AUDIO_S32SYS = (#const AUDIO_S32SYS) :: AudioFormat+pattern SDL_AUDIO_F32LSB = (#const AUDIO_F32LSB) :: AudioFormat+pattern SDL_AUDIO_F32MSB = (#const AUDIO_F32MSB) :: AudioFormat+pattern SDL_AUDIO_F32SYS = (#const AUDIO_F32SYS) :: AudioFormat++pattern SDL_AUDIO_STOPPED = (#const SDL_AUDIO_STOPPED) :: AudioStatus+pattern SDL_AUDIO_PLAYING = (#const SDL_AUDIO_PLAYING) :: AudioStatus+pattern SDL_AUDIO_PAUSED = (#const SDL_AUDIO_PAUSED) :: AudioStatus++pattern SDL_BLENDMODE_NONE = (#const SDL_BLENDMODE_NONE) :: BlendMode+pattern SDL_BLENDMODE_BLEND = (#const SDL_BLENDMODE_BLEND) :: BlendMode+pattern SDL_BLENDMODE_ADD = (#const SDL_BLENDMODE_ADD) :: BlendMode+pattern SDL_BLENDMODE_MOD = (#const SDL_BLENDMODE_MOD) :: BlendMode++pattern SDL_BYTEORDER = (#const SDL_BYTEORDER) :: Endian+pattern SDL_LIL_ENDIAN = (#const SDL_LIL_ENDIAN) :: Endian+pattern SDL_BIG_ENDIAN = (#const SDL_BIG_ENDIAN) :: Endian++pattern SDL_ADDEVENT = (#const SDL_ADDEVENT) :: EventAction+pattern SDL_PEEKEVENT = (#const SDL_PEEKEVENT) :: EventAction+pattern SDL_GETEVENT = (#const SDL_GETEVENT) :: EventAction++pattern SDL_CONTROLLER_AXIS_INVALID = (#const SDL_CONTROLLER_AXIS_INVALID) :: GameControllerAxis+pattern SDL_CONTROLLER_AXIS_LEFTX = (#const SDL_CONTROLLER_AXIS_LEFTX) :: GameControllerAxis+pattern SDL_CONTROLLER_AXIS_LEFTY = (#const SDL_CONTROLLER_AXIS_LEFTY) :: GameControllerAxis+pattern SDL_CONTROLLER_AXIS_RIGHTX = (#const SDL_CONTROLLER_AXIS_RIGHTX) :: GameControllerAxis+pattern SDL_CONTROLLER_AXIS_RIGHTY = (#const SDL_CONTROLLER_AXIS_RIGHTY) :: GameControllerAxis+pattern SDL_CONTROLLER_AXIS_TRIGGERLEFT = (#const SDL_CONTROLLER_AXIS_TRIGGERLEFT) :: GameControllerAxis+pattern SDL_CONTROLLER_AXIS_TRIGGERRIGHT = (#const SDL_CONTROLLER_AXIS_TRIGGERRIGHT) :: GameControllerAxis+pattern SDL_CONTROLLER_AXIS_MAX = (#const SDL_CONTROLLER_AXIS_MAX) :: GameControllerAxis++pattern SDL_CONTROLLER_BUTTON_INVALID = (#const SDL_CONTROLLER_BUTTON_INVALID) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_A = (#const SDL_CONTROLLER_BUTTON_A) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_B = (#const SDL_CONTROLLER_BUTTON_B) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_X = (#const SDL_CONTROLLER_BUTTON_X) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_Y = (#const SDL_CONTROLLER_BUTTON_Y) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_BACK = (#const SDL_CONTROLLER_BUTTON_BACK) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_GUIDE = (#const SDL_CONTROLLER_BUTTON_GUIDE) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_START = (#const SDL_CONTROLLER_BUTTON_START) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_LEFTSTICK = (#const SDL_CONTROLLER_BUTTON_LEFTSTICK) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_RIGHTSTICK = (#const SDL_CONTROLLER_BUTTON_RIGHTSTICK) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_LEFTSHOULDER = (#const SDL_CONTROLLER_BUTTON_LEFTSHOULDER) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_RIGHTSHOULDER = (#const SDL_CONTROLLER_BUTTON_RIGHTSHOULDER) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_DPAD_UP = (#const SDL_CONTROLLER_BUTTON_DPAD_UP) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_DPAD_DOWN = (#const SDL_CONTROLLER_BUTTON_DPAD_DOWN) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_DPAD_LEFT = (#const SDL_CONTROLLER_BUTTON_DPAD_LEFT) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_DPAD_RIGHT = (#const SDL_CONTROLLER_BUTTON_DPAD_RIGHT) :: GameControllerButton+pattern SDL_CONTROLLER_BUTTON_MAX = (#const SDL_CONTROLLER_BUTTON_MAX) :: GameControllerButton++pattern SDL_GL_RED_SIZE = (#const SDL_GL_RED_SIZE) :: GLattr+pattern SDL_GL_GREEN_SIZE = (#const SDL_GL_GREEN_SIZE) :: GLattr+pattern SDL_GL_BLUE_SIZE = (#const SDL_GL_BLUE_SIZE) :: GLattr+pattern SDL_GL_ALPHA_SIZE = (#const SDL_GL_ALPHA_SIZE) :: GLattr+pattern SDL_GL_BUFFER_SIZE = (#const SDL_GL_BUFFER_SIZE) :: GLattr+pattern SDL_GL_DOUBLEBUFFER = (#const SDL_GL_DOUBLEBUFFER) :: GLattr+pattern SDL_GL_DEPTH_SIZE = (#const SDL_GL_DEPTH_SIZE) :: GLattr+pattern SDL_GL_STENCIL_SIZE = (#const SDL_GL_STENCIL_SIZE) :: GLattr+pattern SDL_GL_ACCUM_RED_SIZE = (#const SDL_GL_ACCUM_RED_SIZE) :: GLattr+pattern SDL_GL_ACCUM_GREEN_SIZE = (#const SDL_GL_ACCUM_GREEN_SIZE) :: GLattr+pattern SDL_GL_ACCUM_BLUE_SIZE = (#const SDL_GL_ACCUM_BLUE_SIZE) :: GLattr+pattern SDL_GL_ACCUM_ALPHA_SIZE = (#const SDL_GL_ACCUM_ALPHA_SIZE) :: GLattr+pattern SDL_GL_STEREO = (#const SDL_GL_STEREO) :: GLattr+pattern SDL_GL_MULTISAMPLEBUFFERS = (#const SDL_GL_MULTISAMPLEBUFFERS) :: GLattr+pattern SDL_GL_MULTISAMPLESAMPLES = (#const SDL_GL_MULTISAMPLESAMPLES) :: GLattr+pattern SDL_GL_ACCELERATED_VISUAL = (#const SDL_GL_ACCELERATED_VISUAL) :: GLattr+pattern SDL_GL_RETAINED_BACKING = (#const SDL_GL_RETAINED_BACKING) :: GLattr+pattern SDL_GL_CONTEXT_MAJOR_VERSION = (#const SDL_GL_CONTEXT_MAJOR_VERSION) :: GLattr+pattern SDL_GL_CONTEXT_MINOR_VERSION = (#const SDL_GL_CONTEXT_MINOR_VERSION) :: GLattr+pattern SDL_GL_CONTEXT_EGL = (#const SDL_GL_CONTEXT_EGL) :: GLattr+pattern SDL_GL_CONTEXT_FLAGS = (#const SDL_GL_CONTEXT_FLAGS) :: GLattr+pattern SDL_GL_CONTEXT_PROFILE_MASK = (#const SDL_GL_CONTEXT_PROFILE_MASK) :: GLattr+pattern SDL_GL_SHARE_WITH_CURRENT_CONTEXT = (#const SDL_GL_SHARE_WITH_CURRENT_CONTEXT) :: GLattr+pattern SDL_GL_FRAMEBUFFER_SRGB_CAPABLE = (#const SDL_GL_FRAMEBUFFER_SRGB_CAPABLE) :: GLattr++pattern SDL_HINT_DEFAULT = (#const SDL_HINT_DEFAULT) :: HintPriority+pattern SDL_HINT_NORMAL = (#const SDL_HINT_NORMAL) :: HintPriority+pattern SDL_HINT_OVERRIDE = (#const SDL_HINT_OVERRIDE) :: HintPriority++pattern SDL_INIT_TIMER = (#const SDL_INIT_TIMER) :: InitFlag+pattern SDL_INIT_AUDIO = (#const SDL_INIT_AUDIO) :: InitFlag+pattern SDL_INIT_VIDEO = (#const SDL_INIT_VIDEO) :: InitFlag+pattern SDL_INIT_JOYSTICK = (#const SDL_INIT_JOYSTICK) :: InitFlag+pattern SDL_INIT_HAPTIC = (#const SDL_INIT_HAPTIC) :: InitFlag+pattern SDL_INIT_GAMECONTROLLER = (#const SDL_INIT_GAMECONTROLLER) :: InitFlag+pattern SDL_INIT_EVENTS = (#const SDL_INIT_EVENTS) :: InitFlag+pattern SDL_INIT_NOPARACHUTE = (#const SDL_INIT_NOPARACHUTE) :: InitFlag+pattern SDL_INIT_EVERYTHING = (#const SDL_INIT_EVERYTHING) :: InitFlag++pattern SDLK_UNKNOWN = (#const SDLK_UNKNOWN) :: Keycode+pattern SDLK_RETURN = (#const SDLK_RETURN) :: Keycode+pattern SDLK_ESCAPE = (#const SDLK_ESCAPE) :: Keycode+pattern SDLK_BACKSPACE = (#const SDLK_BACKSPACE) :: Keycode+pattern SDLK_TAB = (#const SDLK_TAB) :: Keycode+pattern SDLK_SPACE = (#const SDLK_SPACE) :: Keycode+pattern SDLK_EXCLAIM = (#const SDLK_EXCLAIM) :: Keycode+pattern SDLK_QUOTEDBL = (#const SDLK_QUOTEDBL) :: Keycode+pattern SDLK_HASH = (#const SDLK_HASH) :: Keycode+pattern SDLK_PERCENT = (#const SDLK_PERCENT) :: Keycode+pattern SDLK_DOLLAR = (#const SDLK_DOLLAR) :: Keycode+pattern SDLK_AMPERSAND = (#const SDLK_AMPERSAND) :: Keycode+pattern SDLK_QUOTE = (#const SDLK_QUOTE) :: Keycode+pattern SDLK_LEFTPAREN = (#const SDLK_LEFTPAREN) :: Keycode+pattern SDLK_RIGHTPAREN = (#const SDLK_RIGHTPAREN) :: Keycode+pattern SDLK_ASTERISK = (#const SDLK_ASTERISK) :: Keycode+pattern SDLK_PLUS = (#const SDLK_PLUS) :: Keycode+pattern SDLK_COMMA = (#const SDLK_COMMA) :: Keycode+pattern SDLK_MINUS = (#const SDLK_MINUS) :: Keycode+pattern SDLK_PERIOD = (#const SDLK_PERIOD) :: Keycode+pattern SDLK_SLASH = (#const SDLK_SLASH) :: Keycode+pattern SDLK_0 = (#const SDLK_0) :: Keycode+pattern SDLK_1 = (#const SDLK_1) :: Keycode+pattern SDLK_2 = (#const SDLK_2) :: Keycode+pattern SDLK_3 = (#const SDLK_3) :: Keycode+pattern SDLK_4 = (#const SDLK_4) :: Keycode+pattern SDLK_5 = (#const SDLK_5) :: Keycode+pattern SDLK_6 = (#const SDLK_6) :: Keycode+pattern SDLK_7 = (#const SDLK_7) :: Keycode+pattern SDLK_8 = (#const SDLK_8) :: Keycode+pattern SDLK_9 = (#const SDLK_9) :: Keycode+pattern SDLK_COLON = (#const SDLK_COLON) :: Keycode+pattern SDLK_SEMICOLON = (#const SDLK_SEMICOLON) :: Keycode+pattern SDLK_LESS = (#const SDLK_LESS) :: Keycode+pattern SDLK_EQUALS = (#const SDLK_EQUALS) :: Keycode+pattern SDLK_GREATER = (#const SDLK_GREATER) :: Keycode+pattern SDLK_QUESTION = (#const SDLK_QUESTION) :: Keycode+pattern SDLK_AT = (#const SDLK_AT) :: Keycode+pattern SDLK_LEFTBRACKET = (#const SDLK_LEFTBRACKET) :: Keycode+pattern SDLK_BACKSLASH = (#const SDLK_BACKSLASH) :: Keycode+pattern SDLK_RIGHTBRACKET = (#const SDLK_RIGHTBRACKET) :: Keycode+pattern SDLK_CARET = (#const SDLK_CARET) :: Keycode+pattern SDLK_UNDERSCORE = (#const SDLK_UNDERSCORE) :: Keycode+pattern SDLK_BACKQUOTE = (#const SDLK_BACKQUOTE) :: Keycode+pattern SDLK_a = (#const SDLK_a) :: Keycode+pattern SDLK_b = (#const SDLK_b) :: Keycode+pattern SDLK_c = (#const SDLK_c) :: Keycode+pattern SDLK_d = (#const SDLK_d) :: Keycode+pattern SDLK_e = (#const SDLK_e) :: Keycode+pattern SDLK_f = (#const SDLK_f) :: Keycode+pattern SDLK_g = (#const SDLK_g) :: Keycode+pattern SDLK_h = (#const SDLK_h) :: Keycode+pattern SDLK_i = (#const SDLK_i) :: Keycode+pattern SDLK_j = (#const SDLK_j) :: Keycode+pattern SDLK_k = (#const SDLK_k) :: Keycode+pattern SDLK_l = (#const SDLK_l) :: Keycode+pattern SDLK_m = (#const SDLK_m) :: Keycode+pattern SDLK_n = (#const SDLK_n) :: Keycode+pattern SDLK_o = (#const SDLK_o) :: Keycode+pattern SDLK_p = (#const SDLK_p) :: Keycode+pattern SDLK_q = (#const SDLK_q) :: Keycode+pattern SDLK_r = (#const SDLK_r) :: Keycode+pattern SDLK_s = (#const SDLK_s) :: Keycode+pattern SDLK_t = (#const SDLK_t) :: Keycode+pattern SDLK_u = (#const SDLK_u) :: Keycode+pattern SDLK_v = (#const SDLK_v) :: Keycode+pattern SDLK_w = (#const SDLK_w) :: Keycode+pattern SDLK_x = (#const SDLK_x) :: Keycode+pattern SDLK_y = (#const SDLK_y) :: Keycode+pattern SDLK_z = (#const SDLK_z) :: Keycode+pattern SDLK_CAPSLOCK = (#const SDLK_CAPSLOCK) :: Keycode+pattern SDLK_F1 = (#const SDLK_F1) :: Keycode+pattern SDLK_F2 = (#const SDLK_F2) :: Keycode+pattern SDLK_F3 = (#const SDLK_F3) :: Keycode+pattern SDLK_F4 = (#const SDLK_F4) :: Keycode+pattern SDLK_F5 = (#const SDLK_F5) :: Keycode+pattern SDLK_F6 = (#const SDLK_F6) :: Keycode+pattern SDLK_F7 = (#const SDLK_F7) :: Keycode+pattern SDLK_F8 = (#const SDLK_F8) :: Keycode+pattern SDLK_F9 = (#const SDLK_F9) :: Keycode+pattern SDLK_F10 = (#const SDLK_F10) :: Keycode+pattern SDLK_F11 = (#const SDLK_F11) :: Keycode+pattern SDLK_F12 = (#const SDLK_F12) :: Keycode+pattern SDLK_PRINTSCREEN = (#const SDLK_PRINTSCREEN) :: Keycode+pattern SDLK_SCROLLLOCK = (#const SDLK_SCROLLLOCK) :: Keycode+pattern SDLK_PAUSE = (#const SDLK_PAUSE) :: Keycode+pattern SDLK_INSERT = (#const SDLK_INSERT) :: Keycode+pattern SDLK_HOME = (#const SDLK_HOME) :: Keycode+pattern SDLK_PAGEUP = (#const SDLK_PAGEUP) :: Keycode+pattern SDLK_DELETE = (#const SDLK_DELETE) :: Keycode+pattern SDLK_END = (#const SDLK_END) :: Keycode+pattern SDLK_PAGEDOWN = (#const SDLK_PAGEDOWN) :: Keycode+pattern SDLK_RIGHT = (#const SDLK_RIGHT) :: Keycode+pattern SDLK_LEFT = (#const SDLK_LEFT) :: Keycode+pattern SDLK_DOWN = (#const SDLK_DOWN) :: Keycode+pattern SDLK_UP = (#const SDLK_UP) :: Keycode+pattern SDLK_NUMLOCKCLEAR = (#const SDLK_NUMLOCKCLEAR) :: Keycode+pattern SDLK_KP_DIVIDE = (#const SDLK_KP_DIVIDE) :: Keycode+pattern SDLK_KP_MULTIPLY = (#const SDLK_KP_MULTIPLY) :: Keycode+pattern SDLK_KP_MINUS = (#const SDLK_KP_MINUS) :: Keycode+pattern SDLK_KP_PLUS = (#const SDLK_KP_PLUS) :: Keycode+pattern SDLK_KP_ENTER = (#const SDLK_KP_ENTER) :: Keycode+pattern SDLK_KP_1 = (#const SDLK_KP_1) :: Keycode+pattern SDLK_KP_2 = (#const SDLK_KP_2) :: Keycode+pattern SDLK_KP_3 = (#const SDLK_KP_3) :: Keycode+pattern SDLK_KP_4 = (#const SDLK_KP_4) :: Keycode+pattern SDLK_KP_5 = (#const SDLK_KP_5) :: Keycode+pattern SDLK_KP_6 = (#const SDLK_KP_6) :: Keycode+pattern SDLK_KP_7 = (#const SDLK_KP_7) :: Keycode+pattern SDLK_KP_8 = (#const SDLK_KP_8) :: Keycode+pattern SDLK_KP_9 = (#const SDLK_KP_9) :: Keycode+pattern SDLK_KP_0 = (#const SDLK_KP_0) :: Keycode+pattern SDLK_KP_PERIOD = (#const SDLK_KP_PERIOD) :: Keycode+pattern SDLK_APPLICATION = (#const SDLK_APPLICATION) :: Keycode+pattern SDLK_POWER = (#const SDLK_POWER) :: Keycode+pattern SDLK_KP_EQUALS = (#const SDLK_KP_EQUALS) :: Keycode+pattern SDLK_F13 = (#const SDLK_F13) :: Keycode+pattern SDLK_F14 = (#const SDLK_F14) :: Keycode+pattern SDLK_F15 = (#const SDLK_F15) :: Keycode+pattern SDLK_F16 = (#const SDLK_F16) :: Keycode+pattern SDLK_F17 = (#const SDLK_F17) :: Keycode+pattern SDLK_F18 = (#const SDLK_F18) :: Keycode+pattern SDLK_F19 = (#const SDLK_F19) :: Keycode+pattern SDLK_F20 = (#const SDLK_F20) :: Keycode+pattern SDLK_F21 = (#const SDLK_F21) :: Keycode+pattern SDLK_F22 = (#const SDLK_F22) :: Keycode+pattern SDLK_F23 = (#const SDLK_F23) :: Keycode+pattern SDLK_F24 = (#const SDLK_F24) :: Keycode+pattern SDLK_EXECUTE = (#const SDLK_EXECUTE) :: Keycode+pattern SDLK_HELP = (#const SDLK_HELP) :: Keycode+pattern SDLK_MENU = (#const SDLK_MENU) :: Keycode+pattern SDLK_SELECT = (#const SDLK_SELECT) :: Keycode+pattern SDLK_STOP = (#const SDLK_STOP) :: Keycode+pattern SDLK_AGAIN = (#const SDLK_AGAIN) :: Keycode+pattern SDLK_UNDO = (#const SDLK_UNDO) :: Keycode+pattern SDLK_CUT = (#const SDLK_CUT) :: Keycode+pattern SDLK_COPY = (#const SDLK_COPY) :: Keycode+pattern SDLK_PASTE = (#const SDLK_PASTE) :: Keycode+pattern SDLK_FIND = (#const SDLK_FIND) :: Keycode+pattern SDLK_MUTE = (#const SDLK_MUTE) :: Keycode+pattern SDLK_VOLUMEUP = (#const SDLK_VOLUMEUP) :: Keycode+pattern SDLK_VOLUMEDOWN = (#const SDLK_VOLUMEDOWN) :: Keycode+pattern SDLK_KP_COMMA = (#const SDLK_KP_COMMA) :: Keycode+pattern SDLK_KP_EQUALSAS400 = (#const SDLK_KP_EQUALSAS400) :: Keycode+pattern SDLK_ALTERASE = (#const SDLK_ALTERASE) :: Keycode+pattern SDLK_SYSREQ = (#const SDLK_SYSREQ) :: Keycode+pattern SDLK_CANCEL = (#const SDLK_CANCEL) :: Keycode+pattern SDLK_CLEAR = (#const SDLK_CLEAR) :: Keycode+pattern SDLK_PRIOR = (#const SDLK_PRIOR) :: Keycode+pattern SDLK_RETURN2 = (#const SDLK_RETURN2) :: Keycode+pattern SDLK_SEPARATOR = (#const SDLK_SEPARATOR) :: Keycode+pattern SDLK_OUT = (#const SDLK_OUT) :: Keycode+pattern SDLK_OPER = (#const SDLK_OPER) :: Keycode+pattern SDLK_CLEARAGAIN = (#const SDLK_CLEARAGAIN) :: Keycode+pattern SDLK_CRSEL = (#const SDLK_CRSEL) :: Keycode+pattern SDLK_EXSEL = (#const SDLK_EXSEL) :: Keycode+pattern SDLK_KP_00 = (#const SDLK_KP_00) :: Keycode+pattern SDLK_KP_000 = (#const SDLK_KP_000) :: Keycode+pattern SDLK_THOUSANDSSEPARATOR = (#const SDLK_THOUSANDSSEPARATOR) :: Keycode+pattern SDLK_DECIMALSEPARATOR = (#const SDLK_DECIMALSEPARATOR) :: Keycode+pattern SDLK_CURRENCYUNIT = (#const SDLK_CURRENCYUNIT) :: Keycode+pattern SDLK_CURRENCYSUBUNIT = (#const SDLK_CURRENCYSUBUNIT) :: Keycode+pattern SDLK_KP_LEFTPAREN = (#const SDLK_KP_LEFTPAREN) :: Keycode+pattern SDLK_KP_RIGHTPAREN = (#const SDLK_KP_RIGHTPAREN) :: Keycode+pattern SDLK_KP_LEFTBRACE = (#const SDLK_KP_LEFTBRACE) :: Keycode+pattern SDLK_KP_RIGHTBRACE = (#const SDLK_KP_RIGHTBRACE) :: Keycode+pattern SDLK_KP_TAB = (#const SDLK_KP_TAB) :: Keycode+pattern SDLK_KP_BACKSPACE = (#const SDLK_KP_BACKSPACE) :: Keycode+pattern SDLK_KP_A = (#const SDLK_KP_A) :: Keycode+pattern SDLK_KP_B = (#const SDLK_KP_B) :: Keycode+pattern SDLK_KP_C = (#const SDLK_KP_C) :: Keycode+pattern SDLK_KP_D = (#const SDLK_KP_D) :: Keycode+pattern SDLK_KP_E = (#const SDLK_KP_E) :: Keycode+pattern SDLK_KP_F = (#const SDLK_KP_F) :: Keycode+pattern SDLK_KP_XOR = (#const SDLK_KP_XOR) :: Keycode+pattern SDLK_KP_POWER = (#const SDLK_KP_POWER) :: Keycode+pattern SDLK_KP_PERCENT = (#const SDLK_KP_PERCENT) :: Keycode+pattern SDLK_KP_LESS = (#const SDLK_KP_LESS) :: Keycode+pattern SDLK_KP_GREATER = (#const SDLK_KP_GREATER) :: Keycode+pattern SDLK_KP_AMPERSAND = (#const SDLK_KP_AMPERSAND) :: Keycode+pattern SDLK_KP_DBLAMPERSAND = (#const SDLK_KP_DBLAMPERSAND) :: Keycode+pattern SDLK_KP_VERTICALBAR = (#const SDLK_KP_VERTICALBAR) :: Keycode+pattern SDLK_KP_DBLVERTICALBAR = (#const SDLK_KP_DBLVERTICALBAR) :: Keycode+pattern SDLK_KP_COLON = (#const SDLK_KP_COLON) :: Keycode+pattern SDLK_KP_HASH = (#const SDLK_KP_HASH) :: Keycode+pattern SDLK_KP_SPACE = (#const SDLK_KP_SPACE) :: Keycode+pattern SDLK_KP_AT = (#const SDLK_KP_AT) :: Keycode+pattern SDLK_KP_EXCLAM = (#const SDLK_KP_EXCLAM) :: Keycode+pattern SDLK_KP_MEMSTORE = (#const SDLK_KP_MEMSTORE) :: Keycode+pattern SDLK_KP_MEMRECALL = (#const SDLK_KP_MEMRECALL) :: Keycode+pattern SDLK_KP_MEMCLEAR = (#const SDLK_KP_MEMCLEAR) :: Keycode+pattern SDLK_KP_MEMADD = (#const SDLK_KP_MEMADD) :: Keycode+pattern SDLK_KP_MEMSUBTRACT = (#const SDLK_KP_MEMSUBTRACT) :: Keycode+pattern SDLK_KP_MEMMULTIPLY = (#const SDLK_KP_MEMMULTIPLY) :: Keycode+pattern SDLK_KP_MEMDIVIDE = (#const SDLK_KP_MEMDIVIDE) :: Keycode+pattern SDLK_KP_PLUSMINUS = (#const SDLK_KP_PLUSMINUS) :: Keycode+pattern SDLK_KP_CLEAR = (#const SDLK_KP_CLEAR) :: Keycode+pattern SDLK_KP_CLEARENTRY = (#const SDLK_KP_CLEARENTRY) :: Keycode+pattern SDLK_KP_BINARY = (#const SDLK_KP_BINARY) :: Keycode+pattern SDLK_KP_OCTAL = (#const SDLK_KP_OCTAL) :: Keycode+pattern SDLK_KP_DECIMAL = (#const SDLK_KP_DECIMAL) :: Keycode+pattern SDLK_KP_HEXADECIMAL = (#const SDLK_KP_HEXADECIMAL) :: Keycode+pattern SDLK_LCTRL = (#const SDLK_LCTRL) :: Keycode+pattern SDLK_LSHIFT = (#const SDLK_LSHIFT) :: Keycode+pattern SDLK_LALT = (#const SDLK_LALT) :: Keycode+pattern SDLK_LGUI = (#const SDLK_LGUI) :: Keycode+pattern SDLK_RCTRL = (#const SDLK_RCTRL) :: Keycode+pattern SDLK_RSHIFT = (#const SDLK_RSHIFT) :: Keycode+pattern SDLK_RALT = (#const SDLK_RALT) :: Keycode+pattern SDLK_RGUI = (#const SDLK_RGUI) :: Keycode+pattern SDLK_MODE = (#const SDLK_MODE) :: Keycode+pattern SDLK_AUDIONEXT = (#const SDLK_AUDIONEXT) :: Keycode+pattern SDLK_AUDIOPREV = (#const SDLK_AUDIOPREV) :: Keycode+pattern SDLK_AUDIOSTOP = (#const SDLK_AUDIOSTOP) :: Keycode+pattern SDLK_AUDIOPLAY = (#const SDLK_AUDIOPLAY) :: Keycode+pattern SDLK_AUDIOMUTE = (#const SDLK_AUDIOMUTE) :: Keycode+pattern SDLK_MEDIASELECT = (#const SDLK_MEDIASELECT) :: Keycode+pattern SDLK_WWW = (#const SDLK_WWW) :: Keycode+pattern SDLK_MAIL = (#const SDLK_MAIL) :: Keycode+pattern SDLK_CALCULATOR = (#const SDLK_CALCULATOR) :: Keycode+pattern SDLK_COMPUTER = (#const SDLK_COMPUTER) :: Keycode+pattern SDLK_AC_SEARCH = (#const SDLK_AC_SEARCH) :: Keycode+pattern SDLK_AC_HOME = (#const SDLK_AC_HOME) :: Keycode+pattern SDLK_AC_BACK = (#const SDLK_AC_BACK) :: Keycode+pattern SDLK_AC_FORWARD = (#const SDLK_AC_FORWARD) :: Keycode+pattern SDLK_AC_STOP = (#const SDLK_AC_STOP) :: Keycode+pattern SDLK_AC_REFRESH = (#const SDLK_AC_REFRESH) :: Keycode+pattern SDLK_AC_BOOKMARKS = (#const SDLK_AC_BOOKMARKS) :: Keycode+pattern SDLK_BRIGHTNESSDOWN = (#const SDLK_BRIGHTNESSDOWN) :: Keycode+pattern SDLK_BRIGHTNESSUP = (#const SDLK_BRIGHTNESSUP) :: Keycode+pattern SDLK_DISPLAYSWITCH = (#const SDLK_DISPLAYSWITCH) :: Keycode+pattern SDLK_KBDILLUMTOGGLE = (#const SDLK_KBDILLUMTOGGLE) :: Keycode+pattern SDLK_KBDILLUMDOWN = (#const SDLK_KBDILLUMDOWN) :: Keycode+pattern SDLK_KBDILLUMUP = (#const SDLK_KBDILLUMUP) :: Keycode+pattern SDLK_EJECT = (#const SDLK_EJECT) :: Keycode+pattern SDLK_SLEEP = (#const SDLK_SLEEP) :: Keycode++pattern KMOD_NONE = (#const KMOD_NONE)+pattern KMOD_LSHIFT = (#const KMOD_LSHIFT)+pattern KMOD_RSHIFT = (#const KMOD_RSHIFT)+pattern KMOD_SHIFT = (#const KMOD_SHIFT)+pattern KMOD_LCTRL = (#const KMOD_LCTRL)+pattern KMOD_RCTRL = (#const KMOD_RCTRL)+pattern KMOD_CTRL = (#const KMOD_CTRL)+pattern KMOD_LALT = (#const KMOD_LALT)+pattern KMOD_RALT = (#const KMOD_RALT)+pattern KMOD_ALT = (#const KMOD_ALT)+pattern KMOD_LGUI = (#const KMOD_LGUI)+pattern KMOD_RGUI = (#const KMOD_RGUI)+pattern KMOD_GUI = (#const KMOD_GUI)+pattern KMOD_NUM = (#const KMOD_NUM)+pattern KMOD_CAPS = (#const KMOD_CAPS)+pattern KMOD_MODE = (#const KMOD_MODE)+pattern KMOD_RESERVED = (#const KMOD_RESERVED)++pattern SDL_LOG_PRIORITY_VERBOSE = (#const SDL_LOG_PRIORITY_VERBOSE) :: LogPriority+pattern SDL_LOG_PRIORITY_DEBUG = (#const SDL_LOG_PRIORITY_DEBUG) :: LogPriority+pattern SDL_LOG_PRIORITY_INFO = (#const SDL_LOG_PRIORITY_INFO) :: LogPriority+pattern SDL_LOG_PRIORITY_WARN = (#const SDL_LOG_PRIORITY_WARN) :: LogPriority+pattern SDL_LOG_PRIORITY_ERROR = (#const SDL_LOG_PRIORITY_ERROR) :: LogPriority+pattern SDL_LOG_PRIORITY_CRITICAL = (#const SDL_LOG_PRIORITY_CRITICAL) :: LogPriority+pattern SDL_NUM_LOG_PRIORITIES = (#const SDL_NUM_LOG_PRIORITIES) :: LogPriority++pattern SDL_POWERSTATE_UNKNOWN = (#const SDL_POWERSTATE_UNKNOWN) :: PowerState+pattern SDL_POWERSTATE_ON_BATTERY = (#const SDL_POWERSTATE_ON_BATTERY) :: PowerState+pattern SDL_POWERSTATE_NO_BATTERY = (#const SDL_POWERSTATE_NO_BATTERY) :: PowerState+pattern SDL_POWERSTATE_CHARGING = (#const SDL_POWERSTATE_CHARGING) :: PowerState+pattern SDL_POWERSTATE_CHARGED = (#const SDL_POWERSTATE_CHARGED) :: PowerState++pattern SDL_FLIP_NONE = (#const SDL_FLIP_NONE) :: RendererFlip+pattern SDL_FLIP_HORIZONTAL = (#const SDL_FLIP_HORIZONTAL) :: RendererFlip+pattern SDL_FLIP_VERTICAL = (#const SDL_FLIP_VERTICAL) :: RendererFlip++pattern SDL_SCANCODE_UNKNOWN = (#const SDL_SCANCODE_UNKNOWN) :: Scancode+pattern SDL_SCANCODE_A = (#const SDL_SCANCODE_A) :: Scancode+pattern SDL_SCANCODE_B = (#const SDL_SCANCODE_B) :: Scancode+pattern SDL_SCANCODE_C = (#const SDL_SCANCODE_C) :: Scancode+pattern SDL_SCANCODE_D = (#const SDL_SCANCODE_D) :: Scancode+pattern SDL_SCANCODE_E = (#const SDL_SCANCODE_E) :: Scancode+pattern SDL_SCANCODE_F = (#const SDL_SCANCODE_F) :: Scancode+pattern SDL_SCANCODE_G = (#const SDL_SCANCODE_G) :: Scancode+pattern SDL_SCANCODE_H = (#const SDL_SCANCODE_H) :: Scancode+pattern SDL_SCANCODE_I = (#const SDL_SCANCODE_I) :: Scancode+pattern SDL_SCANCODE_J = (#const SDL_SCANCODE_J) :: Scancode+pattern SDL_SCANCODE_K = (#const SDL_SCANCODE_K) :: Scancode+pattern SDL_SCANCODE_L = (#const SDL_SCANCODE_L) :: Scancode+pattern SDL_SCANCODE_M = (#const SDL_SCANCODE_M) :: Scancode+pattern SDL_SCANCODE_N = (#const SDL_SCANCODE_N) :: Scancode+pattern SDL_SCANCODE_O = (#const SDL_SCANCODE_O) :: Scancode+pattern SDL_SCANCODE_P = (#const SDL_SCANCODE_P) :: Scancode+pattern SDL_SCANCODE_Q = (#const SDL_SCANCODE_Q) :: Scancode+pattern SDL_SCANCODE_R = (#const SDL_SCANCODE_R) :: Scancode+pattern SDL_SCANCODE_S = (#const SDL_SCANCODE_S) :: Scancode+pattern SDL_SCANCODE_T = (#const SDL_SCANCODE_T) :: Scancode+pattern SDL_SCANCODE_U = (#const SDL_SCANCODE_U) :: Scancode+pattern SDL_SCANCODE_V = (#const SDL_SCANCODE_V) :: Scancode+pattern SDL_SCANCODE_W = (#const SDL_SCANCODE_W) :: Scancode+pattern SDL_SCANCODE_X = (#const SDL_SCANCODE_X) :: Scancode+pattern SDL_SCANCODE_Y = (#const SDL_SCANCODE_Y) :: Scancode+pattern SDL_SCANCODE_Z = (#const SDL_SCANCODE_Z) :: Scancode+pattern SDL_SCANCODE_1 = (#const SDL_SCANCODE_1) :: Scancode+pattern SDL_SCANCODE_2 = (#const SDL_SCANCODE_2) :: Scancode+pattern SDL_SCANCODE_3 = (#const SDL_SCANCODE_3) :: Scancode+pattern SDL_SCANCODE_4 = (#const SDL_SCANCODE_4) :: Scancode+pattern SDL_SCANCODE_5 = (#const SDL_SCANCODE_5) :: Scancode+pattern SDL_SCANCODE_6 = (#const SDL_SCANCODE_6) :: Scancode+pattern SDL_SCANCODE_7 = (#const SDL_SCANCODE_7) :: Scancode+pattern SDL_SCANCODE_8 = (#const SDL_SCANCODE_8) :: Scancode+pattern SDL_SCANCODE_9 = (#const SDL_SCANCODE_9) :: Scancode+pattern SDL_SCANCODE_0 = (#const SDL_SCANCODE_0) :: Scancode+pattern SDL_SCANCODE_RETURN = (#const SDL_SCANCODE_RETURN) :: Scancode+pattern SDL_SCANCODE_ESCAPE = (#const SDL_SCANCODE_ESCAPE) :: Scancode+pattern SDL_SCANCODE_BACKSPACE = (#const SDL_SCANCODE_BACKSPACE) :: Scancode+pattern SDL_SCANCODE_TAB = (#const SDL_SCANCODE_TAB) :: Scancode+pattern SDL_SCANCODE_SPACE = (#const SDL_SCANCODE_SPACE) :: Scancode+pattern SDL_SCANCODE_MINUS = (#const SDL_SCANCODE_MINUS) :: Scancode+pattern SDL_SCANCODE_EQUALS = (#const SDL_SCANCODE_EQUALS) :: Scancode+pattern SDL_SCANCODE_LEFTBRACKET = (#const SDL_SCANCODE_LEFTBRACKET) :: Scancode+pattern SDL_SCANCODE_RIGHTBRACKET = (#const SDL_SCANCODE_RIGHTBRACKET) :: Scancode+pattern SDL_SCANCODE_BACKSLASH = (#const SDL_SCANCODE_BACKSLASH) :: Scancode+pattern SDL_SCANCODE_NONUSHASH = (#const SDL_SCANCODE_NONUSHASH) :: Scancode+pattern SDL_SCANCODE_SEMICOLON = (#const SDL_SCANCODE_SEMICOLON) :: Scancode+pattern SDL_SCANCODE_APOSTROPHE = (#const SDL_SCANCODE_APOSTROPHE) :: Scancode+pattern SDL_SCANCODE_GRAVE = (#const SDL_SCANCODE_GRAVE) :: Scancode+pattern SDL_SCANCODE_COMMA = (#const SDL_SCANCODE_COMMA) :: Scancode+pattern SDL_SCANCODE_PERIOD = (#const SDL_SCANCODE_PERIOD) :: Scancode+pattern SDL_SCANCODE_SLASH = (#const SDL_SCANCODE_SLASH) :: Scancode+pattern SDL_SCANCODE_CAPSLOCK = (#const SDL_SCANCODE_CAPSLOCK) :: Scancode+pattern SDL_SCANCODE_F1 = (#const SDL_SCANCODE_F1) :: Scancode+pattern SDL_SCANCODE_F2 = (#const SDL_SCANCODE_F2) :: Scancode+pattern SDL_SCANCODE_F3 = (#const SDL_SCANCODE_F3) :: Scancode+pattern SDL_SCANCODE_F4 = (#const SDL_SCANCODE_F4) :: Scancode+pattern SDL_SCANCODE_F5 = (#const SDL_SCANCODE_F5) :: Scancode+pattern SDL_SCANCODE_F6 = (#const SDL_SCANCODE_F6) :: Scancode+pattern SDL_SCANCODE_F7 = (#const SDL_SCANCODE_F7) :: Scancode+pattern SDL_SCANCODE_F8 = (#const SDL_SCANCODE_F8) :: Scancode+pattern SDL_SCANCODE_F9 = (#const SDL_SCANCODE_F9) :: Scancode+pattern SDL_SCANCODE_F10 = (#const SDL_SCANCODE_F10) :: Scancode+pattern SDL_SCANCODE_F11 = (#const SDL_SCANCODE_F11) :: Scancode+pattern SDL_SCANCODE_F12 = (#const SDL_SCANCODE_F12) :: Scancode+pattern SDL_SCANCODE_PRINTSCREEN = (#const SDL_SCANCODE_PRINTSCREEN) :: Scancode+pattern SDL_SCANCODE_SCROLLLOCK = (#const SDL_SCANCODE_SCROLLLOCK) :: Scancode+pattern SDL_SCANCODE_PAUSE = (#const SDL_SCANCODE_PAUSE) :: Scancode+pattern SDL_SCANCODE_INSERT = (#const SDL_SCANCODE_INSERT) :: Scancode+pattern SDL_SCANCODE_HOME = (#const SDL_SCANCODE_HOME) :: Scancode+pattern SDL_SCANCODE_PAGEUP = (#const SDL_SCANCODE_PAGEUP) :: Scancode+pattern SDL_SCANCODE_DELETE = (#const SDL_SCANCODE_DELETE) :: Scancode+pattern SDL_SCANCODE_END = (#const SDL_SCANCODE_END) :: Scancode+pattern SDL_SCANCODE_PAGEDOWN = (#const SDL_SCANCODE_PAGEDOWN) :: Scancode+pattern SDL_SCANCODE_RIGHT = (#const SDL_SCANCODE_RIGHT) :: Scancode+pattern SDL_SCANCODE_LEFT = (#const SDL_SCANCODE_LEFT) :: Scancode+pattern SDL_SCANCODE_DOWN = (#const SDL_SCANCODE_DOWN) :: Scancode+pattern SDL_SCANCODE_UP = (#const SDL_SCANCODE_UP) :: Scancode+pattern SDL_SCANCODE_NUMLOCKCLEAR = (#const SDL_SCANCODE_NUMLOCKCLEAR) :: Scancode+pattern SDL_SCANCODE_KP_DIVIDE = (#const SDL_SCANCODE_KP_DIVIDE) :: Scancode+pattern SDL_SCANCODE_KP_MULTIPLY = (#const SDL_SCANCODE_KP_MULTIPLY) :: Scancode+pattern SDL_SCANCODE_KP_MINUS = (#const SDL_SCANCODE_KP_MINUS) :: Scancode+pattern SDL_SCANCODE_KP_PLUS = (#const SDL_SCANCODE_KP_PLUS) :: Scancode+pattern SDL_SCANCODE_KP_ENTER = (#const SDL_SCANCODE_KP_ENTER) :: Scancode+pattern SDL_SCANCODE_KP_1 = (#const SDL_SCANCODE_KP_1) :: Scancode+pattern SDL_SCANCODE_KP_2 = (#const SDL_SCANCODE_KP_2) :: Scancode+pattern SDL_SCANCODE_KP_3 = (#const SDL_SCANCODE_KP_3) :: Scancode+pattern SDL_SCANCODE_KP_4 = (#const SDL_SCANCODE_KP_4) :: Scancode+pattern SDL_SCANCODE_KP_5 = (#const SDL_SCANCODE_KP_5) :: Scancode+pattern SDL_SCANCODE_KP_6 = (#const SDL_SCANCODE_KP_6) :: Scancode+pattern SDL_SCANCODE_KP_7 = (#const SDL_SCANCODE_KP_7) :: Scancode+pattern SDL_SCANCODE_KP_8 = (#const SDL_SCANCODE_KP_8) :: Scancode+pattern SDL_SCANCODE_KP_9 = (#const SDL_SCANCODE_KP_9) :: Scancode+pattern SDL_SCANCODE_KP_0 = (#const SDL_SCANCODE_KP_0) :: Scancode+pattern SDL_SCANCODE_KP_PERIOD = (#const SDL_SCANCODE_KP_PERIOD) :: Scancode+pattern SDL_SCANCODE_NONUSBACKSLASH = (#const SDL_SCANCODE_NONUSBACKSLASH) :: Scancode+pattern SDL_SCANCODE_APPLICATION = (#const SDL_SCANCODE_APPLICATION) :: Scancode+pattern SDL_SCANCODE_POWER = (#const SDL_SCANCODE_POWER) :: Scancode+pattern SDL_SCANCODE_KP_EQUALS = (#const SDL_SCANCODE_KP_EQUALS) :: Scancode+pattern SDL_SCANCODE_F13 = (#const SDL_SCANCODE_F13) :: Scancode+pattern SDL_SCANCODE_F14 = (#const SDL_SCANCODE_F14) :: Scancode+pattern SDL_SCANCODE_F15 = (#const SDL_SCANCODE_F15) :: Scancode+pattern SDL_SCANCODE_F16 = (#const SDL_SCANCODE_F16) :: Scancode+pattern SDL_SCANCODE_F17 = (#const SDL_SCANCODE_F17) :: Scancode+pattern SDL_SCANCODE_F18 = (#const SDL_SCANCODE_F18) :: Scancode+pattern SDL_SCANCODE_F19 = (#const SDL_SCANCODE_F19) :: Scancode+pattern SDL_SCANCODE_F20 = (#const SDL_SCANCODE_F20) :: Scancode+pattern SDL_SCANCODE_F21 = (#const SDL_SCANCODE_F21) :: Scancode+pattern SDL_SCANCODE_F22 = (#const SDL_SCANCODE_F22) :: Scancode+pattern SDL_SCANCODE_F23 = (#const SDL_SCANCODE_F23) :: Scancode+pattern SDL_SCANCODE_F24 = (#const SDL_SCANCODE_F24) :: Scancode+pattern SDL_SCANCODE_EXECUTE = (#const SDL_SCANCODE_EXECUTE) :: Scancode+pattern SDL_SCANCODE_HELP = (#const SDL_SCANCODE_HELP) :: Scancode+pattern SDL_SCANCODE_MENU = (#const SDL_SCANCODE_MENU) :: Scancode+pattern SDL_SCANCODE_SELECT = (#const SDL_SCANCODE_SELECT) :: Scancode+pattern SDL_SCANCODE_STOP = (#const SDL_SCANCODE_STOP) :: Scancode+pattern SDL_SCANCODE_AGAIN = (#const SDL_SCANCODE_AGAIN) :: Scancode+pattern SDL_SCANCODE_UNDO = (#const SDL_SCANCODE_UNDO) :: Scancode+pattern SDL_SCANCODE_CUT = (#const SDL_SCANCODE_CUT) :: Scancode+pattern SDL_SCANCODE_COPY = (#const SDL_SCANCODE_COPY) :: Scancode+pattern SDL_SCANCODE_PASTE = (#const SDL_SCANCODE_PASTE) :: Scancode+pattern SDL_SCANCODE_FIND = (#const SDL_SCANCODE_FIND) :: Scancode+pattern SDL_SCANCODE_MUTE = (#const SDL_SCANCODE_MUTE) :: Scancode+pattern SDL_SCANCODE_VOLUMEUP = (#const SDL_SCANCODE_VOLUMEUP) :: Scancode+pattern SDL_SCANCODE_VOLUMEDOWN = (#const SDL_SCANCODE_VOLUMEDOWN) :: Scancode+pattern SDL_SCANCODE_KP_COMMA = (#const SDL_SCANCODE_KP_COMMA) :: Scancode+pattern SDL_SCANCODE_KP_EQUALSAS400 = (#const SDL_SCANCODE_KP_EQUALSAS400) :: Scancode+pattern SDL_SCANCODE_INTERNATIONAL1 = (#const SDL_SCANCODE_INTERNATIONAL1) :: Scancode+pattern SDL_SCANCODE_INTERNATIONAL2 = (#const SDL_SCANCODE_INTERNATIONAL2) :: Scancode+pattern SDL_SCANCODE_INTERNATIONAL3 = (#const SDL_SCANCODE_INTERNATIONAL3) :: Scancode+pattern SDL_SCANCODE_INTERNATIONAL4 = (#const SDL_SCANCODE_INTERNATIONAL4) :: Scancode+pattern SDL_SCANCODE_INTERNATIONAL5 = (#const SDL_SCANCODE_INTERNATIONAL5) :: Scancode+pattern SDL_SCANCODE_INTERNATIONAL6 = (#const SDL_SCANCODE_INTERNATIONAL6) :: Scancode+pattern SDL_SCANCODE_INTERNATIONAL7 = (#const SDL_SCANCODE_INTERNATIONAL7) :: Scancode+pattern SDL_SCANCODE_INTERNATIONAL8 = (#const SDL_SCANCODE_INTERNATIONAL8) :: Scancode+pattern SDL_SCANCODE_INTERNATIONAL9 = (#const SDL_SCANCODE_INTERNATIONAL9) :: Scancode+pattern SDL_SCANCODE_LANG1 = (#const SDL_SCANCODE_LANG1) :: Scancode+pattern SDL_SCANCODE_LANG2 = (#const SDL_SCANCODE_LANG2) :: Scancode+pattern SDL_SCANCODE_LANG3 = (#const SDL_SCANCODE_LANG3) :: Scancode+pattern SDL_SCANCODE_LANG4 = (#const SDL_SCANCODE_LANG4) :: Scancode+pattern SDL_SCANCODE_LANG5 = (#const SDL_SCANCODE_LANG5) :: Scancode+pattern SDL_SCANCODE_LANG6 = (#const SDL_SCANCODE_LANG6) :: Scancode+pattern SDL_SCANCODE_LANG7 = (#const SDL_SCANCODE_LANG7) :: Scancode+pattern SDL_SCANCODE_LANG8 = (#const SDL_SCANCODE_LANG8) :: Scancode+pattern SDL_SCANCODE_LANG9 = (#const SDL_SCANCODE_LANG9) :: Scancode+pattern SDL_SCANCODE_ALTERASE = (#const SDL_SCANCODE_ALTERASE) :: Scancode+pattern SDL_SCANCODE_SYSREQ = (#const SDL_SCANCODE_SYSREQ) :: Scancode+pattern SDL_SCANCODE_CANCEL = (#const SDL_SCANCODE_CANCEL) :: Scancode+pattern SDL_SCANCODE_CLEAR = (#const SDL_SCANCODE_CLEAR) :: Scancode+pattern SDL_SCANCODE_PRIOR = (#const SDL_SCANCODE_PRIOR) :: Scancode+pattern SDL_SCANCODE_RETURN2 = (#const SDL_SCANCODE_RETURN2) :: Scancode+pattern SDL_SCANCODE_SEPARATOR = (#const SDL_SCANCODE_SEPARATOR) :: Scancode+pattern SDL_SCANCODE_OUT = (#const SDL_SCANCODE_OUT) :: Scancode+pattern SDL_SCANCODE_OPER = (#const SDL_SCANCODE_OPER) :: Scancode+pattern SDL_SCANCODE_CLEARAGAIN = (#const SDL_SCANCODE_CLEARAGAIN) :: Scancode+pattern SDL_SCANCODE_CRSEL = (#const SDL_SCANCODE_CRSEL) :: Scancode+pattern SDL_SCANCODE_EXSEL = (#const SDL_SCANCODE_EXSEL) :: Scancode+pattern SDL_SCANCODE_KP_00 = (#const SDL_SCANCODE_KP_00) :: Scancode+pattern SDL_SCANCODE_KP_000 = (#const SDL_SCANCODE_KP_000) :: Scancode+pattern SDL_SCANCODE_THOUSANDSSEPARATOR = (#const SDL_SCANCODE_THOUSANDSSEPARATOR) :: Scancode+pattern SDL_SCANCODE_DECIMALSEPARATOR = (#const SDL_SCANCODE_DECIMALSEPARATOR) :: Scancode+pattern SDL_SCANCODE_CURRENCYUNIT = (#const SDL_SCANCODE_CURRENCYUNIT) :: Scancode+pattern SDL_SCANCODE_CURRENCYSUBUNIT = (#const SDL_SCANCODE_CURRENCYSUBUNIT) :: Scancode+pattern SDL_SCANCODE_KP_LEFTPAREN = (#const SDL_SCANCODE_KP_LEFTPAREN) :: Scancode+pattern SDL_SCANCODE_KP_RIGHTPAREN = (#const SDL_SCANCODE_KP_RIGHTPAREN) :: Scancode+pattern SDL_SCANCODE_KP_LEFTBRACE = (#const SDL_SCANCODE_KP_LEFTBRACE) :: Scancode+pattern SDL_SCANCODE_KP_RIGHTBRACE = (#const SDL_SCANCODE_KP_RIGHTBRACE) :: Scancode+pattern SDL_SCANCODE_KP_TAB = (#const SDL_SCANCODE_KP_TAB) :: Scancode+pattern SDL_SCANCODE_KP_BACKSPACE = (#const SDL_SCANCODE_KP_BACKSPACE) :: Scancode+pattern SDL_SCANCODE_KP_A = (#const SDL_SCANCODE_KP_A) :: Scancode+pattern SDL_SCANCODE_KP_B = (#const SDL_SCANCODE_KP_B) :: Scancode+pattern SDL_SCANCODE_KP_C = (#const SDL_SCANCODE_KP_C) :: Scancode+pattern SDL_SCANCODE_KP_D = (#const SDL_SCANCODE_KP_D) :: Scancode+pattern SDL_SCANCODE_KP_E = (#const SDL_SCANCODE_KP_E) :: Scancode+pattern SDL_SCANCODE_KP_F = (#const SDL_SCANCODE_KP_F) :: Scancode+pattern SDL_SCANCODE_KP_XOR = (#const SDL_SCANCODE_KP_XOR) :: Scancode+pattern SDL_SCANCODE_KP_POWER = (#const SDL_SCANCODE_KP_POWER) :: Scancode+pattern SDL_SCANCODE_KP_PERCENT = (#const SDL_SCANCODE_KP_PERCENT) :: Scancode+pattern SDL_SCANCODE_KP_LESS = (#const SDL_SCANCODE_KP_LESS) :: Scancode+pattern SDL_SCANCODE_KP_GREATER = (#const SDL_SCANCODE_KP_GREATER) :: Scancode+pattern SDL_SCANCODE_KP_AMPERSAND = (#const SDL_SCANCODE_KP_AMPERSAND) :: Scancode+pattern SDL_SCANCODE_KP_DBLAMPERSAND = (#const SDL_SCANCODE_KP_DBLAMPERSAND) :: Scancode+pattern SDL_SCANCODE_KP_VERTICALBAR = (#const SDL_SCANCODE_KP_VERTICALBAR) :: Scancode+pattern SDL_SCANCODE_KP_DBLVERTICALBAR = (#const SDL_SCANCODE_KP_DBLVERTICALBAR) :: Scancode+pattern SDL_SCANCODE_KP_COLON = (#const SDL_SCANCODE_KP_COLON) :: Scancode+pattern SDL_SCANCODE_KP_HASH = (#const SDL_SCANCODE_KP_HASH) :: Scancode+pattern SDL_SCANCODE_KP_SPACE = (#const SDL_SCANCODE_KP_SPACE) :: Scancode+pattern SDL_SCANCODE_KP_AT = (#const SDL_SCANCODE_KP_AT) :: Scancode+pattern SDL_SCANCODE_KP_EXCLAM = (#const SDL_SCANCODE_KP_EXCLAM) :: Scancode+pattern SDL_SCANCODE_KP_MEMSTORE = (#const SDL_SCANCODE_KP_MEMSTORE) :: Scancode+pattern SDL_SCANCODE_KP_MEMRECALL = (#const SDL_SCANCODE_KP_MEMRECALL) :: Scancode+pattern SDL_SCANCODE_KP_MEMCLEAR = (#const SDL_SCANCODE_KP_MEMCLEAR) :: Scancode+pattern SDL_SCANCODE_KP_MEMADD = (#const SDL_SCANCODE_KP_MEMADD) :: Scancode+pattern SDL_SCANCODE_KP_MEMSUBTRACT = (#const SDL_SCANCODE_KP_MEMSUBTRACT) :: Scancode+pattern SDL_SCANCODE_KP_MEMMULTIPLY = (#const SDL_SCANCODE_KP_MEMMULTIPLY) :: Scancode+pattern SDL_SCANCODE_KP_MEMDIVIDE = (#const SDL_SCANCODE_KP_MEMDIVIDE) :: Scancode+pattern SDL_SCANCODE_KP_PLUSMINUS = (#const SDL_SCANCODE_KP_PLUSMINUS) :: Scancode+pattern SDL_SCANCODE_KP_CLEAR = (#const SDL_SCANCODE_KP_CLEAR) :: Scancode+pattern SDL_SCANCODE_KP_CLEARENTRY = (#const SDL_SCANCODE_KP_CLEARENTRY) :: Scancode+pattern SDL_SCANCODE_KP_BINARY = (#const SDL_SCANCODE_KP_BINARY) :: Scancode+pattern SDL_SCANCODE_KP_OCTAL = (#const SDL_SCANCODE_KP_OCTAL) :: Scancode+pattern SDL_SCANCODE_KP_DECIMAL = (#const SDL_SCANCODE_KP_DECIMAL) :: Scancode+pattern SDL_SCANCODE_KP_HEXADECIMAL = (#const SDL_SCANCODE_KP_HEXADECIMAL) :: Scancode+pattern SDL_SCANCODE_LCTRL = (#const SDL_SCANCODE_LCTRL) :: Scancode+pattern SDL_SCANCODE_LSHIFT = (#const SDL_SCANCODE_LSHIFT) :: Scancode+pattern SDL_SCANCODE_LALT = (#const SDL_SCANCODE_LALT) :: Scancode+pattern SDL_SCANCODE_LGUI = (#const SDL_SCANCODE_LGUI) :: Scancode+pattern SDL_SCANCODE_RCTRL = (#const SDL_SCANCODE_RCTRL) :: Scancode+pattern SDL_SCANCODE_RSHIFT = (#const SDL_SCANCODE_RSHIFT) :: Scancode+pattern SDL_SCANCODE_RALT = (#const SDL_SCANCODE_RALT) :: Scancode+pattern SDL_SCANCODE_RGUI = (#const SDL_SCANCODE_RGUI) :: Scancode+pattern SDL_SCANCODE_MODE = (#const SDL_SCANCODE_MODE) :: Scancode+pattern SDL_SCANCODE_AUDIONEXT = (#const SDL_SCANCODE_AUDIONEXT) :: Scancode+pattern SDL_SCANCODE_AUDIOPREV = (#const SDL_SCANCODE_AUDIOPREV) :: Scancode+pattern SDL_SCANCODE_AUDIOSTOP = (#const SDL_SCANCODE_AUDIOSTOP) :: Scancode+pattern SDL_SCANCODE_AUDIOPLAY = (#const SDL_SCANCODE_AUDIOPLAY) :: Scancode+pattern SDL_SCANCODE_AUDIOMUTE = (#const SDL_SCANCODE_AUDIOMUTE) :: Scancode+pattern SDL_SCANCODE_MEDIASELECT = (#const SDL_SCANCODE_MEDIASELECT) :: Scancode+pattern SDL_SCANCODE_WWW = (#const SDL_SCANCODE_WWW) :: Scancode+pattern SDL_SCANCODE_MAIL = (#const SDL_SCANCODE_MAIL) :: Scancode+pattern SDL_SCANCODE_CALCULATOR = (#const SDL_SCANCODE_CALCULATOR) :: Scancode+pattern SDL_SCANCODE_COMPUTER = (#const SDL_SCANCODE_COMPUTER) :: Scancode+pattern SDL_SCANCODE_AC_SEARCH = (#const SDL_SCANCODE_AC_SEARCH) :: Scancode+pattern SDL_SCANCODE_AC_HOME = (#const SDL_SCANCODE_AC_HOME) :: Scancode+pattern SDL_SCANCODE_AC_BACK = (#const SDL_SCANCODE_AC_BACK) :: Scancode+pattern SDL_SCANCODE_AC_FORWARD = (#const SDL_SCANCODE_AC_FORWARD) :: Scancode+pattern SDL_SCANCODE_AC_STOP = (#const SDL_SCANCODE_AC_STOP) :: Scancode+pattern SDL_SCANCODE_AC_REFRESH = (#const SDL_SCANCODE_AC_REFRESH) :: Scancode+pattern SDL_SCANCODE_AC_BOOKMARKS = (#const SDL_SCANCODE_AC_BOOKMARKS) :: Scancode+pattern SDL_SCANCODE_BRIGHTNESSDOWN = (#const SDL_SCANCODE_BRIGHTNESSDOWN) :: Scancode+pattern SDL_SCANCODE_BRIGHTNESSUP = (#const SDL_SCANCODE_BRIGHTNESSUP) :: Scancode+pattern SDL_SCANCODE_DISPLAYSWITCH = (#const SDL_SCANCODE_DISPLAYSWITCH) :: Scancode+pattern SDL_SCANCODE_KBDILLUMTOGGLE = (#const SDL_SCANCODE_KBDILLUMTOGGLE) :: Scancode+pattern SDL_SCANCODE_KBDILLUMDOWN = (#const SDL_SCANCODE_KBDILLUMDOWN) :: Scancode+pattern SDL_SCANCODE_KBDILLUMUP = (#const SDL_SCANCODE_KBDILLUMUP) :: Scancode+pattern SDL_SCANCODE_EJECT = (#const SDL_SCANCODE_EJECT) :: Scancode+pattern SDL_SCANCODE_SLEEP = (#const SDL_SCANCODE_SLEEP) :: Scancode+pattern SDL_SCANCODE_APP1 = (#const SDL_SCANCODE_APP1) :: Scancode+pattern SDL_SCANCODE_APP2 = (#const SDL_SCANCODE_APP2) :: Scancode+pattern SDL_NUM_SCANCODES = (#const SDL_NUM_SCANCODES) :: Scancode++pattern SDL_SYSTEM_CURSOR_ARROW = (#const SDL_SYSTEM_CURSOR_ARROW) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_IBEAM = (#const SDL_SYSTEM_CURSOR_IBEAM) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_WAIT = (#const SDL_SYSTEM_CURSOR_WAIT) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_CROSSHAIR = (#const SDL_SYSTEM_CURSOR_CROSSHAIR) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_WAITARROW = (#const SDL_SYSTEM_CURSOR_WAITARROW) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_SIZENWSE = (#const SDL_SYSTEM_CURSOR_SIZENWSE) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_SIZENESW = (#const SDL_SYSTEM_CURSOR_SIZENESW) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_SIZEWE = (#const SDL_SYSTEM_CURSOR_SIZEWE) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_SIZENS = (#const SDL_SYSTEM_CURSOR_SIZENS) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_SIZEALL = (#const SDL_SYSTEM_CURSOR_SIZEALL) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_NO = (#const SDL_SYSTEM_CURSOR_NO) :: SystemCursor+pattern SDL_SYSTEM_CURSOR_HAND = (#const SDL_SYSTEM_CURSOR_HAND) :: SystemCursor+pattern SDL_NUM_SYSTEM_CURSORS = (#const SDL_NUM_SYSTEM_CURSORS) :: SystemCursor++pattern SDL_THREAD_PRIORITY_LOW = (#const SDL_THREAD_PRIORITY_LOW) :: ThreadPriority+pattern SDL_THREAD_PRIORITY_NORMAL = (#const SDL_THREAD_PRIORITY_NORMAL) :: ThreadPriority+pattern SDL_THREAD_PRIORITY_HIGH = (#const SDL_THREAD_PRIORITY_HIGH) :: ThreadPriority++pattern SDL_AUDIO_ALLOW_FREQUENCY_CHANGE = (#const SDL_AUDIO_ALLOW_FREQUENCY_CHANGE)+pattern SDL_AUDIO_ALLOW_FORMAT_CHANGE = (#const SDL_AUDIO_ALLOW_FORMAT_CHANGE)+pattern SDL_AUDIO_ALLOW_CHANNELS_CHANGE = (#const SDL_AUDIO_ALLOW_CHANNELS_CHANGE)+pattern SDL_AUDIO_ALLOW_ANY_CHANGE = (#const SDL_AUDIO_ALLOW_ANY_CHANGE)++pattern SDL_BUTTON_LEFT = (#const SDL_BUTTON_LEFT)+pattern SDL_BUTTON_MIDDLE = (#const SDL_BUTTON_MIDDLE)+pattern SDL_BUTTON_RIGHT = (#const SDL_BUTTON_RIGHT)+pattern SDL_BUTTON_X1 = (#const SDL_BUTTON_X1)+pattern SDL_BUTTON_X2 = (#const SDL_BUTTON_X2)+pattern SDL_BUTTON_LMASK = (#const SDL_BUTTON_LMASK)+pattern SDL_BUTTON_MMASK = (#const SDL_BUTTON_MMASK)+pattern SDL_BUTTON_RMASK = (#const SDL_BUTTON_RMASK)+pattern SDL_BUTTON_X1MASK = (#const SDL_BUTTON_X1MASK)+pattern SDL_BUTTON_X2MASK = (#const SDL_BUTTON_X2MASK)++pattern SDL_FIRSTEVENT = (#const SDL_FIRSTEVENT)+pattern SDL_QUIT = (#const SDL_QUIT)+pattern SDL_APP_TERMINATING = (#const SDL_APP_TERMINATING)+pattern SDL_APP_LOWMEMORY = (#const SDL_APP_LOWMEMORY)+pattern SDL_APP_WILLENTERBACKGROUND = (#const SDL_APP_WILLENTERBACKGROUND)+pattern SDL_APP_DIDENTERBACKGROUND = (#const SDL_APP_DIDENTERBACKGROUND)+pattern SDL_APP_WILLENTERFOREGROUND = (#const SDL_APP_WILLENTERFOREGROUND)+pattern SDL_APP_DIDENTERFOREGROUND = (#const SDL_APP_DIDENTERFOREGROUND)+pattern SDL_WINDOWEVENT = (#const SDL_WINDOWEVENT)+pattern SDL_SYSWMEVENT = (#const SDL_SYSWMEVENT)+pattern SDL_KEYDOWN = (#const SDL_KEYDOWN)+pattern SDL_KEYUP = (#const SDL_KEYUP)+pattern SDL_TEXTEDITING = (#const SDL_TEXTEDITING)+pattern SDL_TEXTINPUT = (#const SDL_TEXTINPUT)+pattern SDL_MOUSEMOTION = (#const SDL_MOUSEMOTION)+pattern SDL_MOUSEBUTTONDOWN = (#const SDL_MOUSEBUTTONDOWN)+pattern SDL_MOUSEBUTTONUP = (#const SDL_MOUSEBUTTONUP)+pattern SDL_MOUSEWHEEL = (#const SDL_MOUSEWHEEL)+pattern SDL_JOYAXISMOTION = (#const SDL_JOYAXISMOTION)+pattern SDL_JOYBALLMOTION = (#const SDL_JOYBALLMOTION)+pattern SDL_JOYHATMOTION = (#const SDL_JOYHATMOTION)+pattern SDL_JOYBUTTONDOWN = (#const SDL_JOYBUTTONDOWN)+pattern SDL_JOYBUTTONUP = (#const SDL_JOYBUTTONUP)+pattern SDL_JOYDEVICEADDED = (#const SDL_JOYDEVICEADDED)+pattern SDL_JOYDEVICEREMOVED = (#const SDL_JOYDEVICEREMOVED)+pattern SDL_CONTROLLERAXISMOTION = (#const SDL_CONTROLLERAXISMOTION)+pattern SDL_CONTROLLERBUTTONDOWN = (#const SDL_CONTROLLERBUTTONDOWN)+pattern SDL_CONTROLLERBUTTONUP = (#const SDL_CONTROLLERBUTTONUP)+pattern SDL_CONTROLLERDEVICEADDED = (#const SDL_CONTROLLERDEVICEADDED)+pattern SDL_CONTROLLERDEVICEREMOVED = (#const SDL_CONTROLLERDEVICEREMOVED)+pattern SDL_CONTROLLERDEVICEREMAPPED = (#const SDL_CONTROLLERDEVICEREMAPPED)+pattern SDL_FINGERDOWN = (#const SDL_FINGERDOWN)+pattern SDL_FINGERUP = (#const SDL_FINGERUP)+pattern SDL_FINGERMOTION = (#const SDL_FINGERMOTION)+pattern SDL_DOLLARGESTURE = (#const SDL_DOLLARGESTURE)+pattern SDL_DOLLARRECORD = (#const SDL_DOLLARRECORD)+pattern SDL_MULTIGESTURE = (#const SDL_MULTIGESTURE)+pattern SDL_CLIPBOARDUPDATE = (#const SDL_CLIPBOARDUPDATE)+pattern SDL_DROPFILE = (#const SDL_DROPFILE)+pattern SDL_USEREVENT = (#const SDL_USEREVENT)+pattern SDL_LASTEVENT = (#const SDL_LASTEVENT)++pattern SDL_HAT_CENTERED = (#const SDL_HAT_CENTERED)+pattern SDL_HAT_UP = (#const SDL_HAT_UP)+pattern SDL_HAT_RIGHT = (#const SDL_HAT_RIGHT)+pattern SDL_HAT_DOWN = (#const SDL_HAT_DOWN)+pattern SDL_HAT_LEFT = (#const SDL_HAT_LEFT)+pattern SDL_HAT_RIGHTUP = (#const SDL_HAT_RIGHTUP)+pattern SDL_HAT_RIGHTDOWN = (#const SDL_HAT_RIGHTDOWN)+pattern SDL_HAT_LEFTUP = (#const SDL_HAT_LEFTUP)+pattern SDL_HAT_LEFTDOWN = (#const SDL_HAT_LEFTDOWN)++pattern SDL_PRESSED = (#const SDL_PRESSED)+pattern SDL_RELEASED = (#const SDL_RELEASED)++pattern SDL_LOG_CATEGORY_APPLICATION = (#const SDL_LOG_CATEGORY_APPLICATION)+pattern SDL_LOG_CATEGORY_ERROR = (#const SDL_LOG_CATEGORY_ERROR)+pattern SDL_LOG_CATEGORY_ASSERT = (#const SDL_LOG_CATEGORY_ASSERT)+pattern SDL_LOG_CATEGORY_SYSTEM = (#const SDL_LOG_CATEGORY_SYSTEM)+pattern SDL_LOG_CATEGORY_AUDIO = (#const SDL_LOG_CATEGORY_AUDIO)+pattern SDL_LOG_CATEGORY_VIDEO = (#const SDL_LOG_CATEGORY_VIDEO)+pattern SDL_LOG_CATEGORY_RENDER = (#const SDL_LOG_CATEGORY_RENDER)+pattern SDL_LOG_CATEGORY_INPUT = (#const SDL_LOG_CATEGORY_INPUT)+pattern SDL_LOG_CATEGORY_TEST = (#const SDL_LOG_CATEGORY_TEST)+pattern SDL_LOG_CATEGORY_CUSTOM = (#const SDL_LOG_CATEGORY_CUSTOM)++pattern SDL_MESSAGEBOX_ERROR = (#const SDL_MESSAGEBOX_ERROR)+pattern SDL_MESSAGEBOX_WARNING = (#const SDL_MESSAGEBOX_WARNING)+pattern SDL_MESSAGEBOX_INFORMATION = (#const SDL_MESSAGEBOX_INFORMATION)++pattern SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = (#const SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT)+pattern SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = (#const SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT)++pattern SDL_GL_CONTEXT_PROFILE_CORE = (#const SDL_GL_CONTEXT_PROFILE_CORE)+pattern SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = (#const SDL_GL_CONTEXT_PROFILE_COMPATIBILITY)+pattern SDL_GL_CONTEXT_PROFILE_ES = (#const SDL_GL_CONTEXT_PROFILE_ES)++pattern SDL_GL_CONTEXT_DEBUG_FLAG = (#const SDL_GL_CONTEXT_DEBUG_FLAG)+pattern SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = (#const SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG)+pattern SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = (#const SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG)+pattern SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = (#const SDL_GL_CONTEXT_RESET_ISOLATION_FLAG)++pattern SDL_PIXELFORMAT_UNKNOWN = (#const SDL_PIXELFORMAT_UNKNOWN)+pattern SDL_PIXELFORMAT_INDEX1LSB = (#const SDL_PIXELFORMAT_INDEX1LSB)+pattern SDL_PIXELFORMAT_INDEX1MSB = (#const SDL_PIXELFORMAT_INDEX1MSB)+pattern SDL_PIXELFORMAT_INDEX4LSB = (#const SDL_PIXELFORMAT_INDEX4LSB)+pattern SDL_PIXELFORMAT_INDEX4MSB = (#const SDL_PIXELFORMAT_INDEX4MSB)+pattern SDL_PIXELFORMAT_INDEX8 = (#const SDL_PIXELFORMAT_INDEX8)+pattern SDL_PIXELFORMAT_RGB332 = (#const SDL_PIXELFORMAT_RGB332)+pattern SDL_PIXELFORMAT_RGB444 = (#const SDL_PIXELFORMAT_RGB444)+pattern SDL_PIXELFORMAT_RGB555 = (#const SDL_PIXELFORMAT_RGB555)+pattern SDL_PIXELFORMAT_BGR555 = (#const SDL_PIXELFORMAT_BGR555)+pattern SDL_PIXELFORMAT_ARGB4444 = (#const SDL_PIXELFORMAT_ARGB4444)+pattern SDL_PIXELFORMAT_RGBA4444 = (#const SDL_PIXELFORMAT_RGBA4444)+pattern SDL_PIXELFORMAT_ABGR4444 = (#const SDL_PIXELFORMAT_ABGR4444)+pattern SDL_PIXELFORMAT_BGRA4444 = (#const SDL_PIXELFORMAT_BGRA4444)+pattern SDL_PIXELFORMAT_ARGB1555 = (#const SDL_PIXELFORMAT_ARGB1555)+pattern SDL_PIXELFORMAT_RGBA5551 = (#const SDL_PIXELFORMAT_RGBA5551)+pattern SDL_PIXELFORMAT_ABGR1555 = (#const SDL_PIXELFORMAT_ABGR1555)+pattern SDL_PIXELFORMAT_BGRA5551 = (#const SDL_PIXELFORMAT_BGRA5551)+pattern SDL_PIXELFORMAT_RGB565 = (#const SDL_PIXELFORMAT_RGB565)+pattern SDL_PIXELFORMAT_BGR565 = (#const SDL_PIXELFORMAT_BGR565)+pattern SDL_PIXELFORMAT_RGB24 = (#const SDL_PIXELFORMAT_RGB24)+pattern SDL_PIXELFORMAT_BGR24 = (#const SDL_PIXELFORMAT_BGR24)+pattern SDL_PIXELFORMAT_RGB888 = (#const SDL_PIXELFORMAT_RGB888)+pattern SDL_PIXELFORMAT_RGBX8888 = (#const SDL_PIXELFORMAT_RGBX8888)+pattern SDL_PIXELFORMAT_BGR888 = (#const SDL_PIXELFORMAT_BGR888)+pattern SDL_PIXELFORMAT_BGRX8888 = (#const SDL_PIXELFORMAT_BGRX8888)+pattern SDL_PIXELFORMAT_ARGB8888 = (#const SDL_PIXELFORMAT_ARGB8888)+pattern SDL_PIXELFORMAT_RGBA8888 = (#const SDL_PIXELFORMAT_RGBA8888)+pattern SDL_PIXELFORMAT_ABGR8888 = (#const SDL_PIXELFORMAT_ABGR8888)+pattern SDL_PIXELFORMAT_BGRA8888 = (#const SDL_PIXELFORMAT_BGRA8888)+pattern SDL_PIXELFORMAT_ARGB2101010 = (#const SDL_PIXELFORMAT_ARGB2101010)+pattern SDL_PIXELFORMAT_YV12 = (#const SDL_PIXELFORMAT_YV12)+pattern SDL_PIXELFORMAT_IYUV = (#const SDL_PIXELFORMAT_IYUV)+pattern SDL_PIXELFORMAT_YUY2 = (#const SDL_PIXELFORMAT_YUY2)+pattern SDL_PIXELFORMAT_UYVY = (#const SDL_PIXELFORMAT_UYVY)+pattern SDL_PIXELFORMAT_YVYU = (#const SDL_PIXELFORMAT_YVYU)++pattern SDL_RENDERER_SOFTWARE = (#const SDL_RENDERER_SOFTWARE)+pattern SDL_RENDERER_ACCELERATED = (#const SDL_RENDERER_ACCELERATED)+pattern SDL_RENDERER_PRESENTVSYNC = (#const SDL_RENDERER_PRESENTVSYNC)+pattern SDL_RENDERER_TARGETTEXTURE = (#const SDL_RENDERER_TARGETTEXTURE)++pattern SDL_TEXTUREACCESS_STATIC = (#const SDL_TEXTUREACCESS_STATIC)+pattern SDL_TEXTUREACCESS_STREAMING = (#const SDL_TEXTUREACCESS_STREAMING)+pattern SDL_TEXTUREACCESS_TARGET = (#const SDL_TEXTUREACCESS_TARGET)++pattern SDL_TEXTUREMODULATE_NONE = (#const SDL_TEXTUREMODULATE_NONE)+pattern SDL_TEXTUREMODULATE_COLOR = (#const SDL_TEXTUREMODULATE_COLOR)+pattern SDL_TEXTUREMODULATE_ALPHA = (#const SDL_TEXTUREMODULATE_ALPHA)++pattern SDL_TOUCH_MOUSEID = (#const SDL_TOUCH_MOUSEID)++pattern SDL_WINDOWEVENT_NONE = (#const SDL_WINDOWEVENT_NONE)+pattern SDL_WINDOWEVENT_SHOWN = (#const SDL_WINDOWEVENT_SHOWN)+pattern SDL_WINDOWEVENT_HIDDEN = (#const SDL_WINDOWEVENT_HIDDEN)+pattern SDL_WINDOWEVENT_EXPOSED = (#const SDL_WINDOWEVENT_EXPOSED)+pattern SDL_WINDOWEVENT_MOVED = (#const SDL_WINDOWEVENT_MOVED)+pattern SDL_WINDOWEVENT_RESIZED = (#const SDL_WINDOWEVENT_RESIZED)+pattern SDL_WINDOWEVENT_SIZE_CHANGED = (#const SDL_WINDOWEVENT_SIZE_CHANGED)+pattern SDL_WINDOWEVENT_MINIMIZED = (#const SDL_WINDOWEVENT_MINIMIZED)+pattern SDL_WINDOWEVENT_MAXIMIZED = (#const SDL_WINDOWEVENT_MAXIMIZED)+pattern SDL_WINDOWEVENT_RESTORED = (#const SDL_WINDOWEVENT_RESTORED)+pattern SDL_WINDOWEVENT_ENTER = (#const SDL_WINDOWEVENT_ENTER)+pattern SDL_WINDOWEVENT_LEAVE = (#const SDL_WINDOWEVENT_LEAVE)+pattern SDL_WINDOWEVENT_FOCUS_GAINED = (#const SDL_WINDOWEVENT_FOCUS_GAINED)+pattern SDL_WINDOWEVENT_FOCUS_LOST = (#const SDL_WINDOWEVENT_FOCUS_LOST)+pattern SDL_WINDOWEVENT_CLOSE = (#const SDL_WINDOWEVENT_CLOSE)++pattern SDL_WINDOW_FULLSCREEN = (#const SDL_WINDOW_FULLSCREEN)+pattern SDL_WINDOW_OPENGL = (#const SDL_WINDOW_OPENGL)+pattern SDL_WINDOW_SHOWN = (#const SDL_WINDOW_SHOWN)+pattern SDL_WINDOW_HIDDEN = (#const SDL_WINDOW_HIDDEN)+pattern SDL_WINDOW_BORDERLESS = (#const SDL_WINDOW_BORDERLESS)+pattern SDL_WINDOW_RESIZABLE = (#const SDL_WINDOW_RESIZABLE)+pattern SDL_WINDOW_MINIMIZED = (#const SDL_WINDOW_MINIMIZED)+pattern SDL_WINDOW_MAXIMIZED = (#const SDL_WINDOW_MAXIMIZED)+pattern SDL_WINDOW_INPUT_GRABBED = (#const SDL_WINDOW_INPUT_GRABBED)+pattern SDL_WINDOW_INPUT_FOCUS = (#const SDL_WINDOW_INPUT_FOCUS)+pattern SDL_WINDOW_MOUSE_FOCUS = (#const SDL_WINDOW_MOUSE_FOCUS)+pattern SDL_WINDOW_FULLSCREEN_DESKTOP = (#const SDL_WINDOW_FULLSCREEN_DESKTOP)+pattern SDL_WINDOW_FOREIGN = (#const SDL_WINDOW_FOREIGN)+pattern SDL_WINDOW_ALLOW_HIGHDPI = (#const SDL_WINDOW_ALLOW_HIGHDPI)++pattern SDL_WINDOWPOS_UNDEFINED = (#const SDL_WINDOWPOS_UNDEFINED)+pattern SDL_WINDOWPOS_CENTERED = (#const SDL_WINDOWPOS_CENTERED)++pattern SDL_HAPTIC_CONSTANT = (#const SDL_HAPTIC_CONSTANT)
src/SDL/Raw/Error.hs view
@@ -1,44 +1,44 @@-{-# LANGUAGE DeriveDataTypeable #-} -module SDL.Raw.Error ( - -- * Error Handling - SDLError(..), - throwError, - - -- * Manual Error Handling - clearError, - getError, - setError -) where - -import Control.Exception -import Control.Monad.Catch -import Control.Monad.IO.Class -import Data.Typeable -import Foreign.C.String -import Foreign.C.Types - --- | Note: the 'CString' is only valid until the next SDL function call. If you --- need to preserve the error message, make a copy of it. -newtype SDLError = SDLError CString - deriving (Eq, Show, Typeable) - -instance Exception SDLError - -foreign import ccall "SDL.h SDL_ClearError" clearErrorFFI :: IO () -foreign import ccall "SDL.h SDL_GetError" getErrorFFI :: IO CString -foreign import ccall "sdlhelper.c SDLHelper_SetError" setErrorFFI :: CString -> IO CInt - -throwError :: (MonadThrow m, MonadIO m) => m () -throwError = getError >>= throwM . SDLError - -clearError :: MonadIO m => m () -clearError = liftIO clearErrorFFI -{-# INLINE clearError #-} - -getError :: MonadIO m => m CString -getError = liftIO getErrorFFI -{-# INLINE getError #-} - -setError :: MonadIO m => CString -> m CInt -setError v1 = liftIO $ setErrorFFI v1 -{-# INLINE setError #-} +{-# LANGUAGE DeriveDataTypeable #-}+module SDL.Raw.Error (+ -- * Error Handling+ SDLError(..),+ throwError,++ -- * Manual Error Handling+ clearError,+ getError,+ setError+) where++import Control.Exception+import Control.Monad.Catch+import Control.Monad.IO.Class+import Data.Typeable+import Foreign.C.String+import Foreign.C.Types++-- | Note: the 'CString' is only valid until the next SDL function call. If you+-- need to preserve the error message, make a copy of it.+newtype SDLError = SDLError CString+ deriving (Eq, Show, Typeable)++instance Exception SDLError++foreign import ccall "SDL.h SDL_ClearError" clearErrorFFI :: IO ()+foreign import ccall "SDL.h SDL_GetError" getErrorFFI :: IO CString+foreign import ccall "sdlhelper.c SDLHelper_SetError" setErrorFFI :: CString -> IO CInt++throwError :: (MonadThrow m, MonadIO m) => m ()+throwError = getError >>= throwM . SDLError++clearError :: MonadIO m => m ()+clearError = liftIO clearErrorFFI+{-# INLINE clearError #-}++getError :: MonadIO m => m CString+getError = liftIO getErrorFFI+{-# INLINE getError #-}++setError :: MonadIO m => CString -> m CInt+setError v1 = liftIO $ setErrorFFI v1+{-# INLINE setError #-}
src/SDL/Raw/Event.hs view
@@ -1,639 +1,639 @@-module SDL.Raw.Event ( - -- * Event Handling - addEventWatch, - delEventWatch, - eventState, - filterEvents, - flushEvent, - flushEvents, - getEventFilter, - getNumTouchDevices, - getNumTouchFingers, - getTouchDevice, - getTouchFinger, - hasEvent, - hasEvents, - loadDollarTemplates, - peepEvents, - pollEvent, - pumpEvents, - pushEvent, - quitRequested, - recordGesture, - registerEvents, - saveAllDollarTemplates, - saveDollarTemplate, - setEventFilter, - waitEvent, - waitEventTimeout, - - -- * Keyboard Support - getKeyFromName, - getKeyFromScancode, - getKeyName, - getKeyboardFocus, - getKeyboardState, - getModState, - getScancodeFromKey, - getScancodeFromName, - getScancodeName, - hasScreenKeyboardSupport, - isScreenKeyboardShown, - isTextInputActive, - setModState, - setTextInputRect, - startTextInput, - stopTextInput, - - -- * Mouse Support - createColorCursor, - createCursor, - createSystemCursor, - freeCursor, - getCursor, - getDefaultCursor, - getMouseFocus, - getMouseState, - getRelativeMouseMode, - getRelativeMouseState, - setCursor, - setRelativeMouseMode, - showCursor, - warpMouseInWindow, - - -- * Joystick Support - joystickClose, - joystickEventState, - joystickGetAttached, - joystickGetAxis, - joystickGetBall, - joystickGetButton, - joystickGetDeviceGUID, - joystickGetGUID, - joystickGetGUIDFromString, - joystickGetGUIDString, - joystickGetHat, - joystickInstanceID, - joystickName, - joystickNameForIndex, - joystickNumAxes, - joystickNumBalls, - joystickNumButtons, - joystickNumHats, - joystickOpen, - joystickUpdate, - numJoysticks, - - -- * Game Controller Support - gameControllerAddMapping, - gameControllerAddMappingsFromFile, - gameControllerAddMappingsFromRW, - gameControllerClose, - gameControllerEventState, - gameControllerGetAttached, - gameControllerGetAxis, - gameControllerGetAxisFromString, - gameControllerGetBindForAxis, - gameControllerGetBindForButton, - gameControllerGetButton, - gameControllerGetButtonFromString, - gameControllerGetJoystick, - gameControllerGetStringForAxis, - gameControllerGetStringForButton, - gameControllerMapping, - gameControllerMappingForGUID, - gameControllerName, - gameControllerNameForIndex, - gameControllerOpen, - gameControllerUpdate, - isGameController -) where - -import Control.Monad.IO.Class -import Data.Int -import Data.Word -import Foreign.C.String -import Foreign.C.Types -import Foreign.Marshal.Alloc -import Foreign.Ptr -import Foreign.Storable -import SDL.Raw.Enum -import SDL.Raw.Filesystem -import SDL.Raw.Types - -foreign import ccall "SDL.h SDL_AddEventWatch" addEventWatchFFI :: EventFilter -> Ptr () -> IO () -foreign import ccall "SDL.h SDL_DelEventWatch" delEventWatchFFI :: EventFilter -> Ptr () -> IO () -foreign import ccall "SDL.h SDL_EventState" eventStateFFI :: Word32 -> CInt -> IO Word8 -foreign import ccall "SDL.h SDL_FilterEvents" filterEventsFFI :: EventFilter -> Ptr () -> IO () -foreign import ccall "SDL.h SDL_FlushEvent" flushEventFFI :: Word32 -> IO () -foreign import ccall "SDL.h SDL_FlushEvents" flushEventsFFI :: Word32 -> Word32 -> IO () -foreign import ccall "SDL.h SDL_GetEventFilter" getEventFilterFFI :: Ptr EventFilter -> Ptr (Ptr ()) -> IO Bool -foreign import ccall "SDL.h SDL_GetNumTouchDevices" getNumTouchDevicesFFI :: IO CInt -foreign import ccall "SDL.h SDL_GetNumTouchFingers" getNumTouchFingersFFI :: TouchID -> IO CInt -foreign import ccall "SDL.h SDL_GetTouchDevice" getTouchDeviceFFI :: CInt -> IO TouchID -foreign import ccall "SDL.h SDL_GetTouchFinger" getTouchFingerFFI :: TouchID -> CInt -> IO (Ptr Finger) -foreign import ccall "SDL.h SDL_HasEvent" hasEventFFI :: Word32 -> IO Bool -foreign import ccall "SDL.h SDL_HasEvents" hasEventsFFI :: Word32 -> Word32 -> IO Bool -foreign import ccall "SDL.h SDL_LoadDollarTemplates" loadDollarTemplatesFFI :: TouchID -> Ptr RWops -> IO CInt -foreign import ccall "SDL.h SDL_PeepEvents" peepEventsFFI :: Ptr Event -> CInt -> EventAction -> Word32 -> Word32 -> IO CInt -foreign import ccall "SDL.h SDL_PollEvent" pollEventFFI :: Ptr Event -> IO CInt -foreign import ccall "SDL.h SDL_PumpEvents" pumpEventsFFI :: IO () -foreign import ccall "SDL.h SDL_PushEvent" pushEventFFI :: Ptr Event -> IO CInt -foreign import ccall "SDL.h SDL_RecordGesture" recordGestureFFI :: TouchID -> IO CInt -foreign import ccall "SDL.h SDL_RegisterEvents" registerEventsFFI :: CInt -> IO Word32 -foreign import ccall "SDL.h SDL_SaveAllDollarTemplates" saveAllDollarTemplatesFFI :: Ptr RWops -> IO CInt -foreign import ccall "SDL.h SDL_SaveDollarTemplate" saveDollarTemplateFFI :: GestureID -> Ptr RWops -> IO CInt -foreign import ccall "SDL.h SDL_SetEventFilter" setEventFilterFFI :: EventFilter -> Ptr () -> IO () -foreign import ccall "SDL.h SDL_WaitEvent" waitEventFFI :: Ptr Event -> IO CInt -foreign import ccall "SDL.h SDL_WaitEventTimeout" waitEventTimeoutFFI :: Ptr Event -> CInt -> IO CInt - -foreign import ccall "SDL.h SDL_GetKeyFromName" getKeyFromNameFFI :: CString -> IO Keycode -foreign import ccall "SDL.h SDL_GetKeyFromScancode" getKeyFromScancodeFFI :: Scancode -> IO Keycode -foreign import ccall "SDL.h SDL_GetKeyName" getKeyNameFFI :: Keycode -> IO CString -foreign import ccall "SDL.h SDL_GetKeyboardFocus" getKeyboardFocusFFI :: IO Window -foreign import ccall "SDL.h SDL_GetKeyboardState" getKeyboardStateFFI :: Ptr CInt -> IO (Ptr Word8) -foreign import ccall "SDL.h SDL_GetModState" getModStateFFI :: IO Keymod -foreign import ccall "SDL.h SDL_GetScancodeFromKey" getScancodeFromKeyFFI :: Keycode -> IO Scancode -foreign import ccall "SDL.h SDL_GetScancodeFromName" getScancodeFromNameFFI :: CString -> IO Scancode -foreign import ccall "SDL.h SDL_GetScancodeName" getScancodeNameFFI :: Scancode -> IO CString -foreign import ccall "SDL.h SDL_HasScreenKeyboardSupport" hasScreenKeyboardSupportFFI :: IO Bool -foreign import ccall "SDL.h SDL_IsScreenKeyboardShown" isScreenKeyboardShownFFI :: Window -> IO Bool -foreign import ccall "SDL.h SDL_IsTextInputActive" isTextInputActiveFFI :: IO Bool -foreign import ccall "SDL.h SDL_SetModState" setModStateFFI :: Keymod -> IO () -foreign import ccall "SDL.h SDL_SetTextInputRect" setTextInputRectFFI :: Ptr Rect -> IO () -foreign import ccall "SDL.h SDL_StartTextInput" startTextInputFFI :: IO () -foreign import ccall "SDL.h SDL_StopTextInput" stopTextInputFFI :: IO () - -foreign import ccall "SDL.h SDL_CreateColorCursor" createColorCursorFFI :: Ptr Surface -> CInt -> CInt -> IO Cursor -foreign import ccall "SDL.h SDL_CreateCursor" createCursorFFI :: Ptr Word8 -> Ptr Word8 -> CInt -> CInt -> CInt -> CInt -> IO Cursor -foreign import ccall "SDL.h SDL_CreateSystemCursor" createSystemCursorFFI :: SystemCursor -> IO Cursor -foreign import ccall "SDL.h SDL_FreeCursor" freeCursorFFI :: Cursor -> IO () -foreign import ccall "SDL.h SDL_GetCursor" getCursorFFI :: IO Cursor -foreign import ccall "SDL.h SDL_GetDefaultCursor" getDefaultCursorFFI :: IO Cursor -foreign import ccall "SDL.h SDL_GetMouseFocus" getMouseFocusFFI :: IO Window -foreign import ccall "SDL.h SDL_GetMouseState" getMouseStateFFI :: Ptr CInt -> Ptr CInt -> IO Word32 -foreign import ccall "SDL.h SDL_GetRelativeMouseMode" getRelativeMouseModeFFI :: IO Bool -foreign import ccall "SDL.h SDL_GetRelativeMouseState" getRelativeMouseStateFFI :: Ptr CInt -> Ptr CInt -> IO Word32 -foreign import ccall "SDL.h SDL_SetCursor" setCursorFFI :: Cursor -> IO () -foreign import ccall "SDL.h SDL_SetRelativeMouseMode" setRelativeMouseModeFFI :: Bool -> IO CInt -foreign import ccall "SDL.h SDL_ShowCursor" showCursorFFI :: CInt -> IO CInt -foreign import ccall "SDL.h SDL_WarpMouseInWindow" warpMouseInWindowFFI :: Window -> CInt -> CInt -> IO () - -foreign import ccall "SDL.h SDL_JoystickClose" joystickCloseFFI :: Joystick -> IO () -foreign import ccall "SDL.h SDL_JoystickEventState" joystickEventStateFFI :: CInt -> IO CInt -foreign import ccall "SDL.h SDL_JoystickGetAttached" joystickGetAttachedFFI :: Joystick -> IO Bool -foreign import ccall "SDL.h SDL_JoystickGetAxis" joystickGetAxisFFI :: Joystick -> CInt -> IO Int16 -foreign import ccall "SDL.h SDL_JoystickGetBall" joystickGetBallFFI :: Joystick -> CInt -> Ptr CInt -> Ptr CInt -> IO CInt -foreign import ccall "SDL.h SDL_JoystickGetButton" joystickGetButtonFFI :: Joystick -> CInt -> IO Word8 -foreign import ccall "sdlhelper.h SDLHelper_JoystickGetDeviceGUID" joystickGetDeviceGUIDFFI :: CInt -> Ptr JoystickGUID -> IO () -foreign import ccall "sdlhelper.h SDLHelper_JoystickGetGUID" joystickGetGUIDFFI :: Joystick -> Ptr JoystickGUID -> IO () -foreign import ccall "sdlhelper.h SDLHelper_JoystickGetGUIDFromString" joystickGetGUIDFromStringFFI :: CString -> Ptr JoystickGUID -> IO () -foreign import ccall "sdlhelper.h SDLHelper_JoystickGetGUIDString" joystickGetGUIDStringFFI :: Ptr JoystickGUID -> CString -> CInt -> IO () -foreign import ccall "SDL.h SDL_JoystickGetHat" joystickGetHatFFI :: Joystick -> CInt -> IO Word8 -foreign import ccall "SDL.h SDL_JoystickInstanceID" joystickInstanceIDFFI :: Joystick -> IO JoystickID -foreign import ccall "SDL.h SDL_JoystickName" joystickNameFFI :: Joystick -> IO CString -foreign import ccall "SDL.h SDL_JoystickNameForIndex" joystickNameForIndexFFI :: CInt -> IO CString -foreign import ccall "SDL.h SDL_JoystickNumAxes" joystickNumAxesFFI :: Joystick -> IO CInt -foreign import ccall "SDL.h SDL_JoystickNumBalls" joystickNumBallsFFI :: Joystick -> IO CInt -foreign import ccall "SDL.h SDL_JoystickNumButtons" joystickNumButtonsFFI :: Joystick -> IO CInt -foreign import ccall "SDL.h SDL_JoystickNumHats" joystickNumHatsFFI :: Joystick -> IO CInt -foreign import ccall "SDL.h SDL_JoystickOpen" joystickOpenFFI :: CInt -> IO Joystick -foreign import ccall "SDL.h SDL_JoystickUpdate" joystickUpdateFFI :: IO () -foreign import ccall "SDL.h SDL_NumJoysticks" numJoysticksFFI :: IO CInt - -foreign import ccall "SDL.h SDL_GameControllerAddMapping" gameControllerAddMappingFFI :: CString -> IO CInt -foreign import ccall "SDL.h SDL_GameControllerAddMappingsFromRW" gameControllerAddMappingsFromRWFFI :: Ptr RWops -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_GameControllerClose" gameControllerCloseFFI :: GameController -> IO () -foreign import ccall "SDL.h SDL_GameControllerEventState" gameControllerEventStateFFI :: CInt -> IO CInt -foreign import ccall "SDL.h SDL_GameControllerGetAttached" gameControllerGetAttachedFFI :: GameController -> IO Bool -foreign import ccall "SDL.h SDL_GameControllerGetAxis" gameControllerGetAxisFFI :: GameController -> GameControllerAxis -> IO Int16 -foreign import ccall "SDL.h SDL_GameControllerGetAxisFromString" gameControllerGetAxisFromStringFFI :: CString -> IO GameControllerAxis -foreign import ccall "sdlhelper.h SDLHelper_GameControllerGetBindForAxis" gameControllerGetBindForAxisFFI :: GameController -> GameControllerAxis -> Ptr GameControllerButtonBind -> IO () -foreign import ccall "sdlhelper.h SDLHelper_GameControllerGetBindForButton" gameControllerGetBindForButtonFFI :: GameController -> GameControllerButton -> Ptr GameControllerButtonBind -> IO () -foreign import ccall "SDL.h SDL_GameControllerGetButton" gameControllerGetButtonFFI :: GameController -> GameControllerButton -> IO Word8 -foreign import ccall "SDL.h SDL_GameControllerGetButtonFromString" gameControllerGetButtonFromStringFFI :: CString -> IO GameControllerButton -foreign import ccall "SDL.h SDL_GameControllerGetJoystick" gameControllerGetJoystickFFI :: GameController -> IO Joystick -foreign import ccall "SDL.h SDL_GameControllerGetStringForAxis" gameControllerGetStringForAxisFFI :: GameControllerAxis -> IO CString -foreign import ccall "SDL.h SDL_GameControllerGetStringForButton" gameControllerGetStringForButtonFFI :: GameControllerButton -> IO CString -foreign import ccall "SDL.h SDL_GameControllerMapping" gameControllerMappingFFI :: GameController -> IO CString -foreign import ccall "sdlhelper.h SDLHelper_GameControllerMappingForGUID" gameControllerMappingForGUIDFFI :: Ptr JoystickGUID -> IO CString -foreign import ccall "SDL.h SDL_GameControllerName" gameControllerNameFFI :: GameController -> IO CString -foreign import ccall "SDL.h SDL_GameControllerNameForIndex" gameControllerNameForIndexFFI :: CInt -> IO CString -foreign import ccall "SDL.h SDL_GameControllerOpen" gameControllerOpenFFI :: CInt -> IO GameController -foreign import ccall "SDL.h SDL_GameControllerUpdate" gameControllerUpdateFFI :: IO () -foreign import ccall "SDL.h SDL_IsGameController" isGameControllerFFI :: CInt -> IO Bool - -addEventWatch :: MonadIO m => EventFilter -> Ptr () -> m () -addEventWatch v1 v2 = liftIO $ addEventWatchFFI v1 v2 -{-# INLINE addEventWatch #-} - -delEventWatch :: MonadIO m => EventFilter -> Ptr () -> m () -delEventWatch v1 v2 = liftIO $ delEventWatchFFI v1 v2 -{-# INLINE delEventWatch #-} - -eventState :: MonadIO m => Word32 -> CInt -> m Word8 -eventState v1 v2 = liftIO $ eventStateFFI v1 v2 -{-# INLINE eventState #-} - -filterEvents :: MonadIO m => EventFilter -> Ptr () -> m () -filterEvents v1 v2 = liftIO $ filterEventsFFI v1 v2 -{-# INLINE filterEvents #-} - -flushEvent :: MonadIO m => Word32 -> m () -flushEvent v1 = liftIO $ flushEventFFI v1 -{-# INLINE flushEvent #-} - -flushEvents :: MonadIO m => Word32 -> Word32 -> m () -flushEvents v1 v2 = liftIO $ flushEventsFFI v1 v2 -{-# INLINE flushEvents #-} - -getEventFilter :: MonadIO m => Ptr EventFilter -> Ptr (Ptr ()) -> m Bool -getEventFilter v1 v2 = liftIO $ getEventFilterFFI v1 v2 -{-# INLINE getEventFilter #-} - -getNumTouchDevices :: MonadIO m => m CInt -getNumTouchDevices = liftIO getNumTouchDevicesFFI -{-# INLINE getNumTouchDevices #-} - -getNumTouchFingers :: MonadIO m => TouchID -> m CInt -getNumTouchFingers v1 = liftIO $ getNumTouchFingersFFI v1 -{-# INLINE getNumTouchFingers #-} - -getTouchDevice :: MonadIO m => CInt -> m TouchID -getTouchDevice v1 = liftIO $ getTouchDeviceFFI v1 -{-# INLINE getTouchDevice #-} - -getTouchFinger :: MonadIO m => TouchID -> CInt -> m (Ptr Finger) -getTouchFinger v1 v2 = liftIO $ getTouchFingerFFI v1 v2 -{-# INLINE getTouchFinger #-} - -hasEvent :: MonadIO m => Word32 -> m Bool -hasEvent v1 = liftIO $ hasEventFFI v1 -{-# INLINE hasEvent #-} - -hasEvents :: MonadIO m => Word32 -> Word32 -> m Bool -hasEvents v1 v2 = liftIO $ hasEventsFFI v1 v2 -{-# INLINE hasEvents #-} - -loadDollarTemplates :: MonadIO m => TouchID -> Ptr RWops -> m CInt -loadDollarTemplates v1 v2 = liftIO $ loadDollarTemplatesFFI v1 v2 -{-# INLINE loadDollarTemplates #-} - -peepEvents :: MonadIO m => Ptr Event -> CInt -> EventAction -> Word32 -> Word32 -> m CInt -peepEvents v1 v2 v3 v4 v5 = liftIO $ peepEventsFFI v1 v2 v3 v4 v5 -{-# INLINE peepEvents #-} - -pollEvent :: MonadIO m => Ptr Event -> m CInt -pollEvent v1 = liftIO $ pollEventFFI v1 -{-# INLINE pollEvent #-} - -pumpEvents :: MonadIO m => m () -pumpEvents = liftIO pumpEventsFFI -{-# INLINE pumpEvents #-} - -pushEvent :: MonadIO m => Ptr Event -> m CInt -pushEvent v1 = liftIO $ pushEventFFI v1 -{-# INLINE pushEvent #-} - -quitRequested :: MonadIO m => m Bool -quitRequested = liftIO $ do - pumpEvents - ev <- peepEvents nullPtr 0 SDL_PEEKEVENT SDL_QUIT SDL_QUIT - return $ ev > 0 -{-# INLINE quitRequested #-} - -recordGesture :: MonadIO m => TouchID -> m CInt -recordGesture v1 = liftIO $ recordGestureFFI v1 -{-# INLINE recordGesture #-} - -registerEvents :: MonadIO m => CInt -> m Word32 -registerEvents v1 = liftIO $ registerEventsFFI v1 -{-# INLINE registerEvents #-} - -saveAllDollarTemplates :: MonadIO m => Ptr RWops -> m CInt -saveAllDollarTemplates v1 = liftIO $ saveAllDollarTemplatesFFI v1 -{-# INLINE saveAllDollarTemplates #-} - -saveDollarTemplate :: MonadIO m => GestureID -> Ptr RWops -> m CInt -saveDollarTemplate v1 v2 = liftIO $ saveDollarTemplateFFI v1 v2 -{-# INLINE saveDollarTemplate #-} - -setEventFilter :: MonadIO m => EventFilter -> Ptr () -> m () -setEventFilter v1 v2 = liftIO $ setEventFilterFFI v1 v2 -{-# INLINE setEventFilter #-} - -waitEvent :: MonadIO m => Ptr Event -> m CInt -waitEvent v1 = liftIO $ waitEventFFI v1 -{-# INLINE waitEvent #-} - -waitEventTimeout :: MonadIO m => Ptr Event -> CInt -> m CInt -waitEventTimeout v1 v2 = liftIO $ waitEventTimeoutFFI v1 v2 -{-# INLINE waitEventTimeout #-} - -getKeyFromName :: MonadIO m => CString -> m Keycode -getKeyFromName v1 = liftIO $ getKeyFromNameFFI v1 -{-# INLINE getKeyFromName #-} - -getKeyFromScancode :: MonadIO m => Scancode -> m Keycode -getKeyFromScancode v1 = liftIO $ getKeyFromScancodeFFI v1 -{-# INLINE getKeyFromScancode #-} - -getKeyName :: MonadIO m => Keycode -> m CString -getKeyName v1 = liftIO $ getKeyNameFFI v1 -{-# INLINE getKeyName #-} - -getKeyboardFocus :: MonadIO m => m Window -getKeyboardFocus = liftIO getKeyboardFocusFFI -{-# INLINE getKeyboardFocus #-} - -getKeyboardState :: MonadIO m => Ptr CInt -> m (Ptr Word8) -getKeyboardState v1 = liftIO $ getKeyboardStateFFI v1 -{-# INLINE getKeyboardState #-} - -getModState :: MonadIO m => m Keymod -getModState = liftIO getModStateFFI -{-# INLINE getModState #-} - -getScancodeFromKey :: MonadIO m => Keycode -> m Scancode -getScancodeFromKey v1 = liftIO $ getScancodeFromKeyFFI v1 -{-# INLINE getScancodeFromKey #-} - -getScancodeFromName :: MonadIO m => CString -> m Scancode -getScancodeFromName v1 = liftIO $ getScancodeFromNameFFI v1 -{-# INLINE getScancodeFromName #-} - -getScancodeName :: MonadIO m => Scancode -> m CString -getScancodeName v1 = liftIO $ getScancodeNameFFI v1 -{-# INLINE getScancodeName #-} - -hasScreenKeyboardSupport :: MonadIO m => m Bool -hasScreenKeyboardSupport = liftIO hasScreenKeyboardSupportFFI -{-# INLINE hasScreenKeyboardSupport #-} - -isScreenKeyboardShown :: MonadIO m => Window -> m Bool -isScreenKeyboardShown v1 = liftIO $ isScreenKeyboardShownFFI v1 -{-# INLINE isScreenKeyboardShown #-} - -isTextInputActive :: MonadIO m => m Bool -isTextInputActive = liftIO isTextInputActiveFFI -{-# INLINE isTextInputActive #-} - -setModState :: MonadIO m => Keymod -> m () -setModState v1 = liftIO $ setModStateFFI v1 -{-# INLINE setModState #-} - -setTextInputRect :: MonadIO m => Ptr Rect -> m () -setTextInputRect v1 = liftIO $ setTextInputRectFFI v1 -{-# INLINE setTextInputRect #-} - -startTextInput :: MonadIO m => m () -startTextInput = liftIO startTextInputFFI -{-# INLINE startTextInput #-} - -stopTextInput :: MonadIO m => m () -stopTextInput = liftIO stopTextInputFFI -{-# INLINE stopTextInput #-} - -createColorCursor :: MonadIO m => Ptr Surface -> CInt -> CInt -> m Cursor -createColorCursor v1 v2 v3 = liftIO $ createColorCursorFFI v1 v2 v3 -{-# INLINE createColorCursor #-} - -createCursor :: MonadIO m => Ptr Word8 -> Ptr Word8 -> CInt -> CInt -> CInt -> CInt -> m Cursor -createCursor v1 v2 v3 v4 v5 v6 = liftIO $ createCursorFFI v1 v2 v3 v4 v5 v6 -{-# INLINE createCursor #-} - -createSystemCursor :: MonadIO m => SystemCursor -> m Cursor -createSystemCursor v1 = liftIO $ createSystemCursorFFI v1 -{-# INLINE createSystemCursor #-} - -freeCursor :: MonadIO m => Cursor -> m () -freeCursor v1 = liftIO $ freeCursorFFI v1 -{-# INLINE freeCursor #-} - -getCursor :: MonadIO m => m Cursor -getCursor = liftIO getCursorFFI -{-# INLINE getCursor #-} - -getDefaultCursor :: MonadIO m => m Cursor -getDefaultCursor = liftIO getDefaultCursorFFI -{-# INLINE getDefaultCursor #-} - -getMouseFocus :: MonadIO m => m Window -getMouseFocus = liftIO getMouseFocusFFI -{-# INLINE getMouseFocus #-} - -getMouseState :: MonadIO m => Ptr CInt -> Ptr CInt -> m Word32 -getMouseState v1 v2 = liftIO $ getMouseStateFFI v1 v2 -{-# INLINE getMouseState #-} - -getRelativeMouseMode :: MonadIO m => m Bool -getRelativeMouseMode = liftIO getRelativeMouseModeFFI -{-# INLINE getRelativeMouseMode #-} - -getRelativeMouseState :: MonadIO m => Ptr CInt -> Ptr CInt -> m Word32 -getRelativeMouseState v1 v2 = liftIO $ getRelativeMouseStateFFI v1 v2 -{-# INLINE getRelativeMouseState #-} - -setCursor :: MonadIO m => Cursor -> m () -setCursor v1 = liftIO $ setCursorFFI v1 -{-# INLINE setCursor #-} - -setRelativeMouseMode :: MonadIO m => Bool -> m CInt -setRelativeMouseMode v1 = liftIO $ setRelativeMouseModeFFI v1 -{-# INLINE setRelativeMouseMode #-} - -showCursor :: MonadIO m => CInt -> m CInt -showCursor v1 = liftIO $ showCursorFFI v1 -{-# INLINE showCursor #-} - -warpMouseInWindow :: MonadIO m => Window -> CInt -> CInt -> m () -warpMouseInWindow v1 v2 v3 = liftIO $ warpMouseInWindowFFI v1 v2 v3 -{-# INLINE warpMouseInWindow #-} - -joystickClose :: MonadIO m => Joystick -> m () -joystickClose v1 = liftIO $ joystickCloseFFI v1 -{-# INLINE joystickClose #-} - -joystickEventState :: MonadIO m => CInt -> m CInt -joystickEventState v1 = liftIO $ joystickEventStateFFI v1 -{-# INLINE joystickEventState #-} - -joystickGetAttached :: MonadIO m => Joystick -> m Bool -joystickGetAttached v1 = liftIO $ joystickGetAttachedFFI v1 -{-# INLINE joystickGetAttached #-} - -joystickGetAxis :: MonadIO m => Joystick -> CInt -> m Int16 -joystickGetAxis v1 v2 = liftIO $ joystickGetAxisFFI v1 v2 -{-# INLINE joystickGetAxis #-} - -joystickGetBall :: MonadIO m => Joystick -> CInt -> Ptr CInt -> Ptr CInt -> m CInt -joystickGetBall v1 v2 v3 v4 = liftIO $ joystickGetBallFFI v1 v2 v3 v4 -{-# INLINE joystickGetBall #-} - -joystickGetButton :: MonadIO m => Joystick -> CInt -> m Word8 -joystickGetButton v1 v2 = liftIO $ joystickGetButtonFFI v1 v2 -{-# INLINE joystickGetButton #-} - -joystickGetDeviceGUID :: MonadIO m => CInt -> m JoystickGUID -joystickGetDeviceGUID device_index = liftIO . alloca $ \ptr -> do - joystickGetDeviceGUIDFFI device_index ptr - peek ptr -{-# INLINE joystickGetDeviceGUID #-} - -joystickGetGUID :: MonadIO m => Joystick -> m JoystickGUID -joystickGetGUID joystick = liftIO . alloca $ \ptr -> do - joystickGetGUIDFFI joystick ptr - peek ptr -{-# INLINE joystickGetGUID #-} - -joystickGetGUIDFromString :: MonadIO m => CString -> m JoystickGUID -joystickGetGUIDFromString pchGUID = liftIO . alloca $ \ptr -> do - joystickGetGUIDFromStringFFI pchGUID ptr - peek ptr -{-# INLINE joystickGetGUIDFromString #-} - -joystickGetGUIDString :: MonadIO m => JoystickGUID -> CString -> CInt -> m () -joystickGetGUIDString guid pszGUID cbGUID = liftIO . alloca $ \ptr -> do - poke ptr guid - joystickGetGUIDStringFFI ptr pszGUID cbGUID -{-# INLINE joystickGetGUIDString #-} - -joystickGetHat :: MonadIO m => Joystick -> CInt -> m Word8 -joystickGetHat v1 v2 = liftIO $ joystickGetHatFFI v1 v2 -{-# INLINE joystickGetHat #-} - -joystickInstanceID :: MonadIO m => Joystick -> m JoystickID -joystickInstanceID v1 = liftIO $ joystickInstanceIDFFI v1 -{-# INLINE joystickInstanceID #-} - -joystickName :: MonadIO m => Joystick -> m CString -joystickName v1 = liftIO $ joystickNameFFI v1 -{-# INLINE joystickName #-} - -joystickNameForIndex :: MonadIO m => CInt -> m CString -joystickNameForIndex v1 = liftIO $ joystickNameForIndexFFI v1 -{-# INLINE joystickNameForIndex #-} - -joystickNumAxes :: MonadIO m => Joystick -> m CInt -joystickNumAxes v1 = liftIO $ joystickNumAxesFFI v1 -{-# INLINE joystickNumAxes #-} - -joystickNumBalls :: MonadIO m => Joystick -> m CInt -joystickNumBalls v1 = liftIO $ joystickNumBallsFFI v1 -{-# INLINE joystickNumBalls #-} - -joystickNumButtons :: MonadIO m => Joystick -> m CInt -joystickNumButtons v1 = liftIO $ joystickNumButtonsFFI v1 -{-# INLINE joystickNumButtons #-} - -joystickNumHats :: MonadIO m => Joystick -> m CInt -joystickNumHats v1 = liftIO $ joystickNumHatsFFI v1 -{-# INLINE joystickNumHats #-} - -joystickOpen :: MonadIO m => CInt -> m Joystick -joystickOpen v1 = liftIO $ joystickOpenFFI v1 -{-# INLINE joystickOpen #-} - -joystickUpdate :: MonadIO m => m () -joystickUpdate = liftIO joystickUpdateFFI -{-# INLINE joystickUpdate #-} - -numJoysticks :: MonadIO m => m CInt -numJoysticks = liftIO numJoysticksFFI -{-# INLINE numJoysticks #-} - -gameControllerAddMapping :: MonadIO m => CString -> m CInt -gameControllerAddMapping v1 = liftIO $ gameControllerAddMappingFFI v1 -{-# INLINE gameControllerAddMapping #-} - -gameControllerAddMappingsFromFile :: MonadIO m => CString -> m CInt -gameControllerAddMappingsFromFile file = liftIO $ do - rw <- withCString "rb" $ rwFromFile file - gameControllerAddMappingsFromRW rw 1 -{-# INLINE gameControllerAddMappingsFromFile #-} - -gameControllerAddMappingsFromRW :: MonadIO m => Ptr RWops -> CInt -> m CInt -gameControllerAddMappingsFromRW v1 v2 = liftIO $ gameControllerAddMappingsFromRWFFI v1 v2 -{-# INLINE gameControllerAddMappingsFromRW #-} - -gameControllerClose :: MonadIO m => GameController -> m () -gameControllerClose v1 = liftIO $ gameControllerCloseFFI v1 -{-# INLINE gameControllerClose #-} - -gameControllerEventState :: MonadIO m => CInt -> m CInt -gameControllerEventState v1 = liftIO $ gameControllerEventStateFFI v1 -{-# INLINE gameControllerEventState #-} - -gameControllerGetAttached :: MonadIO m => GameController -> m Bool -gameControllerGetAttached v1 = liftIO $ gameControllerGetAttachedFFI v1 -{-# INLINE gameControllerGetAttached #-} - -gameControllerGetAxis :: MonadIO m => GameController -> GameControllerAxis -> m Int16 -gameControllerGetAxis v1 v2 = liftIO $ gameControllerGetAxisFFI v1 v2 -{-# INLINE gameControllerGetAxis #-} - -gameControllerGetAxisFromString :: MonadIO m => CString -> m GameControllerAxis -gameControllerGetAxisFromString v1 = liftIO $ gameControllerGetAxisFromStringFFI v1 -{-# INLINE gameControllerGetAxisFromString #-} - -gameControllerGetBindForAxis :: MonadIO m => GameController -> GameControllerAxis -> m GameControllerButtonBind -gameControllerGetBindForAxis gamecontroller axis = liftIO . alloca $ \ptr -> do - gameControllerGetBindForAxisFFI gamecontroller axis ptr - peek ptr -{-# INLINE gameControllerGetBindForAxis #-} - -gameControllerGetBindForButton :: MonadIO m => GameController -> GameControllerButton -> m GameControllerButtonBind -gameControllerGetBindForButton gamecontroller button = liftIO . alloca $ \ptr -> do - gameControllerGetBindForButtonFFI gamecontroller button ptr - peek ptr -{-# INLINE gameControllerGetBindForButton #-} - -gameControllerGetButton :: MonadIO m => GameController -> GameControllerButton -> m Word8 -gameControllerGetButton v1 v2 = liftIO $ gameControllerGetButtonFFI v1 v2 -{-# INLINE gameControllerGetButton #-} - -gameControllerGetButtonFromString :: MonadIO m => CString -> m GameControllerButton -gameControllerGetButtonFromString v1 = liftIO $ gameControllerGetButtonFromStringFFI v1 -{-# INLINE gameControllerGetButtonFromString #-} - -gameControllerGetJoystick :: MonadIO m => GameController -> m Joystick -gameControllerGetJoystick v1 = liftIO $ gameControllerGetJoystickFFI v1 -{-# INLINE gameControllerGetJoystick #-} - -gameControllerGetStringForAxis :: MonadIO m => GameControllerAxis -> m CString -gameControllerGetStringForAxis v1 = liftIO $ gameControllerGetStringForAxisFFI v1 -{-# INLINE gameControllerGetStringForAxis #-} - -gameControllerGetStringForButton :: MonadIO m => GameControllerButton -> m CString -gameControllerGetStringForButton v1 = liftIO $ gameControllerGetStringForButtonFFI v1 -{-# INLINE gameControllerGetStringForButton #-} - -gameControllerMapping :: MonadIO m => GameController -> m CString -gameControllerMapping v1 = liftIO $ gameControllerMappingFFI v1 -{-# INLINE gameControllerMapping #-} - -gameControllerMappingForGUID :: MonadIO m => JoystickGUID -> m CString -gameControllerMappingForGUID guid = liftIO . alloca $ \ptr -> do - poke ptr guid - gameControllerMappingForGUIDFFI ptr -{-# INLINE gameControllerMappingForGUID #-} - -gameControllerName :: MonadIO m => GameController -> m CString -gameControllerName v1 = liftIO $ gameControllerNameFFI v1 -{-# INLINE gameControllerName #-} - -gameControllerNameForIndex :: MonadIO m => CInt -> m CString -gameControllerNameForIndex v1 = liftIO $ gameControllerNameForIndexFFI v1 -{-# INLINE gameControllerNameForIndex #-} - -gameControllerOpen :: MonadIO m => CInt -> m GameController -gameControllerOpen v1 = liftIO $ gameControllerOpenFFI v1 -{-# INLINE gameControllerOpen #-} - -gameControllerUpdate :: MonadIO m => m () -gameControllerUpdate = liftIO gameControllerUpdateFFI -{-# INLINE gameControllerUpdate #-} - -isGameController :: MonadIO m => CInt -> m Bool -isGameController v1 = liftIO $ isGameControllerFFI v1 -{-# INLINE isGameController #-} +module SDL.Raw.Event (+ -- * Event Handling+ addEventWatch,+ delEventWatch,+ eventState,+ filterEvents,+ flushEvent,+ flushEvents,+ getEventFilter,+ getNumTouchDevices,+ getNumTouchFingers,+ getTouchDevice,+ getTouchFinger,+ hasEvent,+ hasEvents,+ loadDollarTemplates,+ peepEvents,+ pollEvent,+ pumpEvents,+ pushEvent,+ quitRequested,+ recordGesture,+ registerEvents,+ saveAllDollarTemplates,+ saveDollarTemplate,+ setEventFilter,+ waitEvent,+ waitEventTimeout,++ -- * Keyboard Support+ getKeyFromName,+ getKeyFromScancode,+ getKeyName,+ getKeyboardFocus,+ getKeyboardState,+ getModState,+ getScancodeFromKey,+ getScancodeFromName,+ getScancodeName,+ hasScreenKeyboardSupport,+ isScreenKeyboardShown,+ isTextInputActive,+ setModState,+ setTextInputRect,+ startTextInput,+ stopTextInput,++ -- * Mouse Support+ createColorCursor,+ createCursor,+ createSystemCursor,+ freeCursor,+ getCursor,+ getDefaultCursor,+ getMouseFocus,+ getMouseState,+ getRelativeMouseMode,+ getRelativeMouseState,+ setCursor,+ setRelativeMouseMode,+ showCursor,+ warpMouseInWindow,++ -- * Joystick Support+ joystickClose,+ joystickEventState,+ joystickGetAttached,+ joystickGetAxis,+ joystickGetBall,+ joystickGetButton,+ joystickGetDeviceGUID,+ joystickGetGUID,+ joystickGetGUIDFromString,+ joystickGetGUIDString,+ joystickGetHat,+ joystickInstanceID,+ joystickName,+ joystickNameForIndex,+ joystickNumAxes,+ joystickNumBalls,+ joystickNumButtons,+ joystickNumHats,+ joystickOpen,+ joystickUpdate,+ numJoysticks,++ -- * Game Controller Support+ gameControllerAddMapping,+ gameControllerAddMappingsFromFile,+ gameControllerAddMappingsFromRW,+ gameControllerClose,+ gameControllerEventState,+ gameControllerGetAttached,+ gameControllerGetAxis,+ gameControllerGetAxisFromString,+ gameControllerGetBindForAxis,+ gameControllerGetBindForButton,+ gameControllerGetButton,+ gameControllerGetButtonFromString,+ gameControllerGetJoystick,+ gameControllerGetStringForAxis,+ gameControllerGetStringForButton,+ gameControllerMapping,+ gameControllerMappingForGUID,+ gameControllerName,+ gameControllerNameForIndex,+ gameControllerOpen,+ gameControllerUpdate,+ isGameController+) where++import Control.Monad.IO.Class+import Data.Int+import Data.Word+import Foreign.C.String+import Foreign.C.Types+import Foreign.Marshal.Alloc+import Foreign.Ptr+import Foreign.Storable+import SDL.Raw.Enum+import SDL.Raw.Filesystem+import SDL.Raw.Types++foreign import ccall "SDL.h SDL_AddEventWatch" addEventWatchFFI :: EventFilter -> Ptr () -> IO ()+foreign import ccall "SDL.h SDL_DelEventWatch" delEventWatchFFI :: EventFilter -> Ptr () -> IO ()+foreign import ccall "SDL.h SDL_EventState" eventStateFFI :: Word32 -> CInt -> IO Word8+foreign import ccall "SDL.h SDL_FilterEvents" filterEventsFFI :: EventFilter -> Ptr () -> IO ()+foreign import ccall "SDL.h SDL_FlushEvent" flushEventFFI :: Word32 -> IO ()+foreign import ccall "SDL.h SDL_FlushEvents" flushEventsFFI :: Word32 -> Word32 -> IO ()+foreign import ccall "SDL.h SDL_GetEventFilter" getEventFilterFFI :: Ptr EventFilter -> Ptr (Ptr ()) -> IO Bool+foreign import ccall "SDL.h SDL_GetNumTouchDevices" getNumTouchDevicesFFI :: IO CInt+foreign import ccall "SDL.h SDL_GetNumTouchFingers" getNumTouchFingersFFI :: TouchID -> IO CInt+foreign import ccall "SDL.h SDL_GetTouchDevice" getTouchDeviceFFI :: CInt -> IO TouchID+foreign import ccall "SDL.h SDL_GetTouchFinger" getTouchFingerFFI :: TouchID -> CInt -> IO (Ptr Finger)+foreign import ccall "SDL.h SDL_HasEvent" hasEventFFI :: Word32 -> IO Bool+foreign import ccall "SDL.h SDL_HasEvents" hasEventsFFI :: Word32 -> Word32 -> IO Bool+foreign import ccall "SDL.h SDL_LoadDollarTemplates" loadDollarTemplatesFFI :: TouchID -> Ptr RWops -> IO CInt+foreign import ccall "SDL.h SDL_PeepEvents" peepEventsFFI :: Ptr Event -> CInt -> EventAction -> Word32 -> Word32 -> IO CInt+foreign import ccall "SDL.h SDL_PollEvent" pollEventFFI :: Ptr Event -> IO CInt+foreign import ccall "SDL.h SDL_PumpEvents" pumpEventsFFI :: IO ()+foreign import ccall "SDL.h SDL_PushEvent" pushEventFFI :: Ptr Event -> IO CInt+foreign import ccall "SDL.h SDL_RecordGesture" recordGestureFFI :: TouchID -> IO CInt+foreign import ccall "SDL.h SDL_RegisterEvents" registerEventsFFI :: CInt -> IO Word32+foreign import ccall "SDL.h SDL_SaveAllDollarTemplates" saveAllDollarTemplatesFFI :: Ptr RWops -> IO CInt+foreign import ccall "SDL.h SDL_SaveDollarTemplate" saveDollarTemplateFFI :: GestureID -> Ptr RWops -> IO CInt+foreign import ccall "SDL.h SDL_SetEventFilter" setEventFilterFFI :: EventFilter -> Ptr () -> IO ()+foreign import ccall "SDL.h SDL_WaitEvent" waitEventFFI :: Ptr Event -> IO CInt+foreign import ccall "SDL.h SDL_WaitEventTimeout" waitEventTimeoutFFI :: Ptr Event -> CInt -> IO CInt++foreign import ccall "SDL.h SDL_GetKeyFromName" getKeyFromNameFFI :: CString -> IO Keycode+foreign import ccall "SDL.h SDL_GetKeyFromScancode" getKeyFromScancodeFFI :: Scancode -> IO Keycode+foreign import ccall "SDL.h SDL_GetKeyName" getKeyNameFFI :: Keycode -> IO CString+foreign import ccall "SDL.h SDL_GetKeyboardFocus" getKeyboardFocusFFI :: IO Window+foreign import ccall "SDL.h SDL_GetKeyboardState" getKeyboardStateFFI :: Ptr CInt -> IO (Ptr Word8)+foreign import ccall "SDL.h SDL_GetModState" getModStateFFI :: IO Keymod+foreign import ccall "SDL.h SDL_GetScancodeFromKey" getScancodeFromKeyFFI :: Keycode -> IO Scancode+foreign import ccall "SDL.h SDL_GetScancodeFromName" getScancodeFromNameFFI :: CString -> IO Scancode+foreign import ccall "SDL.h SDL_GetScancodeName" getScancodeNameFFI :: Scancode -> IO CString+foreign import ccall "SDL.h SDL_HasScreenKeyboardSupport" hasScreenKeyboardSupportFFI :: IO Bool+foreign import ccall "SDL.h SDL_IsScreenKeyboardShown" isScreenKeyboardShownFFI :: Window -> IO Bool+foreign import ccall "SDL.h SDL_IsTextInputActive" isTextInputActiveFFI :: IO Bool+foreign import ccall "SDL.h SDL_SetModState" setModStateFFI :: Keymod -> IO ()+foreign import ccall "SDL.h SDL_SetTextInputRect" setTextInputRectFFI :: Ptr Rect -> IO ()+foreign import ccall "SDL.h SDL_StartTextInput" startTextInputFFI :: IO ()+foreign import ccall "SDL.h SDL_StopTextInput" stopTextInputFFI :: IO ()++foreign import ccall "SDL.h SDL_CreateColorCursor" createColorCursorFFI :: Ptr Surface -> CInt -> CInt -> IO Cursor+foreign import ccall "SDL.h SDL_CreateCursor" createCursorFFI :: Ptr Word8 -> Ptr Word8 -> CInt -> CInt -> CInt -> CInt -> IO Cursor+foreign import ccall "SDL.h SDL_CreateSystemCursor" createSystemCursorFFI :: SystemCursor -> IO Cursor+foreign import ccall "SDL.h SDL_FreeCursor" freeCursorFFI :: Cursor -> IO ()+foreign import ccall "SDL.h SDL_GetCursor" getCursorFFI :: IO Cursor+foreign import ccall "SDL.h SDL_GetDefaultCursor" getDefaultCursorFFI :: IO Cursor+foreign import ccall "SDL.h SDL_GetMouseFocus" getMouseFocusFFI :: IO Window+foreign import ccall "SDL.h SDL_GetMouseState" getMouseStateFFI :: Ptr CInt -> Ptr CInt -> IO Word32+foreign import ccall "SDL.h SDL_GetRelativeMouseMode" getRelativeMouseModeFFI :: IO Bool+foreign import ccall "SDL.h SDL_GetRelativeMouseState" getRelativeMouseStateFFI :: Ptr CInt -> Ptr CInt -> IO Word32+foreign import ccall "SDL.h SDL_SetCursor" setCursorFFI :: Cursor -> IO ()+foreign import ccall "SDL.h SDL_SetRelativeMouseMode" setRelativeMouseModeFFI :: Bool -> IO CInt+foreign import ccall "SDL.h SDL_ShowCursor" showCursorFFI :: CInt -> IO CInt+foreign import ccall "SDL.h SDL_WarpMouseInWindow" warpMouseInWindowFFI :: Window -> CInt -> CInt -> IO ()++foreign import ccall "SDL.h SDL_JoystickClose" joystickCloseFFI :: Joystick -> IO ()+foreign import ccall "SDL.h SDL_JoystickEventState" joystickEventStateFFI :: CInt -> IO CInt+foreign import ccall "SDL.h SDL_JoystickGetAttached" joystickGetAttachedFFI :: Joystick -> IO Bool+foreign import ccall "SDL.h SDL_JoystickGetAxis" joystickGetAxisFFI :: Joystick -> CInt -> IO Int16+foreign import ccall "SDL.h SDL_JoystickGetBall" joystickGetBallFFI :: Joystick -> CInt -> Ptr CInt -> Ptr CInt -> IO CInt+foreign import ccall "SDL.h SDL_JoystickGetButton" joystickGetButtonFFI :: Joystick -> CInt -> IO Word8+foreign import ccall "sdlhelper.h SDLHelper_JoystickGetDeviceGUID" joystickGetDeviceGUIDFFI :: CInt -> Ptr JoystickGUID -> IO ()+foreign import ccall "sdlhelper.h SDLHelper_JoystickGetGUID" joystickGetGUIDFFI :: Joystick -> Ptr JoystickGUID -> IO ()+foreign import ccall "sdlhelper.h SDLHelper_JoystickGetGUIDFromString" joystickGetGUIDFromStringFFI :: CString -> Ptr JoystickGUID -> IO ()+foreign import ccall "sdlhelper.h SDLHelper_JoystickGetGUIDString" joystickGetGUIDStringFFI :: Ptr JoystickGUID -> CString -> CInt -> IO ()+foreign import ccall "SDL.h SDL_JoystickGetHat" joystickGetHatFFI :: Joystick -> CInt -> IO Word8+foreign import ccall "SDL.h SDL_JoystickInstanceID" joystickInstanceIDFFI :: Joystick -> IO JoystickID+foreign import ccall "SDL.h SDL_JoystickName" joystickNameFFI :: Joystick -> IO CString+foreign import ccall "SDL.h SDL_JoystickNameForIndex" joystickNameForIndexFFI :: CInt -> IO CString+foreign import ccall "SDL.h SDL_JoystickNumAxes" joystickNumAxesFFI :: Joystick -> IO CInt+foreign import ccall "SDL.h SDL_JoystickNumBalls" joystickNumBallsFFI :: Joystick -> IO CInt+foreign import ccall "SDL.h SDL_JoystickNumButtons" joystickNumButtonsFFI :: Joystick -> IO CInt+foreign import ccall "SDL.h SDL_JoystickNumHats" joystickNumHatsFFI :: Joystick -> IO CInt+foreign import ccall "SDL.h SDL_JoystickOpen" joystickOpenFFI :: CInt -> IO Joystick+foreign import ccall "SDL.h SDL_JoystickUpdate" joystickUpdateFFI :: IO ()+foreign import ccall "SDL.h SDL_NumJoysticks" numJoysticksFFI :: IO CInt++foreign import ccall "SDL.h SDL_GameControllerAddMapping" gameControllerAddMappingFFI :: CString -> IO CInt+foreign import ccall "SDL.h SDL_GameControllerAddMappingsFromRW" gameControllerAddMappingsFromRWFFI :: Ptr RWops -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_GameControllerClose" gameControllerCloseFFI :: GameController -> IO ()+foreign import ccall "SDL.h SDL_GameControllerEventState" gameControllerEventStateFFI :: CInt -> IO CInt+foreign import ccall "SDL.h SDL_GameControllerGetAttached" gameControllerGetAttachedFFI :: GameController -> IO Bool+foreign import ccall "SDL.h SDL_GameControllerGetAxis" gameControllerGetAxisFFI :: GameController -> GameControllerAxis -> IO Int16+foreign import ccall "SDL.h SDL_GameControllerGetAxisFromString" gameControllerGetAxisFromStringFFI :: CString -> IO GameControllerAxis+foreign import ccall "sdlhelper.h SDLHelper_GameControllerGetBindForAxis" gameControllerGetBindForAxisFFI :: GameController -> GameControllerAxis -> Ptr GameControllerButtonBind -> IO ()+foreign import ccall "sdlhelper.h SDLHelper_GameControllerGetBindForButton" gameControllerGetBindForButtonFFI :: GameController -> GameControllerButton -> Ptr GameControllerButtonBind -> IO ()+foreign import ccall "SDL.h SDL_GameControllerGetButton" gameControllerGetButtonFFI :: GameController -> GameControllerButton -> IO Word8+foreign import ccall "SDL.h SDL_GameControllerGetButtonFromString" gameControllerGetButtonFromStringFFI :: CString -> IO GameControllerButton+foreign import ccall "SDL.h SDL_GameControllerGetJoystick" gameControllerGetJoystickFFI :: GameController -> IO Joystick+foreign import ccall "SDL.h SDL_GameControllerGetStringForAxis" gameControllerGetStringForAxisFFI :: GameControllerAxis -> IO CString+foreign import ccall "SDL.h SDL_GameControllerGetStringForButton" gameControllerGetStringForButtonFFI :: GameControllerButton -> IO CString+foreign import ccall "SDL.h SDL_GameControllerMapping" gameControllerMappingFFI :: GameController -> IO CString+foreign import ccall "sdlhelper.h SDLHelper_GameControllerMappingForGUID" gameControllerMappingForGUIDFFI :: Ptr JoystickGUID -> IO CString+foreign import ccall "SDL.h SDL_GameControllerName" gameControllerNameFFI :: GameController -> IO CString+foreign import ccall "SDL.h SDL_GameControllerNameForIndex" gameControllerNameForIndexFFI :: CInt -> IO CString+foreign import ccall "SDL.h SDL_GameControllerOpen" gameControllerOpenFFI :: CInt -> IO GameController+foreign import ccall "SDL.h SDL_GameControllerUpdate" gameControllerUpdateFFI :: IO ()+foreign import ccall "SDL.h SDL_IsGameController" isGameControllerFFI :: CInt -> IO Bool++addEventWatch :: MonadIO m => EventFilter -> Ptr () -> m ()+addEventWatch v1 v2 = liftIO $ addEventWatchFFI v1 v2+{-# INLINE addEventWatch #-}++delEventWatch :: MonadIO m => EventFilter -> Ptr () -> m ()+delEventWatch v1 v2 = liftIO $ delEventWatchFFI v1 v2+{-# INLINE delEventWatch #-}++eventState :: MonadIO m => Word32 -> CInt -> m Word8+eventState v1 v2 = liftIO $ eventStateFFI v1 v2+{-# INLINE eventState #-}++filterEvents :: MonadIO m => EventFilter -> Ptr () -> m ()+filterEvents v1 v2 = liftIO $ filterEventsFFI v1 v2+{-# INLINE filterEvents #-}++flushEvent :: MonadIO m => Word32 -> m ()+flushEvent v1 = liftIO $ flushEventFFI v1+{-# INLINE flushEvent #-}++flushEvents :: MonadIO m => Word32 -> Word32 -> m ()+flushEvents v1 v2 = liftIO $ flushEventsFFI v1 v2+{-# INLINE flushEvents #-}++getEventFilter :: MonadIO m => Ptr EventFilter -> Ptr (Ptr ()) -> m Bool+getEventFilter v1 v2 = liftIO $ getEventFilterFFI v1 v2+{-# INLINE getEventFilter #-}++getNumTouchDevices :: MonadIO m => m CInt+getNumTouchDevices = liftIO getNumTouchDevicesFFI+{-# INLINE getNumTouchDevices #-}++getNumTouchFingers :: MonadIO m => TouchID -> m CInt+getNumTouchFingers v1 = liftIO $ getNumTouchFingersFFI v1+{-# INLINE getNumTouchFingers #-}++getTouchDevice :: MonadIO m => CInt -> m TouchID+getTouchDevice v1 = liftIO $ getTouchDeviceFFI v1+{-# INLINE getTouchDevice #-}++getTouchFinger :: MonadIO m => TouchID -> CInt -> m (Ptr Finger)+getTouchFinger v1 v2 = liftIO $ getTouchFingerFFI v1 v2+{-# INLINE getTouchFinger #-}++hasEvent :: MonadIO m => Word32 -> m Bool+hasEvent v1 = liftIO $ hasEventFFI v1+{-# INLINE hasEvent #-}++hasEvents :: MonadIO m => Word32 -> Word32 -> m Bool+hasEvents v1 v2 = liftIO $ hasEventsFFI v1 v2+{-# INLINE hasEvents #-}++loadDollarTemplates :: MonadIO m => TouchID -> Ptr RWops -> m CInt+loadDollarTemplates v1 v2 = liftIO $ loadDollarTemplatesFFI v1 v2+{-# INLINE loadDollarTemplates #-}++peepEvents :: MonadIO m => Ptr Event -> CInt -> EventAction -> Word32 -> Word32 -> m CInt+peepEvents v1 v2 v3 v4 v5 = liftIO $ peepEventsFFI v1 v2 v3 v4 v5+{-# INLINE peepEvents #-}++pollEvent :: MonadIO m => Ptr Event -> m CInt+pollEvent v1 = liftIO $ pollEventFFI v1+{-# INLINE pollEvent #-}++pumpEvents :: MonadIO m => m ()+pumpEvents = liftIO pumpEventsFFI+{-# INLINE pumpEvents #-}++pushEvent :: MonadIO m => Ptr Event -> m CInt+pushEvent v1 = liftIO $ pushEventFFI v1+{-# INLINE pushEvent #-}++quitRequested :: MonadIO m => m Bool+quitRequested = liftIO $ do+ pumpEvents+ ev <- peepEvents nullPtr 0 SDL_PEEKEVENT SDL_QUIT SDL_QUIT+ return $ ev > 0+{-# INLINE quitRequested #-}++recordGesture :: MonadIO m => TouchID -> m CInt+recordGesture v1 = liftIO $ recordGestureFFI v1+{-# INLINE recordGesture #-}++registerEvents :: MonadIO m => CInt -> m Word32+registerEvents v1 = liftIO $ registerEventsFFI v1+{-# INLINE registerEvents #-}++saveAllDollarTemplates :: MonadIO m => Ptr RWops -> m CInt+saveAllDollarTemplates v1 = liftIO $ saveAllDollarTemplatesFFI v1+{-# INLINE saveAllDollarTemplates #-}++saveDollarTemplate :: MonadIO m => GestureID -> Ptr RWops -> m CInt+saveDollarTemplate v1 v2 = liftIO $ saveDollarTemplateFFI v1 v2+{-# INLINE saveDollarTemplate #-}++setEventFilter :: MonadIO m => EventFilter -> Ptr () -> m ()+setEventFilter v1 v2 = liftIO $ setEventFilterFFI v1 v2+{-# INLINE setEventFilter #-}++waitEvent :: MonadIO m => Ptr Event -> m CInt+waitEvent v1 = liftIO $ waitEventFFI v1+{-# INLINE waitEvent #-}++waitEventTimeout :: MonadIO m => Ptr Event -> CInt -> m CInt+waitEventTimeout v1 v2 = liftIO $ waitEventTimeoutFFI v1 v2+{-# INLINE waitEventTimeout #-}++getKeyFromName :: MonadIO m => CString -> m Keycode+getKeyFromName v1 = liftIO $ getKeyFromNameFFI v1+{-# INLINE getKeyFromName #-}++getKeyFromScancode :: MonadIO m => Scancode -> m Keycode+getKeyFromScancode v1 = liftIO $ getKeyFromScancodeFFI v1+{-# INLINE getKeyFromScancode #-}++getKeyName :: MonadIO m => Keycode -> m CString+getKeyName v1 = liftIO $ getKeyNameFFI v1+{-# INLINE getKeyName #-}++getKeyboardFocus :: MonadIO m => m Window+getKeyboardFocus = liftIO getKeyboardFocusFFI+{-# INLINE getKeyboardFocus #-}++getKeyboardState :: MonadIO m => Ptr CInt -> m (Ptr Word8)+getKeyboardState v1 = liftIO $ getKeyboardStateFFI v1+{-# INLINE getKeyboardState #-}++getModState :: MonadIO m => m Keymod+getModState = liftIO getModStateFFI+{-# INLINE getModState #-}++getScancodeFromKey :: MonadIO m => Keycode -> m Scancode+getScancodeFromKey v1 = liftIO $ getScancodeFromKeyFFI v1+{-# INLINE getScancodeFromKey #-}++getScancodeFromName :: MonadIO m => CString -> m Scancode+getScancodeFromName v1 = liftIO $ getScancodeFromNameFFI v1+{-# INLINE getScancodeFromName #-}++getScancodeName :: MonadIO m => Scancode -> m CString+getScancodeName v1 = liftIO $ getScancodeNameFFI v1+{-# INLINE getScancodeName #-}++hasScreenKeyboardSupport :: MonadIO m => m Bool+hasScreenKeyboardSupport = liftIO hasScreenKeyboardSupportFFI+{-# INLINE hasScreenKeyboardSupport #-}++isScreenKeyboardShown :: MonadIO m => Window -> m Bool+isScreenKeyboardShown v1 = liftIO $ isScreenKeyboardShownFFI v1+{-# INLINE isScreenKeyboardShown #-}++isTextInputActive :: MonadIO m => m Bool+isTextInputActive = liftIO isTextInputActiveFFI+{-# INLINE isTextInputActive #-}++setModState :: MonadIO m => Keymod -> m ()+setModState v1 = liftIO $ setModStateFFI v1+{-# INLINE setModState #-}++setTextInputRect :: MonadIO m => Ptr Rect -> m ()+setTextInputRect v1 = liftIO $ setTextInputRectFFI v1+{-# INLINE setTextInputRect #-}++startTextInput :: MonadIO m => m ()+startTextInput = liftIO startTextInputFFI+{-# INLINE startTextInput #-}++stopTextInput :: MonadIO m => m ()+stopTextInput = liftIO stopTextInputFFI+{-# INLINE stopTextInput #-}++createColorCursor :: MonadIO m => Ptr Surface -> CInt -> CInt -> m Cursor+createColorCursor v1 v2 v3 = liftIO $ createColorCursorFFI v1 v2 v3+{-# INLINE createColorCursor #-}++createCursor :: MonadIO m => Ptr Word8 -> Ptr Word8 -> CInt -> CInt -> CInt -> CInt -> m Cursor+createCursor v1 v2 v3 v4 v5 v6 = liftIO $ createCursorFFI v1 v2 v3 v4 v5 v6+{-# INLINE createCursor #-}++createSystemCursor :: MonadIO m => SystemCursor -> m Cursor+createSystemCursor v1 = liftIO $ createSystemCursorFFI v1+{-# INLINE createSystemCursor #-}++freeCursor :: MonadIO m => Cursor -> m ()+freeCursor v1 = liftIO $ freeCursorFFI v1+{-# INLINE freeCursor #-}++getCursor :: MonadIO m => m Cursor+getCursor = liftIO getCursorFFI+{-# INLINE getCursor #-}++getDefaultCursor :: MonadIO m => m Cursor+getDefaultCursor = liftIO getDefaultCursorFFI+{-# INLINE getDefaultCursor #-}++getMouseFocus :: MonadIO m => m Window+getMouseFocus = liftIO getMouseFocusFFI+{-# INLINE getMouseFocus #-}++getMouseState :: MonadIO m => Ptr CInt -> Ptr CInt -> m Word32+getMouseState v1 v2 = liftIO $ getMouseStateFFI v1 v2+{-# INLINE getMouseState #-}++getRelativeMouseMode :: MonadIO m => m Bool+getRelativeMouseMode = liftIO getRelativeMouseModeFFI+{-# INLINE getRelativeMouseMode #-}++getRelativeMouseState :: MonadIO m => Ptr CInt -> Ptr CInt -> m Word32+getRelativeMouseState v1 v2 = liftIO $ getRelativeMouseStateFFI v1 v2+{-# INLINE getRelativeMouseState #-}++setCursor :: MonadIO m => Cursor -> m ()+setCursor v1 = liftIO $ setCursorFFI v1+{-# INLINE setCursor #-}++setRelativeMouseMode :: MonadIO m => Bool -> m CInt+setRelativeMouseMode v1 = liftIO $ setRelativeMouseModeFFI v1+{-# INLINE setRelativeMouseMode #-}++showCursor :: MonadIO m => CInt -> m CInt+showCursor v1 = liftIO $ showCursorFFI v1+{-# INLINE showCursor #-}++warpMouseInWindow :: MonadIO m => Window -> CInt -> CInt -> m ()+warpMouseInWindow v1 v2 v3 = liftIO $ warpMouseInWindowFFI v1 v2 v3+{-# INLINE warpMouseInWindow #-}++joystickClose :: MonadIO m => Joystick -> m ()+joystickClose v1 = liftIO $ joystickCloseFFI v1+{-# INLINE joystickClose #-}++joystickEventState :: MonadIO m => CInt -> m CInt+joystickEventState v1 = liftIO $ joystickEventStateFFI v1+{-# INLINE joystickEventState #-}++joystickGetAttached :: MonadIO m => Joystick -> m Bool+joystickGetAttached v1 = liftIO $ joystickGetAttachedFFI v1+{-# INLINE joystickGetAttached #-}++joystickGetAxis :: MonadIO m => Joystick -> CInt -> m Int16+joystickGetAxis v1 v2 = liftIO $ joystickGetAxisFFI v1 v2+{-# INLINE joystickGetAxis #-}++joystickGetBall :: MonadIO m => Joystick -> CInt -> Ptr CInt -> Ptr CInt -> m CInt+joystickGetBall v1 v2 v3 v4 = liftIO $ joystickGetBallFFI v1 v2 v3 v4+{-# INLINE joystickGetBall #-}++joystickGetButton :: MonadIO m => Joystick -> CInt -> m Word8+joystickGetButton v1 v2 = liftIO $ joystickGetButtonFFI v1 v2+{-# INLINE joystickGetButton #-}++joystickGetDeviceGUID :: MonadIO m => CInt -> m JoystickGUID+joystickGetDeviceGUID device_index = liftIO . alloca $ \ptr -> do+ joystickGetDeviceGUIDFFI device_index ptr+ peek ptr+{-# INLINE joystickGetDeviceGUID #-}++joystickGetGUID :: MonadIO m => Joystick -> m JoystickGUID+joystickGetGUID joystick = liftIO . alloca $ \ptr -> do+ joystickGetGUIDFFI joystick ptr+ peek ptr+{-# INLINE joystickGetGUID #-}++joystickGetGUIDFromString :: MonadIO m => CString -> m JoystickGUID+joystickGetGUIDFromString pchGUID = liftIO . alloca $ \ptr -> do+ joystickGetGUIDFromStringFFI pchGUID ptr+ peek ptr+{-# INLINE joystickGetGUIDFromString #-}++joystickGetGUIDString :: MonadIO m => JoystickGUID -> CString -> CInt -> m ()+joystickGetGUIDString guid pszGUID cbGUID = liftIO . alloca $ \ptr -> do+ poke ptr guid+ joystickGetGUIDStringFFI ptr pszGUID cbGUID+{-# INLINE joystickGetGUIDString #-}++joystickGetHat :: MonadIO m => Joystick -> CInt -> m Word8+joystickGetHat v1 v2 = liftIO $ joystickGetHatFFI v1 v2+{-# INLINE joystickGetHat #-}++joystickInstanceID :: MonadIO m => Joystick -> m JoystickID+joystickInstanceID v1 = liftIO $ joystickInstanceIDFFI v1+{-# INLINE joystickInstanceID #-}++joystickName :: MonadIO m => Joystick -> m CString+joystickName v1 = liftIO $ joystickNameFFI v1+{-# INLINE joystickName #-}++joystickNameForIndex :: MonadIO m => CInt -> m CString+joystickNameForIndex v1 = liftIO $ joystickNameForIndexFFI v1+{-# INLINE joystickNameForIndex #-}++joystickNumAxes :: MonadIO m => Joystick -> m CInt+joystickNumAxes v1 = liftIO $ joystickNumAxesFFI v1+{-# INLINE joystickNumAxes #-}++joystickNumBalls :: MonadIO m => Joystick -> m CInt+joystickNumBalls v1 = liftIO $ joystickNumBallsFFI v1+{-# INLINE joystickNumBalls #-}++joystickNumButtons :: MonadIO m => Joystick -> m CInt+joystickNumButtons v1 = liftIO $ joystickNumButtonsFFI v1+{-# INLINE joystickNumButtons #-}++joystickNumHats :: MonadIO m => Joystick -> m CInt+joystickNumHats v1 = liftIO $ joystickNumHatsFFI v1+{-# INLINE joystickNumHats #-}++joystickOpen :: MonadIO m => CInt -> m Joystick+joystickOpen v1 = liftIO $ joystickOpenFFI v1+{-# INLINE joystickOpen #-}++joystickUpdate :: MonadIO m => m ()+joystickUpdate = liftIO joystickUpdateFFI+{-# INLINE joystickUpdate #-}++numJoysticks :: MonadIO m => m CInt+numJoysticks = liftIO numJoysticksFFI+{-# INLINE numJoysticks #-}++gameControllerAddMapping :: MonadIO m => CString -> m CInt+gameControllerAddMapping v1 = liftIO $ gameControllerAddMappingFFI v1+{-# INLINE gameControllerAddMapping #-}++gameControllerAddMappingsFromFile :: MonadIO m => CString -> m CInt+gameControllerAddMappingsFromFile file = liftIO $ do+ rw <- withCString "rb" $ rwFromFile file+ gameControllerAddMappingsFromRW rw 1+{-# INLINE gameControllerAddMappingsFromFile #-}++gameControllerAddMappingsFromRW :: MonadIO m => Ptr RWops -> CInt -> m CInt+gameControllerAddMappingsFromRW v1 v2 = liftIO $ gameControllerAddMappingsFromRWFFI v1 v2+{-# INLINE gameControllerAddMappingsFromRW #-}++gameControllerClose :: MonadIO m => GameController -> m ()+gameControllerClose v1 = liftIO $ gameControllerCloseFFI v1+{-# INLINE gameControllerClose #-}++gameControllerEventState :: MonadIO m => CInt -> m CInt+gameControllerEventState v1 = liftIO $ gameControllerEventStateFFI v1+{-# INLINE gameControllerEventState #-}++gameControllerGetAttached :: MonadIO m => GameController -> m Bool+gameControllerGetAttached v1 = liftIO $ gameControllerGetAttachedFFI v1+{-# INLINE gameControllerGetAttached #-}++gameControllerGetAxis :: MonadIO m => GameController -> GameControllerAxis -> m Int16+gameControllerGetAxis v1 v2 = liftIO $ gameControllerGetAxisFFI v1 v2+{-# INLINE gameControllerGetAxis #-}++gameControllerGetAxisFromString :: MonadIO m => CString -> m GameControllerAxis+gameControllerGetAxisFromString v1 = liftIO $ gameControllerGetAxisFromStringFFI v1+{-# INLINE gameControllerGetAxisFromString #-}++gameControllerGetBindForAxis :: MonadIO m => GameController -> GameControllerAxis -> m GameControllerButtonBind+gameControllerGetBindForAxis gamecontroller axis = liftIO . alloca $ \ptr -> do+ gameControllerGetBindForAxisFFI gamecontroller axis ptr+ peek ptr+{-# INLINE gameControllerGetBindForAxis #-}++gameControllerGetBindForButton :: MonadIO m => GameController -> GameControllerButton -> m GameControllerButtonBind+gameControllerGetBindForButton gamecontroller button = liftIO . alloca $ \ptr -> do+ gameControllerGetBindForButtonFFI gamecontroller button ptr+ peek ptr+{-# INLINE gameControllerGetBindForButton #-}++gameControllerGetButton :: MonadIO m => GameController -> GameControllerButton -> m Word8+gameControllerGetButton v1 v2 = liftIO $ gameControllerGetButtonFFI v1 v2+{-# INLINE gameControllerGetButton #-}++gameControllerGetButtonFromString :: MonadIO m => CString -> m GameControllerButton+gameControllerGetButtonFromString v1 = liftIO $ gameControllerGetButtonFromStringFFI v1+{-# INLINE gameControllerGetButtonFromString #-}++gameControllerGetJoystick :: MonadIO m => GameController -> m Joystick+gameControllerGetJoystick v1 = liftIO $ gameControllerGetJoystickFFI v1+{-# INLINE gameControllerGetJoystick #-}++gameControllerGetStringForAxis :: MonadIO m => GameControllerAxis -> m CString+gameControllerGetStringForAxis v1 = liftIO $ gameControllerGetStringForAxisFFI v1+{-# INLINE gameControllerGetStringForAxis #-}++gameControllerGetStringForButton :: MonadIO m => GameControllerButton -> m CString+gameControllerGetStringForButton v1 = liftIO $ gameControllerGetStringForButtonFFI v1+{-# INLINE gameControllerGetStringForButton #-}++gameControllerMapping :: MonadIO m => GameController -> m CString+gameControllerMapping v1 = liftIO $ gameControllerMappingFFI v1+{-# INLINE gameControllerMapping #-}++gameControllerMappingForGUID :: MonadIO m => JoystickGUID -> m CString+gameControllerMappingForGUID guid = liftIO . alloca $ \ptr -> do+ poke ptr guid+ gameControllerMappingForGUIDFFI ptr+{-# INLINE gameControllerMappingForGUID #-}++gameControllerName :: MonadIO m => GameController -> m CString+gameControllerName v1 = liftIO $ gameControllerNameFFI v1+{-# INLINE gameControllerName #-}++gameControllerNameForIndex :: MonadIO m => CInt -> m CString+gameControllerNameForIndex v1 = liftIO $ gameControllerNameForIndexFFI v1+{-# INLINE gameControllerNameForIndex #-}++gameControllerOpen :: MonadIO m => CInt -> m GameController+gameControllerOpen v1 = liftIO $ gameControllerOpenFFI v1+{-# INLINE gameControllerOpen #-}++gameControllerUpdate :: MonadIO m => m ()+gameControllerUpdate = liftIO gameControllerUpdateFFI+{-# INLINE gameControllerUpdate #-}++isGameController :: MonadIO m => CInt -> m Bool+isGameController v1 = liftIO $ isGameControllerFFI v1+{-# INLINE isGameController #-}
src/SDL/Raw/Filesystem.hs view
@@ -1,165 +1,165 @@-module SDL.Raw.Filesystem ( - -- * Filesystem Paths - getBasePath, - getPrefPath, - - -- * File I/O Abstraction - allocRW, - freeRW, - rwFromConstMem, - rwFromFP, - rwFromFile, - rwFromMem, - rwClose, - rwRead, - rwSeek, - rwTell, - rwWrite, - readBE16, - readBE32, - readBE64, - readLE16, - readLE32, - readLE64, - writeBE16, - writeBE32, - writeBE64, - writeLE16, - writeLE32, - writeLE64 -) where - -import Control.Monad.IO.Class -import Data.Int -import Data.Word -import Foreign.C.String -import Foreign.C.Types -import Foreign.Ptr -import SDL.Raw.Types - -foreign import ccall "SDL.h SDL_GetBasePath" getBasePathFFI :: IO CString -foreign import ccall "SDL.h SDL_GetPrefPath" getPrefPathFFI :: CString -> CString -> IO CString - -foreign import ccall "SDL.h SDL_AllocRW" allocRWFFI :: IO (Ptr RWops) -foreign import ccall "SDL.h SDL_FreeRW" freeRWFFI :: Ptr RWops -> IO () -foreign import ccall "SDL.h SDL_RWFromConstMem" rwFromConstMemFFI :: Ptr () -> CInt -> IO (Ptr RWops) -foreign import ccall "SDL.h SDL_RWFromFP" rwFromFPFFI :: Ptr () -> Bool -> IO (Ptr RWops) -foreign import ccall "SDL.h SDL_RWFromFile" rwFromFileFFI :: CString -> CString -> IO (Ptr RWops) -foreign import ccall "SDL.h SDL_RWFromMem" rwFromMemFFI :: Ptr () -> CInt -> IO (Ptr RWops) -foreign import ccall "sdlhelper.h SDLHelper_RWclose" rwCloseFFI :: Ptr RWops -> IO CInt -foreign import ccall "sdlhelper.h SDLHelper_RWread" rwReadFFI :: Ptr RWops -> Ptr () -> CSize -> CSize -> IO CSize -foreign import ccall "sdlhelper.h SDLHelper_RWseek" rwSeekFFI :: Ptr RWops -> Int64 -> CInt -> IO Int64 -foreign import ccall "sdlhelper.h SDLHelper_RWtell" rwTellFFI :: Ptr RWops -> IO Int64 -foreign import ccall "sdlhelper.h SDLHelper_RWwrite" rwWriteFFI :: Ptr RWops -> Ptr () -> CSize -> CSize -> IO CSize -foreign import ccall "SDL.h SDL_ReadBE16" readBE16FFI :: Ptr RWops -> IO Word16 -foreign import ccall "SDL.h SDL_ReadBE32" readBE32FFI :: Ptr RWops -> IO Word32 -foreign import ccall "SDL.h SDL_ReadBE64" readBE64FFI :: Ptr RWops -> IO Word64 -foreign import ccall "SDL.h SDL_ReadLE16" readLE16FFI :: Ptr RWops -> IO Word16 -foreign import ccall "SDL.h SDL_ReadLE32" readLE32FFI :: Ptr RWops -> IO Word32 -foreign import ccall "SDL.h SDL_ReadLE64" readLE64FFI :: Ptr RWops -> IO Word64 -foreign import ccall "SDL.h SDL_WriteBE16" writeBE16FFI :: Ptr RWops -> Word16 -> IO CSize -foreign import ccall "SDL.h SDL_WriteBE32" writeBE32FFI :: Ptr RWops -> Word32 -> IO CSize -foreign import ccall "SDL.h SDL_WriteBE64" writeBE64FFI :: Ptr RWops -> Word64 -> IO CSize -foreign import ccall "SDL.h SDL_WriteLE16" writeLE16FFI :: Ptr RWops -> Word16 -> IO CSize -foreign import ccall "SDL.h SDL_WriteLE32" writeLE32FFI :: Ptr RWops -> Word32 -> IO CSize -foreign import ccall "SDL.h SDL_WriteLE64" writeLE64FFI :: Ptr RWops -> Word64 -> IO CSize - -getBasePath :: MonadIO m => m CString -getBasePath = liftIO getBasePathFFI -{-# INLINE getBasePath #-} - -getPrefPath :: MonadIO m => CString -> CString -> m CString -getPrefPath v1 v2 = liftIO $ getPrefPathFFI v1 v2 -{-# INLINE getPrefPath #-} - -allocRW :: MonadIO m => m (Ptr RWops) -allocRW = liftIO allocRWFFI -{-# INLINE allocRW #-} - -freeRW :: MonadIO m => Ptr RWops -> m () -freeRW v1 = liftIO $ freeRWFFI v1 -{-# INLINE freeRW #-} - -rwFromConstMem :: MonadIO m => Ptr () -> CInt -> m (Ptr RWops) -rwFromConstMem v1 v2 = liftIO $ rwFromConstMemFFI v1 v2 -{-# INLINE rwFromConstMem #-} - -rwFromFP :: MonadIO m => Ptr () -> Bool -> m (Ptr RWops) -rwFromFP v1 v2 = liftIO $ rwFromFPFFI v1 v2 -{-# INLINE rwFromFP #-} - -rwFromFile :: MonadIO m => CString -> CString -> m (Ptr RWops) -rwFromFile v1 v2 = liftIO $ rwFromFileFFI v1 v2 -{-# INLINE rwFromFile #-} - -rwFromMem :: MonadIO m => Ptr () -> CInt -> m (Ptr RWops) -rwFromMem v1 v2 = liftIO $ rwFromMemFFI v1 v2 -{-# INLINE rwFromMem #-} - -rwClose :: MonadIO m => Ptr RWops -> m CInt -rwClose v1 = liftIO $ rwCloseFFI v1 -{-# INLINE rwClose #-} - -rwRead :: MonadIO m => Ptr RWops -> Ptr () -> CSize -> CSize -> m CSize -rwRead v1 v2 v3 v4 = liftIO $ rwReadFFI v1 v2 v3 v4 -{-# INLINE rwRead #-} - -rwSeek :: MonadIO m => Ptr RWops -> Int64 -> CInt -> m Int64 -rwSeek v1 v2 v3 = liftIO $ rwSeekFFI v1 v2 v3 -{-# INLINE rwSeek #-} - -rwTell :: MonadIO m => Ptr RWops -> m Int64 -rwTell v1 = liftIO $ rwTellFFI v1 -{-# INLINE rwTell #-} - -rwWrite :: MonadIO m => Ptr RWops -> Ptr () -> CSize -> CSize -> m CSize -rwWrite v1 v2 v3 v4 = liftIO $ rwWriteFFI v1 v2 v3 v4 -{-# INLINE rwWrite #-} - -readBE16 :: MonadIO m => Ptr RWops -> m Word16 -readBE16 v1 = liftIO $ readBE16FFI v1 -{-# INLINE readBE16 #-} - -readBE32 :: MonadIO m => Ptr RWops -> m Word32 -readBE32 v1 = liftIO $ readBE32FFI v1 -{-# INLINE readBE32 #-} - -readBE64 :: MonadIO m => Ptr RWops -> m Word64 -readBE64 v1 = liftIO $ readBE64FFI v1 -{-# INLINE readBE64 #-} - -readLE16 :: MonadIO m => Ptr RWops -> m Word16 -readLE16 v1 = liftIO $ readLE16FFI v1 -{-# INLINE readLE16 #-} - -readLE32 :: MonadIO m => Ptr RWops -> m Word32 -readLE32 v1 = liftIO $ readLE32FFI v1 -{-# INLINE readLE32 #-} - -readLE64 :: MonadIO m => Ptr RWops -> m Word64 -readLE64 v1 = liftIO $ readLE64FFI v1 -{-# INLINE readLE64 #-} - -writeBE16 :: MonadIO m => Ptr RWops -> Word16 -> m CSize -writeBE16 v1 v2 = liftIO $ writeBE16FFI v1 v2 -{-# INLINE writeBE16 #-} - -writeBE32 :: MonadIO m => Ptr RWops -> Word32 -> m CSize -writeBE32 v1 v2 = liftIO $ writeBE32FFI v1 v2 -{-# INLINE writeBE32 #-} - -writeBE64 :: MonadIO m => Ptr RWops -> Word64 -> m CSize -writeBE64 v1 v2 = liftIO $ writeBE64FFI v1 v2 -{-# INLINE writeBE64 #-} - -writeLE16 :: MonadIO m => Ptr RWops -> Word16 -> m CSize -writeLE16 v1 v2 = liftIO $ writeLE16FFI v1 v2 -{-# INLINE writeLE16 #-} - -writeLE32 :: MonadIO m => Ptr RWops -> Word32 -> m CSize -writeLE32 v1 v2 = liftIO $ writeLE32FFI v1 v2 -{-# INLINE writeLE32 #-} - -writeLE64 :: MonadIO m => Ptr RWops -> Word64 -> m CSize -writeLE64 v1 v2 = liftIO $ writeLE64FFI v1 v2 -{-# INLINE writeLE64 #-} +module SDL.Raw.Filesystem (+ -- * Filesystem Paths+ getBasePath,+ getPrefPath,++ -- * File I/O Abstraction+ allocRW,+ freeRW,+ rwFromConstMem,+ rwFromFP,+ rwFromFile,+ rwFromMem,+ rwClose,+ rwRead,+ rwSeek,+ rwTell,+ rwWrite,+ readBE16,+ readBE32,+ readBE64,+ readLE16,+ readLE32,+ readLE64,+ writeBE16,+ writeBE32,+ writeBE64,+ writeLE16,+ writeLE32,+ writeLE64+) where++import Control.Monad.IO.Class+import Data.Int+import Data.Word+import Foreign.C.String+import Foreign.C.Types+import Foreign.Ptr+import SDL.Raw.Types++foreign import ccall "SDL.h SDL_GetBasePath" getBasePathFFI :: IO CString+foreign import ccall "SDL.h SDL_GetPrefPath" getPrefPathFFI :: CString -> CString -> IO CString++foreign import ccall "SDL.h SDL_AllocRW" allocRWFFI :: IO (Ptr RWops)+foreign import ccall "SDL.h SDL_FreeRW" freeRWFFI :: Ptr RWops -> IO ()+foreign import ccall "SDL.h SDL_RWFromConstMem" rwFromConstMemFFI :: Ptr () -> CInt -> IO (Ptr RWops)+foreign import ccall "SDL.h SDL_RWFromFP" rwFromFPFFI :: Ptr () -> Bool -> IO (Ptr RWops)+foreign import ccall "SDL.h SDL_RWFromFile" rwFromFileFFI :: CString -> CString -> IO (Ptr RWops)+foreign import ccall "SDL.h SDL_RWFromMem" rwFromMemFFI :: Ptr () -> CInt -> IO (Ptr RWops)+foreign import ccall "sdlhelper.h SDLHelper_RWclose" rwCloseFFI :: Ptr RWops -> IO CInt+foreign import ccall "sdlhelper.h SDLHelper_RWread" rwReadFFI :: Ptr RWops -> Ptr () -> CSize -> CSize -> IO CSize+foreign import ccall "sdlhelper.h SDLHelper_RWseek" rwSeekFFI :: Ptr RWops -> Int64 -> CInt -> IO Int64+foreign import ccall "sdlhelper.h SDLHelper_RWtell" rwTellFFI :: Ptr RWops -> IO Int64+foreign import ccall "sdlhelper.h SDLHelper_RWwrite" rwWriteFFI :: Ptr RWops -> Ptr () -> CSize -> CSize -> IO CSize+foreign import ccall "SDL.h SDL_ReadBE16" readBE16FFI :: Ptr RWops -> IO Word16+foreign import ccall "SDL.h SDL_ReadBE32" readBE32FFI :: Ptr RWops -> IO Word32+foreign import ccall "SDL.h SDL_ReadBE64" readBE64FFI :: Ptr RWops -> IO Word64+foreign import ccall "SDL.h SDL_ReadLE16" readLE16FFI :: Ptr RWops -> IO Word16+foreign import ccall "SDL.h SDL_ReadLE32" readLE32FFI :: Ptr RWops -> IO Word32+foreign import ccall "SDL.h SDL_ReadLE64" readLE64FFI :: Ptr RWops -> IO Word64+foreign import ccall "SDL.h SDL_WriteBE16" writeBE16FFI :: Ptr RWops -> Word16 -> IO CSize+foreign import ccall "SDL.h SDL_WriteBE32" writeBE32FFI :: Ptr RWops -> Word32 -> IO CSize+foreign import ccall "SDL.h SDL_WriteBE64" writeBE64FFI :: Ptr RWops -> Word64 -> IO CSize+foreign import ccall "SDL.h SDL_WriteLE16" writeLE16FFI :: Ptr RWops -> Word16 -> IO CSize+foreign import ccall "SDL.h SDL_WriteLE32" writeLE32FFI :: Ptr RWops -> Word32 -> IO CSize+foreign import ccall "SDL.h SDL_WriteLE64" writeLE64FFI :: Ptr RWops -> Word64 -> IO CSize++getBasePath :: MonadIO m => m CString+getBasePath = liftIO getBasePathFFI+{-# INLINE getBasePath #-}++getPrefPath :: MonadIO m => CString -> CString -> m CString+getPrefPath v1 v2 = liftIO $ getPrefPathFFI v1 v2+{-# INLINE getPrefPath #-}++allocRW :: MonadIO m => m (Ptr RWops)+allocRW = liftIO allocRWFFI+{-# INLINE allocRW #-}++freeRW :: MonadIO m => Ptr RWops -> m ()+freeRW v1 = liftIO $ freeRWFFI v1+{-# INLINE freeRW #-}++rwFromConstMem :: MonadIO m => Ptr () -> CInt -> m (Ptr RWops)+rwFromConstMem v1 v2 = liftIO $ rwFromConstMemFFI v1 v2+{-# INLINE rwFromConstMem #-}++rwFromFP :: MonadIO m => Ptr () -> Bool -> m (Ptr RWops)+rwFromFP v1 v2 = liftIO $ rwFromFPFFI v1 v2+{-# INLINE rwFromFP #-}++rwFromFile :: MonadIO m => CString -> CString -> m (Ptr RWops)+rwFromFile v1 v2 = liftIO $ rwFromFileFFI v1 v2+{-# INLINE rwFromFile #-}++rwFromMem :: MonadIO m => Ptr () -> CInt -> m (Ptr RWops)+rwFromMem v1 v2 = liftIO $ rwFromMemFFI v1 v2+{-# INLINE rwFromMem #-}++rwClose :: MonadIO m => Ptr RWops -> m CInt+rwClose v1 = liftIO $ rwCloseFFI v1+{-# INLINE rwClose #-}++rwRead :: MonadIO m => Ptr RWops -> Ptr () -> CSize -> CSize -> m CSize+rwRead v1 v2 v3 v4 = liftIO $ rwReadFFI v1 v2 v3 v4+{-# INLINE rwRead #-}++rwSeek :: MonadIO m => Ptr RWops -> Int64 -> CInt -> m Int64+rwSeek v1 v2 v3 = liftIO $ rwSeekFFI v1 v2 v3+{-# INLINE rwSeek #-}++rwTell :: MonadIO m => Ptr RWops -> m Int64+rwTell v1 = liftIO $ rwTellFFI v1+{-# INLINE rwTell #-}++rwWrite :: MonadIO m => Ptr RWops -> Ptr () -> CSize -> CSize -> m CSize+rwWrite v1 v2 v3 v4 = liftIO $ rwWriteFFI v1 v2 v3 v4+{-# INLINE rwWrite #-}++readBE16 :: MonadIO m => Ptr RWops -> m Word16+readBE16 v1 = liftIO $ readBE16FFI v1+{-# INLINE readBE16 #-}++readBE32 :: MonadIO m => Ptr RWops -> m Word32+readBE32 v1 = liftIO $ readBE32FFI v1+{-# INLINE readBE32 #-}++readBE64 :: MonadIO m => Ptr RWops -> m Word64+readBE64 v1 = liftIO $ readBE64FFI v1+{-# INLINE readBE64 #-}++readLE16 :: MonadIO m => Ptr RWops -> m Word16+readLE16 v1 = liftIO $ readLE16FFI v1+{-# INLINE readLE16 #-}++readLE32 :: MonadIO m => Ptr RWops -> m Word32+readLE32 v1 = liftIO $ readLE32FFI v1+{-# INLINE readLE32 #-}++readLE64 :: MonadIO m => Ptr RWops -> m Word64+readLE64 v1 = liftIO $ readLE64FFI v1+{-# INLINE readLE64 #-}++writeBE16 :: MonadIO m => Ptr RWops -> Word16 -> m CSize+writeBE16 v1 v2 = liftIO $ writeBE16FFI v1 v2+{-# INLINE writeBE16 #-}++writeBE32 :: MonadIO m => Ptr RWops -> Word32 -> m CSize+writeBE32 v1 v2 = liftIO $ writeBE32FFI v1 v2+{-# INLINE writeBE32 #-}++writeBE64 :: MonadIO m => Ptr RWops -> Word64 -> m CSize+writeBE64 v1 v2 = liftIO $ writeBE64FFI v1 v2+{-# INLINE writeBE64 #-}++writeLE16 :: MonadIO m => Ptr RWops -> Word16 -> m CSize+writeLE16 v1 v2 = liftIO $ writeLE16FFI v1 v2+{-# INLINE writeLE16 #-}++writeLE32 :: MonadIO m => Ptr RWops -> Word32 -> m CSize+writeLE32 v1 v2 = liftIO $ writeLE32FFI v1 v2+{-# INLINE writeLE32 #-}++writeLE64 :: MonadIO m => Ptr RWops -> Word64 -> m CSize+writeLE64 v1 v2 = liftIO $ writeLE64FFI v1 v2+{-# INLINE writeLE64 #-}
src/SDL/Raw/Haptic.hs view
@@ -1,191 +1,191 @@-module SDL.Raw.Haptic ( - -- * Force Feedback Support - hapticClose, - hapticDestroyEffect, - hapticEffectSupported, - hapticGetEffectStatus, - hapticIndex, - hapticName, - hapticNewEffect, - hapticNumAxes, - hapticNumEffects, - hapticNumEffectsPlaying, - hapticOpen, - hapticOpenFromJoystick, - hapticOpenFromMouse, - hapticOpened, - hapticPause, - hapticQuery, - hapticRumbleInit, - hapticRumblePlay, - hapticRumbleStop, - hapticRumbleSupported, - hapticRunEffect, - hapticSetAutocenter, - hapticSetGain, - hapticStopAll, - hapticStopEffect, - hapticUnpause, - hapticUpdateEffect, - joystickIsHaptic, - mouseIsHaptic, - numHaptics -) where - -import Control.Monad.IO.Class -import Data.Word -import Foreign.C.String -import Foreign.C.Types -import Foreign.Ptr -import SDL.Raw.Types - -foreign import ccall "SDL.h SDL_HapticClose" hapticCloseFFI :: Haptic -> IO () -foreign import ccall "SDL.h SDL_HapticDestroyEffect" hapticDestroyEffectFFI :: Haptic -> CInt -> IO () -foreign import ccall "SDL.h SDL_HapticEffectSupported" hapticEffectSupportedFFI :: Haptic -> Ptr HapticEffect -> IO CInt -foreign import ccall "SDL.h SDL_HapticGetEffectStatus" hapticGetEffectStatusFFI :: Haptic -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_HapticIndex" hapticIndexFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticName" hapticNameFFI :: CInt -> IO CString -foreign import ccall "SDL.h SDL_HapticNewEffect" hapticNewEffectFFI :: Haptic -> Ptr HapticEffect -> IO CInt -foreign import ccall "SDL.h SDL_HapticNumAxes" hapticNumAxesFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticNumEffects" hapticNumEffectsFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticNumEffectsPlaying" hapticNumEffectsPlayingFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticOpen" hapticOpenFFI :: CInt -> IO Haptic -foreign import ccall "SDL.h SDL_HapticOpenFromJoystick" hapticOpenFromJoystickFFI :: Joystick -> IO Haptic -foreign import ccall "SDL.h SDL_HapticOpenFromMouse" hapticOpenFromMouseFFI :: IO Haptic -foreign import ccall "SDL.h SDL_HapticOpened" hapticOpenedFFI :: CInt -> IO CInt -foreign import ccall "SDL.h SDL_HapticPause" hapticPauseFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticQuery" hapticQueryFFI :: Haptic -> IO CUInt -foreign import ccall "SDL.h SDL_HapticRumbleInit" hapticRumbleInitFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticRumblePlay" hapticRumblePlayFFI :: Haptic -> CFloat -> Word32 -> IO CInt -foreign import ccall "SDL.h SDL_HapticRumbleStop" hapticRumbleStopFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticRumbleSupported" hapticRumbleSupportedFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticRunEffect" hapticRunEffectFFI :: Haptic -> CInt -> Word32 -> IO CInt -foreign import ccall "SDL.h SDL_HapticSetAutocenter" hapticSetAutocenterFFI :: Haptic -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_HapticSetGain" hapticSetGainFFI :: Haptic -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_HapticStopAll" hapticStopAllFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticStopEffect" hapticStopEffectFFI :: Haptic -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_HapticUnpause" hapticUnpauseFFI :: Haptic -> IO CInt -foreign import ccall "SDL.h SDL_HapticUpdateEffect" hapticUpdateEffectFFI :: Haptic -> CInt -> Ptr HapticEffect -> IO CInt -foreign import ccall "SDL.h SDL_JoystickIsHaptic" joystickIsHapticFFI :: Joystick -> IO CInt -foreign import ccall "SDL.h SDL_MouseIsHaptic" mouseIsHapticFFI :: IO CInt -foreign import ccall "SDL.h SDL_NumHaptics" numHapticsFFI :: IO CInt - -hapticClose :: MonadIO m => Haptic -> m () -hapticClose v1 = liftIO $ hapticCloseFFI v1 -{-# INLINE hapticClose #-} - -hapticDestroyEffect :: MonadIO m => Haptic -> CInt -> m () -hapticDestroyEffect v1 v2 = liftIO $ hapticDestroyEffectFFI v1 v2 -{-# INLINE hapticDestroyEffect #-} - -hapticEffectSupported :: MonadIO m => Haptic -> Ptr HapticEffect -> m CInt -hapticEffectSupported v1 v2 = liftIO $ hapticEffectSupportedFFI v1 v2 -{-# INLINE hapticEffectSupported #-} - -hapticGetEffectStatus :: MonadIO m => Haptic -> CInt -> m CInt -hapticGetEffectStatus v1 v2 = liftIO $ hapticGetEffectStatusFFI v1 v2 -{-# INLINE hapticGetEffectStatus #-} - -hapticIndex :: MonadIO m => Haptic -> m CInt -hapticIndex v1 = liftIO $ hapticIndexFFI v1 -{-# INLINE hapticIndex #-} - -hapticName :: MonadIO m => CInt -> m CString -hapticName v1 = liftIO $ hapticNameFFI v1 -{-# INLINE hapticName #-} - -hapticNewEffect :: MonadIO m => Haptic -> Ptr HapticEffect -> m CInt -hapticNewEffect v1 v2 = liftIO $ hapticNewEffectFFI v1 v2 -{-# INLINE hapticNewEffect #-} - -hapticNumAxes :: MonadIO m => Haptic -> m CInt -hapticNumAxes v1 = liftIO $ hapticNumAxesFFI v1 -{-# INLINE hapticNumAxes #-} - -hapticNumEffects :: MonadIO m => Haptic -> m CInt -hapticNumEffects v1 = liftIO $ hapticNumEffectsFFI v1 -{-# INLINE hapticNumEffects #-} - -hapticNumEffectsPlaying :: MonadIO m => Haptic -> m CInt -hapticNumEffectsPlaying v1 = liftIO $ hapticNumEffectsPlayingFFI v1 -{-# INLINE hapticNumEffectsPlaying #-} - -hapticOpen :: MonadIO m => CInt -> m Haptic -hapticOpen v1 = liftIO $ hapticOpenFFI v1 -{-# INLINE hapticOpen #-} - -hapticOpenFromJoystick :: MonadIO m => Joystick -> m Haptic -hapticOpenFromJoystick v1 = liftIO $ hapticOpenFromJoystickFFI v1 -{-# INLINE hapticOpenFromJoystick #-} - -hapticOpenFromMouse :: MonadIO m => m Haptic -hapticOpenFromMouse = liftIO hapticOpenFromMouseFFI -{-# INLINE hapticOpenFromMouse #-} - -hapticOpened :: MonadIO m => CInt -> m CInt -hapticOpened v1 = liftIO $ hapticOpenedFFI v1 -{-# INLINE hapticOpened #-} - -hapticPause :: MonadIO m => Haptic -> m CInt -hapticPause v1 = liftIO $ hapticPauseFFI v1 -{-# INLINE hapticPause #-} - -hapticQuery :: MonadIO m => Haptic -> m CUInt -hapticQuery v1 = liftIO $ hapticQueryFFI v1 -{-# INLINE hapticQuery #-} - -hapticRumbleInit :: MonadIO m => Haptic -> m CInt -hapticRumbleInit v1 = liftIO $ hapticRumbleInitFFI v1 -{-# INLINE hapticRumbleInit #-} - -hapticRumblePlay :: MonadIO m => Haptic -> CFloat -> Word32 -> m CInt -hapticRumblePlay v1 v2 v3 = liftIO $ hapticRumblePlayFFI v1 v2 v3 -{-# INLINE hapticRumblePlay #-} - -hapticRumbleStop :: MonadIO m => Haptic -> m CInt -hapticRumbleStop v1 = liftIO $ hapticRumbleStopFFI v1 -{-# INLINE hapticRumbleStop #-} - -hapticRumbleSupported :: MonadIO m => Haptic -> m CInt -hapticRumbleSupported v1 = liftIO $ hapticRumbleSupportedFFI v1 -{-# INLINE hapticRumbleSupported #-} - -hapticRunEffect :: MonadIO m => Haptic -> CInt -> Word32 -> m CInt -hapticRunEffect v1 v2 v3 = liftIO $ hapticRunEffectFFI v1 v2 v3 -{-# INLINE hapticRunEffect #-} - -hapticSetAutocenter :: MonadIO m => Haptic -> CInt -> m CInt -hapticSetAutocenter v1 v2 = liftIO $ hapticSetAutocenterFFI v1 v2 -{-# INLINE hapticSetAutocenter #-} - -hapticSetGain :: MonadIO m => Haptic -> CInt -> m CInt -hapticSetGain v1 v2 = liftIO $ hapticSetGainFFI v1 v2 -{-# INLINE hapticSetGain #-} - -hapticStopAll :: MonadIO m => Haptic -> m CInt -hapticStopAll v1 = liftIO $ hapticStopAllFFI v1 -{-# INLINE hapticStopAll #-} - -hapticStopEffect :: MonadIO m => Haptic -> CInt -> m CInt -hapticStopEffect v1 v2 = liftIO $ hapticStopEffectFFI v1 v2 -{-# INLINE hapticStopEffect #-} - -hapticUnpause :: MonadIO m => Haptic -> m CInt -hapticUnpause v1 = liftIO $ hapticUnpauseFFI v1 -{-# INLINE hapticUnpause #-} - -hapticUpdateEffect :: MonadIO m => Haptic -> CInt -> Ptr HapticEffect -> m CInt -hapticUpdateEffect v1 v2 v3 = liftIO $ hapticUpdateEffectFFI v1 v2 v3 -{-# INLINE hapticUpdateEffect #-} - -joystickIsHaptic :: MonadIO m => Joystick -> m CInt -joystickIsHaptic v1 = liftIO $ joystickIsHapticFFI v1 -{-# INLINE joystickIsHaptic #-} - -mouseIsHaptic :: MonadIO m => m CInt -mouseIsHaptic = liftIO mouseIsHapticFFI -{-# INLINE mouseIsHaptic #-} - -numHaptics :: MonadIO m => m CInt -numHaptics = liftIO numHapticsFFI -{-# INLINE numHaptics #-} +module SDL.Raw.Haptic (+ -- * Force Feedback Support+ hapticClose,+ hapticDestroyEffect,+ hapticEffectSupported,+ hapticGetEffectStatus,+ hapticIndex,+ hapticName,+ hapticNewEffect,+ hapticNumAxes,+ hapticNumEffects,+ hapticNumEffectsPlaying,+ hapticOpen,+ hapticOpenFromJoystick,+ hapticOpenFromMouse,+ hapticOpened,+ hapticPause,+ hapticQuery,+ hapticRumbleInit,+ hapticRumblePlay,+ hapticRumbleStop,+ hapticRumbleSupported,+ hapticRunEffect,+ hapticSetAutocenter,+ hapticSetGain,+ hapticStopAll,+ hapticStopEffect,+ hapticUnpause,+ hapticUpdateEffect,+ joystickIsHaptic,+ mouseIsHaptic,+ numHaptics+) where++import Control.Monad.IO.Class+import Data.Word+import Foreign.C.String+import Foreign.C.Types+import Foreign.Ptr+import SDL.Raw.Types++foreign import ccall "SDL.h SDL_HapticClose" hapticCloseFFI :: Haptic -> IO ()+foreign import ccall "SDL.h SDL_HapticDestroyEffect" hapticDestroyEffectFFI :: Haptic -> CInt -> IO ()+foreign import ccall "SDL.h SDL_HapticEffectSupported" hapticEffectSupportedFFI :: Haptic -> Ptr HapticEffect -> IO CInt+foreign import ccall "SDL.h SDL_HapticGetEffectStatus" hapticGetEffectStatusFFI :: Haptic -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_HapticIndex" hapticIndexFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticName" hapticNameFFI :: CInt -> IO CString+foreign import ccall "SDL.h SDL_HapticNewEffect" hapticNewEffectFFI :: Haptic -> Ptr HapticEffect -> IO CInt+foreign import ccall "SDL.h SDL_HapticNumAxes" hapticNumAxesFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticNumEffects" hapticNumEffectsFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticNumEffectsPlaying" hapticNumEffectsPlayingFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticOpen" hapticOpenFFI :: CInt -> IO Haptic+foreign import ccall "SDL.h SDL_HapticOpenFromJoystick" hapticOpenFromJoystickFFI :: Joystick -> IO Haptic+foreign import ccall "SDL.h SDL_HapticOpenFromMouse" hapticOpenFromMouseFFI :: IO Haptic+foreign import ccall "SDL.h SDL_HapticOpened" hapticOpenedFFI :: CInt -> IO CInt+foreign import ccall "SDL.h SDL_HapticPause" hapticPauseFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticQuery" hapticQueryFFI :: Haptic -> IO CUInt+foreign import ccall "SDL.h SDL_HapticRumbleInit" hapticRumbleInitFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticRumblePlay" hapticRumblePlayFFI :: Haptic -> CFloat -> Word32 -> IO CInt+foreign import ccall "SDL.h SDL_HapticRumbleStop" hapticRumbleStopFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticRumbleSupported" hapticRumbleSupportedFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticRunEffect" hapticRunEffectFFI :: Haptic -> CInt -> Word32 -> IO CInt+foreign import ccall "SDL.h SDL_HapticSetAutocenter" hapticSetAutocenterFFI :: Haptic -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_HapticSetGain" hapticSetGainFFI :: Haptic -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_HapticStopAll" hapticStopAllFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticStopEffect" hapticStopEffectFFI :: Haptic -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_HapticUnpause" hapticUnpauseFFI :: Haptic -> IO CInt+foreign import ccall "SDL.h SDL_HapticUpdateEffect" hapticUpdateEffectFFI :: Haptic -> CInt -> Ptr HapticEffect -> IO CInt+foreign import ccall "SDL.h SDL_JoystickIsHaptic" joystickIsHapticFFI :: Joystick -> IO CInt+foreign import ccall "SDL.h SDL_MouseIsHaptic" mouseIsHapticFFI :: IO CInt+foreign import ccall "SDL.h SDL_NumHaptics" numHapticsFFI :: IO CInt++hapticClose :: MonadIO m => Haptic -> m ()+hapticClose v1 = liftIO $ hapticCloseFFI v1+{-# INLINE hapticClose #-}++hapticDestroyEffect :: MonadIO m => Haptic -> CInt -> m ()+hapticDestroyEffect v1 v2 = liftIO $ hapticDestroyEffectFFI v1 v2+{-# INLINE hapticDestroyEffect #-}++hapticEffectSupported :: MonadIO m => Haptic -> Ptr HapticEffect -> m CInt+hapticEffectSupported v1 v2 = liftIO $ hapticEffectSupportedFFI v1 v2+{-# INLINE hapticEffectSupported #-}++hapticGetEffectStatus :: MonadIO m => Haptic -> CInt -> m CInt+hapticGetEffectStatus v1 v2 = liftIO $ hapticGetEffectStatusFFI v1 v2+{-# INLINE hapticGetEffectStatus #-}++hapticIndex :: MonadIO m => Haptic -> m CInt+hapticIndex v1 = liftIO $ hapticIndexFFI v1+{-# INLINE hapticIndex #-}++hapticName :: MonadIO m => CInt -> m CString+hapticName v1 = liftIO $ hapticNameFFI v1+{-# INLINE hapticName #-}++hapticNewEffect :: MonadIO m => Haptic -> Ptr HapticEffect -> m CInt+hapticNewEffect v1 v2 = liftIO $ hapticNewEffectFFI v1 v2+{-# INLINE hapticNewEffect #-}++hapticNumAxes :: MonadIO m => Haptic -> m CInt+hapticNumAxes v1 = liftIO $ hapticNumAxesFFI v1+{-# INLINE hapticNumAxes #-}++hapticNumEffects :: MonadIO m => Haptic -> m CInt+hapticNumEffects v1 = liftIO $ hapticNumEffectsFFI v1+{-# INLINE hapticNumEffects #-}++hapticNumEffectsPlaying :: MonadIO m => Haptic -> m CInt+hapticNumEffectsPlaying v1 = liftIO $ hapticNumEffectsPlayingFFI v1+{-# INLINE hapticNumEffectsPlaying #-}++hapticOpen :: MonadIO m => CInt -> m Haptic+hapticOpen v1 = liftIO $ hapticOpenFFI v1+{-# INLINE hapticOpen #-}++hapticOpenFromJoystick :: MonadIO m => Joystick -> m Haptic+hapticOpenFromJoystick v1 = liftIO $ hapticOpenFromJoystickFFI v1+{-# INLINE hapticOpenFromJoystick #-}++hapticOpenFromMouse :: MonadIO m => m Haptic+hapticOpenFromMouse = liftIO hapticOpenFromMouseFFI+{-# INLINE hapticOpenFromMouse #-}++hapticOpened :: MonadIO m => CInt -> m CInt+hapticOpened v1 = liftIO $ hapticOpenedFFI v1+{-# INLINE hapticOpened #-}++hapticPause :: MonadIO m => Haptic -> m CInt+hapticPause v1 = liftIO $ hapticPauseFFI v1+{-# INLINE hapticPause #-}++hapticQuery :: MonadIO m => Haptic -> m CUInt+hapticQuery v1 = liftIO $ hapticQueryFFI v1+{-# INLINE hapticQuery #-}++hapticRumbleInit :: MonadIO m => Haptic -> m CInt+hapticRumbleInit v1 = liftIO $ hapticRumbleInitFFI v1+{-# INLINE hapticRumbleInit #-}++hapticRumblePlay :: MonadIO m => Haptic -> CFloat -> Word32 -> m CInt+hapticRumblePlay v1 v2 v3 = liftIO $ hapticRumblePlayFFI v1 v2 v3+{-# INLINE hapticRumblePlay #-}++hapticRumbleStop :: MonadIO m => Haptic -> m CInt+hapticRumbleStop v1 = liftIO $ hapticRumbleStopFFI v1+{-# INLINE hapticRumbleStop #-}++hapticRumbleSupported :: MonadIO m => Haptic -> m CInt+hapticRumbleSupported v1 = liftIO $ hapticRumbleSupportedFFI v1+{-# INLINE hapticRumbleSupported #-}++hapticRunEffect :: MonadIO m => Haptic -> CInt -> Word32 -> m CInt+hapticRunEffect v1 v2 v3 = liftIO $ hapticRunEffectFFI v1 v2 v3+{-# INLINE hapticRunEffect #-}++hapticSetAutocenter :: MonadIO m => Haptic -> CInt -> m CInt+hapticSetAutocenter v1 v2 = liftIO $ hapticSetAutocenterFFI v1 v2+{-# INLINE hapticSetAutocenter #-}++hapticSetGain :: MonadIO m => Haptic -> CInt -> m CInt+hapticSetGain v1 v2 = liftIO $ hapticSetGainFFI v1 v2+{-# INLINE hapticSetGain #-}++hapticStopAll :: MonadIO m => Haptic -> m CInt+hapticStopAll v1 = liftIO $ hapticStopAllFFI v1+{-# INLINE hapticStopAll #-}++hapticStopEffect :: MonadIO m => Haptic -> CInt -> m CInt+hapticStopEffect v1 v2 = liftIO $ hapticStopEffectFFI v1 v2+{-# INLINE hapticStopEffect #-}++hapticUnpause :: MonadIO m => Haptic -> m CInt+hapticUnpause v1 = liftIO $ hapticUnpauseFFI v1+{-# INLINE hapticUnpause #-}++hapticUpdateEffect :: MonadIO m => Haptic -> CInt -> Ptr HapticEffect -> m CInt+hapticUpdateEffect v1 v2 v3 = liftIO $ hapticUpdateEffectFFI v1 v2 v3+{-# INLINE hapticUpdateEffect #-}++joystickIsHaptic :: MonadIO m => Joystick -> m CInt+joystickIsHaptic v1 = liftIO $ joystickIsHapticFFI v1+{-# INLINE joystickIsHaptic #-}++mouseIsHaptic :: MonadIO m => m CInt+mouseIsHaptic = liftIO mouseIsHapticFFI+{-# INLINE mouseIsHaptic #-}++numHaptics :: MonadIO m => m CInt+numHaptics = liftIO numHapticsFFI+{-# INLINE numHaptics #-}
src/SDL/Raw/Platform.hs view
@@ -1,13 +1,13 @@-module SDL.Raw.Platform ( - -- * Platform Detection - getPlatform -) where - -import Control.Monad.IO.Class -import Foreign.C.String - -foreign import ccall "SDL.h SDL_GetPlatform" getPlatformFFI :: IO CString - -getPlatform :: MonadIO m => m CString -getPlatform = liftIO getPlatformFFI -{-# INLINE getPlatform #-} +module SDL.Raw.Platform (+ -- * Platform Detection+ getPlatform+) where++import Control.Monad.IO.Class+import Foreign.C.String++foreign import ccall "SDL.h SDL_GetPlatform" getPlatformFFI :: IO CString++getPlatform :: MonadIO m => m CString+getPlatform = liftIO getPlatformFFI+{-# INLINE getPlatform #-}
src/SDL/Raw/Power.hs view
@@ -1,15 +1,15 @@-module SDL.Raw.Power ( - -- * Power Management Status - getPowerInfo -) where - -import Control.Monad.IO.Class -import Foreign.C.Types -import Foreign.Ptr -import SDL.Raw.Enum - -foreign import ccall "SDL.h SDL_GetPowerInfo" getPowerInfoFFI :: Ptr CInt -> Ptr CInt -> IO PowerState - -getPowerInfo :: MonadIO m => Ptr CInt -> Ptr CInt -> m PowerState -getPowerInfo v1 v2 = liftIO $ getPowerInfoFFI v1 v2 -{-# INLINE getPowerInfo #-} +module SDL.Raw.Power (+ -- * Power Management Status+ getPowerInfo+) where++import Control.Monad.IO.Class+import Foreign.C.Types+import Foreign.Ptr+import SDL.Raw.Enum++foreign import ccall "SDL.h SDL_GetPowerInfo" getPowerInfoFFI :: Ptr CInt -> Ptr CInt -> IO PowerState++getPowerInfo :: MonadIO m => Ptr CInt -> Ptr CInt -> m PowerState+getPowerInfo v1 v2 = liftIO $ getPowerInfoFFI v1 v2+{-# INLINE getPowerInfo #-}
src/SDL/Raw/Thread.hs view
@@ -1,258 +1,258 @@-module SDL.Raw.Thread ( - -- * Thread Management - createThread, - detachThread, - getThreadID, - getThreadName, - setThreadPriority, - tlsCreate, - tlsGet, - tlsSet, - threadID, - waitThread, - - -- * Thread Synchronization Primitives - condBroadcast, - condSignal, - condWait, - condWaitTimeout, - createCond, - createMutex, - createSemaphore, - destroyCond, - destroyMutex, - destroySemaphore, - lockMutex, - semPost, - semTryWait, - semValue, - semWait, - semWaitTimeout, - tryLockMutex, - unlockMutex, - - -- * Atomic Operations - atomicAdd, - atomicCAS, - atomicCASPtr, - atomicDecRef, - atomicGet, - atomicGetPtr, - atomicIncRef, - atomicLock, - atomicSet, - atomicSetPtr, - atomicTryLock, - atomicUnlock -) where - -import Control.Monad.IO.Class -import Data.Word -import Foreign.C.String -import Foreign.C.Types -import Foreign.Ptr -import SDL.Raw.Enum -import SDL.Raw.Types - -foreign import ccall "SDL.h SDL_CreateThread" createThreadFFI :: ThreadFunction -> CString -> IO (Ptr ()) -foreign import ccall "SDL.h SDL_DetachThread" detachThreadFFI :: Ptr Thread -> IO () -foreign import ccall "SDL.h SDL_GetThreadID" getThreadIDFFI :: Ptr Thread -> IO ThreadID -foreign import ccall "SDL.h SDL_GetThreadName" getThreadNameFFI :: Ptr Thread -> IO CString -foreign import ccall "SDL.h SDL_SetThreadPriority" setThreadPriorityFFI :: ThreadPriority -> IO CInt -foreign import ccall "SDL.h SDL_TLSCreate" tlsCreateFFI :: IO TLSID -foreign import ccall "SDL.h SDL_TLSGet" tlsGetFFI :: TLSID -> IO (Ptr ()) -foreign import ccall "SDL.h SDL_TLSSet" tlsSetFFI :: TLSID -> Ptr () -> FunPtr (Ptr () -> IO ()) -> IO CInt -foreign import ccall "SDL.h SDL_ThreadID" threadIDFFI :: IO ThreadID -foreign import ccall "SDL.h SDL_WaitThread" waitThreadFFI :: Ptr Thread -> Ptr CInt -> IO () - -foreign import ccall "SDL.h SDL_CondBroadcast" condBroadcastFFI :: Ptr Cond -> IO CInt -foreign import ccall "SDL.h SDL_CondSignal" condSignalFFI :: Ptr Cond -> IO CInt -foreign import ccall "SDL.h SDL_CondWait" condWaitFFI :: Ptr Cond -> Ptr Mutex -> IO CInt -foreign import ccall "SDL.h SDL_CondWaitTimeout" condWaitTimeoutFFI :: Ptr Cond -> Ptr Mutex -> Word32 -> IO CInt -foreign import ccall "SDL.h SDL_CreateCond" createCondFFI :: IO (Ptr Cond) -foreign import ccall "SDL.h SDL_CreateMutex" createMutexFFI :: IO (Ptr Mutex) -foreign import ccall "SDL.h SDL_CreateSemaphore" createSemaphoreFFI :: Word32 -> IO (Ptr Sem) -foreign import ccall "SDL.h SDL_DestroyCond" destroyCondFFI :: Ptr Cond -> IO () -foreign import ccall "SDL.h SDL_DestroyMutex" destroyMutexFFI :: Ptr Mutex -> IO () -foreign import ccall "SDL.h SDL_DestroySemaphore" destroySemaphoreFFI :: Ptr Sem -> IO () -foreign import ccall "SDL.h SDL_LockMutex" lockMutexFFI :: Ptr Mutex -> IO CInt -foreign import ccall "SDL.h SDL_SemPost" semPostFFI :: Ptr Sem -> IO CInt -foreign import ccall "SDL.h SDL_SemTryWait" semTryWaitFFI :: Ptr Sem -> IO CInt -foreign import ccall "SDL.h SDL_SemValue" semValueFFI :: Ptr Sem -> IO Word32 -foreign import ccall "SDL.h SDL_SemWait" semWaitFFI :: Ptr Sem -> IO CInt -foreign import ccall "SDL.h SDL_SemWaitTimeout" semWaitTimeoutFFI :: Ptr Sem -> Word32 -> IO CInt -foreign import ccall "SDL.h SDL_TryLockMutex" tryLockMutexFFI :: Ptr Mutex -> IO CInt -foreign import ccall "SDL.h SDL_UnlockMutex" unlockMutexFFI :: Ptr Mutex -> IO CInt - -foreign import ccall "SDL.h SDL_AtomicAdd" atomicAddFFI :: Ptr Atomic -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_AtomicCAS" atomicCASFFI :: Ptr Atomic -> CInt -> CInt -> IO Bool -foreign import ccall "SDL.h SDL_AtomicCASPtr" atomicCASPtrFFI :: Ptr (Ptr ()) -> Ptr () -> Ptr () -> IO Bool -foreign import ccall "SDL.h SDL_AtomicGet" atomicGetFFI :: Ptr Atomic -> IO CInt -foreign import ccall "SDL.h SDL_AtomicGetPtr" atomicGetPtrFFI :: Ptr (Ptr ()) -> IO (Ptr ()) -foreign import ccall "SDL.h SDL_AtomicLock" atomicLockFFI :: Ptr SpinLock -> IO () -foreign import ccall "SDL.h SDL_AtomicSet" atomicSetFFI :: Ptr Atomic -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_AtomicSetPtr" atomicSetPtrFFI :: Ptr (Ptr ()) -> Ptr () -> IO (Ptr ()) -foreign import ccall "SDL.h SDL_AtomicTryLock" atomicTryLockFFI :: Ptr SpinLock -> IO Bool -foreign import ccall "SDL.h SDL_AtomicUnlock" atomicUnlockFFI :: Ptr SpinLock -> IO () - -createThread :: MonadIO m => ThreadFunction -> CString -> m (Ptr ()) -createThread v1 v2 = liftIO $ createThreadFFI v1 v2 -{-# INLINE createThread #-} - -detachThread :: MonadIO m => Ptr Thread -> m () -detachThread v1 = liftIO $ detachThreadFFI v1 -{-# INLINE detachThread #-} - -getThreadID :: MonadIO m => Ptr Thread -> m ThreadID -getThreadID v1 = liftIO $ getThreadIDFFI v1 -{-# INLINE getThreadID #-} - -getThreadName :: MonadIO m => Ptr Thread -> m CString -getThreadName v1 = liftIO $ getThreadNameFFI v1 -{-# INLINE getThreadName #-} - -setThreadPriority :: MonadIO m => ThreadPriority -> m CInt -setThreadPriority v1 = liftIO $ setThreadPriorityFFI v1 -{-# INLINE setThreadPriority #-} - -tlsCreate :: MonadIO m => m TLSID -tlsCreate = liftIO tlsCreateFFI -{-# INLINE tlsCreate #-} - -tlsGet :: MonadIO m => TLSID -> m (Ptr ()) -tlsGet v1 = liftIO $ tlsGetFFI v1 -{-# INLINE tlsGet #-} - -tlsSet :: MonadIO m => TLSID -> Ptr () -> FunPtr (Ptr () -> IO ()) -> m CInt -tlsSet v1 v2 v3 = liftIO $ tlsSetFFI v1 v2 v3 -{-# INLINE tlsSet #-} - -threadID :: MonadIO m => m ThreadID -threadID = liftIO threadIDFFI -{-# INLINE threadID #-} - -waitThread :: MonadIO m => Ptr Thread -> Ptr CInt -> m () -waitThread v1 v2 = liftIO $ waitThreadFFI v1 v2 -{-# INLINE waitThread #-} - -condBroadcast :: MonadIO m => Ptr Cond -> m CInt -condBroadcast v1 = liftIO $ condBroadcastFFI v1 -{-# INLINE condBroadcast #-} - -condSignal :: MonadIO m => Ptr Cond -> m CInt -condSignal v1 = liftIO $ condSignalFFI v1 -{-# INLINE condSignal #-} - -condWait :: MonadIO m => Ptr Cond -> Ptr Mutex -> m CInt -condWait v1 v2 = liftIO $ condWaitFFI v1 v2 -{-# INLINE condWait #-} - -condWaitTimeout :: MonadIO m => Ptr Cond -> Ptr Mutex -> Word32 -> m CInt -condWaitTimeout v1 v2 v3 = liftIO $ condWaitTimeoutFFI v1 v2 v3 -{-# INLINE condWaitTimeout #-} - -createCond :: MonadIO m => m (Ptr Cond) -createCond = liftIO createCondFFI -{-# INLINE createCond #-} - -createMutex :: MonadIO m => m (Ptr Mutex) -createMutex = liftIO createMutexFFI -{-# INLINE createMutex #-} - -createSemaphore :: MonadIO m => Word32 -> m (Ptr Sem) -createSemaphore v1 = liftIO $ createSemaphoreFFI v1 -{-# INLINE createSemaphore #-} - -destroyCond :: MonadIO m => Ptr Cond -> m () -destroyCond v1 = liftIO $ destroyCondFFI v1 -{-# INLINE destroyCond #-} - -destroyMutex :: MonadIO m => Ptr Mutex -> m () -destroyMutex v1 = liftIO $ destroyMutexFFI v1 -{-# INLINE destroyMutex #-} - -destroySemaphore :: MonadIO m => Ptr Sem -> m () -destroySemaphore v1 = liftIO $ destroySemaphoreFFI v1 -{-# INLINE destroySemaphore #-} - -lockMutex :: MonadIO m => Ptr Mutex -> m CInt -lockMutex v1 = liftIO $ lockMutexFFI v1 -{-# INLINE lockMutex #-} - -semPost :: MonadIO m => Ptr Sem -> m CInt -semPost v1 = liftIO $ semPostFFI v1 -{-# INLINE semPost #-} - -semTryWait :: MonadIO m => Ptr Sem -> m CInt -semTryWait v1 = liftIO $ semTryWaitFFI v1 -{-# INLINE semTryWait #-} - -semValue :: MonadIO m => Ptr Sem -> m Word32 -semValue v1 = liftIO $ semValueFFI v1 -{-# INLINE semValue #-} - -semWait :: MonadIO m => Ptr Sem -> m CInt -semWait v1 = liftIO $ semWaitFFI v1 -{-# INLINE semWait #-} - -semWaitTimeout :: MonadIO m => Ptr Sem -> Word32 -> m CInt -semWaitTimeout v1 v2 = liftIO $ semWaitTimeoutFFI v1 v2 -{-# INLINE semWaitTimeout #-} - -tryLockMutex :: MonadIO m => Ptr Mutex -> m CInt -tryLockMutex v1 = liftIO $ tryLockMutexFFI v1 -{-# INLINE tryLockMutex #-} - -unlockMutex :: MonadIO m => Ptr Mutex -> m CInt -unlockMutex v1 = liftIO $ unlockMutexFFI v1 -{-# INLINE unlockMutex #-} - -atomicAdd :: MonadIO m => Ptr Atomic -> CInt -> m CInt -atomicAdd v1 v2 = liftIO $ atomicAddFFI v1 v2 -{-# INLINE atomicAdd #-} - -atomicCAS :: MonadIO m => Ptr Atomic -> CInt -> CInt -> m Bool -atomicCAS v1 v2 v3 = liftIO $ atomicCASFFI v1 v2 v3 -{-# INLINE atomicCAS #-} - -atomicCASPtr :: MonadIO m => Ptr (Ptr ()) -> Ptr () -> Ptr () -> m Bool -atomicCASPtr v1 v2 v3 = liftIO $ atomicCASPtrFFI v1 v2 v3 -{-# INLINE atomicCASPtr #-} - -atomicDecRef :: Ptr Atomic -> IO Bool -atomicDecRef a = do - old <- atomicAdd a (-1) - return $ old == 1 -{-# INLINE atomicDecRef #-} - -atomicGet :: MonadIO m => Ptr Atomic -> m CInt -atomicGet v1 = liftIO $ atomicGetFFI v1 -{-# INLINE atomicGet #-} - -atomicGetPtr :: MonadIO m => Ptr (Ptr ()) -> m (Ptr ()) -atomicGetPtr v1 = liftIO $ atomicGetPtrFFI v1 -{-# INLINE atomicGetPtr #-} - -atomicIncRef :: Ptr Atomic -> IO CInt -atomicIncRef a = atomicAdd a 1 -{-# INLINE atomicIncRef #-} - -atomicLock :: MonadIO m => Ptr SpinLock -> m () -atomicLock v1 = liftIO $ atomicLockFFI v1 -{-# INLINE atomicLock #-} - -atomicSet :: MonadIO m => Ptr Atomic -> CInt -> m CInt -atomicSet v1 v2 = liftIO $ atomicSetFFI v1 v2 -{-# INLINE atomicSet #-} - -atomicSetPtr :: MonadIO m => Ptr (Ptr ()) -> Ptr () -> m (Ptr ()) -atomicSetPtr v1 v2 = liftIO $ atomicSetPtrFFI v1 v2 -{-# INLINE atomicSetPtr #-} - -atomicTryLock :: MonadIO m => Ptr SpinLock -> m Bool -atomicTryLock v1 = liftIO $ atomicTryLockFFI v1 -{-# INLINE atomicTryLock #-} - -atomicUnlock :: MonadIO m => Ptr SpinLock -> m () -atomicUnlock v1 = liftIO $ atomicUnlockFFI v1 -{-# INLINE atomicUnlock #-} +module SDL.Raw.Thread (+ -- * Thread Management+ createThread,+ detachThread,+ getThreadID,+ getThreadName,+ setThreadPriority,+ tlsCreate,+ tlsGet,+ tlsSet,+ threadID,+ waitThread,++ -- * Thread Synchronization Primitives+ condBroadcast,+ condSignal,+ condWait,+ condWaitTimeout,+ createCond,+ createMutex,+ createSemaphore,+ destroyCond,+ destroyMutex,+ destroySemaphore,+ lockMutex,+ semPost,+ semTryWait,+ semValue,+ semWait,+ semWaitTimeout,+ tryLockMutex,+ unlockMutex,++ -- * Atomic Operations+ atomicAdd,+ atomicCAS,+ atomicCASPtr,+ atomicDecRef,+ atomicGet,+ atomicGetPtr,+ atomicIncRef,+ atomicLock,+ atomicSet,+ atomicSetPtr,+ atomicTryLock,+ atomicUnlock+) where++import Control.Monad.IO.Class+import Data.Word+import Foreign.C.String+import Foreign.C.Types+import Foreign.Ptr+import SDL.Raw.Enum+import SDL.Raw.Types++foreign import ccall "SDL.h SDL_CreateThread" createThreadFFI :: ThreadFunction -> CString -> IO (Ptr ())+foreign import ccall "SDL.h SDL_DetachThread" detachThreadFFI :: Ptr Thread -> IO ()+foreign import ccall "SDL.h SDL_GetThreadID" getThreadIDFFI :: Ptr Thread -> IO ThreadID+foreign import ccall "SDL.h SDL_GetThreadName" getThreadNameFFI :: Ptr Thread -> IO CString+foreign import ccall "SDL.h SDL_SetThreadPriority" setThreadPriorityFFI :: ThreadPriority -> IO CInt+foreign import ccall "SDL.h SDL_TLSCreate" tlsCreateFFI :: IO TLSID+foreign import ccall "SDL.h SDL_TLSGet" tlsGetFFI :: TLSID -> IO (Ptr ())+foreign import ccall "SDL.h SDL_TLSSet" tlsSetFFI :: TLSID -> Ptr () -> FunPtr (Ptr () -> IO ()) -> IO CInt+foreign import ccall "SDL.h SDL_ThreadID" threadIDFFI :: IO ThreadID+foreign import ccall "SDL.h SDL_WaitThread" waitThreadFFI :: Ptr Thread -> Ptr CInt -> IO ()++foreign import ccall "SDL.h SDL_CondBroadcast" condBroadcastFFI :: Ptr Cond -> IO CInt+foreign import ccall "SDL.h SDL_CondSignal" condSignalFFI :: Ptr Cond -> IO CInt+foreign import ccall "SDL.h SDL_CondWait" condWaitFFI :: Ptr Cond -> Ptr Mutex -> IO CInt+foreign import ccall "SDL.h SDL_CondWaitTimeout" condWaitTimeoutFFI :: Ptr Cond -> Ptr Mutex -> Word32 -> IO CInt+foreign import ccall "SDL.h SDL_CreateCond" createCondFFI :: IO (Ptr Cond)+foreign import ccall "SDL.h SDL_CreateMutex" createMutexFFI :: IO (Ptr Mutex)+foreign import ccall "SDL.h SDL_CreateSemaphore" createSemaphoreFFI :: Word32 -> IO (Ptr Sem)+foreign import ccall "SDL.h SDL_DestroyCond" destroyCondFFI :: Ptr Cond -> IO ()+foreign import ccall "SDL.h SDL_DestroyMutex" destroyMutexFFI :: Ptr Mutex -> IO ()+foreign import ccall "SDL.h SDL_DestroySemaphore" destroySemaphoreFFI :: Ptr Sem -> IO ()+foreign import ccall "SDL.h SDL_LockMutex" lockMutexFFI :: Ptr Mutex -> IO CInt+foreign import ccall "SDL.h SDL_SemPost" semPostFFI :: Ptr Sem -> IO CInt+foreign import ccall "SDL.h SDL_SemTryWait" semTryWaitFFI :: Ptr Sem -> IO CInt+foreign import ccall "SDL.h SDL_SemValue" semValueFFI :: Ptr Sem -> IO Word32+foreign import ccall "SDL.h SDL_SemWait" semWaitFFI :: Ptr Sem -> IO CInt+foreign import ccall "SDL.h SDL_SemWaitTimeout" semWaitTimeoutFFI :: Ptr Sem -> Word32 -> IO CInt+foreign import ccall "SDL.h SDL_TryLockMutex" tryLockMutexFFI :: Ptr Mutex -> IO CInt+foreign import ccall "SDL.h SDL_UnlockMutex" unlockMutexFFI :: Ptr Mutex -> IO CInt++foreign import ccall "SDL.h SDL_AtomicAdd" atomicAddFFI :: Ptr Atomic -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_AtomicCAS" atomicCASFFI :: Ptr Atomic -> CInt -> CInt -> IO Bool+foreign import ccall "SDL.h SDL_AtomicCASPtr" atomicCASPtrFFI :: Ptr (Ptr ()) -> Ptr () -> Ptr () -> IO Bool+foreign import ccall "SDL.h SDL_AtomicGet" atomicGetFFI :: Ptr Atomic -> IO CInt+foreign import ccall "SDL.h SDL_AtomicGetPtr" atomicGetPtrFFI :: Ptr (Ptr ()) -> IO (Ptr ())+foreign import ccall "SDL.h SDL_AtomicLock" atomicLockFFI :: Ptr SpinLock -> IO ()+foreign import ccall "SDL.h SDL_AtomicSet" atomicSetFFI :: Ptr Atomic -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_AtomicSetPtr" atomicSetPtrFFI :: Ptr (Ptr ()) -> Ptr () -> IO (Ptr ())+foreign import ccall "SDL.h SDL_AtomicTryLock" atomicTryLockFFI :: Ptr SpinLock -> IO Bool+foreign import ccall "SDL.h SDL_AtomicUnlock" atomicUnlockFFI :: Ptr SpinLock -> IO ()++createThread :: MonadIO m => ThreadFunction -> CString -> m (Ptr ())+createThread v1 v2 = liftIO $ createThreadFFI v1 v2+{-# INLINE createThread #-}++detachThread :: MonadIO m => Ptr Thread -> m ()+detachThread v1 = liftIO $ detachThreadFFI v1+{-# INLINE detachThread #-}++getThreadID :: MonadIO m => Ptr Thread -> m ThreadID+getThreadID v1 = liftIO $ getThreadIDFFI v1+{-# INLINE getThreadID #-}++getThreadName :: MonadIO m => Ptr Thread -> m CString+getThreadName v1 = liftIO $ getThreadNameFFI v1+{-# INLINE getThreadName #-}++setThreadPriority :: MonadIO m => ThreadPriority -> m CInt+setThreadPriority v1 = liftIO $ setThreadPriorityFFI v1+{-# INLINE setThreadPriority #-}++tlsCreate :: MonadIO m => m TLSID+tlsCreate = liftIO tlsCreateFFI+{-# INLINE tlsCreate #-}++tlsGet :: MonadIO m => TLSID -> m (Ptr ())+tlsGet v1 = liftIO $ tlsGetFFI v1+{-# INLINE tlsGet #-}++tlsSet :: MonadIO m => TLSID -> Ptr () -> FunPtr (Ptr () -> IO ()) -> m CInt+tlsSet v1 v2 v3 = liftIO $ tlsSetFFI v1 v2 v3+{-# INLINE tlsSet #-}++threadID :: MonadIO m => m ThreadID+threadID = liftIO threadIDFFI+{-# INLINE threadID #-}++waitThread :: MonadIO m => Ptr Thread -> Ptr CInt -> m ()+waitThread v1 v2 = liftIO $ waitThreadFFI v1 v2+{-# INLINE waitThread #-}++condBroadcast :: MonadIO m => Ptr Cond -> m CInt+condBroadcast v1 = liftIO $ condBroadcastFFI v1+{-# INLINE condBroadcast #-}++condSignal :: MonadIO m => Ptr Cond -> m CInt+condSignal v1 = liftIO $ condSignalFFI v1+{-# INLINE condSignal #-}++condWait :: MonadIO m => Ptr Cond -> Ptr Mutex -> m CInt+condWait v1 v2 = liftIO $ condWaitFFI v1 v2+{-# INLINE condWait #-}++condWaitTimeout :: MonadIO m => Ptr Cond -> Ptr Mutex -> Word32 -> m CInt+condWaitTimeout v1 v2 v3 = liftIO $ condWaitTimeoutFFI v1 v2 v3+{-# INLINE condWaitTimeout #-}++createCond :: MonadIO m => m (Ptr Cond)+createCond = liftIO createCondFFI+{-# INLINE createCond #-}++createMutex :: MonadIO m => m (Ptr Mutex)+createMutex = liftIO createMutexFFI+{-# INLINE createMutex #-}++createSemaphore :: MonadIO m => Word32 -> m (Ptr Sem)+createSemaphore v1 = liftIO $ createSemaphoreFFI v1+{-# INLINE createSemaphore #-}++destroyCond :: MonadIO m => Ptr Cond -> m ()+destroyCond v1 = liftIO $ destroyCondFFI v1+{-# INLINE destroyCond #-}++destroyMutex :: MonadIO m => Ptr Mutex -> m ()+destroyMutex v1 = liftIO $ destroyMutexFFI v1+{-# INLINE destroyMutex #-}++destroySemaphore :: MonadIO m => Ptr Sem -> m ()+destroySemaphore v1 = liftIO $ destroySemaphoreFFI v1+{-# INLINE destroySemaphore #-}++lockMutex :: MonadIO m => Ptr Mutex -> m CInt+lockMutex v1 = liftIO $ lockMutexFFI v1+{-# INLINE lockMutex #-}++semPost :: MonadIO m => Ptr Sem -> m CInt+semPost v1 = liftIO $ semPostFFI v1+{-# INLINE semPost #-}++semTryWait :: MonadIO m => Ptr Sem -> m CInt+semTryWait v1 = liftIO $ semTryWaitFFI v1+{-# INLINE semTryWait #-}++semValue :: MonadIO m => Ptr Sem -> m Word32+semValue v1 = liftIO $ semValueFFI v1+{-# INLINE semValue #-}++semWait :: MonadIO m => Ptr Sem -> m CInt+semWait v1 = liftIO $ semWaitFFI v1+{-# INLINE semWait #-}++semWaitTimeout :: MonadIO m => Ptr Sem -> Word32 -> m CInt+semWaitTimeout v1 v2 = liftIO $ semWaitTimeoutFFI v1 v2+{-# INLINE semWaitTimeout #-}++tryLockMutex :: MonadIO m => Ptr Mutex -> m CInt+tryLockMutex v1 = liftIO $ tryLockMutexFFI v1+{-# INLINE tryLockMutex #-}++unlockMutex :: MonadIO m => Ptr Mutex -> m CInt+unlockMutex v1 = liftIO $ unlockMutexFFI v1+{-# INLINE unlockMutex #-}++atomicAdd :: MonadIO m => Ptr Atomic -> CInt -> m CInt+atomicAdd v1 v2 = liftIO $ atomicAddFFI v1 v2+{-# INLINE atomicAdd #-}++atomicCAS :: MonadIO m => Ptr Atomic -> CInt -> CInt -> m Bool+atomicCAS v1 v2 v3 = liftIO $ atomicCASFFI v1 v2 v3+{-# INLINE atomicCAS #-}++atomicCASPtr :: MonadIO m => Ptr (Ptr ()) -> Ptr () -> Ptr () -> m Bool+atomicCASPtr v1 v2 v3 = liftIO $ atomicCASPtrFFI v1 v2 v3+{-# INLINE atomicCASPtr #-}++atomicDecRef :: Ptr Atomic -> IO Bool+atomicDecRef a = do+ old <- atomicAdd a (-1)+ return $ old == 1+{-# INLINE atomicDecRef #-}++atomicGet :: MonadIO m => Ptr Atomic -> m CInt+atomicGet v1 = liftIO $ atomicGetFFI v1+{-# INLINE atomicGet #-}++atomicGetPtr :: MonadIO m => Ptr (Ptr ()) -> m (Ptr ())+atomicGetPtr v1 = liftIO $ atomicGetPtrFFI v1+{-# INLINE atomicGetPtr #-}++atomicIncRef :: Ptr Atomic -> IO CInt+atomicIncRef a = atomicAdd a 1+{-# INLINE atomicIncRef #-}++atomicLock :: MonadIO m => Ptr SpinLock -> m ()+atomicLock v1 = liftIO $ atomicLockFFI v1+{-# INLINE atomicLock #-}++atomicSet :: MonadIO m => Ptr Atomic -> CInt -> m CInt+atomicSet v1 v2 = liftIO $ atomicSetFFI v1 v2+{-# INLINE atomicSet #-}++atomicSetPtr :: MonadIO m => Ptr (Ptr ()) -> Ptr () -> m (Ptr ())+atomicSetPtr v1 v2 = liftIO $ atomicSetPtrFFI v1 v2+{-# INLINE atomicSetPtr #-}++atomicTryLock :: MonadIO m => Ptr SpinLock -> m Bool+atomicTryLock v1 = liftIO $ atomicTryLockFFI v1+{-# INLINE atomicTryLock #-}++atomicUnlock :: MonadIO m => Ptr SpinLock -> m ()+atomicUnlock v1 = liftIO $ atomicUnlockFFI v1+{-# INLINE atomicUnlock #-}
src/SDL/Raw/Timer.hs view
@@ -1,46 +1,46 @@-module SDL.Raw.Timer ( - -- * Timer Support - addTimer, - delay, - getPerformanceCounter, - getPerformanceFrequency, - getTicks, - removeTimer -) where - -import Control.Monad.IO.Class -import Data.Word -import Foreign.C.Types -import Foreign.Ptr -import SDL.Raw.Types - -foreign import ccall "SDL.h SDL_AddTimer" addTimerFFI :: Word32 -> TimerCallback -> Ptr () -> IO TimerID -foreign import ccall "SDL.h SDL_Delay" delayFFI :: Word32 -> IO () -foreign import ccall "SDL.h SDL_GetPerformanceCounter" getPerformanceCounterFFI :: IO Word64 -foreign import ccall "SDL.h SDL_GetPerformanceFrequency" getPerformanceFrequencyFFI :: IO Word64 -foreign import ccall "SDL.h SDL_GetTicks" getTicksFFI :: IO Word32 -foreign import ccall "SDL.h SDL_RemoveTimer" removeTimerFFI :: TimerID -> IO Bool - -addTimer :: MonadIO m => Word32 -> TimerCallback -> Ptr () -> m TimerID -addTimer v1 v2 v3 = liftIO $ addTimerFFI v1 v2 v3 -{-# INLINE addTimer #-} - -delay :: MonadIO m => Word32 -> m () -delay v1 = liftIO $ delayFFI v1 -{-# INLINE delay #-} - -getPerformanceCounter :: MonadIO m => m Word64 -getPerformanceCounter = liftIO getPerformanceCounterFFI -{-# INLINE getPerformanceCounter #-} - -getPerformanceFrequency :: MonadIO m => m Word64 -getPerformanceFrequency = liftIO getPerformanceFrequencyFFI -{-# INLINE getPerformanceFrequency #-} - -getTicks :: MonadIO m => m Word32 -getTicks = liftIO getTicksFFI -{-# INLINE getTicks #-} - -removeTimer :: MonadIO m => TimerID -> m Bool -removeTimer v1 = liftIO $ removeTimerFFI v1 -{-# INLINE removeTimer #-} +module SDL.Raw.Timer (+ -- * Timer Support+ addTimer,+ delay,+ getPerformanceCounter,+ getPerformanceFrequency,+ getTicks,+ removeTimer+) where++import Control.Monad.IO.Class+import Data.Word+import Foreign.C.Types+import Foreign.Ptr+import SDL.Raw.Types++foreign import ccall "SDL.h SDL_AddTimer" addTimerFFI :: Word32 -> TimerCallback -> Ptr () -> IO TimerID+foreign import ccall "SDL.h SDL_Delay" delayFFI :: Word32 -> IO ()+foreign import ccall "SDL.h SDL_GetPerformanceCounter" getPerformanceCounterFFI :: IO Word64+foreign import ccall "SDL.h SDL_GetPerformanceFrequency" getPerformanceFrequencyFFI :: IO Word64+foreign import ccall "SDL.h SDL_GetTicks" getTicksFFI :: IO Word32+foreign import ccall "SDL.h SDL_RemoveTimer" removeTimerFFI :: TimerID -> IO Bool++addTimer :: MonadIO m => Word32 -> TimerCallback -> Ptr () -> m TimerID+addTimer v1 v2 v3 = liftIO $ addTimerFFI v1 v2 v3+{-# INLINE addTimer #-}++delay :: MonadIO m => Word32 -> m ()+delay v1 = liftIO $ delayFFI v1+{-# INLINE delay #-}++getPerformanceCounter :: MonadIO m => m Word64+getPerformanceCounter = liftIO getPerformanceCounterFFI+{-# INLINE getPerformanceCounter #-}++getPerformanceFrequency :: MonadIO m => m Word64+getPerformanceFrequency = liftIO getPerformanceFrequencyFFI+{-# INLINE getPerformanceFrequency #-}++getTicks :: MonadIO m => m Word32+getTicks = liftIO getTicksFFI+{-# INLINE getTicks #-}++removeTimer :: MonadIO m => TimerID -> m Bool+removeTimer v1 = liftIO $ removeTimerFFI v1+{-# INLINE removeTimer #-}
src/SDL/Raw/Types.hsc view
@@ -1,1423 +1,1423 @@-{-# LANGUAGE DeriveDataTypeable #-} -module SDL.Raw.Types ( - -- * Type Aliases - -- ** Function Types - AudioCallback, - EventFilter, - HintCallback, - LogOutputFunction, - ThreadFunction, - TimerCallback, - - mkAudioCallback, - mkEventFilter, - mkHintCallback, - mkLogOutputFunction, - mkThreadFunction, - mkTimerCallback, - - -- ** Common Types - AudioDeviceID, - AudioFormat, - Cond, - Cursor, - FingerID, - GameController, - GestureID, - GLContext, - Haptic, - Joystick, - JoystickID, - Mutex, - Renderer, - Sem, - SpinLock, - SysWMinfo, - SysWMmsg, - Texture, - Thread, - ThreadID, - TimerID, - TLSID, - TouchID, - Window, - - -- * Data Structures - Atomic(..), - AudioCVT(..), - AudioSpec(..), - Color(..), - DisplayMode(..), - Event(..), - Finger(..), - GameControllerButtonBind(..), - HapticDirection(..), - HapticEffect(..), - JoystickGUID(..), - Keysym(..), - MessageBoxButtonData(..), - MessageBoxColor(..), - MessageBoxColorScheme(..), - MessageBoxData(..), - Palette(..), - PixelFormat(..), - Point(..), - Rect(..), - RendererInfo(..), - RWops(..), - Surface(..), - Version(..) -) where - -#include "SDL.h" - -import Data.Int -import Data.Typeable -import Data.Word -import Foreign.C.String -import Foreign.C.Types -import Foreign.Marshal.Array -import Foreign.Ptr -import Foreign.Storable -import SDL.Raw.Enum - -type AudioCallback = FunPtr (Ptr () -> Ptr Word8 -> CInt -> IO ()) -type EventFilter = FunPtr (Ptr () -> Ptr Event -> IO CInt) -type HintCallback = FunPtr (Ptr () -> CString -> CString -> CString -> IO ()) -type LogOutputFunction = FunPtr (Ptr () -> CInt -> LogPriority -> CString -> IO ()) -type ThreadFunction = FunPtr (Ptr () -> IO CInt) -type TimerCallback = FunPtr (Word32 -> Ptr () -> IO Word32) - --- | The storage associated with the resulting 'FunPtr' has to be released with --- 'freeHaskellFunPtr' when it is no longer required. -foreign import ccall "wrapper" - mkAudioCallback :: (Ptr () -> Ptr Word8 -> CInt -> IO ()) -> IO AudioCallback - --- | The storage associated with the resulting 'FunPtr' has to be released with --- 'freeHaskellFunPtr' when it is no longer required. -foreign import ccall "wrapper" - mkEventFilter :: (Ptr () -> Ptr Event -> IO CInt) -> IO EventFilter - --- | The storage associated with the resulting 'FunPtr' has to be released with --- 'freeHaskellFunPtr' when it is no longer required. -foreign import ccall "wrapper" - mkHintCallback :: (Ptr () -> CString -> CString -> CString -> IO ()) -> IO HintCallback - --- | The storage associated with the resulting 'FunPtr' has to be released with --- 'freeHaskellFunPtr' when it is no longer required. -foreign import ccall "wrapper" - mkLogOutputFunction :: (Ptr () -> CInt -> LogPriority -> CString -> IO ()) -> IO LogOutputFunction - --- | The storage associated with the resulting 'FunPtr' has to be released with --- 'freeHaskellFunPtr' when it is no longer required. -foreign import ccall "wrapper" - mkThreadFunction :: (Ptr () -> IO CInt) -> IO ThreadFunction - --- | The storage associated with the resulting 'FunPtr' has to be released with --- 'freeHaskellFunPtr' when it is no longer required. -foreign import ccall "wrapper" - mkTimerCallback :: (Word32 -> Ptr () -> IO Word32) -> IO TimerCallback - -type AudioDeviceID = Word32 -type Cond = Ptr () -type Cursor = Ptr () -type FingerID = Int64 -type GameController = Ptr () -type GestureID = Int64 -type GLContext = Ptr () -type Haptic = Ptr () -type Joystick = Ptr () -type JoystickID = Int32 -type Mutex = Ptr () -type Renderer = Ptr () -type Sem = Ptr () -type SpinLock = CInt -type SysWMinfo = Ptr () -type SysWMmsg = Ptr () -type Texture = Ptr () -type Thread = Ptr () -type ThreadID = CULong -type TimerID = CInt -type TLSID = CUInt -type TouchID = Int64 -type Window = Ptr () - -data Atomic = Atomic - { atomicValue :: !CInt - } deriving (Eq, Show, Typeable) - -instance Storable Atomic where - sizeOf _ = (#size SDL_atomic_t) - alignment = sizeOf - peek ptr = do - value <- (#peek SDL_atomic_t, value) ptr - return $! Atomic value - poke ptr (Atomic value) = do - (#poke SDL_atomic_t, value) ptr value - -data AudioCVT = AudioCVT - { audioCVTNeeded :: !CInt - , audioCVTSrcFormat :: !AudioFormat - , audioCVTDstFormat :: !AudioFormat - , audioCVTRateIncr :: !CDouble - , audioCVTBuf :: !(Ptr Word8) - , audioCVTLen :: !CInt - , audioCVTLenCvt :: !CInt - , audioCVTLenMult :: !CInt - , audioCVTLenRatio :: !CDouble - } deriving (Eq, Show, Typeable) - -instance Storable AudioCVT where - sizeOf _ = (#size SDL_AudioCVT) - alignment = sizeOf - peek ptr = do - needed <- (#peek SDL_AudioCVT, needed) ptr - src_format <- (#peek SDL_AudioCVT, src_format) ptr - dst_format <- (#peek SDL_AudioCVT, dst_format) ptr - rate_incr <- (#peek SDL_AudioCVT, rate_incr) ptr - buf <- (#peek SDL_AudioCVT, buf) ptr - len <- (#peek SDL_AudioCVT, len) ptr - len_cvt <- (#peek SDL_AudioCVT, len_cvt) ptr - len_mult <- (#peek SDL_AudioCVT, len_mult) ptr - len_ratio <- (#peek SDL_AudioCVT, len_ratio) ptr - return $! AudioCVT needed src_format dst_format rate_incr buf len len_cvt len_mult len_ratio - poke ptr (AudioCVT needed src_format dst_format rate_incr buf len len_cvt len_mult len_ratio) = do - (#poke SDL_AudioCVT, needed) ptr needed - (#poke SDL_AudioCVT, src_format) ptr src_format - (#poke SDL_AudioCVT, dst_format) ptr dst_format - (#poke SDL_AudioCVT, rate_incr) ptr rate_incr - (#poke SDL_AudioCVT, buf) ptr buf - (#poke SDL_AudioCVT, len) ptr len - (#poke SDL_AudioCVT, len_cvt) ptr len_cvt - (#poke SDL_AudioCVT, len_mult) ptr len_mult - (#poke SDL_AudioCVT, len_ratio) ptr len_ratio - -data AudioSpec = AudioSpec - { audioSpecFreq :: !CInt - , audioSpecFormat :: !AudioFormat - , audioSpecChannels :: !Word8 - , audioSpecSilence :: !Word8 - , audioSpecSamples :: !Word16 - , audioSpecSize :: !Word32 - , audioSpecCallback :: !AudioCallback - , audioSpecUserdata :: !(Ptr ()) - } deriving (Eq, Show, Typeable) - -instance Storable AudioSpec where - sizeOf _ = (#size SDL_AudioSpec) - alignment = sizeOf - peek ptr = do - freq <- (#peek SDL_AudioSpec, freq) ptr - format <- (#peek SDL_AudioSpec, format) ptr - channels <- (#peek SDL_AudioSpec, channels) ptr - silence <- (#peek SDL_AudioSpec, silence) ptr - samples <- (#peek SDL_AudioSpec, samples) ptr - size <- (#peek SDL_AudioSpec, size) ptr - callback <- (#peek SDL_AudioSpec, callback) ptr - userdata <- (#peek SDL_AudioSpec, userdata) ptr - return $! AudioSpec freq format channels silence samples size callback userdata - poke ptr (AudioSpec freq format channels silence samples size callback userdata) = do - (#poke SDL_AudioSpec, freq) ptr freq - (#poke SDL_AudioSpec, format) ptr format - (#poke SDL_AudioSpec, channels) ptr channels - (#poke SDL_AudioSpec, silence) ptr silence - (#poke SDL_AudioSpec, samples) ptr samples - (#poke SDL_AudioSpec, size) ptr size - (#poke SDL_AudioSpec, callback) ptr callback - (#poke SDL_AudioSpec, userdata) ptr userdata - -data Color = Color - { colorR :: !Word8 - , colorG :: !Word8 - , colorB :: !Word8 - , colorA :: !Word8 - } deriving (Eq, Show, Typeable) - -instance Storable Color where - sizeOf _ = (#size SDL_Color) - alignment = sizeOf - peek ptr = do - r <- (#peek SDL_Color, r) ptr - g <- (#peek SDL_Color, g) ptr - b <- (#peek SDL_Color, b) ptr - a <- (#peek SDL_Color, a) ptr - return $! Color r g b a - poke ptr (Color r g b a) = do - (#poke SDL_Color, r) ptr r - (#poke SDL_Color, g) ptr g - (#poke SDL_Color, b) ptr b - (#poke SDL_Color, a) ptr a - -data DisplayMode = DisplayMode - { displayModeFormat :: !Word32 - , displayModeW :: !CInt - , displayModeH :: !CInt - , displayModeRefreshRate :: !CInt - , displayModeDriverData :: !(Ptr ()) - } deriving (Eq, Show, Typeable) - -instance Storable DisplayMode where - sizeOf _ = (#size SDL_DisplayMode) - alignment = sizeOf - peek ptr = do - format <- (#peek SDL_DisplayMode, format) ptr - w <- (#peek SDL_DisplayMode, w) ptr - h <- (#peek SDL_DisplayMode, h) ptr - refresh_rate <- (#peek SDL_DisplayMode, refresh_rate) ptr - driverdata <- (#peek SDL_DisplayMode, driverdata) ptr - return $! DisplayMode format w h refresh_rate driverdata - poke ptr (DisplayMode format w h refresh_rate driverdata) = do - (#poke SDL_DisplayMode, format) ptr format - (#poke SDL_DisplayMode, w) ptr w - (#poke SDL_DisplayMode, h) ptr h - (#poke SDL_DisplayMode, refresh_rate) ptr refresh_rate - (#poke SDL_DisplayMode, driverdata) ptr driverdata - -data Event - = WindowEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , windowEventWindowID :: !Word32 - , windowEventEvent :: !Word8 - , windowEventData1 :: !Int32 - , windowEventData2 :: !Int32 - } - | KeyboardEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , keyboardEventWindowID :: !Word32 - , keyboardEventState :: !Word8 - , keyboardEventRepeat :: !Word8 - , keyboardEventKeysym :: !Keysym - } - | TextEditingEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , textEditingEventWindowID :: !Word32 - , textEditingEventText :: ![CChar] - , textEditingEventStart :: !Int32 - , textEditingEventLength :: !Int32 - } - | TextInputEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , textInputEventWindowID :: !Word32 - , textInputEventText :: ![CChar] - } - | MouseMotionEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , mouseMotionEventWindowID :: !Word32 - , mouseMotionEventWhich :: !Word32 - , mouseMotionEventState :: !Word32 - , mouseMotionEventX :: !Int32 - , mouseMotionEventY :: !Int32 - , mouseMotionEventXRel :: !Int32 - , mouseMotionEventYRel :: !Int32 - } - | MouseButtonEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , mouseButtonEventWindowID :: !Word32 - , mouseButtonEventWhich :: !Word32 - , mouseButtonEventButton :: !Word8 - , mouseButtonEventState :: !Word8 - , mouseButtonEventClicks :: !Word8 - , mouseButtonEventX :: !Int32 - , mouseButtonEventY :: !Int32 - } - | MouseWheelEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , mouseWheelEventWindowID :: !Word32 - , mouseWheelEventWhich :: !Word32 - , mouseWheelEventX :: !Int32 - , mouseWheelEventY :: !Int32 - } - | JoyAxisEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , joyAxisEventWhich :: !JoystickID - , joyAxisEventAxis :: !Word8 - , joyAxisEventValue :: !Int16 - } - | JoyBallEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , joyBallEventWhich :: !JoystickID - , joyBallEventBall :: !Word8 - , joyBallEventXRel :: !Int16 - , joyBallEventYRel :: !Int16 - } - | JoyHatEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , joyHatEventWhich :: !JoystickID - , joyHatEventHat :: !Word8 - , joyHatEventValue :: !Word8 - } - | JoyButtonEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , joyButtonEventWhich :: !JoystickID - , joyButtonEventButton :: !Word8 - , joyButtonEventState :: !Word8 - } - | JoyDeviceEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , joyDeviceEventWhich :: !Int32 - } - | ControllerAxisEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , controllerAxisEventWhich :: !JoystickID - , controllerAxisEventAxis :: !Word8 - , controllerAxisEventValue :: !Int16 - } - | ControllerButtonEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , controllerButtonEventWhich :: !JoystickID - , controllerButtonEventButton :: !Word8 - , controllerButtonEventState :: !Word8 - } - | ControllerDeviceEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , controllerDeviceEventWhich :: !Int32 - } - | QuitEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - } - | UserEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , userEventWindowID :: !Word32 - , userEventCode :: !Int32 - , userEventData1 :: !(Ptr ()) - , userEventData2 :: !(Ptr ()) - } - | SysWMEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , sysWMEventMsg :: !SysWMmsg - } - | TouchFingerEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , touchFingerEventTouchID :: !TouchID - , touchFingerEventFingerID :: !FingerID - , touchFingerEventX :: !CFloat - , touchFingerEventY :: !CFloat - , touchFingerEventDX :: !CFloat - , touchFingerEventDY :: !CFloat - , touchFingerEventPressure :: !CFloat - } - | MultiGestureEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , multiGestureEventTouchID :: !TouchID - , multiGestureEventDTheta :: !CFloat - , multiGestureEventDDist :: !CFloat - , multiGestureEventX :: !CFloat - , multiGestureEventY :: !CFloat - , multiGestureEventNumFingers :: !Word16 - } - | DollarGestureEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , dollarGestureEventTouchID :: !TouchID - , dollarGestureEventGestureID :: !GestureID - , dollarGestureEventNumFingers :: !Word32 - , dollarGestureEventError :: !CFloat - , dollarGestureEventX :: !CFloat - , dollarGestureEventY :: !CFloat - } - | DropEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - , dropEventFile :: !CString - } - | ClipboardUpdateEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - } - | UnknownEvent - { eventType :: !Word32 - , eventTimestamp :: !Word32 - } - deriving (Eq, Show, Typeable) - -instance Storable Event where - sizeOf _ = (#size SDL_Event) - alignment = sizeOf - peek ptr = do - typ <- (#peek SDL_Event, common.type) ptr - timestamp <- (#peek SDL_Event, common.timestamp) ptr - case typ of - (#const SDL_QUIT) -> - return $! QuitEvent typ timestamp - (#const SDL_WINDOWEVENT) -> do - wid <- (#peek SDL_Event, window.windowID) ptr - event <- (#peek SDL_Event, window.event) ptr - data1 <- (#peek SDL_Event, window.data1) ptr - data2 <- (#peek SDL_Event, window.data2) ptr - return $! WindowEvent typ timestamp wid event data1 data2 - (#const SDL_SYSWMEVENT) -> do - msg <- (#peek SDL_Event, syswm.msg) ptr - return $! SysWMEvent typ timestamp msg - (#const SDL_KEYDOWN) -> key $ KeyboardEvent typ timestamp - (#const SDL_KEYUP) -> key $ KeyboardEvent typ timestamp - (#const SDL_TEXTEDITING) -> do - wid <- (#peek SDL_Event, edit.windowID) ptr - text <- peekArray (#const SDL_TEXTEDITINGEVENT_TEXT_SIZE) $ (#ptr SDL_Event, edit.text) ptr - start <- (#peek SDL_Event, edit.start) ptr - len <- (#peek SDL_Event, edit.length) ptr - let upToNull = takeWhile (/= 0) text - return $! TextEditingEvent typ timestamp wid upToNull start len - (#const SDL_TEXTINPUT) -> do - wid <- (#peek SDL_Event, text.windowID) ptr - text <- peekArray (#const SDL_TEXTINPUTEVENT_TEXT_SIZE) $ (#ptr SDL_Event, text.text) ptr - let upToNull = takeWhile (/= 0) text - return $! TextInputEvent typ timestamp wid upToNull - (#const SDL_MOUSEMOTION) -> do - wid <- (#peek SDL_Event, motion.windowID) ptr - which <- (#peek SDL_Event, motion.which) ptr - state <- (#peek SDL_Event, motion.state) ptr - x <- (#peek SDL_Event, motion.x) ptr - y <- (#peek SDL_Event, motion.y) ptr - xrel <- (#peek SDL_Event, motion.xrel) ptr - yrel <- (#peek SDL_Event, motion.yrel) ptr - return $! MouseMotionEvent typ timestamp wid which state x y xrel yrel - (#const SDL_MOUSEBUTTONDOWN) -> mouse $ MouseButtonEvent typ timestamp - (#const SDL_MOUSEBUTTONUP) -> mouse $ MouseButtonEvent typ timestamp - (#const SDL_MOUSEWHEEL) -> do - wid <- (#peek SDL_Event, wheel.windowID) ptr - which <- (#peek SDL_Event, wheel.which) ptr - x <- (#peek SDL_Event, wheel.x) ptr - y <- (#peek SDL_Event, wheel.y) ptr - return $! MouseWheelEvent typ timestamp wid which x y - (#const SDL_JOYAXISMOTION) -> do - which <- (#peek SDL_Event, jaxis.which) ptr - axis <- (#peek SDL_Event, jaxis.axis) ptr - value <- (#peek SDL_Event, jaxis.value) ptr - return $! JoyAxisEvent typ timestamp which axis value - (#const SDL_JOYBALLMOTION) -> do - which <- (#peek SDL_Event, jball.which) ptr - ball <- (#peek SDL_Event, jball.ball) ptr - xrel <- (#peek SDL_Event, jball.xrel) ptr - yrel <- (#peek SDL_Event, jball.yrel) ptr - return $! JoyBallEvent typ timestamp which ball xrel yrel - (#const SDL_JOYHATMOTION) -> do - which <- (#peek SDL_Event, jhat.which) ptr - hat <- (#peek SDL_Event, jhat.hat) ptr - value <- (#peek SDL_Event, jhat.value) ptr - return $! JoyHatEvent typ timestamp which hat value - (#const SDL_JOYBUTTONDOWN) -> joybutton $ JoyButtonEvent typ timestamp - (#const SDL_JOYBUTTONUP) -> joybutton $ JoyButtonEvent typ timestamp - (#const SDL_JOYDEVICEADDED) -> joydevice $ JoyDeviceEvent typ timestamp - (#const SDL_JOYDEVICEREMOVED) -> joydevice $ JoyDeviceEvent typ timestamp - (#const SDL_CONTROLLERAXISMOTION) -> do - which <- (#peek SDL_Event, caxis.which) ptr - axis <- (#peek SDL_Event, caxis.axis) ptr - value <- (#peek SDL_Event, caxis.value) ptr - return $! ControllerButtonEvent typ timestamp which axis value - (#const SDL_CONTROLLERBUTTONDOWN) -> controllerbutton $ ControllerButtonEvent typ timestamp - (#const SDL_CONTROLLERBUTTONUP) -> controllerbutton $ ControllerButtonEvent typ timestamp - (#const SDL_CONTROLLERDEVICEADDED) -> controllerdevice $ ControllerDeviceEvent typ timestamp - (#const SDL_CONTROLLERDEVICEREMOVED) -> controllerdevice $ ControllerDeviceEvent typ timestamp - (#const SDL_CONTROLLERDEVICEREMAPPED) -> controllerdevice $ ControllerDeviceEvent typ timestamp - (#const SDL_FINGERDOWN) -> finger $ TouchFingerEvent typ timestamp - (#const SDL_FINGERUP) -> finger $ TouchFingerEvent typ timestamp - (#const SDL_FINGERMOTION) -> finger $ TouchFingerEvent typ timestamp - (#const SDL_DOLLARGESTURE) -> dollargesture $ DollarGestureEvent typ timestamp - (#const SDL_DOLLARRECORD) -> dollargesture $ DollarGestureEvent typ timestamp - (#const SDL_MULTIGESTURE) -> do - touchId <- (#peek SDL_Event, mgesture.touchId) ptr - dTheta <- (#peek SDL_Event, mgesture.dTheta) ptr - dDist <- (#peek SDL_Event, mgesture.dDist) ptr - x <- (#peek SDL_Event, mgesture.x) ptr - y <- (#peek SDL_Event, mgesture.y) ptr - numFingers <- (#peek SDL_Event, mgesture.numFingers) ptr - return $! MultiGestureEvent typ timestamp touchId dTheta dDist x y numFingers - (#const SDL_CLIPBOARDUPDATE) -> - return $! ClipboardUpdateEvent typ timestamp - (#const SDL_DROPFILE) -> do - file <- (#peek SDL_Event, drop.file) ptr - return $! DropEvent typ timestamp file - x | x >= (#const SDL_USEREVENT) -> do - wid <- (#peek SDL_Event, user.windowID) ptr - code <- (#peek SDL_Event, user.code) ptr - data1 <- (#peek SDL_Event, user.data1) ptr - data2 <- (#peek SDL_Event, user.data2) ptr - return $! UserEvent typ timestamp wid code data1 data2 - _ -> return $! UnknownEvent typ timestamp - where - key f = do - wid <- (#peek SDL_Event, key.windowID) ptr - state <- (#peek SDL_Event, key.state) ptr - repeat' <- (#peek SDL_Event, key.repeat) ptr - keysym <- (#peek SDL_Event, key.keysym) ptr - return $! f wid state repeat' keysym - - mouse f = do - wid <- (#peek SDL_Event, button.windowID) ptr - which <- (#peek SDL_Event, button.which) ptr - button <- (#peek SDL_Event, button.button) ptr - state <- (#peek SDL_Event, button.state) ptr - clicks <- (#peek SDL_Event, button.clicks) ptr - x <- (#peek SDL_Event, button.x) ptr - y <- (#peek SDL_Event, button.y) ptr - return $! f wid which button state clicks x y - - joybutton f = do - which <- (#peek SDL_Event, jbutton.which) ptr - button <- (#peek SDL_Event, jbutton.button) ptr - state <- (#peek SDL_Event, jbutton.state) ptr - return $! f which button state - - joydevice f = do - which <- (#peek SDL_Event, jdevice.which) ptr - return $! f which - - controllerbutton f = do - which <- (#peek SDL_Event, cbutton.which) ptr - button <- (#peek SDL_Event, cbutton.button) ptr - state <- (#peek SDL_Event, cbutton.state) ptr - return $! f which button state - - controllerdevice f = do - which <- (#peek SDL_Event, cdevice.which) ptr - return $! f which - - finger f = do - touchId <- (#peek SDL_Event, tfinger.touchId) ptr - fingerId <- (#peek SDL_Event, tfinger.fingerId) ptr - x <- (#peek SDL_Event, tfinger.x) ptr - y <- (#peek SDL_Event, tfinger.y) ptr - dx <- (#peek SDL_Event, tfinger.dx) ptr - dy <- (#peek SDL_Event, tfinger.dy) ptr - pressure <- (#peek SDL_Event, tfinger.pressure) ptr - return $! f touchId fingerId x y dx dy pressure - - dollargesture f = do - touchId <- (#peek SDL_Event, dgesture.touchId) ptr - gestureId <- (#peek SDL_Event, dgesture.gestureId) ptr - numFingers <- (#peek SDL_Event, dgesture.numFingers) ptr - err <- (#peek SDL_Event, dgesture.error) ptr - x <- (#peek SDL_Event, dgesture.x) ptr - y <- (#peek SDL_Event, dgesture.y) ptr - return $! f touchId gestureId numFingers err x y - poke ptr ev = case ev of - WindowEvent typ timestamp wid event data1 data2 -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, window.windowID) ptr wid - (#poke SDL_Event, window.event) ptr event - (#poke SDL_Event, window.data1) ptr data1 - (#poke SDL_Event, window.data2) ptr data2 - KeyboardEvent typ timestamp wid state repeat' keysym -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, key.windowID) ptr wid - (#poke SDL_Event, key.state) ptr state - (#poke SDL_Event, key.repeat) ptr repeat' - (#poke SDL_Event, key.keysym) ptr keysym - TextEditingEvent typ timestamp wid text start len -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, edit.windowID) ptr wid - pokeArray ((#ptr SDL_Event, edit.text) ptr) text - (#poke SDL_Event, edit.start) ptr start - (#poke SDL_Event, edit.length) ptr len - TextInputEvent typ timestamp wid text -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, text.windowID) ptr wid - pokeArray ((#ptr SDL_Event, text.text) ptr) text - MouseMotionEvent typ timestamp wid which state x y xrel yrel -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, motion.windowID) ptr wid - (#poke SDL_Event, motion.which) ptr which - (#poke SDL_Event, motion.state) ptr state - (#poke SDL_Event, motion.x) ptr x - (#poke SDL_Event, motion.y) ptr y - (#poke SDL_Event, motion.xrel) ptr xrel - (#poke SDL_Event, motion.yrel) ptr yrel - MouseButtonEvent typ timestamp wid which button state clicks x y -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, button.windowID) ptr wid - (#poke SDL_Event, button.which) ptr which - (#poke SDL_Event, button.button) ptr button - (#poke SDL_Event, button.state) ptr state - (#poke SDL_Event, button.clicks) ptr clicks - (#poke SDL_Event, button.x) ptr x - (#poke SDL_Event, button.y) ptr y - MouseWheelEvent typ timestamp wid which x y -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, wheel.windowID) ptr wid - (#poke SDL_Event, wheel.which) ptr which - (#poke SDL_Event, wheel.x) ptr x - (#poke SDL_Event, wheel.y) ptr y - JoyAxisEvent typ timestamp which axis value -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, jaxis.which) ptr which - (#poke SDL_Event, jaxis.axis) ptr axis - (#poke SDL_Event, jaxis.value) ptr value - JoyBallEvent typ timestamp which ball xrel yrel -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, jball.which) ptr which - (#poke SDL_Event, jball.ball) ptr ball - (#poke SDL_Event, jball.xrel) ptr xrel - (#poke SDL_Event, jball.yrel) ptr yrel - JoyHatEvent typ timestamp which hat value -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, jhat.which) ptr which - (#poke SDL_Event, jhat.hat) ptr hat - (#poke SDL_Event, jhat.value) ptr value - JoyButtonEvent typ timestamp which button state -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, jbutton.which) ptr which - (#poke SDL_Event, jbutton.button) ptr button - (#poke SDL_Event, jbutton.state) ptr state - JoyDeviceEvent typ timestamp which -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, jdevice.which) ptr which - ControllerAxisEvent typ timestamp which axis value -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, caxis.which) ptr which - (#poke SDL_Event, caxis.axis) ptr axis - (#poke SDL_Event, caxis.value) ptr value - ControllerButtonEvent typ timestamp which button state -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, cbutton.which) ptr which - (#poke SDL_Event, cbutton.button) ptr button - (#poke SDL_Event, cbutton.state) ptr state - ControllerDeviceEvent typ timestamp which -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, cdevice.which) ptr which - QuitEvent typ timestamp -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - UserEvent typ timestamp wid code data1 data2 -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, user.windowID) ptr wid - (#poke SDL_Event, user.code) ptr code - (#poke SDL_Event, user.data1) ptr data1 - (#poke SDL_Event, user.data2) ptr data2 - SysWMEvent typ timestamp msg -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, syswm.msg) ptr msg - TouchFingerEvent typ timestamp touchid fingerid x y dx dy pressure -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, tfinger.touchId) ptr touchid - (#poke SDL_Event, tfinger.fingerId) ptr fingerid - (#poke SDL_Event, tfinger.x) ptr x - (#poke SDL_Event, tfinger.y) ptr y - (#poke SDL_Event, tfinger.dx) ptr dx - (#poke SDL_Event, tfinger.dy) ptr dy - (#poke SDL_Event, tfinger.pressure) ptr pressure - MultiGestureEvent typ timestamp touchid dtheta ddist x y numfingers -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, mgesture.touchId) ptr touchid - (#poke SDL_Event, mgesture.dTheta) ptr dtheta - (#poke SDL_Event, mgesture.dDist) ptr ddist - (#poke SDL_Event, mgesture.x) ptr x - (#poke SDL_Event, mgesture.y) ptr y - (#poke SDL_Event, mgesture.numFingers) ptr numfingers - DollarGestureEvent typ timestamp touchid gestureid numfingers err x y -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, dgesture.touchId) ptr touchid - (#poke SDL_Event, dgesture.gestureId) ptr gestureid - (#poke SDL_Event, dgesture.numFingers) ptr numfingers - (#poke SDL_Event, dgesture.error) ptr err - (#poke SDL_Event, dgesture.x) ptr x - (#poke SDL_Event, dgesture.y) ptr y - ClipboardUpdateEvent typ timestamp -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - DropEvent typ timestamp file -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - (#poke SDL_Event, drop.file) ptr file - UnknownEvent typ timestamp -> do - (#poke SDL_Event, common.type) ptr typ - (#poke SDL_Event, common.timestamp) ptr timestamp - -data Finger = Finger - { fingerID :: !FingerID - , fingerX :: !CFloat - , fingerY :: !CFloat - , fingerPressure :: !CFloat - } deriving (Eq, Show, Typeable) - -instance Storable Finger where - sizeOf _ = (#size SDL_Finger) - alignment = sizeOf - peek ptr = do - fingerId <- (#peek SDL_Finger, id) ptr - x <- (#peek SDL_Finger, x) ptr - y <- (#peek SDL_Finger, y) ptr - pressure <- (#peek SDL_Finger, pressure) ptr - return $! Finger fingerId x y pressure - poke ptr (Finger fingerId x y pressure) = do - (#poke SDL_Finger, id) ptr fingerId - (#poke SDL_Finger, x) ptr x - (#poke SDL_Finger, y) ptr y - (#poke SDL_Finger, pressure) ptr pressure - -data GameControllerButtonBind - = GameControllerButtonBindNone - | GameControllerButtonBindButton - { gameControllerButtonBindButton :: !CInt - } - | GameControllerButtonBindAxis - { gameControllerButtonBindAxis :: !CInt - } - | GameControllerButtonBindHat - { gameControllerButtonBindHat :: !CInt - , gameControllerButtonBindHatMask :: !CInt - } - deriving (Eq, Show, Typeable) - -instance Storable GameControllerButtonBind where - sizeOf _ = (#size SDL_GameControllerButtonBind) - alignment = sizeOf - peek ptr = do - bind_type <- (#peek SDL_GameControllerButtonBind, bindType) ptr - case bind_type :: (#type SDL_GameControllerBindType) of - (#const SDL_CONTROLLER_BINDTYPE_NONE) -> do - return $! GameControllerButtonBindNone - (#const SDL_CONTROLLER_BINDTYPE_BUTTON) -> do - button <- (#peek SDL_GameControllerButtonBind, value.button) ptr - return $! GameControllerButtonBindButton button - (#const SDL_CONTROLLER_BINDTYPE_AXIS) -> do - axis <- (#peek SDL_GameControllerButtonBind, value.axis) ptr - return $! GameControllerButtonBindAxis axis - (#const SDL_CONTROLLER_BINDTYPE_HAT) -> do - hat <- (#peek SDL_GameControllerButtonBind, value.hat.hat) ptr - hat_mask <- (#peek SDL_GameControllerButtonBind, value.hat.hat_mask) ptr - return $! GameControllerButtonBindHat hat hat_mask - _ -> error $ "Unknown type " ++ show bind_type ++ " for SDL_GameControllerButtonBind" - poke ptr bind = case bind of - GameControllerButtonBindNone -> do - (#poke SDL_GameControllerButtonBind, bindType) ptr ((#const SDL_CONTROLLER_BINDTYPE_NONE) :: (#type SDL_GameControllerBindType)) - GameControllerButtonBindButton button -> do - (#poke SDL_GameControllerButtonBind, bindType) ptr ((#const SDL_CONTROLLER_BINDTYPE_BUTTON) :: (#type SDL_GameControllerBindType)) - (#poke SDL_GameControllerButtonBind, value.button) ptr button - GameControllerButtonBindAxis axis -> do - (#poke SDL_GameControllerButtonBind, bindType) ptr ((#const SDL_CONTROLLER_BINDTYPE_AXIS) :: (#type SDL_GameControllerBindType)) - (#poke SDL_GameControllerButtonBind, value.axis) ptr axis - GameControllerButtonBindHat hat hat_mask -> do - (#poke SDL_GameControllerButtonBind, bindType) ptr ((#const SDL_CONTROLLER_BINDTYPE_HAT) :: (#type SDL_GameControllerBindType)) - (#poke SDL_GameControllerButtonBind, value.hat.hat) ptr hat - (#poke SDL_GameControllerButtonBind, value.hat.hat_mask) ptr hat_mask - -data HapticDirection = HapticDirection - { hapticDirectionType :: !Word8 - , hapticDirectionX :: !Int32 - , hapticDirectionY :: !Int32 - , hapticDirectionZ :: !Int32 - } deriving (Eq, Show, Typeable) - -instance Storable HapticDirection where - sizeOf _ = (#size SDL_HapticDirection) - alignment = sizeOf - peek ptr = do - typ <- (#peek SDL_HapticDirection, type) ptr - x <- (#peek SDL_HapticDirection, dir[0]) ptr - y <- (#peek SDL_HapticDirection, dir[1]) ptr - z <- (#peek SDL_HapticDirection, dir[2]) ptr - return $! HapticDirection typ x y z - poke ptr (HapticDirection typ x y z) = do - (#poke SDL_HapticDirection, type) ptr typ - (#poke SDL_HapticDirection, dir[0]) ptr x - (#poke SDL_HapticDirection, dir[1]) ptr y - (#poke SDL_HapticDirection, dir[2]) ptr z - -data HapticEffect - = HapticConstant - { hapticEffectType :: !Word16 - , hapticConstantDirection :: !HapticDirection - , hapticConstantLength :: !Word32 - , hapticConstantDelay :: !Word16 - , hapticConstantButton :: !Word16 - , hapticConstantInterval :: !Word16 - , hapticConstantLevel :: !Int16 - , hapticConstantAttackLength :: !Word16 - , hapticConstantAttackLevel :: !Word16 - , hapticConstantFadeLength :: !Word16 - , hapticConstantFadeLevel :: !Word16 - } - | HapticPeriodic - { hapticEffectType :: !Word16 - , hapticPeriodicDirection :: !HapticDirection - , hapticPeriodicLength :: !Word32 - , hapticPeriodicDelay :: !Word16 - , hapticPeriodicButton :: !Word16 - , hapticPeriodicInterval :: !Word16 - , hapticPeriodicPeriod :: !Word16 - , hapticPeriodicMagnitude :: !Int16 - , hapticPeriodicOffset :: !Int16 - , hapticPeriodicPhase :: !Word16 - , hapticPeriodicAttackLength :: !Word16 - , hapticPeriodicAttackLevel :: !Word16 - , hapticPeriodicFadeLength :: !Word16 - , hapticPeriodicFadeLevel :: !Word16 - } - | HapticCondition - { hapticEffectType :: !Word16 - , hapticConditionLength :: !Word32 - , hapticConditionDelay :: !Word16 - , hapticConditionButton :: !Word16 - , hapticConditionInterval :: !Word16 - , hapticConditionRightSat :: ![Word16] - , hapticConditionLeftSat :: ![Word16] - , hapticConditionRightCoeff :: ![Int16] - , hapticConditionLeftCoeff :: ![Int16] - , hapticConditionDeadband :: ![Word16] - , hapticConditionCenter :: ![Int16] - } - | HapticRamp - { hapticEffectType :: !Word16 - , hapticRampDirection :: !HapticDirection - , hapticRampLength :: !Word32 - , hapticRampDelay :: !Word16 - , hapticRampButton :: !Word16 - , hapticRampInterval :: !Word16 - , hapticRampStart :: !Int16 - , hapticRampEnd :: !Int16 - , hapticRampAttackLength :: !Word16 - , hapticRampAttackLevel :: !Word16 - , hapticRampFadeLength :: !Word16 - , hapticRampFadeLevel :: !Word16 - } - | HapticLeftRight - { hapticEffectType :: !Word16 - , hapticLeftRightLength :: !Word32 - , hapticLeftRightLargeMagnitude :: !Word16 - , hapticLeftRightSmallMagnitude :: !Word16 - } - | HapticCustom - { hapticEffectType :: !Word16 - , hapticCustomDirection :: !HapticDirection - , hapticCustomLength :: !Word32 - , hapticCustomDelay :: !Word16 - , hapticCustomButton :: !Word16 - , hapticCustomInterval :: !Word16 - , hapticCustomChannels :: !Word8 - , hapticCustomPeriod :: !Word16 - , hapticCustomSamples :: !Word16 - , hapticCustomData :: !(Ptr Word16) - , hapticCustomAttackLength :: !Word16 - , hapticCustomAttackLevel :: !Word16 - , hapticCustomFadeLength :: !Word16 - , hapticCustomFadeLevel :: !Word16 - } - deriving (Eq, Show, Typeable) - -instance Storable HapticEffect where - sizeOf _ = (#size SDL_HapticEffect) - alignment = sizeOf - peek ptr = do - typ <- (#peek SDL_HapticEffect, type) ptr - case typ of - (#const SDL_HAPTIC_CONSTANT) -> do - direction <- (#peek SDL_HapticEffect, constant.direction) ptr - len <- (#peek SDL_HapticEffect, constant.length) ptr - delay <- (#peek SDL_HapticEffect, constant.delay) ptr - button <- (#peek SDL_HapticEffect, constant.button) ptr - interval <- (#peek SDL_HapticEffect, constant.interval) ptr - level <- (#peek SDL_HapticEffect, constant.level) ptr - attack_length <- (#peek SDL_HapticEffect, constant.attack_length) ptr - attack_level <- (#peek SDL_HapticEffect, constant.attack_level) ptr - fade_length <- (#peek SDL_HapticEffect, constant.fade_length) ptr - fade_level <- (#peek SDL_HapticEffect, constant.fade_level) ptr - return $! HapticConstant typ direction len delay button interval level attack_length attack_level fade_length fade_level - - (#const SDL_HAPTIC_SINE) -> hapticperiodic $ HapticPeriodic typ - (#const SDL_HAPTIC_TRIANGLE) -> hapticperiodic $ HapticPeriodic typ - (#const SDL_HAPTIC_SAWTOOTHUP) -> hapticperiodic $ HapticPeriodic typ - (#const SDL_HAPTIC_SAWTOOTHDOWN) -> hapticperiodic $ HapticPeriodic typ - - (#const SDL_HAPTIC_RAMP) -> do - direction <- (#peek SDL_HapticEffect, ramp.direction) ptr - len <- (#peek SDL_HapticEffect, ramp.length) ptr - delay <- (#peek SDL_HapticEffect, ramp.delay) ptr - button <- (#peek SDL_HapticEffect, ramp.button) ptr - interval <- (#peek SDL_HapticEffect, ramp.interval) ptr - start <- (#peek SDL_HapticEffect, ramp.start) ptr - end <- (#peek SDL_HapticEffect, ramp.end) ptr - attack_length <- (#peek SDL_HapticEffect, ramp.attack_length) ptr - attack_level <- (#peek SDL_HapticEffect, ramp.attack_level) ptr - fade_length <- (#peek SDL_HapticEffect, ramp.fade_length) ptr - fade_level <- (#peek SDL_HapticEffect, ramp.fade_level) ptr - return $! HapticRamp typ direction len delay button interval start end attack_length attack_level fade_length fade_level - - (#const SDL_HAPTIC_SPRING) -> hapticcondition $ HapticCondition typ - (#const SDL_HAPTIC_DAMPER) -> hapticcondition $ HapticCondition typ - (#const SDL_HAPTIC_INERTIA) -> hapticcondition $ HapticCondition typ - (#const SDL_HAPTIC_FRICTION) -> hapticcondition $ HapticCondition typ - - (#const SDL_HAPTIC_LEFTRIGHT) -> do - len <- (#peek SDL_HapticEffect, leftright.length) ptr - large_magnitude <- (#peek SDL_HapticEffect, leftright.large_magnitude) ptr - small_magnitude <- (#peek SDL_HapticEffect, leftright.small_magnitude) ptr - return $! HapticLeftRight typ len large_magnitude small_magnitude - - (#const SDL_HAPTIC_CUSTOM) -> do - direction <- (#peek SDL_HapticEffect, custom.direction) ptr - len <- (#peek SDL_HapticEffect, custom.length) ptr - delay <- (#peek SDL_HapticEffect, custom.delay) ptr - button <- (#peek SDL_HapticEffect, custom.button) ptr - interval <- (#peek SDL_HapticEffect, custom.interval) ptr - channels <- (#peek SDL_HapticEffect, custom.channels) ptr - period <- (#peek SDL_HapticEffect, custom.period) ptr - samples <- (#peek SDL_HapticEffect, custom.samples) ptr - datum <- (#peek SDL_HapticEffect, custom.data) ptr - attack_length <- (#peek SDL_HapticEffect, custom.attack_length) ptr - attack_level <- (#peek SDL_HapticEffect, custom.attack_level) ptr - fade_length <- (#peek SDL_HapticEffect, custom.fade_length) ptr - fade_level <- (#peek SDL_HapticEffect, custom.fade_level) ptr - return $! HapticCustom typ direction len delay button interval channels period samples datum attack_length attack_level fade_length fade_level - _ -> error $ "Unknown type " ++ show typ ++ " for SDL_HapticEffect" - where - hapticperiodic f = do - direction <- (#peek SDL_HapticEffect, periodic.direction) ptr - len <- (#peek SDL_HapticEffect, periodic.length) ptr - delay <- (#peek SDL_HapticEffect, periodic.delay) ptr - button <- (#peek SDL_HapticEffect, periodic.button) ptr - interval <- (#peek SDL_HapticEffect, periodic.interval) ptr - period <- (#peek SDL_HapticEffect, periodic.period) ptr - magnitude <- (#peek SDL_HapticEffect, periodic.magnitude) ptr - offset <- (#peek SDL_HapticEffect, periodic.offset) ptr - phase <- (#peek SDL_HapticEffect, periodic.phase) ptr - attack_length <- (#peek SDL_HapticEffect, periodic.attack_length) ptr - attack_level <- (#peek SDL_HapticEffect, periodic.attack_level) ptr - fade_length <- (#peek SDL_HapticEffect, periodic.fade_length) ptr - fade_level <- (#peek SDL_HapticEffect, periodic.fade_level) ptr - return $! f direction len delay button interval period magnitude offset phase attack_length attack_level fade_length fade_level - - hapticcondition f = do - len <- (#peek SDL_HapticEffect, condition.length) ptr - delay <- (#peek SDL_HapticEffect, condition.delay) ptr - button <- (#peek SDL_HapticEffect, condition.button) ptr - interval <- (#peek SDL_HapticEffect, condition.interval) ptr - right_sat <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.right_sat) ptr - left_sat <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.left_sat) ptr - right_coeff <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.right_coeff) ptr - left_coeff <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.left_coeff) ptr - deadband <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.deadband) ptr - center <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.center) ptr - return $! f len delay button interval right_sat left_sat right_coeff left_coeff deadband center - poke ptr event = case event of - HapticConstant typ direction len delay button interval level attack_length attack_level fade_length fade_level -> do - (#poke SDL_HapticEffect, type) ptr typ - (#poke SDL_HapticEffect, constant.direction) ptr direction - (#poke SDL_HapticEffect, constant.length) ptr len - (#poke SDL_HapticEffect, constant.delay) ptr delay - (#poke SDL_HapticEffect, constant.button) ptr button - (#poke SDL_HapticEffect, constant.interval) ptr interval - (#poke SDL_HapticEffect, constant.level) ptr level - (#poke SDL_HapticEffect, constant.attack_length) ptr attack_length - (#poke SDL_HapticEffect, constant.attack_level) ptr attack_level - (#poke SDL_HapticEffect, constant.fade_length) ptr fade_length - (#poke SDL_HapticEffect, constant.fade_level) ptr fade_level - HapticPeriodic typ direction len delay button interval period magnitude offset phase attack_length attack_level fade_length fade_level -> do - (#poke SDL_HapticEffect, type) ptr typ - (#poke SDL_HapticEffect, periodic.direction) ptr direction - (#poke SDL_HapticEffect, periodic.length) ptr len - (#poke SDL_HapticEffect, periodic.delay) ptr delay - (#poke SDL_HapticEffect, periodic.button) ptr button - (#poke SDL_HapticEffect, periodic.interval) ptr interval - (#poke SDL_HapticEffect, periodic.period) ptr period - (#poke SDL_HapticEffect, periodic.magnitude) ptr magnitude - (#poke SDL_HapticEffect, periodic.offset) ptr offset - (#poke SDL_HapticEffect, periodic.phase) ptr phase - (#poke SDL_HapticEffect, periodic.attack_length) ptr attack_length - (#poke SDL_HapticEffect, periodic.attack_level) ptr attack_level - (#poke SDL_HapticEffect, periodic.fade_length) ptr fade_length - (#poke SDL_HapticEffect, periodic.fade_level) ptr fade_level - HapticCondition typ len delay button interval right_sat left_sat right_coeff left_coeff deadband center -> do - (#poke SDL_HapticEffect, type) ptr typ - (#poke SDL_HapticEffect, condition.length) ptr len - (#poke SDL_HapticEffect, condition.delay) ptr delay - (#poke SDL_HapticEffect, condition.button) ptr button - (#poke SDL_HapticEffect, condition.interval) ptr interval - pokeArray ((#ptr SDL_HapticEffect, condition.right_sat) ptr) right_sat - pokeArray ((#ptr SDL_HapticEffect, condition.left_sat) ptr) left_sat - pokeArray ((#ptr SDL_HapticEffect, condition.right_coeff) ptr) right_coeff - pokeArray ((#ptr SDL_HapticEffect, condition.left_coeff) ptr) left_coeff - pokeArray ((#ptr SDL_HapticEffect, condition.deadband) ptr) deadband - pokeArray ((#ptr SDL_HapticEffect, condition.center) ptr) center - HapticRamp typ direction len delay button interval start end attack_length attack_level fade_length fade_level -> do - (#poke SDL_HapticEffect, type) ptr typ - (#poke SDL_HapticEffect, ramp.direction) ptr direction - (#poke SDL_HapticEffect, ramp.length) ptr len - (#poke SDL_HapticEffect, ramp.delay) ptr delay - (#poke SDL_HapticEffect, ramp.button) ptr button - (#poke SDL_HapticEffect, ramp.interval) ptr interval - (#poke SDL_HapticEffect, ramp.start) ptr start - (#poke SDL_HapticEffect, ramp.end) ptr end - (#poke SDL_HapticEffect, ramp.attack_length) ptr attack_length - (#poke SDL_HapticEffect, ramp.attack_level) ptr attack_level - (#poke SDL_HapticEffect, ramp.fade_length) ptr fade_length - (#poke SDL_HapticEffect, ramp.fade_level) ptr fade_level - HapticLeftRight typ len large_magnitude small_magnitude -> do - (#poke SDL_HapticEffect, type) ptr typ - (#poke SDL_HapticEffect, leftright.length) ptr len - (#poke SDL_HapticEffect, leftright.large_magnitude) ptr large_magnitude - (#poke SDL_HapticEffect, leftright.small_magnitude) ptr small_magnitude - HapticCustom typ direction len delay button interval channels period samples datum attack_length attack_level fade_length fade_level -> do - (#poke SDL_HapticEffect, type) ptr typ - (#poke SDL_HapticEffect, custom.direction) ptr direction - (#poke SDL_HapticEffect, custom.length) ptr len - (#poke SDL_HapticEffect, custom.delay) ptr delay - (#poke SDL_HapticEffect, custom.button) ptr button - (#poke SDL_HapticEffect, custom.interval) ptr interval - (#poke SDL_HapticEffect, custom.channels) ptr channels - (#poke SDL_HapticEffect, custom.period) ptr period - (#poke SDL_HapticEffect, custom.samples) ptr samples - (#poke SDL_HapticEffect, custom.data) ptr datum - (#poke SDL_HapticEffect, custom.attack_length) ptr attack_length - (#poke SDL_HapticEffect, custom.attack_level) ptr attack_level - (#poke SDL_HapticEffect, custom.fade_length) ptr fade_length - (#poke SDL_HapticEffect, custom.fade_level) ptr fade_level - -data JoystickGUID = JoystickGUID - { joystickGUID :: ![Word8] - } deriving (Eq, Show, Typeable) - -instance Storable JoystickGUID where - sizeOf _ = (#size SDL_JoystickGUID) - alignment = sizeOf - peek ptr = do - guid <- peekArray 16 $ (#ptr SDL_JoystickGUID, data) ptr - return $! JoystickGUID guid - poke ptr (JoystickGUID guid) = - pokeArray ((#ptr SDL_JoystickGUID, data) ptr) guid - -data Keysym = Keysym - { keysymScancode :: !Scancode - , keysymKeycode :: !Keycode - , keysymMod :: !Word16 - } deriving (Eq, Show, Typeable) - -instance Storable Keysym where - sizeOf _ = (#size SDL_Keysym) - alignment = sizeOf - peek ptr = do - scancode <- (#peek SDL_Keysym, scancode) ptr - sym <- (#peek SDL_Keysym, sym) ptr - mod' <- (#peek SDL_Keysym, mod) ptr - return $! Keysym scancode sym mod' - poke ptr (Keysym scancode sym mod') = do - (#poke SDL_Keysym, scancode) ptr scancode - (#poke SDL_Keysym, sym) ptr sym - (#poke SDL_Keysym, mod) ptr mod' - -data MessageBoxButtonData = MessageBoxButtonData - { messageBoxButtonDataFlags :: !Word32 - , messageBoxButtonButtonID :: !CInt - , messageBoxButtonText :: !CString - } deriving (Eq, Show, Typeable) - -instance Storable MessageBoxButtonData where - sizeOf _ = (#size SDL_MessageBoxButtonData) - alignment = sizeOf - peek ptr = do - flags <- (#peek SDL_MessageBoxButtonData, flags) ptr - buttonid <- (#peek SDL_MessageBoxButtonData, buttonid) ptr - text <- (#peek SDL_MessageBoxButtonData, text) ptr - return $! MessageBoxButtonData flags buttonid text - poke ptr (MessageBoxButtonData flags buttonid text) = do - (#poke SDL_MessageBoxButtonData, flags) ptr flags - (#poke SDL_MessageBoxButtonData, buttonid) ptr buttonid - (#poke SDL_MessageBoxButtonData, text) ptr text - -data MessageBoxColor = MessageBoxColor - { messageBoxColorR :: !Word8 - , messageBoxColorG :: !Word8 - , messageBoxColorB :: !Word8 - } deriving (Eq, Show, Typeable) - -instance Storable MessageBoxColor where - sizeOf _ = (#size SDL_MessageBoxColor) - alignment = sizeOf - peek ptr = do - r <- (#peek SDL_MessageBoxColor, r) ptr - g <- (#peek SDL_MessageBoxColor, g) ptr - b <- (#peek SDL_MessageBoxColor, b) ptr - return $! MessageBoxColor r g b - poke ptr (MessageBoxColor r g b) = do - (#poke SDL_MessageBoxColor, r) ptr r - (#poke SDL_MessageBoxColor, g) ptr g - (#poke SDL_MessageBoxColor, b) ptr b - -data MessageBoxColorScheme = MessageBoxColorScheme - { messageBoxColorSchemeColorBackground :: !MessageBoxColor - , messageBoxColorSchemeColorText :: !MessageBoxColor - , messageBoxColorSchemeColorButtonBorder :: !MessageBoxColor - , messageBoxColorSchemeColorButtonBackground :: !MessageBoxColor - , messageBoxColorSchemeColorButtonSelected :: !MessageBoxColor - } deriving (Eq, Show, Typeable) - -instance Storable MessageBoxColorScheme where - sizeOf _ = (#size SDL_MessageBoxColorScheme) - alignment = sizeOf - peek ptr = do - background <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BACKGROUND]) ptr - text <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_TEXT]) ptr - button_border <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_BORDER]) ptr - button_background <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND]) ptr - button_selected <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED]) ptr - return $! MessageBoxColorScheme background text button_border button_background button_selected - poke ptr (MessageBoxColorScheme background text button_border button_background button_selected) = do - (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BACKGROUND]) ptr background - (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_TEXT]) ptr text - (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_BORDER]) ptr button_border - (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND]) ptr button_background - (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED]) ptr button_selected - -data MessageBoxData = MessageBoxData - { messageBoxDataFlags :: !Word32 - , messageBoxDataWindow :: !Window - , messageBoxDataTitle :: !CString - , messageBoxDataMessage :: !CString - , messageBoxDataNumButtons :: !CInt - , messageBoxDataButtons :: !(Ptr MessageBoxButtonData) - , messageBoxDataColorScheme :: !(Ptr MessageBoxColorScheme) - } deriving (Eq, Show, Typeable) - -instance Storable MessageBoxData where - sizeOf _ = (#size SDL_MessageBoxData) - alignment = sizeOf - peek ptr = do - flags <- (#peek SDL_MessageBoxData, flags) ptr - window <- (#peek SDL_MessageBoxData, window) ptr - title <- (#peek SDL_MessageBoxData, title) ptr - message <- (#peek SDL_MessageBoxData, message) ptr - numbuttons <- (#peek SDL_MessageBoxData, numbuttons) ptr - buttons <- (#peek SDL_MessageBoxData, buttons) ptr - color_scheme <- (#peek SDL_MessageBoxData, colorScheme) ptr - return $! MessageBoxData flags window title message numbuttons buttons color_scheme - poke ptr (MessageBoxData flags window title message numbuttons buttons color_scheme) = do - (#poke SDL_MessageBoxData, flags) ptr flags - (#poke SDL_MessageBoxData, window) ptr window - (#poke SDL_MessageBoxData, title) ptr title - (#poke SDL_MessageBoxData, message) ptr message - (#poke SDL_MessageBoxData, numbuttons) ptr numbuttons - (#poke SDL_MessageBoxData, buttons) ptr buttons - (#poke SDL_MessageBoxData, colorScheme) ptr color_scheme - -data Palette = Palette - { paletteNColors :: !CInt - , paletteColors :: !(Ptr Color) - } deriving (Eq, Show, Typeable) - -instance Storable Palette where - sizeOf _ = (#size SDL_Palette) - alignment = sizeOf - peek ptr = do - ncolors <- (#peek SDL_Palette, ncolors) ptr - colors <- (#peek SDL_Palette, colors) ptr - return $! Palette ncolors colors - poke ptr (Palette ncolors colors) = do - (#poke SDL_Palette, ncolors) ptr ncolors - (#poke SDL_Palette, colors) ptr colors - -data PixelFormat = PixelFormat - { pixelFormatFormat :: !Word32 - , pixelFormatPalette :: !(Ptr Palette) - , pixelFormatBitsPerPixel :: !Word8 - , pixelFormatBytesPerPixel :: !Word8 - , pixelFormatRMask :: !Word32 - , pixelFormatGMask :: !Word32 - , pixelFormatBMask :: !Word32 - , pixelFormatAMask :: !Word32 - } deriving (Eq, Show, Typeable) - -instance Storable PixelFormat where - sizeOf _ = (#size SDL_PixelFormat) - alignment = sizeOf - peek ptr = do - format <- (#peek SDL_PixelFormat, format) ptr - palette <- (#peek SDL_PixelFormat, palette) ptr - bits_per_pixel <- (#peek SDL_PixelFormat, BitsPerPixel) ptr - bytes_per_pixel <- (#peek SDL_PixelFormat, BytesPerPixel) ptr - rmask <- (#peek SDL_PixelFormat, Rmask) ptr - gmask <- (#peek SDL_PixelFormat, Gmask) ptr - bmask <- (#peek SDL_PixelFormat, Bmask) ptr - amask <- (#peek SDL_PixelFormat, Amask) ptr - return $! PixelFormat format palette bits_per_pixel bytes_per_pixel rmask gmask bmask amask - poke ptr (PixelFormat format palette bits_per_pixel bytes_per_pixel rmask gmask bmask amask) = do - (#poke SDL_PixelFormat, format) ptr format - (#poke SDL_PixelFormat, palette) ptr palette - (#poke SDL_PixelFormat, BitsPerPixel) ptr bits_per_pixel - (#poke SDL_PixelFormat, BytesPerPixel) ptr bytes_per_pixel - (#poke SDL_PixelFormat, Rmask) ptr rmask - (#poke SDL_PixelFormat, Gmask) ptr gmask - (#poke SDL_PixelFormat, Bmask) ptr bmask - (#poke SDL_PixelFormat, Amask) ptr amask - -data Point = Point - { pointX :: !CInt - , pointY :: !CInt - } deriving (Eq, Show, Typeable) - -instance Storable Point where - sizeOf _ = (#size SDL_Point) - alignment = sizeOf - peek ptr = do - x <- (#peek SDL_Point, x) ptr - y <- (#peek SDL_Point, y) ptr - return $! Point x y - poke ptr (Point x y) = do - (#poke SDL_Point, x) ptr x - (#poke SDL_Point, y) ptr y - -data Rect = Rect - { rectX :: !CInt - , rectY :: !CInt - , rectW :: !CInt - , rectH :: !CInt - } deriving (Eq, Show, Typeable) - -instance Storable Rect where - sizeOf _ = (#size SDL_Rect) - alignment = sizeOf - peek ptr = do - x <- (#peek SDL_Rect, x) ptr - y <- (#peek SDL_Rect, y) ptr - w <- (#peek SDL_Rect, w) ptr - h <- (#peek SDL_Rect, h) ptr - return $! Rect x y w h - poke ptr (Rect x y w h) = do - (#poke SDL_Rect, x) ptr x - (#poke SDL_Rect, y) ptr y - (#poke SDL_Rect, w) ptr w - (#poke SDL_Rect, h) ptr h - -data RendererInfo = RendererInfo - { rendererInfoName :: !CString - , rendererInfoFlags :: !Word32 - , rendererInfoNumTextureFormats :: !Word32 - , rendererInfoTextureFormats :: ![Word32] - , rendererInfoMaxTextureWidth :: !CInt - , rendererInfoMaxTextureHeight :: !CInt - } deriving (Eq, Show, Typeable) - -instance Storable RendererInfo where - sizeOf _ = (#size SDL_RendererInfo) - alignment = sizeOf - peek ptr = do - name <- (#peek SDL_RendererInfo, name) ptr - flags <- (#peek SDL_RendererInfo, flags) ptr - num_texture_formats <- (#peek SDL_RendererInfo, num_texture_formats) ptr - texture_formats <- peekArray 16 $ (#ptr SDL_RendererInfo, texture_formats) ptr - max_texture_width <- (#peek SDL_RendererInfo, max_texture_width) ptr - max_texture_height <- (#peek SDL_RendererInfo, max_texture_height) ptr - return $! RendererInfo name flags num_texture_formats texture_formats max_texture_width max_texture_height - poke ptr (RendererInfo name flags num_texture_formats texture_formats max_texture_width max_texture_height) = do - (#poke SDL_RendererInfo, name) ptr name - (#poke SDL_RendererInfo, flags) ptr flags - (#poke SDL_RendererInfo, num_texture_formats) ptr num_texture_formats - pokeArray ((#ptr SDL_RendererInfo, texture_formats) ptr) texture_formats - (#poke SDL_RendererInfo, max_texture_width) ptr max_texture_width - (#poke SDL_RendererInfo, max_texture_height) ptr max_texture_height - -data RWops = RWops - { rwopsSize :: !(FunPtr (Ptr RWops -> IO Int64)) - , rwopsSeek :: !(FunPtr (Ptr RWops -> Int64 -> CInt -> IO Int64)) - , rwopsRead :: !(FunPtr (Ptr RWops -> Ptr () -> CSize -> CSize -> IO CSize)) - , rwopsWrite :: !(FunPtr (Ptr RWops -> Ptr () -> CSize -> CSize -> IO CSize)) - , rwopsClose :: !(FunPtr (Ptr RWops -> IO CInt)) - , rwopsType :: !Word32 - } deriving (Eq, Show, Typeable) - -instance Storable RWops where - sizeOf _ = (#size SDL_RWops) - alignment = sizeOf - peek ptr = do - size <- (#peek SDL_RWops, size) ptr - seek <- (#peek SDL_RWops, seek) ptr - read' <- (#peek SDL_RWops, read) ptr - write <- (#peek SDL_RWops, write) ptr - close <- (#peek SDL_RWops, close) ptr - typ <- (#peek SDL_RWops, type) ptr - return $! RWops size seek read' write close typ - poke ptr (RWops size seek read' write close typ) = do - (#poke SDL_RWops, size) ptr size - (#poke SDL_RWops, seek) ptr seek - (#poke SDL_RWops, read) ptr read' - (#poke SDL_RWops, write) ptr write - (#poke SDL_RWops, close) ptr close - (#poke SDL_RWops, type) ptr typ - -data Surface = Surface - { surfaceFormat :: !(Ptr PixelFormat) - , surfaceW :: !CInt - , surfaceH :: !CInt - , surfacePixels :: !(Ptr ()) - , surfaceUserdata :: !(Ptr ()) - , surfaceClipRect :: !Rect - , surfaceRefcount :: !CInt - } deriving (Eq, Show, Typeable) - -instance Storable Surface where - sizeOf _ = (#size SDL_Surface) - alignment = sizeOf - peek ptr = do - format <- (#peek SDL_Surface, format) ptr - w <- (#peek SDL_Surface, w) ptr - h <- (#peek SDL_Surface, h) ptr - pixels <- (#peek SDL_Surface, pixels) ptr - userdata <- (#peek SDL_Surface, userdata) ptr - cliprect <- (#peek SDL_Surface, clip_rect) ptr - refcount <- (#peek SDL_Surface, refcount) ptr - return $! Surface format w h pixels userdata cliprect refcount - poke ptr (Surface format w h pixels userdata cliprect refcount) = do - (#poke SDL_Surface, format) ptr format - (#poke SDL_Surface, w) ptr w - (#poke SDL_Surface, h) ptr h - (#poke SDL_Surface, pixels) ptr pixels - (#poke SDL_Surface, userdata) ptr userdata - (#poke SDL_Surface, clip_rect) ptr cliprect - (#poke SDL_Surface, refcount) ptr refcount - -data Version = Version - { versionMajor :: !Word8 - , versionMinor :: !Word8 - , versionPatch :: !Word8 - } deriving (Eq, Show, Typeable) - -instance Storable Version where - sizeOf _ = (#size SDL_version) - alignment = sizeOf - peek ptr = do - major <- (#peek SDL_version, major) ptr - minor <- (#peek SDL_version, minor) ptr - patch <- (#peek SDL_version, patch) ptr - return $! Version major minor patch - poke ptr (Version major minor patch) = do - (#poke SDL_version, major) ptr major - (#poke SDL_version, minor) ptr minor - (#poke SDL_version, patch) ptr patch +{-# LANGUAGE DeriveDataTypeable #-}+module SDL.Raw.Types (+ -- * Type Aliases+ -- ** Function Types+ AudioCallback,+ EventFilter,+ HintCallback,+ LogOutputFunction,+ ThreadFunction,+ TimerCallback,++ mkAudioCallback,+ mkEventFilter,+ mkHintCallback,+ mkLogOutputFunction,+ mkThreadFunction,+ mkTimerCallback,++ -- ** Common Types+ AudioDeviceID,+ AudioFormat,+ Cond,+ Cursor,+ FingerID,+ GameController,+ GestureID,+ GLContext,+ Haptic,+ Joystick,+ JoystickID,+ Mutex,+ Renderer,+ Sem,+ SpinLock,+ SysWMinfo,+ SysWMmsg,+ Texture,+ Thread,+ ThreadID,+ TimerID,+ TLSID,+ TouchID,+ Window,++ -- * Data Structures+ Atomic(..),+ AudioCVT(..),+ AudioSpec(..),+ Color(..),+ DisplayMode(..),+ Event(..),+ Finger(..),+ GameControllerButtonBind(..),+ HapticDirection(..),+ HapticEffect(..),+ JoystickGUID(..),+ Keysym(..),+ MessageBoxButtonData(..),+ MessageBoxColor(..),+ MessageBoxColorScheme(..),+ MessageBoxData(..),+ Palette(..),+ PixelFormat(..),+ Point(..),+ Rect(..),+ RendererInfo(..),+ RWops(..),+ Surface(..),+ Version(..)+) where++#include "SDL.h"++import Data.Int+import Data.Typeable+import Data.Word+import Foreign.C.String+import Foreign.C.Types+import Foreign.Marshal.Array+import Foreign.Ptr+import Foreign.Storable+import SDL.Raw.Enum++type AudioCallback = FunPtr (Ptr () -> Ptr Word8 -> CInt -> IO ())+type EventFilter = FunPtr (Ptr () -> Ptr Event -> IO CInt)+type HintCallback = FunPtr (Ptr () -> CString -> CString -> CString -> IO ())+type LogOutputFunction = FunPtr (Ptr () -> CInt -> LogPriority -> CString -> IO ())+type ThreadFunction = FunPtr (Ptr () -> IO CInt)+type TimerCallback = FunPtr (Word32 -> Ptr () -> IO Word32)++-- | The storage associated with the resulting 'FunPtr' has to be released with+-- 'freeHaskellFunPtr' when it is no longer required.+foreign import ccall "wrapper"+ mkAudioCallback :: (Ptr () -> Ptr Word8 -> CInt -> IO ()) -> IO AudioCallback++-- | The storage associated with the resulting 'FunPtr' has to be released with+-- 'freeHaskellFunPtr' when it is no longer required.+foreign import ccall "wrapper"+ mkEventFilter :: (Ptr () -> Ptr Event -> IO CInt) -> IO EventFilter++-- | The storage associated with the resulting 'FunPtr' has to be released with+-- 'freeHaskellFunPtr' when it is no longer required.+foreign import ccall "wrapper"+ mkHintCallback :: (Ptr () -> CString -> CString -> CString -> IO ()) -> IO HintCallback++-- | The storage associated with the resulting 'FunPtr' has to be released with+-- 'freeHaskellFunPtr' when it is no longer required.+foreign import ccall "wrapper"+ mkLogOutputFunction :: (Ptr () -> CInt -> LogPriority -> CString -> IO ()) -> IO LogOutputFunction++-- | The storage associated with the resulting 'FunPtr' has to be released with+-- 'freeHaskellFunPtr' when it is no longer required.+foreign import ccall "wrapper"+ mkThreadFunction :: (Ptr () -> IO CInt) -> IO ThreadFunction++-- | The storage associated with the resulting 'FunPtr' has to be released with+-- 'freeHaskellFunPtr' when it is no longer required.+foreign import ccall "wrapper"+ mkTimerCallback :: (Word32 -> Ptr () -> IO Word32) -> IO TimerCallback++type AudioDeviceID = Word32+type Cond = Ptr ()+type Cursor = Ptr ()+type FingerID = Int64+type GameController = Ptr ()+type GestureID = Int64+type GLContext = Ptr ()+type Haptic = Ptr ()+type Joystick = Ptr ()+type JoystickID = Int32+type Mutex = Ptr ()+type Renderer = Ptr ()+type Sem = Ptr ()+type SpinLock = CInt+type SysWMinfo = Ptr ()+type SysWMmsg = Ptr ()+type Texture = Ptr ()+type Thread = Ptr ()+type ThreadID = CULong+type TimerID = CInt+type TLSID = CUInt+type TouchID = Int64+type Window = Ptr ()++data Atomic = Atomic+ { atomicValue :: !CInt+ } deriving (Eq, Show, Typeable)++instance Storable Atomic where+ sizeOf _ = (#size SDL_atomic_t)+ alignment = sizeOf+ peek ptr = do+ value <- (#peek SDL_atomic_t, value) ptr+ return $! Atomic value+ poke ptr (Atomic value) = do+ (#poke SDL_atomic_t, value) ptr value++data AudioCVT = AudioCVT+ { audioCVTNeeded :: !CInt+ , audioCVTSrcFormat :: !AudioFormat+ , audioCVTDstFormat :: !AudioFormat+ , audioCVTRateIncr :: !CDouble+ , audioCVTBuf :: !(Ptr Word8)+ , audioCVTLen :: !CInt+ , audioCVTLenCvt :: !CInt+ , audioCVTLenMult :: !CInt+ , audioCVTLenRatio :: !CDouble+ } deriving (Eq, Show, Typeable)++instance Storable AudioCVT where+ sizeOf _ = (#size SDL_AudioCVT)+ alignment = sizeOf+ peek ptr = do+ needed <- (#peek SDL_AudioCVT, needed) ptr+ src_format <- (#peek SDL_AudioCVT, src_format) ptr+ dst_format <- (#peek SDL_AudioCVT, dst_format) ptr+ rate_incr <- (#peek SDL_AudioCVT, rate_incr) ptr+ buf <- (#peek SDL_AudioCVT, buf) ptr+ len <- (#peek SDL_AudioCVT, len) ptr+ len_cvt <- (#peek SDL_AudioCVT, len_cvt) ptr+ len_mult <- (#peek SDL_AudioCVT, len_mult) ptr+ len_ratio <- (#peek SDL_AudioCVT, len_ratio) ptr+ return $! AudioCVT needed src_format dst_format rate_incr buf len len_cvt len_mult len_ratio+ poke ptr (AudioCVT needed src_format dst_format rate_incr buf len len_cvt len_mult len_ratio) = do+ (#poke SDL_AudioCVT, needed) ptr needed+ (#poke SDL_AudioCVT, src_format) ptr src_format+ (#poke SDL_AudioCVT, dst_format) ptr dst_format+ (#poke SDL_AudioCVT, rate_incr) ptr rate_incr+ (#poke SDL_AudioCVT, buf) ptr buf+ (#poke SDL_AudioCVT, len) ptr len+ (#poke SDL_AudioCVT, len_cvt) ptr len_cvt+ (#poke SDL_AudioCVT, len_mult) ptr len_mult+ (#poke SDL_AudioCVT, len_ratio) ptr len_ratio++data AudioSpec = AudioSpec+ { audioSpecFreq :: !CInt+ , audioSpecFormat :: !AudioFormat+ , audioSpecChannels :: !Word8+ , audioSpecSilence :: !Word8+ , audioSpecSamples :: !Word16+ , audioSpecSize :: !Word32+ , audioSpecCallback :: !AudioCallback+ , audioSpecUserdata :: !(Ptr ())+ } deriving (Eq, Show, Typeable)++instance Storable AudioSpec where+ sizeOf _ = (#size SDL_AudioSpec)+ alignment = sizeOf+ peek ptr = do+ freq <- (#peek SDL_AudioSpec, freq) ptr+ format <- (#peek SDL_AudioSpec, format) ptr+ channels <- (#peek SDL_AudioSpec, channels) ptr+ silence <- (#peek SDL_AudioSpec, silence) ptr+ samples <- (#peek SDL_AudioSpec, samples) ptr+ size <- (#peek SDL_AudioSpec, size) ptr+ callback <- (#peek SDL_AudioSpec, callback) ptr+ userdata <- (#peek SDL_AudioSpec, userdata) ptr+ return $! AudioSpec freq format channels silence samples size callback userdata+ poke ptr (AudioSpec freq format channels silence samples size callback userdata) = do+ (#poke SDL_AudioSpec, freq) ptr freq+ (#poke SDL_AudioSpec, format) ptr format+ (#poke SDL_AudioSpec, channels) ptr channels+ (#poke SDL_AudioSpec, silence) ptr silence+ (#poke SDL_AudioSpec, samples) ptr samples+ (#poke SDL_AudioSpec, size) ptr size+ (#poke SDL_AudioSpec, callback) ptr callback+ (#poke SDL_AudioSpec, userdata) ptr userdata++data Color = Color+ { colorR :: !Word8+ , colorG :: !Word8+ , colorB :: !Word8+ , colorA :: !Word8+ } deriving (Eq, Show, Typeable)++instance Storable Color where+ sizeOf _ = (#size SDL_Color)+ alignment = sizeOf+ peek ptr = do+ r <- (#peek SDL_Color, r) ptr+ g <- (#peek SDL_Color, g) ptr+ b <- (#peek SDL_Color, b) ptr+ a <- (#peek SDL_Color, a) ptr+ return $! Color r g b a+ poke ptr (Color r g b a) = do+ (#poke SDL_Color, r) ptr r+ (#poke SDL_Color, g) ptr g+ (#poke SDL_Color, b) ptr b+ (#poke SDL_Color, a) ptr a++data DisplayMode = DisplayMode+ { displayModeFormat :: !Word32+ , displayModeW :: !CInt+ , displayModeH :: !CInt+ , displayModeRefreshRate :: !CInt+ , displayModeDriverData :: !(Ptr ())+ } deriving (Eq, Show, Typeable)++instance Storable DisplayMode where+ sizeOf _ = (#size SDL_DisplayMode)+ alignment = sizeOf+ peek ptr = do+ format <- (#peek SDL_DisplayMode, format) ptr+ w <- (#peek SDL_DisplayMode, w) ptr+ h <- (#peek SDL_DisplayMode, h) ptr+ refresh_rate <- (#peek SDL_DisplayMode, refresh_rate) ptr+ driverdata <- (#peek SDL_DisplayMode, driverdata) ptr+ return $! DisplayMode format w h refresh_rate driverdata+ poke ptr (DisplayMode format w h refresh_rate driverdata) = do+ (#poke SDL_DisplayMode, format) ptr format+ (#poke SDL_DisplayMode, w) ptr w+ (#poke SDL_DisplayMode, h) ptr h+ (#poke SDL_DisplayMode, refresh_rate) ptr refresh_rate+ (#poke SDL_DisplayMode, driverdata) ptr driverdata++data Event+ = WindowEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , windowEventWindowID :: !Word32+ , windowEventEvent :: !Word8+ , windowEventData1 :: !Int32+ , windowEventData2 :: !Int32+ }+ | KeyboardEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , keyboardEventWindowID :: !Word32+ , keyboardEventState :: !Word8+ , keyboardEventRepeat :: !Word8+ , keyboardEventKeysym :: !Keysym+ }+ | TextEditingEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , textEditingEventWindowID :: !Word32+ , textEditingEventText :: ![CChar]+ , textEditingEventStart :: !Int32+ , textEditingEventLength :: !Int32+ }+ | TextInputEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , textInputEventWindowID :: !Word32+ , textInputEventText :: ![CChar]+ }+ | MouseMotionEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , mouseMotionEventWindowID :: !Word32+ , mouseMotionEventWhich :: !Word32+ , mouseMotionEventState :: !Word32+ , mouseMotionEventX :: !Int32+ , mouseMotionEventY :: !Int32+ , mouseMotionEventXRel :: !Int32+ , mouseMotionEventYRel :: !Int32+ }+ | MouseButtonEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , mouseButtonEventWindowID :: !Word32+ , mouseButtonEventWhich :: !Word32+ , mouseButtonEventButton :: !Word8+ , mouseButtonEventState :: !Word8+ , mouseButtonEventClicks :: !Word8+ , mouseButtonEventX :: !Int32+ , mouseButtonEventY :: !Int32+ }+ | MouseWheelEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , mouseWheelEventWindowID :: !Word32+ , mouseWheelEventWhich :: !Word32+ , mouseWheelEventX :: !Int32+ , mouseWheelEventY :: !Int32+ }+ | JoyAxisEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , joyAxisEventWhich :: !JoystickID+ , joyAxisEventAxis :: !Word8+ , joyAxisEventValue :: !Int16+ }+ | JoyBallEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , joyBallEventWhich :: !JoystickID+ , joyBallEventBall :: !Word8+ , joyBallEventXRel :: !Int16+ , joyBallEventYRel :: !Int16+ }+ | JoyHatEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , joyHatEventWhich :: !JoystickID+ , joyHatEventHat :: !Word8+ , joyHatEventValue :: !Word8+ }+ | JoyButtonEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , joyButtonEventWhich :: !JoystickID+ , joyButtonEventButton :: !Word8+ , joyButtonEventState :: !Word8+ }+ | JoyDeviceEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , joyDeviceEventWhich :: !Int32+ }+ | ControllerAxisEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , controllerAxisEventWhich :: !JoystickID+ , controllerAxisEventAxis :: !Word8+ , controllerAxisEventValue :: !Int16+ }+ | ControllerButtonEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , controllerButtonEventWhich :: !JoystickID+ , controllerButtonEventButton :: !Word8+ , controllerButtonEventState :: !Word8+ }+ | ControllerDeviceEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , controllerDeviceEventWhich :: !Int32+ }+ | QuitEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ }+ | UserEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , userEventWindowID :: !Word32+ , userEventCode :: !Int32+ , userEventData1 :: !(Ptr ())+ , userEventData2 :: !(Ptr ())+ }+ | SysWMEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , sysWMEventMsg :: !SysWMmsg+ }+ | TouchFingerEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , touchFingerEventTouchID :: !TouchID+ , touchFingerEventFingerID :: !FingerID+ , touchFingerEventX :: !CFloat+ , touchFingerEventY :: !CFloat+ , touchFingerEventDX :: !CFloat+ , touchFingerEventDY :: !CFloat+ , touchFingerEventPressure :: !CFloat+ }+ | MultiGestureEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , multiGestureEventTouchID :: !TouchID+ , multiGestureEventDTheta :: !CFloat+ , multiGestureEventDDist :: !CFloat+ , multiGestureEventX :: !CFloat+ , multiGestureEventY :: !CFloat+ , multiGestureEventNumFingers :: !Word16+ }+ | DollarGestureEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , dollarGestureEventTouchID :: !TouchID+ , dollarGestureEventGestureID :: !GestureID+ , dollarGestureEventNumFingers :: !Word32+ , dollarGestureEventError :: !CFloat+ , dollarGestureEventX :: !CFloat+ , dollarGestureEventY :: !CFloat+ }+ | DropEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ , dropEventFile :: !CString+ }+ | ClipboardUpdateEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ }+ | UnknownEvent+ { eventType :: !Word32+ , eventTimestamp :: !Word32+ }+ deriving (Eq, Show, Typeable)++instance Storable Event where+ sizeOf _ = (#size SDL_Event)+ alignment = sizeOf+ peek ptr = do+ typ <- (#peek SDL_Event, common.type) ptr+ timestamp <- (#peek SDL_Event, common.timestamp) ptr+ case typ of+ (#const SDL_QUIT) ->+ return $! QuitEvent typ timestamp+ (#const SDL_WINDOWEVENT) -> do+ wid <- (#peek SDL_Event, window.windowID) ptr+ event <- (#peek SDL_Event, window.event) ptr+ data1 <- (#peek SDL_Event, window.data1) ptr+ data2 <- (#peek SDL_Event, window.data2) ptr+ return $! WindowEvent typ timestamp wid event data1 data2+ (#const SDL_SYSWMEVENT) -> do+ msg <- (#peek SDL_Event, syswm.msg) ptr+ return $! SysWMEvent typ timestamp msg+ (#const SDL_KEYDOWN) -> key $ KeyboardEvent typ timestamp+ (#const SDL_KEYUP) -> key $ KeyboardEvent typ timestamp+ (#const SDL_TEXTEDITING) -> do+ wid <- (#peek SDL_Event, edit.windowID) ptr+ text <- peekArray (#const SDL_TEXTEDITINGEVENT_TEXT_SIZE) $ (#ptr SDL_Event, edit.text) ptr+ start <- (#peek SDL_Event, edit.start) ptr+ len <- (#peek SDL_Event, edit.length) ptr+ let upToNull = takeWhile (/= 0) text+ return $! TextEditingEvent typ timestamp wid upToNull start len+ (#const SDL_TEXTINPUT) -> do+ wid <- (#peek SDL_Event, text.windowID) ptr+ text <- peekArray (#const SDL_TEXTINPUTEVENT_TEXT_SIZE) $ (#ptr SDL_Event, text.text) ptr+ let upToNull = takeWhile (/= 0) text+ return $! TextInputEvent typ timestamp wid upToNull+ (#const SDL_MOUSEMOTION) -> do+ wid <- (#peek SDL_Event, motion.windowID) ptr+ which <- (#peek SDL_Event, motion.which) ptr+ state <- (#peek SDL_Event, motion.state) ptr+ x <- (#peek SDL_Event, motion.x) ptr+ y <- (#peek SDL_Event, motion.y) ptr+ xrel <- (#peek SDL_Event, motion.xrel) ptr+ yrel <- (#peek SDL_Event, motion.yrel) ptr+ return $! MouseMotionEvent typ timestamp wid which state x y xrel yrel+ (#const SDL_MOUSEBUTTONDOWN) -> mouse $ MouseButtonEvent typ timestamp+ (#const SDL_MOUSEBUTTONUP) -> mouse $ MouseButtonEvent typ timestamp+ (#const SDL_MOUSEWHEEL) -> do+ wid <- (#peek SDL_Event, wheel.windowID) ptr+ which <- (#peek SDL_Event, wheel.which) ptr+ x <- (#peek SDL_Event, wheel.x) ptr+ y <- (#peek SDL_Event, wheel.y) ptr+ return $! MouseWheelEvent typ timestamp wid which x y+ (#const SDL_JOYAXISMOTION) -> do+ which <- (#peek SDL_Event, jaxis.which) ptr+ axis <- (#peek SDL_Event, jaxis.axis) ptr+ value <- (#peek SDL_Event, jaxis.value) ptr+ return $! JoyAxisEvent typ timestamp which axis value+ (#const SDL_JOYBALLMOTION) -> do+ which <- (#peek SDL_Event, jball.which) ptr+ ball <- (#peek SDL_Event, jball.ball) ptr+ xrel <- (#peek SDL_Event, jball.xrel) ptr+ yrel <- (#peek SDL_Event, jball.yrel) ptr+ return $! JoyBallEvent typ timestamp which ball xrel yrel+ (#const SDL_JOYHATMOTION) -> do+ which <- (#peek SDL_Event, jhat.which) ptr+ hat <- (#peek SDL_Event, jhat.hat) ptr+ value <- (#peek SDL_Event, jhat.value) ptr+ return $! JoyHatEvent typ timestamp which hat value+ (#const SDL_JOYBUTTONDOWN) -> joybutton $ JoyButtonEvent typ timestamp+ (#const SDL_JOYBUTTONUP) -> joybutton $ JoyButtonEvent typ timestamp+ (#const SDL_JOYDEVICEADDED) -> joydevice $ JoyDeviceEvent typ timestamp+ (#const SDL_JOYDEVICEREMOVED) -> joydevice $ JoyDeviceEvent typ timestamp+ (#const SDL_CONTROLLERAXISMOTION) -> do+ which <- (#peek SDL_Event, caxis.which) ptr+ axis <- (#peek SDL_Event, caxis.axis) ptr+ value <- (#peek SDL_Event, caxis.value) ptr+ return $! ControllerButtonEvent typ timestamp which axis value+ (#const SDL_CONTROLLERBUTTONDOWN) -> controllerbutton $ ControllerButtonEvent typ timestamp+ (#const SDL_CONTROLLERBUTTONUP) -> controllerbutton $ ControllerButtonEvent typ timestamp+ (#const SDL_CONTROLLERDEVICEADDED) -> controllerdevice $ ControllerDeviceEvent typ timestamp+ (#const SDL_CONTROLLERDEVICEREMOVED) -> controllerdevice $ ControllerDeviceEvent typ timestamp+ (#const SDL_CONTROLLERDEVICEREMAPPED) -> controllerdevice $ ControllerDeviceEvent typ timestamp+ (#const SDL_FINGERDOWN) -> finger $ TouchFingerEvent typ timestamp+ (#const SDL_FINGERUP) -> finger $ TouchFingerEvent typ timestamp+ (#const SDL_FINGERMOTION) -> finger $ TouchFingerEvent typ timestamp+ (#const SDL_DOLLARGESTURE) -> dollargesture $ DollarGestureEvent typ timestamp+ (#const SDL_DOLLARRECORD) -> dollargesture $ DollarGestureEvent typ timestamp+ (#const SDL_MULTIGESTURE) -> do+ touchId <- (#peek SDL_Event, mgesture.touchId) ptr+ dTheta <- (#peek SDL_Event, mgesture.dTheta) ptr+ dDist <- (#peek SDL_Event, mgesture.dDist) ptr+ x <- (#peek SDL_Event, mgesture.x) ptr+ y <- (#peek SDL_Event, mgesture.y) ptr+ numFingers <- (#peek SDL_Event, mgesture.numFingers) ptr+ return $! MultiGestureEvent typ timestamp touchId dTheta dDist x y numFingers+ (#const SDL_CLIPBOARDUPDATE) ->+ return $! ClipboardUpdateEvent typ timestamp+ (#const SDL_DROPFILE) -> do+ file <- (#peek SDL_Event, drop.file) ptr+ return $! DropEvent typ timestamp file+ x | x >= (#const SDL_USEREVENT) -> do+ wid <- (#peek SDL_Event, user.windowID) ptr+ code <- (#peek SDL_Event, user.code) ptr+ data1 <- (#peek SDL_Event, user.data1) ptr+ data2 <- (#peek SDL_Event, user.data2) ptr+ return $! UserEvent typ timestamp wid code data1 data2+ _ -> return $! UnknownEvent typ timestamp+ where+ key f = do+ wid <- (#peek SDL_Event, key.windowID) ptr+ state <- (#peek SDL_Event, key.state) ptr+ repeat' <- (#peek SDL_Event, key.repeat) ptr+ keysym <- (#peek SDL_Event, key.keysym) ptr+ return $! f wid state repeat' keysym++ mouse f = do+ wid <- (#peek SDL_Event, button.windowID) ptr+ which <- (#peek SDL_Event, button.which) ptr+ button <- (#peek SDL_Event, button.button) ptr+ state <- (#peek SDL_Event, button.state) ptr+ clicks <- (#peek SDL_Event, button.clicks) ptr+ x <- (#peek SDL_Event, button.x) ptr+ y <- (#peek SDL_Event, button.y) ptr+ return $! f wid which button state clicks x y++ joybutton f = do+ which <- (#peek SDL_Event, jbutton.which) ptr+ button <- (#peek SDL_Event, jbutton.button) ptr+ state <- (#peek SDL_Event, jbutton.state) ptr+ return $! f which button state++ joydevice f = do+ which <- (#peek SDL_Event, jdevice.which) ptr+ return $! f which++ controllerbutton f = do+ which <- (#peek SDL_Event, cbutton.which) ptr+ button <- (#peek SDL_Event, cbutton.button) ptr+ state <- (#peek SDL_Event, cbutton.state) ptr+ return $! f which button state++ controllerdevice f = do+ which <- (#peek SDL_Event, cdevice.which) ptr+ return $! f which++ finger f = do+ touchId <- (#peek SDL_Event, tfinger.touchId) ptr+ fingerId <- (#peek SDL_Event, tfinger.fingerId) ptr+ x <- (#peek SDL_Event, tfinger.x) ptr+ y <- (#peek SDL_Event, tfinger.y) ptr+ dx <- (#peek SDL_Event, tfinger.dx) ptr+ dy <- (#peek SDL_Event, tfinger.dy) ptr+ pressure <- (#peek SDL_Event, tfinger.pressure) ptr+ return $! f touchId fingerId x y dx dy pressure++ dollargesture f = do+ touchId <- (#peek SDL_Event, dgesture.touchId) ptr+ gestureId <- (#peek SDL_Event, dgesture.gestureId) ptr+ numFingers <- (#peek SDL_Event, dgesture.numFingers) ptr+ err <- (#peek SDL_Event, dgesture.error) ptr+ x <- (#peek SDL_Event, dgesture.x) ptr+ y <- (#peek SDL_Event, dgesture.y) ptr+ return $! f touchId gestureId numFingers err x y+ poke ptr ev = case ev of+ WindowEvent typ timestamp wid event data1 data2 -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, window.windowID) ptr wid+ (#poke SDL_Event, window.event) ptr event+ (#poke SDL_Event, window.data1) ptr data1+ (#poke SDL_Event, window.data2) ptr data2+ KeyboardEvent typ timestamp wid state repeat' keysym -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, key.windowID) ptr wid+ (#poke SDL_Event, key.state) ptr state+ (#poke SDL_Event, key.repeat) ptr repeat'+ (#poke SDL_Event, key.keysym) ptr keysym+ TextEditingEvent typ timestamp wid text start len -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, edit.windowID) ptr wid+ pokeArray ((#ptr SDL_Event, edit.text) ptr) text+ (#poke SDL_Event, edit.start) ptr start+ (#poke SDL_Event, edit.length) ptr len+ TextInputEvent typ timestamp wid text -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, text.windowID) ptr wid+ pokeArray ((#ptr SDL_Event, text.text) ptr) text+ MouseMotionEvent typ timestamp wid which state x y xrel yrel -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, motion.windowID) ptr wid+ (#poke SDL_Event, motion.which) ptr which+ (#poke SDL_Event, motion.state) ptr state+ (#poke SDL_Event, motion.x) ptr x+ (#poke SDL_Event, motion.y) ptr y+ (#poke SDL_Event, motion.xrel) ptr xrel+ (#poke SDL_Event, motion.yrel) ptr yrel+ MouseButtonEvent typ timestamp wid which button state clicks x y -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, button.windowID) ptr wid+ (#poke SDL_Event, button.which) ptr which+ (#poke SDL_Event, button.button) ptr button+ (#poke SDL_Event, button.state) ptr state+ (#poke SDL_Event, button.clicks) ptr clicks+ (#poke SDL_Event, button.x) ptr x+ (#poke SDL_Event, button.y) ptr y+ MouseWheelEvent typ timestamp wid which x y -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, wheel.windowID) ptr wid+ (#poke SDL_Event, wheel.which) ptr which+ (#poke SDL_Event, wheel.x) ptr x+ (#poke SDL_Event, wheel.y) ptr y+ JoyAxisEvent typ timestamp which axis value -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, jaxis.which) ptr which+ (#poke SDL_Event, jaxis.axis) ptr axis+ (#poke SDL_Event, jaxis.value) ptr value+ JoyBallEvent typ timestamp which ball xrel yrel -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, jball.which) ptr which+ (#poke SDL_Event, jball.ball) ptr ball+ (#poke SDL_Event, jball.xrel) ptr xrel+ (#poke SDL_Event, jball.yrel) ptr yrel+ JoyHatEvent typ timestamp which hat value -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, jhat.which) ptr which+ (#poke SDL_Event, jhat.hat) ptr hat+ (#poke SDL_Event, jhat.value) ptr value+ JoyButtonEvent typ timestamp which button state -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, jbutton.which) ptr which+ (#poke SDL_Event, jbutton.button) ptr button+ (#poke SDL_Event, jbutton.state) ptr state+ JoyDeviceEvent typ timestamp which -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, jdevice.which) ptr which+ ControllerAxisEvent typ timestamp which axis value -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, caxis.which) ptr which+ (#poke SDL_Event, caxis.axis) ptr axis+ (#poke SDL_Event, caxis.value) ptr value+ ControllerButtonEvent typ timestamp which button state -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, cbutton.which) ptr which+ (#poke SDL_Event, cbutton.button) ptr button+ (#poke SDL_Event, cbutton.state) ptr state+ ControllerDeviceEvent typ timestamp which -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, cdevice.which) ptr which+ QuitEvent typ timestamp -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ UserEvent typ timestamp wid code data1 data2 -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, user.windowID) ptr wid+ (#poke SDL_Event, user.code) ptr code+ (#poke SDL_Event, user.data1) ptr data1+ (#poke SDL_Event, user.data2) ptr data2+ SysWMEvent typ timestamp msg -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, syswm.msg) ptr msg+ TouchFingerEvent typ timestamp touchid fingerid x y dx dy pressure -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, tfinger.touchId) ptr touchid+ (#poke SDL_Event, tfinger.fingerId) ptr fingerid+ (#poke SDL_Event, tfinger.x) ptr x+ (#poke SDL_Event, tfinger.y) ptr y+ (#poke SDL_Event, tfinger.dx) ptr dx+ (#poke SDL_Event, tfinger.dy) ptr dy+ (#poke SDL_Event, tfinger.pressure) ptr pressure+ MultiGestureEvent typ timestamp touchid dtheta ddist x y numfingers -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, mgesture.touchId) ptr touchid+ (#poke SDL_Event, mgesture.dTheta) ptr dtheta+ (#poke SDL_Event, mgesture.dDist) ptr ddist+ (#poke SDL_Event, mgesture.x) ptr x+ (#poke SDL_Event, mgesture.y) ptr y+ (#poke SDL_Event, mgesture.numFingers) ptr numfingers+ DollarGestureEvent typ timestamp touchid gestureid numfingers err x y -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, dgesture.touchId) ptr touchid+ (#poke SDL_Event, dgesture.gestureId) ptr gestureid+ (#poke SDL_Event, dgesture.numFingers) ptr numfingers+ (#poke SDL_Event, dgesture.error) ptr err+ (#poke SDL_Event, dgesture.x) ptr x+ (#poke SDL_Event, dgesture.y) ptr y+ ClipboardUpdateEvent typ timestamp -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ DropEvent typ timestamp file -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp+ (#poke SDL_Event, drop.file) ptr file+ UnknownEvent typ timestamp -> do+ (#poke SDL_Event, common.type) ptr typ+ (#poke SDL_Event, common.timestamp) ptr timestamp++data Finger = Finger+ { fingerID :: !FingerID+ , fingerX :: !CFloat+ , fingerY :: !CFloat+ , fingerPressure :: !CFloat+ } deriving (Eq, Show, Typeable)++instance Storable Finger where+ sizeOf _ = (#size SDL_Finger)+ alignment = sizeOf+ peek ptr = do+ fingerId <- (#peek SDL_Finger, id) ptr+ x <- (#peek SDL_Finger, x) ptr+ y <- (#peek SDL_Finger, y) ptr+ pressure <- (#peek SDL_Finger, pressure) ptr+ return $! Finger fingerId x y pressure+ poke ptr (Finger fingerId x y pressure) = do+ (#poke SDL_Finger, id) ptr fingerId+ (#poke SDL_Finger, x) ptr x+ (#poke SDL_Finger, y) ptr y+ (#poke SDL_Finger, pressure) ptr pressure++data GameControllerButtonBind+ = GameControllerButtonBindNone+ | GameControllerButtonBindButton+ { gameControllerButtonBindButton :: !CInt+ }+ | GameControllerButtonBindAxis+ { gameControllerButtonBindAxis :: !CInt+ }+ | GameControllerButtonBindHat+ { gameControllerButtonBindHat :: !CInt+ , gameControllerButtonBindHatMask :: !CInt+ }+ deriving (Eq, Show, Typeable)++instance Storable GameControllerButtonBind where+ sizeOf _ = (#size SDL_GameControllerButtonBind)+ alignment = sizeOf+ peek ptr = do+ bind_type <- (#peek SDL_GameControllerButtonBind, bindType) ptr+ case bind_type :: (#type SDL_GameControllerBindType) of+ (#const SDL_CONTROLLER_BINDTYPE_NONE) -> do+ return $! GameControllerButtonBindNone+ (#const SDL_CONTROLLER_BINDTYPE_BUTTON) -> do+ button <- (#peek SDL_GameControllerButtonBind, value.button) ptr+ return $! GameControllerButtonBindButton button+ (#const SDL_CONTROLLER_BINDTYPE_AXIS) -> do+ axis <- (#peek SDL_GameControllerButtonBind, value.axis) ptr+ return $! GameControllerButtonBindAxis axis+ (#const SDL_CONTROLLER_BINDTYPE_HAT) -> do+ hat <- (#peek SDL_GameControllerButtonBind, value.hat.hat) ptr+ hat_mask <- (#peek SDL_GameControllerButtonBind, value.hat.hat_mask) ptr+ return $! GameControllerButtonBindHat hat hat_mask+ _ -> error $ "Unknown type " ++ show bind_type ++ " for SDL_GameControllerButtonBind"+ poke ptr bind = case bind of+ GameControllerButtonBindNone -> do+ (#poke SDL_GameControllerButtonBind, bindType) ptr ((#const SDL_CONTROLLER_BINDTYPE_NONE) :: (#type SDL_GameControllerBindType))+ GameControllerButtonBindButton button -> do+ (#poke SDL_GameControllerButtonBind, bindType) ptr ((#const SDL_CONTROLLER_BINDTYPE_BUTTON) :: (#type SDL_GameControllerBindType))+ (#poke SDL_GameControllerButtonBind, value.button) ptr button+ GameControllerButtonBindAxis axis -> do+ (#poke SDL_GameControllerButtonBind, bindType) ptr ((#const SDL_CONTROLLER_BINDTYPE_AXIS) :: (#type SDL_GameControllerBindType))+ (#poke SDL_GameControllerButtonBind, value.axis) ptr axis+ GameControllerButtonBindHat hat hat_mask -> do+ (#poke SDL_GameControllerButtonBind, bindType) ptr ((#const SDL_CONTROLLER_BINDTYPE_HAT) :: (#type SDL_GameControllerBindType))+ (#poke SDL_GameControllerButtonBind, value.hat.hat) ptr hat+ (#poke SDL_GameControllerButtonBind, value.hat.hat_mask) ptr hat_mask++data HapticDirection = HapticDirection+ { hapticDirectionType :: !Word8+ , hapticDirectionX :: !Int32+ , hapticDirectionY :: !Int32+ , hapticDirectionZ :: !Int32+ } deriving (Eq, Show, Typeable)++instance Storable HapticDirection where+ sizeOf _ = (#size SDL_HapticDirection)+ alignment = sizeOf+ peek ptr = do+ typ <- (#peek SDL_HapticDirection, type) ptr+ x <- (#peek SDL_HapticDirection, dir[0]) ptr+ y <- (#peek SDL_HapticDirection, dir[1]) ptr+ z <- (#peek SDL_HapticDirection, dir[2]) ptr+ return $! HapticDirection typ x y z+ poke ptr (HapticDirection typ x y z) = do+ (#poke SDL_HapticDirection, type) ptr typ+ (#poke SDL_HapticDirection, dir[0]) ptr x+ (#poke SDL_HapticDirection, dir[1]) ptr y+ (#poke SDL_HapticDirection, dir[2]) ptr z++data HapticEffect+ = HapticConstant+ { hapticEffectType :: !Word16+ , hapticConstantDirection :: !HapticDirection+ , hapticConstantLength :: !Word32+ , hapticConstantDelay :: !Word16+ , hapticConstantButton :: !Word16+ , hapticConstantInterval :: !Word16+ , hapticConstantLevel :: !Int16+ , hapticConstantAttackLength :: !Word16+ , hapticConstantAttackLevel :: !Word16+ , hapticConstantFadeLength :: !Word16+ , hapticConstantFadeLevel :: !Word16+ }+ | HapticPeriodic+ { hapticEffectType :: !Word16+ , hapticPeriodicDirection :: !HapticDirection+ , hapticPeriodicLength :: !Word32+ , hapticPeriodicDelay :: !Word16+ , hapticPeriodicButton :: !Word16+ , hapticPeriodicInterval :: !Word16+ , hapticPeriodicPeriod :: !Word16+ , hapticPeriodicMagnitude :: !Int16+ , hapticPeriodicOffset :: !Int16+ , hapticPeriodicPhase :: !Word16+ , hapticPeriodicAttackLength :: !Word16+ , hapticPeriodicAttackLevel :: !Word16+ , hapticPeriodicFadeLength :: !Word16+ , hapticPeriodicFadeLevel :: !Word16+ }+ | HapticCondition+ { hapticEffectType :: !Word16+ , hapticConditionLength :: !Word32+ , hapticConditionDelay :: !Word16+ , hapticConditionButton :: !Word16+ , hapticConditionInterval :: !Word16+ , hapticConditionRightSat :: ![Word16]+ , hapticConditionLeftSat :: ![Word16]+ , hapticConditionRightCoeff :: ![Int16]+ , hapticConditionLeftCoeff :: ![Int16]+ , hapticConditionDeadband :: ![Word16]+ , hapticConditionCenter :: ![Int16]+ }+ | HapticRamp+ { hapticEffectType :: !Word16+ , hapticRampDirection :: !HapticDirection+ , hapticRampLength :: !Word32+ , hapticRampDelay :: !Word16+ , hapticRampButton :: !Word16+ , hapticRampInterval :: !Word16+ , hapticRampStart :: !Int16+ , hapticRampEnd :: !Int16+ , hapticRampAttackLength :: !Word16+ , hapticRampAttackLevel :: !Word16+ , hapticRampFadeLength :: !Word16+ , hapticRampFadeLevel :: !Word16+ }+ | HapticLeftRight+ { hapticEffectType :: !Word16+ , hapticLeftRightLength :: !Word32+ , hapticLeftRightLargeMagnitude :: !Word16+ , hapticLeftRightSmallMagnitude :: !Word16+ }+ | HapticCustom+ { hapticEffectType :: !Word16+ , hapticCustomDirection :: !HapticDirection+ , hapticCustomLength :: !Word32+ , hapticCustomDelay :: !Word16+ , hapticCustomButton :: !Word16+ , hapticCustomInterval :: !Word16+ , hapticCustomChannels :: !Word8+ , hapticCustomPeriod :: !Word16+ , hapticCustomSamples :: !Word16+ , hapticCustomData :: !(Ptr Word16)+ , hapticCustomAttackLength :: !Word16+ , hapticCustomAttackLevel :: !Word16+ , hapticCustomFadeLength :: !Word16+ , hapticCustomFadeLevel :: !Word16+ }+ deriving (Eq, Show, Typeable)++instance Storable HapticEffect where+ sizeOf _ = (#size SDL_HapticEffect)+ alignment = sizeOf+ peek ptr = do+ typ <- (#peek SDL_HapticEffect, type) ptr+ case typ of+ (#const SDL_HAPTIC_CONSTANT) -> do+ direction <- (#peek SDL_HapticEffect, constant.direction) ptr+ len <- (#peek SDL_HapticEffect, constant.length) ptr+ delay <- (#peek SDL_HapticEffect, constant.delay) ptr+ button <- (#peek SDL_HapticEffect, constant.button) ptr+ interval <- (#peek SDL_HapticEffect, constant.interval) ptr+ level <- (#peek SDL_HapticEffect, constant.level) ptr+ attack_length <- (#peek SDL_HapticEffect, constant.attack_length) ptr+ attack_level <- (#peek SDL_HapticEffect, constant.attack_level) ptr+ fade_length <- (#peek SDL_HapticEffect, constant.fade_length) ptr+ fade_level <- (#peek SDL_HapticEffect, constant.fade_level) ptr+ return $! HapticConstant typ direction len delay button interval level attack_length attack_level fade_length fade_level++ (#const SDL_HAPTIC_SINE) -> hapticperiodic $ HapticPeriodic typ+ (#const SDL_HAPTIC_TRIANGLE) -> hapticperiodic $ HapticPeriodic typ+ (#const SDL_HAPTIC_SAWTOOTHUP) -> hapticperiodic $ HapticPeriodic typ+ (#const SDL_HAPTIC_SAWTOOTHDOWN) -> hapticperiodic $ HapticPeriodic typ++ (#const SDL_HAPTIC_RAMP) -> do+ direction <- (#peek SDL_HapticEffect, ramp.direction) ptr+ len <- (#peek SDL_HapticEffect, ramp.length) ptr+ delay <- (#peek SDL_HapticEffect, ramp.delay) ptr+ button <- (#peek SDL_HapticEffect, ramp.button) ptr+ interval <- (#peek SDL_HapticEffect, ramp.interval) ptr+ start <- (#peek SDL_HapticEffect, ramp.start) ptr+ end <- (#peek SDL_HapticEffect, ramp.end) ptr+ attack_length <- (#peek SDL_HapticEffect, ramp.attack_length) ptr+ attack_level <- (#peek SDL_HapticEffect, ramp.attack_level) ptr+ fade_length <- (#peek SDL_HapticEffect, ramp.fade_length) ptr+ fade_level <- (#peek SDL_HapticEffect, ramp.fade_level) ptr+ return $! HapticRamp typ direction len delay button interval start end attack_length attack_level fade_length fade_level++ (#const SDL_HAPTIC_SPRING) -> hapticcondition $ HapticCondition typ+ (#const SDL_HAPTIC_DAMPER) -> hapticcondition $ HapticCondition typ+ (#const SDL_HAPTIC_INERTIA) -> hapticcondition $ HapticCondition typ+ (#const SDL_HAPTIC_FRICTION) -> hapticcondition $ HapticCondition typ++ (#const SDL_HAPTIC_LEFTRIGHT) -> do+ len <- (#peek SDL_HapticEffect, leftright.length) ptr+ large_magnitude <- (#peek SDL_HapticEffect, leftright.large_magnitude) ptr+ small_magnitude <- (#peek SDL_HapticEffect, leftright.small_magnitude) ptr+ return $! HapticLeftRight typ len large_magnitude small_magnitude++ (#const SDL_HAPTIC_CUSTOM) -> do+ direction <- (#peek SDL_HapticEffect, custom.direction) ptr+ len <- (#peek SDL_HapticEffect, custom.length) ptr+ delay <- (#peek SDL_HapticEffect, custom.delay) ptr+ button <- (#peek SDL_HapticEffect, custom.button) ptr+ interval <- (#peek SDL_HapticEffect, custom.interval) ptr+ channels <- (#peek SDL_HapticEffect, custom.channels) ptr+ period <- (#peek SDL_HapticEffect, custom.period) ptr+ samples <- (#peek SDL_HapticEffect, custom.samples) ptr+ datum <- (#peek SDL_HapticEffect, custom.data) ptr+ attack_length <- (#peek SDL_HapticEffect, custom.attack_length) ptr+ attack_level <- (#peek SDL_HapticEffect, custom.attack_level) ptr+ fade_length <- (#peek SDL_HapticEffect, custom.fade_length) ptr+ fade_level <- (#peek SDL_HapticEffect, custom.fade_level) ptr+ return $! HapticCustom typ direction len delay button interval channels period samples datum attack_length attack_level fade_length fade_level+ _ -> error $ "Unknown type " ++ show typ ++ " for SDL_HapticEffect"+ where+ hapticperiodic f = do+ direction <- (#peek SDL_HapticEffect, periodic.direction) ptr+ len <- (#peek SDL_HapticEffect, periodic.length) ptr+ delay <- (#peek SDL_HapticEffect, periodic.delay) ptr+ button <- (#peek SDL_HapticEffect, periodic.button) ptr+ interval <- (#peek SDL_HapticEffect, periodic.interval) ptr+ period <- (#peek SDL_HapticEffect, periodic.period) ptr+ magnitude <- (#peek SDL_HapticEffect, periodic.magnitude) ptr+ offset <- (#peek SDL_HapticEffect, periodic.offset) ptr+ phase <- (#peek SDL_HapticEffect, periodic.phase) ptr+ attack_length <- (#peek SDL_HapticEffect, periodic.attack_length) ptr+ attack_level <- (#peek SDL_HapticEffect, periodic.attack_level) ptr+ fade_length <- (#peek SDL_HapticEffect, periodic.fade_length) ptr+ fade_level <- (#peek SDL_HapticEffect, periodic.fade_level) ptr+ return $! f direction len delay button interval period magnitude offset phase attack_length attack_level fade_length fade_level++ hapticcondition f = do+ len <- (#peek SDL_HapticEffect, condition.length) ptr+ delay <- (#peek SDL_HapticEffect, condition.delay) ptr+ button <- (#peek SDL_HapticEffect, condition.button) ptr+ interval <- (#peek SDL_HapticEffect, condition.interval) ptr+ right_sat <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.right_sat) ptr+ left_sat <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.left_sat) ptr+ right_coeff <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.right_coeff) ptr+ left_coeff <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.left_coeff) ptr+ deadband <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.deadband) ptr+ center <- peekArray 3 $ (#ptr SDL_HapticEffect, condition.center) ptr+ return $! f len delay button interval right_sat left_sat right_coeff left_coeff deadband center+ poke ptr event = case event of+ HapticConstant typ direction len delay button interval level attack_length attack_level fade_length fade_level -> do+ (#poke SDL_HapticEffect, type) ptr typ+ (#poke SDL_HapticEffect, constant.direction) ptr direction+ (#poke SDL_HapticEffect, constant.length) ptr len+ (#poke SDL_HapticEffect, constant.delay) ptr delay+ (#poke SDL_HapticEffect, constant.button) ptr button+ (#poke SDL_HapticEffect, constant.interval) ptr interval+ (#poke SDL_HapticEffect, constant.level) ptr level+ (#poke SDL_HapticEffect, constant.attack_length) ptr attack_length+ (#poke SDL_HapticEffect, constant.attack_level) ptr attack_level+ (#poke SDL_HapticEffect, constant.fade_length) ptr fade_length+ (#poke SDL_HapticEffect, constant.fade_level) ptr fade_level+ HapticPeriodic typ direction len delay button interval period magnitude offset phase attack_length attack_level fade_length fade_level -> do+ (#poke SDL_HapticEffect, type) ptr typ+ (#poke SDL_HapticEffect, periodic.direction) ptr direction+ (#poke SDL_HapticEffect, periodic.length) ptr len+ (#poke SDL_HapticEffect, periodic.delay) ptr delay+ (#poke SDL_HapticEffect, periodic.button) ptr button+ (#poke SDL_HapticEffect, periodic.interval) ptr interval+ (#poke SDL_HapticEffect, periodic.period) ptr period+ (#poke SDL_HapticEffect, periodic.magnitude) ptr magnitude+ (#poke SDL_HapticEffect, periodic.offset) ptr offset+ (#poke SDL_HapticEffect, periodic.phase) ptr phase+ (#poke SDL_HapticEffect, periodic.attack_length) ptr attack_length+ (#poke SDL_HapticEffect, periodic.attack_level) ptr attack_level+ (#poke SDL_HapticEffect, periodic.fade_length) ptr fade_length+ (#poke SDL_HapticEffect, periodic.fade_level) ptr fade_level+ HapticCondition typ len delay button interval right_sat left_sat right_coeff left_coeff deadband center -> do+ (#poke SDL_HapticEffect, type) ptr typ+ (#poke SDL_HapticEffect, condition.length) ptr len+ (#poke SDL_HapticEffect, condition.delay) ptr delay+ (#poke SDL_HapticEffect, condition.button) ptr button+ (#poke SDL_HapticEffect, condition.interval) ptr interval+ pokeArray ((#ptr SDL_HapticEffect, condition.right_sat) ptr) right_sat+ pokeArray ((#ptr SDL_HapticEffect, condition.left_sat) ptr) left_sat+ pokeArray ((#ptr SDL_HapticEffect, condition.right_coeff) ptr) right_coeff+ pokeArray ((#ptr SDL_HapticEffect, condition.left_coeff) ptr) left_coeff+ pokeArray ((#ptr SDL_HapticEffect, condition.deadband) ptr) deadband+ pokeArray ((#ptr SDL_HapticEffect, condition.center) ptr) center+ HapticRamp typ direction len delay button interval start end attack_length attack_level fade_length fade_level -> do+ (#poke SDL_HapticEffect, type) ptr typ+ (#poke SDL_HapticEffect, ramp.direction) ptr direction+ (#poke SDL_HapticEffect, ramp.length) ptr len+ (#poke SDL_HapticEffect, ramp.delay) ptr delay+ (#poke SDL_HapticEffect, ramp.button) ptr button+ (#poke SDL_HapticEffect, ramp.interval) ptr interval+ (#poke SDL_HapticEffect, ramp.start) ptr start+ (#poke SDL_HapticEffect, ramp.end) ptr end+ (#poke SDL_HapticEffect, ramp.attack_length) ptr attack_length+ (#poke SDL_HapticEffect, ramp.attack_level) ptr attack_level+ (#poke SDL_HapticEffect, ramp.fade_length) ptr fade_length+ (#poke SDL_HapticEffect, ramp.fade_level) ptr fade_level+ HapticLeftRight typ len large_magnitude small_magnitude -> do+ (#poke SDL_HapticEffect, type) ptr typ+ (#poke SDL_HapticEffect, leftright.length) ptr len+ (#poke SDL_HapticEffect, leftright.large_magnitude) ptr large_magnitude+ (#poke SDL_HapticEffect, leftright.small_magnitude) ptr small_magnitude+ HapticCustom typ direction len delay button interval channels period samples datum attack_length attack_level fade_length fade_level -> do+ (#poke SDL_HapticEffect, type) ptr typ+ (#poke SDL_HapticEffect, custom.direction) ptr direction+ (#poke SDL_HapticEffect, custom.length) ptr len+ (#poke SDL_HapticEffect, custom.delay) ptr delay+ (#poke SDL_HapticEffect, custom.button) ptr button+ (#poke SDL_HapticEffect, custom.interval) ptr interval+ (#poke SDL_HapticEffect, custom.channels) ptr channels+ (#poke SDL_HapticEffect, custom.period) ptr period+ (#poke SDL_HapticEffect, custom.samples) ptr samples+ (#poke SDL_HapticEffect, custom.data) ptr datum+ (#poke SDL_HapticEffect, custom.attack_length) ptr attack_length+ (#poke SDL_HapticEffect, custom.attack_level) ptr attack_level+ (#poke SDL_HapticEffect, custom.fade_length) ptr fade_length+ (#poke SDL_HapticEffect, custom.fade_level) ptr fade_level++data JoystickGUID = JoystickGUID+ { joystickGUID :: ![Word8]+ } deriving (Eq, Show, Typeable)++instance Storable JoystickGUID where+ sizeOf _ = (#size SDL_JoystickGUID)+ alignment = sizeOf+ peek ptr = do+ guid <- peekArray 16 $ (#ptr SDL_JoystickGUID, data) ptr+ return $! JoystickGUID guid+ poke ptr (JoystickGUID guid) =+ pokeArray ((#ptr SDL_JoystickGUID, data) ptr) guid++data Keysym = Keysym+ { keysymScancode :: !Scancode+ , keysymKeycode :: !Keycode+ , keysymMod :: !Word16+ } deriving (Eq, Show, Typeable)++instance Storable Keysym where+ sizeOf _ = (#size SDL_Keysym)+ alignment = sizeOf+ peek ptr = do+ scancode <- (#peek SDL_Keysym, scancode) ptr+ sym <- (#peek SDL_Keysym, sym) ptr+ mod' <- (#peek SDL_Keysym, mod) ptr+ return $! Keysym scancode sym mod'+ poke ptr (Keysym scancode sym mod') = do+ (#poke SDL_Keysym, scancode) ptr scancode+ (#poke SDL_Keysym, sym) ptr sym+ (#poke SDL_Keysym, mod) ptr mod'++data MessageBoxButtonData = MessageBoxButtonData+ { messageBoxButtonDataFlags :: !Word32+ , messageBoxButtonButtonID :: !CInt+ , messageBoxButtonText :: !CString+ } deriving (Eq, Show, Typeable)++instance Storable MessageBoxButtonData where+ sizeOf _ = (#size SDL_MessageBoxButtonData)+ alignment = sizeOf+ peek ptr = do+ flags <- (#peek SDL_MessageBoxButtonData, flags) ptr+ buttonid <- (#peek SDL_MessageBoxButtonData, buttonid) ptr+ text <- (#peek SDL_MessageBoxButtonData, text) ptr+ return $! MessageBoxButtonData flags buttonid text+ poke ptr (MessageBoxButtonData flags buttonid text) = do+ (#poke SDL_MessageBoxButtonData, flags) ptr flags+ (#poke SDL_MessageBoxButtonData, buttonid) ptr buttonid+ (#poke SDL_MessageBoxButtonData, text) ptr text++data MessageBoxColor = MessageBoxColor+ { messageBoxColorR :: !Word8+ , messageBoxColorG :: !Word8+ , messageBoxColorB :: !Word8+ } deriving (Eq, Show, Typeable)++instance Storable MessageBoxColor where+ sizeOf _ = (#size SDL_MessageBoxColor)+ alignment = sizeOf+ peek ptr = do+ r <- (#peek SDL_MessageBoxColor, r) ptr+ g <- (#peek SDL_MessageBoxColor, g) ptr+ b <- (#peek SDL_MessageBoxColor, b) ptr+ return $! MessageBoxColor r g b+ poke ptr (MessageBoxColor r g b) = do+ (#poke SDL_MessageBoxColor, r) ptr r+ (#poke SDL_MessageBoxColor, g) ptr g+ (#poke SDL_MessageBoxColor, b) ptr b++data MessageBoxColorScheme = MessageBoxColorScheme+ { messageBoxColorSchemeColorBackground :: !MessageBoxColor+ , messageBoxColorSchemeColorText :: !MessageBoxColor+ , messageBoxColorSchemeColorButtonBorder :: !MessageBoxColor+ , messageBoxColorSchemeColorButtonBackground :: !MessageBoxColor+ , messageBoxColorSchemeColorButtonSelected :: !MessageBoxColor+ } deriving (Eq, Show, Typeable)++instance Storable MessageBoxColorScheme where+ sizeOf _ = (#size SDL_MessageBoxColorScheme)+ alignment = sizeOf+ peek ptr = do+ background <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BACKGROUND]) ptr+ text <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_TEXT]) ptr+ button_border <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_BORDER]) ptr+ button_background <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND]) ptr+ button_selected <- (#peek SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED]) ptr+ return $! MessageBoxColorScheme background text button_border button_background button_selected+ poke ptr (MessageBoxColorScheme background text button_border button_background button_selected) = do+ (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BACKGROUND]) ptr background+ (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_TEXT]) ptr text+ (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_BORDER]) ptr button_border+ (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND]) ptr button_background+ (#poke SDL_MessageBoxColorScheme, colors[SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED]) ptr button_selected++data MessageBoxData = MessageBoxData+ { messageBoxDataFlags :: !Word32+ , messageBoxDataWindow :: !Window+ , messageBoxDataTitle :: !CString+ , messageBoxDataMessage :: !CString+ , messageBoxDataNumButtons :: !CInt+ , messageBoxDataButtons :: !(Ptr MessageBoxButtonData)+ , messageBoxDataColorScheme :: !(Ptr MessageBoxColorScheme)+ } deriving (Eq, Show, Typeable)++instance Storable MessageBoxData where+ sizeOf _ = (#size SDL_MessageBoxData)+ alignment = sizeOf+ peek ptr = do+ flags <- (#peek SDL_MessageBoxData, flags) ptr+ window <- (#peek SDL_MessageBoxData, window) ptr+ title <- (#peek SDL_MessageBoxData, title) ptr+ message <- (#peek SDL_MessageBoxData, message) ptr+ numbuttons <- (#peek SDL_MessageBoxData, numbuttons) ptr+ buttons <- (#peek SDL_MessageBoxData, buttons) ptr+ color_scheme <- (#peek SDL_MessageBoxData, colorScheme) ptr+ return $! MessageBoxData flags window title message numbuttons buttons color_scheme+ poke ptr (MessageBoxData flags window title message numbuttons buttons color_scheme) = do+ (#poke SDL_MessageBoxData, flags) ptr flags+ (#poke SDL_MessageBoxData, window) ptr window+ (#poke SDL_MessageBoxData, title) ptr title+ (#poke SDL_MessageBoxData, message) ptr message+ (#poke SDL_MessageBoxData, numbuttons) ptr numbuttons+ (#poke SDL_MessageBoxData, buttons) ptr buttons+ (#poke SDL_MessageBoxData, colorScheme) ptr color_scheme++data Palette = Palette+ { paletteNColors :: !CInt+ , paletteColors :: !(Ptr Color)+ } deriving (Eq, Show, Typeable)++instance Storable Palette where+ sizeOf _ = (#size SDL_Palette)+ alignment = sizeOf+ peek ptr = do+ ncolors <- (#peek SDL_Palette, ncolors) ptr+ colors <- (#peek SDL_Palette, colors) ptr+ return $! Palette ncolors colors+ poke ptr (Palette ncolors colors) = do+ (#poke SDL_Palette, ncolors) ptr ncolors+ (#poke SDL_Palette, colors) ptr colors++data PixelFormat = PixelFormat+ { pixelFormatFormat :: !Word32+ , pixelFormatPalette :: !(Ptr Palette)+ , pixelFormatBitsPerPixel :: !Word8+ , pixelFormatBytesPerPixel :: !Word8+ , pixelFormatRMask :: !Word32+ , pixelFormatGMask :: !Word32+ , pixelFormatBMask :: !Word32+ , pixelFormatAMask :: !Word32+ } deriving (Eq, Show, Typeable)++instance Storable PixelFormat where+ sizeOf _ = (#size SDL_PixelFormat)+ alignment = sizeOf+ peek ptr = do+ format <- (#peek SDL_PixelFormat, format) ptr+ palette <- (#peek SDL_PixelFormat, palette) ptr+ bits_per_pixel <- (#peek SDL_PixelFormat, BitsPerPixel) ptr+ bytes_per_pixel <- (#peek SDL_PixelFormat, BytesPerPixel) ptr+ rmask <- (#peek SDL_PixelFormat, Rmask) ptr+ gmask <- (#peek SDL_PixelFormat, Gmask) ptr+ bmask <- (#peek SDL_PixelFormat, Bmask) ptr+ amask <- (#peek SDL_PixelFormat, Amask) ptr+ return $! PixelFormat format palette bits_per_pixel bytes_per_pixel rmask gmask bmask amask+ poke ptr (PixelFormat format palette bits_per_pixel bytes_per_pixel rmask gmask bmask amask) = do+ (#poke SDL_PixelFormat, format) ptr format+ (#poke SDL_PixelFormat, palette) ptr palette+ (#poke SDL_PixelFormat, BitsPerPixel) ptr bits_per_pixel+ (#poke SDL_PixelFormat, BytesPerPixel) ptr bytes_per_pixel+ (#poke SDL_PixelFormat, Rmask) ptr rmask+ (#poke SDL_PixelFormat, Gmask) ptr gmask+ (#poke SDL_PixelFormat, Bmask) ptr bmask+ (#poke SDL_PixelFormat, Amask) ptr amask++data Point = Point+ { pointX :: !CInt+ , pointY :: !CInt+ } deriving (Eq, Show, Typeable)++instance Storable Point where+ sizeOf _ = (#size SDL_Point)+ alignment = sizeOf+ peek ptr = do+ x <- (#peek SDL_Point, x) ptr+ y <- (#peek SDL_Point, y) ptr+ return $! Point x y+ poke ptr (Point x y) = do+ (#poke SDL_Point, x) ptr x+ (#poke SDL_Point, y) ptr y++data Rect = Rect+ { rectX :: !CInt+ , rectY :: !CInt+ , rectW :: !CInt+ , rectH :: !CInt+ } deriving (Eq, Show, Typeable)++instance Storable Rect where+ sizeOf _ = (#size SDL_Rect)+ alignment = sizeOf+ peek ptr = do+ x <- (#peek SDL_Rect, x) ptr+ y <- (#peek SDL_Rect, y) ptr+ w <- (#peek SDL_Rect, w) ptr+ h <- (#peek SDL_Rect, h) ptr+ return $! Rect x y w h+ poke ptr (Rect x y w h) = do+ (#poke SDL_Rect, x) ptr x+ (#poke SDL_Rect, y) ptr y+ (#poke SDL_Rect, w) ptr w+ (#poke SDL_Rect, h) ptr h++data RendererInfo = RendererInfo+ { rendererInfoName :: !CString+ , rendererInfoFlags :: !Word32+ , rendererInfoNumTextureFormats :: !Word32+ , rendererInfoTextureFormats :: ![Word32]+ , rendererInfoMaxTextureWidth :: !CInt+ , rendererInfoMaxTextureHeight :: !CInt+ } deriving (Eq, Show, Typeable)++instance Storable RendererInfo where+ sizeOf _ = (#size SDL_RendererInfo)+ alignment = sizeOf+ peek ptr = do+ name <- (#peek SDL_RendererInfo, name) ptr+ flags <- (#peek SDL_RendererInfo, flags) ptr+ num_texture_formats <- (#peek SDL_RendererInfo, num_texture_formats) ptr+ texture_formats <- peekArray 16 $ (#ptr SDL_RendererInfo, texture_formats) ptr+ max_texture_width <- (#peek SDL_RendererInfo, max_texture_width) ptr+ max_texture_height <- (#peek SDL_RendererInfo, max_texture_height) ptr+ return $! RendererInfo name flags num_texture_formats texture_formats max_texture_width max_texture_height+ poke ptr (RendererInfo name flags num_texture_formats texture_formats max_texture_width max_texture_height) = do+ (#poke SDL_RendererInfo, name) ptr name+ (#poke SDL_RendererInfo, flags) ptr flags+ (#poke SDL_RendererInfo, num_texture_formats) ptr num_texture_formats+ pokeArray ((#ptr SDL_RendererInfo, texture_formats) ptr) texture_formats+ (#poke SDL_RendererInfo, max_texture_width) ptr max_texture_width+ (#poke SDL_RendererInfo, max_texture_height) ptr max_texture_height++data RWops = RWops+ { rwopsSize :: !(FunPtr (Ptr RWops -> IO Int64))+ , rwopsSeek :: !(FunPtr (Ptr RWops -> Int64 -> CInt -> IO Int64))+ , rwopsRead :: !(FunPtr (Ptr RWops -> Ptr () -> CSize -> CSize -> IO CSize))+ , rwopsWrite :: !(FunPtr (Ptr RWops -> Ptr () -> CSize -> CSize -> IO CSize))+ , rwopsClose :: !(FunPtr (Ptr RWops -> IO CInt))+ , rwopsType :: !Word32+ } deriving (Eq, Show, Typeable)++instance Storable RWops where+ sizeOf _ = (#size SDL_RWops)+ alignment = sizeOf+ peek ptr = do+ size <- (#peek SDL_RWops, size) ptr+ seek <- (#peek SDL_RWops, seek) ptr+ read' <- (#peek SDL_RWops, read) ptr+ write <- (#peek SDL_RWops, write) ptr+ close <- (#peek SDL_RWops, close) ptr+ typ <- (#peek SDL_RWops, type) ptr+ return $! RWops size seek read' write close typ+ poke ptr (RWops size seek read' write close typ) = do+ (#poke SDL_RWops, size) ptr size+ (#poke SDL_RWops, seek) ptr seek+ (#poke SDL_RWops, read) ptr read'+ (#poke SDL_RWops, write) ptr write+ (#poke SDL_RWops, close) ptr close+ (#poke SDL_RWops, type) ptr typ++data Surface = Surface+ { surfaceFormat :: !(Ptr PixelFormat)+ , surfaceW :: !CInt+ , surfaceH :: !CInt+ , surfacePixels :: !(Ptr ())+ , surfaceUserdata :: !(Ptr ())+ , surfaceClipRect :: !Rect+ , surfaceRefcount :: !CInt+ } deriving (Eq, Show, Typeable)++instance Storable Surface where+ sizeOf _ = (#size SDL_Surface)+ alignment = sizeOf+ peek ptr = do+ format <- (#peek SDL_Surface, format) ptr+ w <- (#peek SDL_Surface, w) ptr+ h <- (#peek SDL_Surface, h) ptr+ pixels <- (#peek SDL_Surface, pixels) ptr+ userdata <- (#peek SDL_Surface, userdata) ptr+ cliprect <- (#peek SDL_Surface, clip_rect) ptr+ refcount <- (#peek SDL_Surface, refcount) ptr+ return $! Surface format w h pixels userdata cliprect refcount+ poke ptr (Surface format w h pixels userdata cliprect refcount) = do+ (#poke SDL_Surface, format) ptr format+ (#poke SDL_Surface, w) ptr w+ (#poke SDL_Surface, h) ptr h+ (#poke SDL_Surface, pixels) ptr pixels+ (#poke SDL_Surface, userdata) ptr userdata+ (#poke SDL_Surface, clip_rect) ptr cliprect+ (#poke SDL_Surface, refcount) ptr refcount++data Version = Version+ { versionMajor :: !Word8+ , versionMinor :: !Word8+ , versionPatch :: !Word8+ } deriving (Eq, Show, Typeable)++instance Storable Version where+ sizeOf _ = (#size SDL_version)+ alignment = sizeOf+ peek ptr = do+ major <- (#peek SDL_version, major) ptr+ minor <- (#peek SDL_version, minor) ptr+ patch <- (#peek SDL_version, patch) ptr+ return $! Version major minor patch+ poke ptr (Version major minor patch) = do+ (#poke SDL_version, major) ptr major+ (#poke SDL_version, minor) ptr minor+ (#poke SDL_version, patch) ptr patch
src/SDL/Raw/Video.hs view
@@ -1,1113 +1,1113 @@-module SDL.Raw.Video ( - -- * Display and Window Management - createWindow, - createWindowAndRenderer, - createWindowFrom, - destroyWindow, - disableScreenSaver, - enableScreenSaver, - glBindTexture, - glCreateContext, - glDeleteContext, - glExtensionSupported, - glGetAttribute, - glGetCurrentContext, - glGetCurrentWindow, - glGetDrawableSize, - glGetProcAddress, - glGetSwapInterval, - glLoadLibrary, - glMakeCurrent, - glResetAttributes, - glSetAttribute, - glSetSwapInterval, - glSwapWindow, - glUnbindTexture, - glUnloadLibrary, - getClosestDisplayMode, - getCurrentDisplayMode, - getCurrentVideoDriver, - getDesktopDisplayMode, - getDisplayBounds, - getDisplayMode, - getDisplayName, - getNumDisplayModes, - getNumVideoDisplays, - getNumVideoDrivers, - getVideoDriver, - getWindowBrightness, - getWindowData, - getWindowDisplayIndex, - getWindowDisplayMode, - getWindowFlags, - getWindowFromID, - getWindowGammaRamp, - getWindowGrab, - getWindowID, - getWindowMaximumSize, - getWindowMinimumSize, - getWindowPixelFormat, - getWindowPosition, - getWindowSize, - getWindowSurface, - getWindowTitle, - hideWindow, - isScreenSaverEnabled, - maximizeWindow, - minimizeWindow, - raiseWindow, - restoreWindow, - setWindowBordered, - setWindowBrightness, - setWindowData, - setWindowDisplayMode, - setWindowFullscreen, - setWindowGammaRamp, - setWindowGrab, - setWindowIcon, - setWindowMaximumSize, - setWindowMinimumSize, - setWindowPosition, - setWindowSize, - setWindowTitle, - showMessageBox, - showSimpleMessageBox, - showWindow, - updateWindowSurface, - updateWindowSurfaceRects, - videoInit, - videoQuit, - - -- * 2D Accelerated Rendering - createRenderer, - createSoftwareRenderer, - createTexture, - createTextureFromSurface, - destroyRenderer, - destroyTexture, - getNumRenderDrivers, - getRenderDrawBlendMode, - getRenderDrawColor, - getRenderDriverInfo, - getRenderTarget, - getRenderer, - getRendererInfo, - getRendererOutputSize, - getTextureAlphaMod, - getTextureBlendMode, - getTextureColorMod, - lockTexture, - queryTexture, - renderClear, - renderCopy, - renderCopyEx, - renderDrawLine, - renderDrawLines, - renderDrawPoint, - renderDrawPoints, - renderDrawRect, - renderDrawRects, - renderFillRect, - renderFillRects, - renderGetClipRect, - renderGetLogicalSize, - renderGetScale, - renderGetViewport, - renderPresent, - renderReadPixels, - renderSetClipRect, - renderSetLogicalSize, - renderSetScale, - renderSetViewport, - renderTargetSupported, - setRenderDrawBlendMode, - setRenderDrawColor, - setRenderTarget, - setTextureAlphaMod, - setTextureBlendMode, - setTextureColorMod, - unlockTexture, - updateTexture, - updateYUVTexture, - - -- * Pixel Formats and Conversion Routines - allocFormat, - allocPalette, - calculateGammaRamp, - freeFormat, - freePalette, - getPixelFormatName, - getRGB, - getRGBA, - mapRGB, - mapRGBA, - masksToPixelFormatEnum, - pixelFormatEnumToMasks, - setPaletteColors, - setPixelFormatPalette, - - -- * Rectangle Functions - enclosePoints, - hasIntersection, - intersectRect, - intersectRectAndLine, - unionRect, - - -- * Surface Creation and Simple Drawing - blitScaled, - blitSurface, - convertPixels, - convertSurface, - convertSurfaceFormat, - createRGBSurface, - createRGBSurfaceFrom, - fillRect, - fillRects, - freeSurface, - getClipRect, - getColorKey, - getSurfaceAlphaMod, - getSurfaceBlendMode, - getSurfaceColorMod, - loadBMP, - loadBMP_RW, - lockSurface, - lowerBlit, - lowerBlitScaled, - saveBMP, - saveBMP_RW, - setClipRect, - setColorKey, - setSurfaceAlphaMod, - setSurfaceBlendMode, - setSurfaceColorMod, - setSurfacePalette, - setSurfaceRLE, - unlockSurface, - - -- * Platform-specific Window Management - getWindowWMInfo, - - -- * Clipboard Handling - getClipboardText, - hasClipboardText, - setClipboardText -) where - -import Control.Monad.IO.Class -import Data.Word -import Foreign.C.String -import Foreign.C.Types -import Foreign.Ptr -import SDL.Raw.Enum -import SDL.Raw.Filesystem -import SDL.Raw.Types - -foreign import ccall "SDL.h SDL_CreateWindow" createWindowFFI :: CString -> CInt -> CInt -> CInt -> CInt -> Word32 -> IO Window -foreign import ccall "SDL.h SDL_CreateWindowAndRenderer" createWindowAndRendererFFI :: CInt -> CInt -> Word32 -> Ptr Window -> Ptr Renderer -> IO CInt -foreign import ccall "SDL.h SDL_CreateWindowFrom" createWindowFromFFI :: Ptr () -> IO Window -foreign import ccall "SDL.h SDL_DestroyWindow" destroyWindowFFI :: Window -> IO () -foreign import ccall "SDL.h SDL_DisableScreenSaver" disableScreenSaverFFI :: IO () -foreign import ccall "SDL.h SDL_EnableScreenSaver" enableScreenSaverFFI :: IO () -foreign import ccall "SDL.h SDL_GL_BindTexture" glBindTextureFFI :: Texture -> Ptr CFloat -> Ptr CFloat -> IO CInt -foreign import ccall "SDL.h SDL_GL_CreateContext" glCreateContextFFI :: Window -> IO GLContext -foreign import ccall "SDL.h SDL_GL_DeleteContext" glDeleteContextFFI :: GLContext -> IO () -foreign import ccall "SDL.h SDL_GL_ExtensionSupported" glExtensionSupportedFFI :: CString -> IO Bool -foreign import ccall "SDL.h SDL_GL_GetAttribute" glGetAttributeFFI :: GLattr -> Ptr CInt -> IO CInt -foreign import ccall "SDL.h SDL_GL_GetCurrentContext" glGetCurrentContextFFI :: IO GLContext -foreign import ccall "SDL.h SDL_GL_GetCurrentWindow" glGetCurrentWindowFFI :: IO Window -foreign import ccall "SDL.h SDL_GL_GetDrawableSize" glGetDrawableSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO () -foreign import ccall "SDL.h SDL_GL_GetProcAddress" glGetProcAddressFFI :: CString -> IO (Ptr ()) -foreign import ccall "SDL.h SDL_GL_GetSwapInterval" glGetSwapIntervalFFI :: IO CInt -foreign import ccall "SDL.h SDL_GL_LoadLibrary" glLoadLibraryFFI :: CString -> IO CInt -foreign import ccall "SDL.h SDL_GL_MakeCurrent" glMakeCurrentFFI :: Window -> GLContext -> IO CInt -foreign import ccall "SDL.h SDL_GL_ResetAttributes" glResetAttributesFFI :: IO () -foreign import ccall "SDL.h SDL_GL_SetAttribute" glSetAttributeFFI :: GLattr -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_GL_SetSwapInterval" glSetSwapIntervalFFI :: CInt -> IO CInt -foreign import ccall "SDL.h SDL_GL_SwapWindow" glSwapWindowFFI :: Window -> IO () -foreign import ccall "SDL.h SDL_GL_UnbindTexture" glUnbindTextureFFI :: Texture -> IO CInt -foreign import ccall "SDL.h SDL_GL_UnloadLibrary" glUnloadLibraryFFI :: IO () -foreign import ccall "SDL.h SDL_GetClosestDisplayMode" getClosestDisplayModeFFI :: CInt -> Ptr DisplayMode -> Ptr DisplayMode -> IO (Ptr DisplayMode) -foreign import ccall "SDL.h SDL_GetCurrentDisplayMode" getCurrentDisplayModeFFI :: CInt -> Ptr DisplayMode -> IO CInt -foreign import ccall "SDL.h SDL_GetCurrentVideoDriver" getCurrentVideoDriverFFI :: IO CString -foreign import ccall "SDL.h SDL_GetDesktopDisplayMode" getDesktopDisplayModeFFI :: CInt -> Ptr DisplayMode -> IO CInt -foreign import ccall "SDL.h SDL_GetDisplayBounds" getDisplayBoundsFFI :: CInt -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_GetDisplayMode" getDisplayModeFFI :: CInt -> CInt -> Ptr DisplayMode -> IO CInt -foreign import ccall "SDL.h SDL_GetDisplayName" getDisplayNameFFI :: CInt -> IO CString -foreign import ccall "SDL.h SDL_GetNumDisplayModes" getNumDisplayModesFFI :: CInt -> IO CInt -foreign import ccall "SDL.h SDL_GetNumVideoDisplays" getNumVideoDisplaysFFI :: IO CInt -foreign import ccall "SDL.h SDL_GetNumVideoDrivers" getNumVideoDriversFFI :: IO CInt -foreign import ccall "SDL.h SDL_GetVideoDriver" getVideoDriverFFI :: CInt -> IO CString -foreign import ccall "SDL.h SDL_GetWindowBrightness" getWindowBrightnessFFI :: Window -> IO CFloat -foreign import ccall "SDL.h SDL_GetWindowData" getWindowDataFFI :: Window -> CString -> IO (Ptr ()) -foreign import ccall "SDL.h SDL_GetWindowDisplayIndex" getWindowDisplayIndexFFI :: Window -> IO CInt -foreign import ccall "SDL.h SDL_GetWindowDisplayMode" getWindowDisplayModeFFI :: Window -> Ptr DisplayMode -> IO CInt -foreign import ccall "SDL.h SDL_GetWindowFlags" getWindowFlagsFFI :: Window -> IO Word32 -foreign import ccall "SDL.h SDL_GetWindowFromID" getWindowFromIDFFI :: Word32 -> IO Window -foreign import ccall "SDL.h SDL_GetWindowGammaRamp" getWindowGammaRampFFI :: Window -> Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> IO CInt -foreign import ccall "SDL.h SDL_GetWindowGrab" getWindowGrabFFI :: Window -> IO Bool -foreign import ccall "SDL.h SDL_GetWindowID" getWindowIDFFI :: Window -> IO Word32 -foreign import ccall "SDL.h SDL_GetWindowMaximumSize" getWindowMaximumSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO () -foreign import ccall "SDL.h SDL_GetWindowMinimumSize" getWindowMinimumSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO () -foreign import ccall "SDL.h SDL_GetWindowPixelFormat" getWindowPixelFormatFFI :: Window -> IO Word32 -foreign import ccall "SDL.h SDL_GetWindowPosition" getWindowPositionFFI :: Window -> Ptr CInt -> Ptr CInt -> IO () -foreign import ccall "SDL.h SDL_GetWindowSize" getWindowSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO () -foreign import ccall "SDL.h SDL_GetWindowSurface" getWindowSurfaceFFI :: Window -> IO (Ptr Surface) -foreign import ccall "SDL.h SDL_GetWindowTitle" getWindowTitleFFI :: Window -> IO CString -foreign import ccall "SDL.h SDL_HideWindow" hideWindowFFI :: Window -> IO () -foreign import ccall "SDL.h SDL_IsScreenSaverEnabled" isScreenSaverEnabledFFI :: IO Bool -foreign import ccall "SDL.h SDL_MaximizeWindow" maximizeWindowFFI :: Window -> IO () -foreign import ccall "SDL.h SDL_MinimizeWindow" minimizeWindowFFI :: Window -> IO () -foreign import ccall "SDL.h SDL_RaiseWindow" raiseWindowFFI :: Window -> IO () -foreign import ccall "SDL.h SDL_RestoreWindow" restoreWindowFFI :: Window -> IO () -foreign import ccall "SDL.h SDL_SetWindowBordered" setWindowBorderedFFI :: Window -> Bool -> IO () -foreign import ccall "SDL.h SDL_SetWindowBrightness" setWindowBrightnessFFI :: Window -> CFloat -> IO CInt -foreign import ccall "SDL.h SDL_SetWindowData" setWindowDataFFI :: Window -> CString -> Ptr () -> IO (Ptr ()) -foreign import ccall "SDL.h SDL_SetWindowDisplayMode" setWindowDisplayModeFFI :: Window -> Ptr DisplayMode -> IO CInt -foreign import ccall "SDL.h SDL_SetWindowFullscreen" setWindowFullscreenFFI :: Window -> Word32 -> IO CInt -foreign import ccall "SDL.h SDL_SetWindowGammaRamp" setWindowGammaRampFFI :: Window -> Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> IO CInt -foreign import ccall "SDL.h SDL_SetWindowGrab" setWindowGrabFFI :: Window -> Bool -> IO () -foreign import ccall "SDL.h SDL_SetWindowIcon" setWindowIconFFI :: Window -> Ptr Surface -> IO () -foreign import ccall "SDL.h SDL_SetWindowMaximumSize" setWindowMaximumSizeFFI :: Window -> CInt -> CInt -> IO () -foreign import ccall "SDL.h SDL_SetWindowMinimumSize" setWindowMinimumSizeFFI :: Window -> CInt -> CInt -> IO () -foreign import ccall "SDL.h SDL_SetWindowPosition" setWindowPositionFFI :: Window -> CInt -> CInt -> IO () -foreign import ccall "SDL.h SDL_SetWindowSize" setWindowSizeFFI :: Window -> CInt -> CInt -> IO () -foreign import ccall "SDL.h SDL_SetWindowTitle" setWindowTitleFFI :: Window -> CString -> IO () -foreign import ccall "SDL.h SDL_ShowMessageBox" showMessageBoxFFI :: Ptr MessageBoxData -> Ptr CInt -> IO CInt -foreign import ccall "SDL.h SDL_ShowSimpleMessageBox" showSimpleMessageBoxFFI :: Word32 -> CString -> CString -> Window -> IO CInt -foreign import ccall "SDL.h SDL_ShowWindow" showWindowFFI :: Window -> IO () -foreign import ccall "SDL.h SDL_UpdateWindowSurface" updateWindowSurfaceFFI :: Window -> IO CInt -foreign import ccall "SDL.h SDL_UpdateWindowSurfaceRects" updateWindowSurfaceRectsFFI :: Window -> Ptr Rect -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_VideoInit" videoInitFFI :: CString -> IO CInt -foreign import ccall "SDL.h SDL_VideoQuit" videoQuitFFI :: IO () - -foreign import ccall "SDL.h SDL_CreateRenderer" createRendererFFI :: Window -> CInt -> Word32 -> IO Renderer -foreign import ccall "SDL.h SDL_CreateSoftwareRenderer" createSoftwareRendererFFI :: Ptr Surface -> IO Renderer -foreign import ccall "SDL.h SDL_CreateTexture" createTextureFFI :: Renderer -> Word32 -> CInt -> CInt -> CInt -> IO Texture -foreign import ccall "SDL.h SDL_CreateTextureFromSurface" createTextureFromSurfaceFFI :: Renderer -> Ptr Surface -> IO Texture -foreign import ccall "SDL.h SDL_DestroyRenderer" destroyRendererFFI :: Renderer -> IO () -foreign import ccall "SDL.h SDL_DestroyTexture" destroyTextureFFI :: Texture -> IO () -foreign import ccall "SDL.h SDL_GetNumRenderDrivers" getNumRenderDriversFFI :: IO CInt -foreign import ccall "SDL.h SDL_GetRenderDrawBlendMode" getRenderDrawBlendModeFFI :: Renderer -> Ptr BlendMode -> IO Int -foreign import ccall "SDL.h SDL_GetRenderDrawColor" getRenderDrawColorFFI :: Renderer -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO CInt -foreign import ccall "SDL.h SDL_GetRenderDriverInfo" getRenderDriverInfoFFI :: CInt -> Ptr RendererInfo -> IO CInt -foreign import ccall "SDL.h SDL_GetRenderTarget" getRenderTargetFFI :: Renderer -> IO Texture -foreign import ccall "SDL.h SDL_GetRenderer" getRendererFFI :: Window -> IO Renderer -foreign import ccall "SDL.h SDL_GetRendererInfo" getRendererInfoFFI :: Renderer -> Ptr RendererInfo -> IO CInt -foreign import ccall "SDL.h SDL_GetRendererOutputSize" getRendererOutputSizeFFI :: Renderer -> Ptr CInt -> Ptr CInt -> IO CInt -foreign import ccall "SDL.h SDL_GetTextureAlphaMod" getTextureAlphaModFFI :: Texture -> Ptr Word8 -> IO CInt -foreign import ccall "SDL.h SDL_GetTextureBlendMode" getTextureBlendModeFFI :: Texture -> Ptr BlendMode -> IO CInt -foreign import ccall "SDL.h SDL_GetTextureColorMod" getTextureColorModFFI :: Texture -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO CInt -foreign import ccall "SDL.h SDL_LockTexture" lockTextureFFI :: Texture -> Ptr Rect -> Ptr (Ptr ()) -> Ptr CInt -> IO CInt -foreign import ccall "SDL.h SDL_QueryTexture" queryTextureFFI :: Texture -> Ptr Word32 -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO CInt -foreign import ccall "SDL.h SDL_RenderClear" renderClearFFI :: Renderer -> IO CInt -foreign import ccall "SDL.h SDL_RenderCopy" renderCopyFFI :: Renderer -> Texture -> Ptr Rect -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_RenderCopyEx" renderCopyExFFI :: Renderer -> Texture -> Ptr Rect -> Ptr Rect -> CDouble -> Ptr Point -> RendererFlip -> IO CInt -foreign import ccall "SDL.h SDL_RenderDrawLine" renderDrawLineFFI :: Renderer -> CInt -> CInt -> CInt -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_RenderDrawLines" renderDrawLinesFFI :: Renderer -> Ptr Point -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_RenderDrawPoint" renderDrawPointFFI :: Renderer -> CInt -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_RenderDrawPoints" renderDrawPointsFFI :: Renderer -> Ptr Point -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_RenderDrawRect" renderDrawRectFFI :: Renderer -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_RenderDrawRects" renderDrawRectsFFI :: Renderer -> Ptr Rect -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_RenderFillRect" renderFillRectFFI :: Renderer -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_RenderFillRects" renderFillRectsFFI :: Renderer -> Ptr Rect -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_RenderGetClipRect" renderGetClipRectFFI :: Renderer -> Ptr Rect -> IO () -foreign import ccall "SDL.h SDL_RenderGetLogicalSize" renderGetLogicalSizeFFI :: Renderer -> Ptr CInt -> Ptr CInt -> IO () -foreign import ccall "SDL.h SDL_RenderGetScale" renderGetScaleFFI :: Renderer -> Ptr CFloat -> Ptr CFloat -> IO () -foreign import ccall "SDL.h SDL_RenderGetViewport" renderGetViewportFFI :: Renderer -> Ptr Rect -> IO () -foreign import ccall "SDL.h SDL_RenderPresent" renderPresentFFI :: Renderer -> IO () -foreign import ccall "SDL.h SDL_RenderReadPixels" renderReadPixelsFFI :: Renderer -> Ptr Rect -> Word32 -> Ptr () -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_RenderSetClipRect" renderSetClipRectFFI :: Renderer -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_RenderSetLogicalSize" renderSetLogicalSizeFFI :: Renderer -> CInt -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_RenderSetScale" renderSetScaleFFI :: Renderer -> CFloat -> CFloat -> IO CInt -foreign import ccall "SDL.h SDL_RenderSetViewport" renderSetViewportFFI :: Renderer -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_RenderTargetSupported" renderTargetSupportedFFI :: Renderer -> IO Bool -foreign import ccall "SDL.h SDL_SetRenderDrawBlendMode" setRenderDrawBlendModeFFI :: Renderer -> BlendMode -> IO CInt -foreign import ccall "SDL.h SDL_SetRenderDrawColor" setRenderDrawColorFFI :: Renderer -> Word8 -> Word8 -> Word8 -> Word8 -> IO CInt -foreign import ccall "SDL.h SDL_SetRenderTarget" setRenderTargetFFI :: Renderer -> Texture -> IO CInt -foreign import ccall "SDL.h SDL_SetTextureAlphaMod" setTextureAlphaModFFI :: Texture -> Word8 -> IO CInt -foreign import ccall "SDL.h SDL_SetTextureBlendMode" setTextureBlendModeFFI :: Texture -> BlendMode -> IO CInt -foreign import ccall "SDL.h SDL_SetTextureColorMod" setTextureColorModFFI :: Texture -> Word8 -> Word8 -> Word8 -> IO CInt -foreign import ccall "SDL.h SDL_UnlockTexture" unlockTextureFFI :: Texture -> IO () -foreign import ccall "SDL.h SDL_UpdateTexture" updateTextureFFI :: Texture -> Ptr Rect -> Ptr () -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_UpdateYUVTexture" updateYUVTextureFFI :: Texture -> Ptr Rect -> Ptr Word8 -> CInt -> Ptr Word8 -> CInt -> Ptr Word8 -> CInt -> IO CInt - -foreign import ccall "SDL.h SDL_AllocFormat" allocFormatFFI :: Word32 -> IO (Ptr PixelFormat) -foreign import ccall "SDL.h SDL_AllocPalette" allocPaletteFFI :: CInt -> IO (Ptr Palette) -foreign import ccall "SDL.h SDL_CalculateGammaRamp" calculateGammaRampFFI :: CFloat -> Ptr Word16 -> IO () -foreign import ccall "SDL.h SDL_FreeFormat" freeFormatFFI :: Ptr PixelFormat -> IO () -foreign import ccall "SDL.h SDL_FreePalette" freePaletteFFI :: Ptr Palette -> IO () -foreign import ccall "SDL.h SDL_GetPixelFormatName" getPixelFormatNameFFI :: Word32 -> IO CString -foreign import ccall "SDL.h SDL_GetRGB" getRGBFFI :: Word32 -> Ptr PixelFormat -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO () -foreign import ccall "SDL.h SDL_GetRGBA" getRGBAFFI :: Word32 -> Ptr PixelFormat -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO () -foreign import ccall "SDL.h SDL_MapRGB" mapRGBFFI :: Ptr PixelFormat -> Word8 -> Word8 -> Word8 -> IO Word32 -foreign import ccall "SDL.h SDL_MapRGBA" mapRGBAFFI :: Ptr PixelFormat -> Word8 -> Word8 -> Word8 -> Word8 -> IO Word32 -foreign import ccall "SDL.h SDL_MasksToPixelFormatEnum" masksToPixelFormatEnumFFI :: CInt -> Word32 -> Word32 -> Word32 -> Word32 -> IO Word32 -foreign import ccall "SDL.h SDL_PixelFormatEnumToMasks" pixelFormatEnumToMasksFFI :: Word32 -> Ptr CInt -> Ptr Word32 -> Ptr Word32 -> Ptr Word32 -> Ptr Word32 -> IO Bool -foreign import ccall "SDL.h SDL_SetPaletteColors" setPaletteColorsFFI :: Ptr Palette -> Ptr Color -> CInt -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_SetPixelFormatPalette" setPixelFormatPaletteFFI :: Ptr PixelFormat -> Ptr Palette -> IO CInt - -foreign import ccall "SDL.h SDL_EnclosePoints" enclosePointsFFI :: Ptr Point -> CInt -> Ptr Rect -> Ptr Rect -> IO Bool -foreign import ccall "SDL.h SDL_HasIntersection" hasIntersectionFFI :: Ptr Rect -> Ptr Rect -> IO Bool -foreign import ccall "SDL.h SDL_IntersectRect" intersectRectFFI :: Ptr Rect -> Ptr Rect -> Ptr Rect -> IO Bool -foreign import ccall "SDL.h SDL_IntersectRectAndLine" intersectRectAndLineFFI :: Ptr Rect -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO Bool -foreign import ccall "SDL.h SDL_UnionRect" unionRectFFI :: Ptr Rect -> Ptr Rect -> Ptr Rect -> IO () - -foreign import ccall "SDL.h SDL_UpperBlitScaled" blitScaledFFI :: Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_UpperBlit" blitSurfaceFFI :: Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_ConvertPixels" convertPixelsFFI :: CInt -> CInt -> Word32 -> Ptr () -> CInt -> Word32 -> Ptr () -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_ConvertSurface" convertSurfaceFFI :: Ptr Surface -> Ptr PixelFormat -> Word32 -> IO (Ptr Surface) -foreign import ccall "SDL.h SDL_ConvertSurfaceFormat" convertSurfaceFormatFFI :: Ptr Surface -> Word32 -> Word32 -> IO (Ptr Surface) -foreign import ccall "SDL.h SDL_CreateRGBSurface" createRGBSurfaceFFI :: Word32 -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Ptr Surface) -foreign import ccall "SDL.h SDL_CreateRGBSurfaceFrom" createRGBSurfaceFromFFI :: Ptr () -> CInt -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Ptr Surface) -foreign import ccall "SDL.h SDL_FillRect" fillRectFFI :: Ptr Surface -> Ptr Rect -> Word32 -> IO CInt -foreign import ccall "SDL.h SDL_FillRects" fillRectsFFI :: Ptr Surface -> Ptr Rect -> CInt -> Word32 -> IO CInt -foreign import ccall "SDL.h SDL_FreeSurface" freeSurfaceFFI :: Ptr Surface -> IO () -foreign import ccall "SDL.h SDL_GetClipRect" getClipRectFFI :: Ptr Surface -> Ptr Rect -> IO () -foreign import ccall "SDL.h SDL_GetColorKey" getColorKeyFFI :: Ptr Surface -> Ptr Word32 -> IO CInt -foreign import ccall "SDL.h SDL_GetSurfaceAlphaMod" getSurfaceAlphaModFFI :: Ptr Surface -> Ptr Word8 -> IO CInt -foreign import ccall "SDL.h SDL_GetSurfaceBlendMode" getSurfaceBlendModeFFI :: Ptr Surface -> Ptr BlendMode -> IO CInt -foreign import ccall "SDL.h SDL_GetSurfaceColorMod" getSurfaceColorModFFI :: Ptr Surface -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO CInt -foreign import ccall "SDL.h SDL_LoadBMP_RW" loadBMP_RWFFI :: Ptr RWops -> CInt -> IO (Ptr Surface) -foreign import ccall "SDL.h SDL_LockSurface" lockSurfaceFFI :: Ptr Surface -> IO CInt -foreign import ccall "SDL.h SDL_LowerBlit" lowerBlitFFI :: Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_LowerBlitScaled" lowerBlitScaledFFI :: Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> IO CInt -foreign import ccall "SDL.h SDL_SaveBMP_RW" saveBMP_RWFFI :: Ptr Surface -> Ptr RWops -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_SetClipRect" setClipRectFFI :: Ptr Surface -> Ptr Rect -> IO Bool -foreign import ccall "SDL.h SDL_SetColorKey" setColorKeyFFI :: Ptr Surface -> CInt -> Word32 -> IO CInt -foreign import ccall "SDL.h SDL_SetSurfaceAlphaMod" setSurfaceAlphaModFFI :: Ptr Surface -> Word8 -> IO CInt -foreign import ccall "SDL.h SDL_SetSurfaceBlendMode" setSurfaceBlendModeFFI :: Ptr Surface -> BlendMode -> IO CInt -foreign import ccall "SDL.h SDL_SetSurfaceColorMod" setSurfaceColorModFFI :: Ptr Surface -> Word8 -> Word8 -> Word8 -> IO CInt -foreign import ccall "SDL.h SDL_SetSurfacePalette" setSurfacePaletteFFI :: Ptr Surface -> Ptr Palette -> IO CInt -foreign import ccall "SDL.h SDL_SetSurfaceRLE" setSurfaceRLEFFI :: Ptr Surface -> CInt -> IO CInt -foreign import ccall "SDL.h SDL_UnlockSurface" unlockSurfaceFFI :: Ptr Surface -> IO () - -foreign import ccall "SDL.h SDL_GetWindowWMInfo" getWindowWMInfoFFI :: Window -> SysWMinfo -> IO Bool - -foreign import ccall "SDL.h SDL_GetClipboardText" getClipboardTextFFI :: IO CString -foreign import ccall "SDL.h SDL_HasClipboardText" hasClipboardTextFFI :: IO Bool -foreign import ccall "SDL.h SDL_SetClipboardText" setClipboardTextFFI :: CString -> IO CInt - -createWindow :: MonadIO m => CString -> CInt -> CInt -> CInt -> CInt -> Word32 -> m Window -createWindow v1 v2 v3 v4 v5 v6 = liftIO $ createWindowFFI v1 v2 v3 v4 v5 v6 -{-# INLINE createWindow #-} - -createWindowAndRenderer :: MonadIO m => CInt -> CInt -> Word32 -> Ptr Window -> Ptr Renderer -> m CInt -createWindowAndRenderer v1 v2 v3 v4 v5 = liftIO $ createWindowAndRendererFFI v1 v2 v3 v4 v5 -{-# INLINE createWindowAndRenderer #-} - -createWindowFrom :: MonadIO m => Ptr () -> m Window -createWindowFrom v1 = liftIO $ createWindowFromFFI v1 -{-# INLINE createWindowFrom #-} - -destroyWindow :: MonadIO m => Window -> m () -destroyWindow v1 = liftIO $ destroyWindowFFI v1 -{-# INLINE destroyWindow #-} - -disableScreenSaver :: MonadIO m => m () -disableScreenSaver = liftIO disableScreenSaverFFI -{-# INLINE disableScreenSaver #-} - -enableScreenSaver :: MonadIO m => m () -enableScreenSaver = liftIO enableScreenSaverFFI -{-# INLINE enableScreenSaver #-} - -glBindTexture :: MonadIO m => Texture -> Ptr CFloat -> Ptr CFloat -> m CInt -glBindTexture v1 v2 v3 = liftIO $ glBindTextureFFI v1 v2 v3 -{-# INLINE glBindTexture #-} - -glCreateContext :: MonadIO m => Window -> m GLContext -glCreateContext v1 = liftIO $ glCreateContextFFI v1 -{-# INLINE glCreateContext #-} - -glDeleteContext :: MonadIO m => GLContext -> m () -glDeleteContext v1 = liftIO $ glDeleteContextFFI v1 -{-# INLINE glDeleteContext #-} - -glExtensionSupported :: MonadIO m => CString -> m Bool -glExtensionSupported v1 = liftIO $ glExtensionSupportedFFI v1 -{-# INLINE glExtensionSupported #-} - -glGetAttribute :: MonadIO m => GLattr -> Ptr CInt -> m CInt -glGetAttribute v1 v2 = liftIO $ glGetAttributeFFI v1 v2 -{-# INLINE glGetAttribute #-} - -glGetCurrentContext :: MonadIO m => m GLContext -glGetCurrentContext = liftIO glGetCurrentContextFFI -{-# INLINE glGetCurrentContext #-} - -glGetCurrentWindow :: MonadIO m => m Window -glGetCurrentWindow = liftIO glGetCurrentWindowFFI -{-# INLINE glGetCurrentWindow #-} - -glGetDrawableSize :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m () -glGetDrawableSize v1 v2 v3 = liftIO $ glGetDrawableSizeFFI v1 v2 v3 -{-# INLINE glGetDrawableSize #-} - -glGetProcAddress :: MonadIO m => CString -> m (Ptr ()) -glGetProcAddress v1 = liftIO $ glGetProcAddressFFI v1 -{-# INLINE glGetProcAddress #-} - -glGetSwapInterval :: MonadIO m => m CInt -glGetSwapInterval = liftIO glGetSwapIntervalFFI -{-# INLINE glGetSwapInterval #-} - -glLoadLibrary :: MonadIO m => CString -> m CInt -glLoadLibrary v1 = liftIO $ glLoadLibraryFFI v1 -{-# INLINE glLoadLibrary #-} - -glMakeCurrent :: MonadIO m => Window -> GLContext -> m CInt -glMakeCurrent v1 v2 = liftIO $ glMakeCurrentFFI v1 v2 -{-# INLINE glMakeCurrent #-} - -glResetAttributes :: MonadIO m => m () -glResetAttributes = liftIO glResetAttributesFFI -{-# INLINE glResetAttributes #-} - -glSetAttribute :: MonadIO m => GLattr -> CInt -> m CInt -glSetAttribute v1 v2 = liftIO $ glSetAttributeFFI v1 v2 -{-# INLINE glSetAttribute #-} - -glSetSwapInterval :: MonadIO m => CInt -> m CInt -glSetSwapInterval v1 = liftIO $ glSetSwapIntervalFFI v1 -{-# INLINE glSetSwapInterval #-} - -glSwapWindow :: MonadIO m => Window -> m () -glSwapWindow v1 = liftIO $ glSwapWindowFFI v1 -{-# INLINE glSwapWindow #-} - -glUnbindTexture :: MonadIO m => Texture -> m CInt -glUnbindTexture v1 = liftIO $ glUnbindTextureFFI v1 -{-# INLINE glUnbindTexture #-} - -glUnloadLibrary :: MonadIO m => m () -glUnloadLibrary = liftIO glUnloadLibraryFFI -{-# INLINE glUnloadLibrary #-} - -getClosestDisplayMode :: MonadIO m => CInt -> Ptr DisplayMode -> Ptr DisplayMode -> m (Ptr DisplayMode) -getClosestDisplayMode v1 v2 v3 = liftIO $ getClosestDisplayModeFFI v1 v2 v3 -{-# INLINE getClosestDisplayMode #-} - -getCurrentDisplayMode :: MonadIO m => CInt -> Ptr DisplayMode -> m CInt -getCurrentDisplayMode v1 v2 = liftIO $ getCurrentDisplayModeFFI v1 v2 -{-# INLINE getCurrentDisplayMode #-} - -getCurrentVideoDriver :: MonadIO m => m CString -getCurrentVideoDriver = liftIO getCurrentVideoDriverFFI -{-# INLINE getCurrentVideoDriver #-} - -getDesktopDisplayMode :: MonadIO m => CInt -> Ptr DisplayMode -> m CInt -getDesktopDisplayMode v1 v2 = liftIO $ getDesktopDisplayModeFFI v1 v2 -{-# INLINE getDesktopDisplayMode #-} - -getDisplayBounds :: MonadIO m => CInt -> Ptr Rect -> m CInt -getDisplayBounds v1 v2 = liftIO $ getDisplayBoundsFFI v1 v2 -{-# INLINE getDisplayBounds #-} - -getDisplayMode :: MonadIO m => CInt -> CInt -> Ptr DisplayMode -> m CInt -getDisplayMode v1 v2 v3 = liftIO $ getDisplayModeFFI v1 v2 v3 -{-# INLINE getDisplayMode #-} - -getDisplayName :: MonadIO m => CInt -> m CString -getDisplayName v1 = liftIO $ getDisplayNameFFI v1 -{-# INLINE getDisplayName #-} - -getNumDisplayModes :: MonadIO m => CInt -> m CInt -getNumDisplayModes v1 = liftIO $ getNumDisplayModesFFI v1 -{-# INLINE getNumDisplayModes #-} - -getNumVideoDisplays :: MonadIO m => m CInt -getNumVideoDisplays = liftIO getNumVideoDisplaysFFI -{-# INLINE getNumVideoDisplays #-} - -getNumVideoDrivers :: MonadIO m => m CInt -getNumVideoDrivers = liftIO getNumVideoDriversFFI -{-# INLINE getNumVideoDrivers #-} - -getVideoDriver :: MonadIO m => CInt -> m CString -getVideoDriver v1 = liftIO $ getVideoDriverFFI v1 -{-# INLINE getVideoDriver #-} - -getWindowBrightness :: MonadIO m => Window -> m CFloat -getWindowBrightness v1 = liftIO $ getWindowBrightnessFFI v1 -{-# INLINE getWindowBrightness #-} - -getWindowData :: MonadIO m => Window -> CString -> m (Ptr ()) -getWindowData v1 v2 = liftIO $ getWindowDataFFI v1 v2 -{-# INLINE getWindowData #-} - -getWindowDisplayIndex :: MonadIO m => Window -> m CInt -getWindowDisplayIndex v1 = liftIO $ getWindowDisplayIndexFFI v1 -{-# INLINE getWindowDisplayIndex #-} - -getWindowDisplayMode :: MonadIO m => Window -> Ptr DisplayMode -> m CInt -getWindowDisplayMode v1 v2 = liftIO $ getWindowDisplayModeFFI v1 v2 -{-# INLINE getWindowDisplayMode #-} - -getWindowFlags :: MonadIO m => Window -> m Word32 -getWindowFlags v1 = liftIO $ getWindowFlagsFFI v1 -{-# INLINE getWindowFlags #-} - -getWindowFromID :: MonadIO m => Word32 -> m Window -getWindowFromID v1 = liftIO $ getWindowFromIDFFI v1 -{-# INLINE getWindowFromID #-} - -getWindowGammaRamp :: MonadIO m => Window -> Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> m CInt -getWindowGammaRamp v1 v2 v3 v4 = liftIO $ getWindowGammaRampFFI v1 v2 v3 v4 -{-# INLINE getWindowGammaRamp #-} - -getWindowGrab :: MonadIO m => Window -> m Bool -getWindowGrab v1 = liftIO $ getWindowGrabFFI v1 -{-# INLINE getWindowGrab #-} - -getWindowID :: MonadIO m => Window -> m Word32 -getWindowID v1 = liftIO $ getWindowIDFFI v1 -{-# INLINE getWindowID #-} - -getWindowMaximumSize :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m () -getWindowMaximumSize v1 v2 v3 = liftIO $ getWindowMaximumSizeFFI v1 v2 v3 -{-# INLINE getWindowMaximumSize #-} - -getWindowMinimumSize :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m () -getWindowMinimumSize v1 v2 v3 = liftIO $ getWindowMinimumSizeFFI v1 v2 v3 -{-# INLINE getWindowMinimumSize #-} - -getWindowPixelFormat :: MonadIO m => Window -> m Word32 -getWindowPixelFormat v1 = liftIO $ getWindowPixelFormatFFI v1 -{-# INLINE getWindowPixelFormat #-} - -getWindowPosition :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m () -getWindowPosition v1 v2 v3 = liftIO $ getWindowPositionFFI v1 v2 v3 -{-# INLINE getWindowPosition #-} - -getWindowSize :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m () -getWindowSize v1 v2 v3 = liftIO $ getWindowSizeFFI v1 v2 v3 -{-# INLINE getWindowSize #-} - -getWindowSurface :: MonadIO m => Window -> m (Ptr Surface) -getWindowSurface v1 = liftIO $ getWindowSurfaceFFI v1 -{-# INLINE getWindowSurface #-} - -getWindowTitle :: MonadIO m => Window -> m CString -getWindowTitle v1 = liftIO $ getWindowTitleFFI v1 -{-# INLINE getWindowTitle #-} - -hideWindow :: MonadIO m => Window -> m () -hideWindow v1 = liftIO $ hideWindowFFI v1 -{-# INLINE hideWindow #-} - -isScreenSaverEnabled :: MonadIO m => m Bool -isScreenSaverEnabled = liftIO isScreenSaverEnabledFFI -{-# INLINE isScreenSaverEnabled #-} - -maximizeWindow :: MonadIO m => Window -> m () -maximizeWindow v1 = liftIO $ maximizeWindowFFI v1 -{-# INLINE maximizeWindow #-} - -minimizeWindow :: MonadIO m => Window -> m () -minimizeWindow v1 = liftIO $ minimizeWindowFFI v1 -{-# INLINE minimizeWindow #-} - -raiseWindow :: MonadIO m => Window -> m () -raiseWindow v1 = liftIO $ raiseWindowFFI v1 -{-# INLINE raiseWindow #-} - -restoreWindow :: MonadIO m => Window -> m () -restoreWindow v1 = liftIO $ restoreWindowFFI v1 -{-# INLINE restoreWindow #-} - -setWindowBordered :: MonadIO m => Window -> Bool -> m () -setWindowBordered v1 v2 = liftIO $ setWindowBorderedFFI v1 v2 -{-# INLINE setWindowBordered #-} - -setWindowBrightness :: MonadIO m => Window -> CFloat -> m CInt -setWindowBrightness v1 v2 = liftIO $ setWindowBrightnessFFI v1 v2 -{-# INLINE setWindowBrightness #-} - -setWindowData :: MonadIO m => Window -> CString -> Ptr () -> m (Ptr ()) -setWindowData v1 v2 v3 = liftIO $ setWindowDataFFI v1 v2 v3 -{-# INLINE setWindowData #-} - -setWindowDisplayMode :: MonadIO m => Window -> Ptr DisplayMode -> m CInt -setWindowDisplayMode v1 v2 = liftIO $ setWindowDisplayModeFFI v1 v2 -{-# INLINE setWindowDisplayMode #-} - -setWindowFullscreen :: MonadIO m => Window -> Word32 -> m CInt -setWindowFullscreen v1 v2 = liftIO $ setWindowFullscreenFFI v1 v2 -{-# INLINE setWindowFullscreen #-} - -setWindowGammaRamp :: MonadIO m => Window -> Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> m CInt -setWindowGammaRamp v1 v2 v3 v4 = liftIO $ setWindowGammaRampFFI v1 v2 v3 v4 -{-# INLINE setWindowGammaRamp #-} - -setWindowGrab :: MonadIO m => Window -> Bool -> m () -setWindowGrab v1 v2 = liftIO $ setWindowGrabFFI v1 v2 -{-# INLINE setWindowGrab #-} - -setWindowIcon :: MonadIO m => Window -> Ptr Surface -> m () -setWindowIcon v1 v2 = liftIO $ setWindowIconFFI v1 v2 -{-# INLINE setWindowIcon #-} - -setWindowMaximumSize :: MonadIO m => Window -> CInt -> CInt -> m () -setWindowMaximumSize v1 v2 v3 = liftIO $ setWindowMaximumSizeFFI v1 v2 v3 -{-# INLINE setWindowMaximumSize #-} - -setWindowMinimumSize :: MonadIO m => Window -> CInt -> CInt -> m () -setWindowMinimumSize v1 v2 v3 = liftIO $ setWindowMinimumSizeFFI v1 v2 v3 -{-# INLINE setWindowMinimumSize #-} - -setWindowPosition :: MonadIO m => Window -> CInt -> CInt -> m () -setWindowPosition v1 v2 v3 = liftIO $ setWindowPositionFFI v1 v2 v3 -{-# INLINE setWindowPosition #-} - -setWindowSize :: MonadIO m => Window -> CInt -> CInt -> m () -setWindowSize v1 v2 v3 = liftIO $ setWindowSizeFFI v1 v2 v3 -{-# INLINE setWindowSize #-} - -setWindowTitle :: MonadIO m => Window -> CString -> m () -setWindowTitle v1 v2 = liftIO $ setWindowTitleFFI v1 v2 -{-# INLINE setWindowTitle #-} - -showMessageBox :: MonadIO m => Ptr MessageBoxData -> Ptr CInt -> m CInt -showMessageBox v1 v2 = liftIO $ showMessageBoxFFI v1 v2 -{-# INLINE showMessageBox #-} - -showSimpleMessageBox :: MonadIO m => Word32 -> CString -> CString -> Window -> m CInt -showSimpleMessageBox v1 v2 v3 v4 = liftIO $ showSimpleMessageBoxFFI v1 v2 v3 v4 -{-# INLINE showSimpleMessageBox #-} - -showWindow :: MonadIO m => Window -> m () -showWindow v1 = liftIO $ showWindowFFI v1 -{-# INLINE showWindow #-} - -updateWindowSurface :: MonadIO m => Window -> m CInt -updateWindowSurface v1 = liftIO $ updateWindowSurfaceFFI v1 -{-# INLINE updateWindowSurface #-} - -updateWindowSurfaceRects :: MonadIO m => Window -> Ptr Rect -> CInt -> m CInt -updateWindowSurfaceRects v1 v2 v3 = liftIO $ updateWindowSurfaceRectsFFI v1 v2 v3 -{-# INLINE updateWindowSurfaceRects #-} - -videoInit :: MonadIO m => CString -> m CInt -videoInit v1 = liftIO $ videoInitFFI v1 -{-# INLINE videoInit #-} - -videoQuit :: MonadIO m => m () -videoQuit = liftIO videoQuitFFI -{-# INLINE videoQuit #-} - -createRenderer :: MonadIO m => Window -> CInt -> Word32 -> m Renderer -createRenderer v1 v2 v3 = liftIO $ createRendererFFI v1 v2 v3 -{-# INLINE createRenderer #-} - -createSoftwareRenderer :: MonadIO m => Ptr Surface -> m Renderer -createSoftwareRenderer v1 = liftIO $ createSoftwareRendererFFI v1 -{-# INLINE createSoftwareRenderer #-} - -createTexture :: MonadIO m => Renderer -> Word32 -> CInt -> CInt -> CInt -> m Texture -createTexture v1 v2 v3 v4 v5 = liftIO $ createTextureFFI v1 v2 v3 v4 v5 -{-# INLINE createTexture #-} - -createTextureFromSurface :: MonadIO m => Renderer -> Ptr Surface -> m Texture -createTextureFromSurface v1 v2 = liftIO $ createTextureFromSurfaceFFI v1 v2 -{-# INLINE createTextureFromSurface #-} - -destroyRenderer :: MonadIO m => Renderer -> m () -destroyRenderer v1 = liftIO $ destroyRendererFFI v1 -{-# INLINE destroyRenderer #-} - -destroyTexture :: MonadIO m => Texture -> m () -destroyTexture v1 = liftIO $ destroyTextureFFI v1 -{-# INLINE destroyTexture #-} - -getNumRenderDrivers :: MonadIO m => m CInt -getNumRenderDrivers = liftIO getNumRenderDriversFFI -{-# INLINE getNumRenderDrivers #-} - -getRenderDrawBlendMode :: MonadIO m => Renderer -> Ptr BlendMode -> m Int -getRenderDrawBlendMode v1 v2 = liftIO $ getRenderDrawBlendModeFFI v1 v2 -{-# INLINE getRenderDrawBlendMode #-} - -getRenderDrawColor :: MonadIO m => Renderer -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m CInt -getRenderDrawColor v1 v2 v3 v4 v5 = liftIO $ getRenderDrawColorFFI v1 v2 v3 v4 v5 -{-# INLINE getRenderDrawColor #-} - -getRenderDriverInfo :: MonadIO m => CInt -> Ptr RendererInfo -> m CInt -getRenderDriverInfo v1 v2 = liftIO $ getRenderDriverInfoFFI v1 v2 -{-# INLINE getRenderDriverInfo #-} - -getRenderTarget :: MonadIO m => Renderer -> m Texture -getRenderTarget v1 = liftIO $ getRenderTargetFFI v1 -{-# INLINE getRenderTarget #-} - -getRenderer :: MonadIO m => Window -> m Renderer -getRenderer v1 = liftIO $ getRendererFFI v1 -{-# INLINE getRenderer #-} - -getRendererInfo :: MonadIO m => Renderer -> Ptr RendererInfo -> m CInt -getRendererInfo v1 v2 = liftIO $ getRendererInfoFFI v1 v2 -{-# INLINE getRendererInfo #-} - -getRendererOutputSize :: MonadIO m => Renderer -> Ptr CInt -> Ptr CInt -> m CInt -getRendererOutputSize v1 v2 v3 = liftIO $ getRendererOutputSizeFFI v1 v2 v3 -{-# INLINE getRendererOutputSize #-} - -getTextureAlphaMod :: MonadIO m => Texture -> Ptr Word8 -> m CInt -getTextureAlphaMod v1 v2 = liftIO $ getTextureAlphaModFFI v1 v2 -{-# INLINE getTextureAlphaMod #-} - -getTextureBlendMode :: MonadIO m => Texture -> Ptr BlendMode -> m CInt -getTextureBlendMode v1 v2 = liftIO $ getTextureBlendModeFFI v1 v2 -{-# INLINE getTextureBlendMode #-} - -getTextureColorMod :: MonadIO m => Texture -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m CInt -getTextureColorMod v1 v2 v3 v4 = liftIO $ getTextureColorModFFI v1 v2 v3 v4 -{-# INLINE getTextureColorMod #-} - -lockTexture :: MonadIO m => Texture -> Ptr Rect -> Ptr (Ptr ()) -> Ptr CInt -> m CInt -lockTexture v1 v2 v3 v4 = liftIO $ lockTextureFFI v1 v2 v3 v4 -{-# INLINE lockTexture #-} - -queryTexture :: MonadIO m => Texture -> Ptr Word32 -> Ptr CInt -> Ptr CInt -> Ptr CInt -> m CInt -queryTexture v1 v2 v3 v4 v5 = liftIO $ queryTextureFFI v1 v2 v3 v4 v5 -{-# INLINE queryTexture #-} - -renderClear :: MonadIO m => Renderer -> m CInt -renderClear v1 = liftIO $ renderClearFFI v1 -{-# INLINE renderClear #-} - -renderCopy :: MonadIO m => Renderer -> Texture -> Ptr Rect -> Ptr Rect -> m CInt -renderCopy v1 v2 v3 v4 = liftIO $ renderCopyFFI v1 v2 v3 v4 -{-# INLINE renderCopy #-} - -renderCopyEx :: MonadIO m => Renderer -> Texture -> Ptr Rect -> Ptr Rect -> CDouble -> Ptr Point -> RendererFlip -> m CInt -renderCopyEx v1 v2 v3 v4 v5 v6 v7 = liftIO $ renderCopyExFFI v1 v2 v3 v4 v5 v6 v7 -{-# INLINE renderCopyEx #-} - -renderDrawLine :: MonadIO m => Renderer -> CInt -> CInt -> CInt -> CInt -> m CInt -renderDrawLine v1 v2 v3 v4 v5 = liftIO $ renderDrawLineFFI v1 v2 v3 v4 v5 -{-# INLINE renderDrawLine #-} - -renderDrawLines :: MonadIO m => Renderer -> Ptr Point -> CInt -> m CInt -renderDrawLines v1 v2 v3 = liftIO $ renderDrawLinesFFI v1 v2 v3 -{-# INLINE renderDrawLines #-} - -renderDrawPoint :: MonadIO m => Renderer -> CInt -> CInt -> m CInt -renderDrawPoint v1 v2 v3 = liftIO $ renderDrawPointFFI v1 v2 v3 -{-# INLINE renderDrawPoint #-} - -renderDrawPoints :: MonadIO m => Renderer -> Ptr Point -> CInt -> m CInt -renderDrawPoints v1 v2 v3 = liftIO $ renderDrawPointsFFI v1 v2 v3 -{-# INLINE renderDrawPoints #-} - -renderDrawRect :: MonadIO m => Renderer -> Ptr Rect -> m CInt -renderDrawRect v1 v2 = liftIO $ renderDrawRectFFI v1 v2 -{-# INLINE renderDrawRect #-} - -renderDrawRects :: MonadIO m => Renderer -> Ptr Rect -> CInt -> m CInt -renderDrawRects v1 v2 v3 = liftIO $ renderDrawRectsFFI v1 v2 v3 -{-# INLINE renderDrawRects #-} - -renderFillRect :: MonadIO m => Renderer -> Ptr Rect -> m CInt -renderFillRect v1 v2 = liftIO $ renderFillRectFFI v1 v2 -{-# INLINE renderFillRect #-} - -renderFillRects :: MonadIO m => Renderer -> Ptr Rect -> CInt -> m CInt -renderFillRects v1 v2 v3 = liftIO $ renderFillRectsFFI v1 v2 v3 -{-# INLINE renderFillRects #-} - -renderGetClipRect :: MonadIO m => Renderer -> Ptr Rect -> m () -renderGetClipRect v1 v2 = liftIO $ renderGetClipRectFFI v1 v2 -{-# INLINE renderGetClipRect #-} - -renderGetLogicalSize :: MonadIO m => Renderer -> Ptr CInt -> Ptr CInt -> m () -renderGetLogicalSize v1 v2 v3 = liftIO $ renderGetLogicalSizeFFI v1 v2 v3 -{-# INLINE renderGetLogicalSize #-} - -renderGetScale :: MonadIO m => Renderer -> Ptr CFloat -> Ptr CFloat -> m () -renderGetScale v1 v2 v3 = liftIO $ renderGetScaleFFI v1 v2 v3 -{-# INLINE renderGetScale #-} - -renderGetViewport :: MonadIO m => Renderer -> Ptr Rect -> m () -renderGetViewport v1 v2 = liftIO $ renderGetViewportFFI v1 v2 -{-# INLINE renderGetViewport #-} - -renderPresent :: MonadIO m => Renderer -> m () -renderPresent v1 = liftIO $ renderPresentFFI v1 -{-# INLINE renderPresent #-} - -renderReadPixels :: MonadIO m => Renderer -> Ptr Rect -> Word32 -> Ptr () -> CInt -> m CInt -renderReadPixels v1 v2 v3 v4 v5 = liftIO $ renderReadPixelsFFI v1 v2 v3 v4 v5 -{-# INLINE renderReadPixels #-} - -renderSetClipRect :: MonadIO m => Renderer -> Ptr Rect -> m CInt -renderSetClipRect v1 v2 = liftIO $ renderSetClipRectFFI v1 v2 -{-# INLINE renderSetClipRect #-} - -renderSetLogicalSize :: MonadIO m => Renderer -> CInt -> CInt -> m CInt -renderSetLogicalSize v1 v2 v3 = liftIO $ renderSetLogicalSizeFFI v1 v2 v3 -{-# INLINE renderSetLogicalSize #-} - -renderSetScale :: MonadIO m => Renderer -> CFloat -> CFloat -> m CInt -renderSetScale v1 v2 v3 = liftIO $ renderSetScaleFFI v1 v2 v3 -{-# INLINE renderSetScale #-} - -renderSetViewport :: MonadIO m => Renderer -> Ptr Rect -> m CInt -renderSetViewport v1 v2 = liftIO $ renderSetViewportFFI v1 v2 -{-# INLINE renderSetViewport #-} - -renderTargetSupported :: MonadIO m => Renderer -> m Bool -renderTargetSupported v1 = liftIO $ renderTargetSupportedFFI v1 -{-# INLINE renderTargetSupported #-} - -setRenderDrawBlendMode :: MonadIO m => Renderer -> BlendMode -> m CInt -setRenderDrawBlendMode v1 v2 = liftIO $ setRenderDrawBlendModeFFI v1 v2 -{-# INLINE setRenderDrawBlendMode #-} - -setRenderDrawColor :: MonadIO m => Renderer -> Word8 -> Word8 -> Word8 -> Word8 -> m CInt -setRenderDrawColor v1 v2 v3 v4 v5 = liftIO $ setRenderDrawColorFFI v1 v2 v3 v4 v5 -{-# INLINE setRenderDrawColor #-} - -setRenderTarget :: MonadIO m => Renderer -> Texture -> m CInt -setRenderTarget v1 v2 = liftIO $ setRenderTargetFFI v1 v2 -{-# INLINE setRenderTarget #-} - -setTextureAlphaMod :: MonadIO m => Texture -> Word8 -> m CInt -setTextureAlphaMod v1 v2 = liftIO $ setTextureAlphaModFFI v1 v2 -{-# INLINE setTextureAlphaMod #-} - -setTextureBlendMode :: MonadIO m => Texture -> BlendMode -> m CInt -setTextureBlendMode v1 v2 = liftIO $ setTextureBlendModeFFI v1 v2 -{-# INLINE setTextureBlendMode #-} - -setTextureColorMod :: MonadIO m => Texture -> Word8 -> Word8 -> Word8 -> m CInt -setTextureColorMod v1 v2 v3 v4 = liftIO $ setTextureColorModFFI v1 v2 v3 v4 -{-# INLINE setTextureColorMod #-} - -unlockTexture :: MonadIO m => Texture -> m () -unlockTexture v1 = liftIO $ unlockTextureFFI v1 -{-# INLINE unlockTexture #-} - -updateTexture :: MonadIO m => Texture -> Ptr Rect -> Ptr () -> CInt -> m CInt -updateTexture v1 v2 v3 v4 = liftIO $ updateTextureFFI v1 v2 v3 v4 -{-# INLINE updateTexture #-} - -updateYUVTexture :: MonadIO m => Texture -> Ptr Rect -> Ptr Word8 -> CInt -> Ptr Word8 -> CInt -> Ptr Word8 -> CInt -> m CInt -updateYUVTexture v1 v2 v3 v4 v5 v6 v7 v8 = liftIO $ updateYUVTextureFFI v1 v2 v3 v4 v5 v6 v7 v8 -{-# INLINE updateYUVTexture #-} - -allocFormat :: MonadIO m => Word32 -> m (Ptr PixelFormat) -allocFormat v1 = liftIO $ allocFormatFFI v1 -{-# INLINE allocFormat #-} - -allocPalette :: MonadIO m => CInt -> m (Ptr Palette) -allocPalette v1 = liftIO $ allocPaletteFFI v1 -{-# INLINE allocPalette #-} - -calculateGammaRamp :: MonadIO m => CFloat -> Ptr Word16 -> m () -calculateGammaRamp v1 v2 = liftIO $ calculateGammaRampFFI v1 v2 -{-# INLINE calculateGammaRamp #-} - -freeFormat :: MonadIO m => Ptr PixelFormat -> m () -freeFormat v1 = liftIO $ freeFormatFFI v1 -{-# INLINE freeFormat #-} - -freePalette :: MonadIO m => Ptr Palette -> m () -freePalette v1 = liftIO $ freePaletteFFI v1 -{-# INLINE freePalette #-} - -getPixelFormatName :: MonadIO m => Word32 -> m CString -getPixelFormatName v1 = liftIO $ getPixelFormatNameFFI v1 -{-# INLINE getPixelFormatName #-} - -getRGB :: MonadIO m => Word32 -> Ptr PixelFormat -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m () -getRGB v1 v2 v3 v4 v5 = liftIO $ getRGBFFI v1 v2 v3 v4 v5 -{-# INLINE getRGB #-} - -getRGBA :: MonadIO m => Word32 -> Ptr PixelFormat -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m () -getRGBA v1 v2 v3 v4 v5 v6 = liftIO $ getRGBAFFI v1 v2 v3 v4 v5 v6 -{-# INLINE getRGBA #-} - -mapRGB :: MonadIO m => Ptr PixelFormat -> Word8 -> Word8 -> Word8 -> m Word32 -mapRGB v1 v2 v3 v4 = liftIO $ mapRGBFFI v1 v2 v3 v4 -{-# INLINE mapRGB #-} - -mapRGBA :: MonadIO m => Ptr PixelFormat -> Word8 -> Word8 -> Word8 -> Word8 -> m Word32 -mapRGBA v1 v2 v3 v4 v5 = liftIO $ mapRGBAFFI v1 v2 v3 v4 v5 -{-# INLINE mapRGBA #-} - -masksToPixelFormatEnum :: MonadIO m => CInt -> Word32 -> Word32 -> Word32 -> Word32 -> m Word32 -masksToPixelFormatEnum v1 v2 v3 v4 v5 = liftIO $ masksToPixelFormatEnumFFI v1 v2 v3 v4 v5 -{-# INLINE masksToPixelFormatEnum #-} - -pixelFormatEnumToMasks :: MonadIO m => Word32 -> Ptr CInt -> Ptr Word32 -> Ptr Word32 -> Ptr Word32 -> Ptr Word32 -> m Bool -pixelFormatEnumToMasks v1 v2 v3 v4 v5 v6 = liftIO $ pixelFormatEnumToMasksFFI v1 v2 v3 v4 v5 v6 -{-# INLINE pixelFormatEnumToMasks #-} - -setPaletteColors :: MonadIO m => Ptr Palette -> Ptr Color -> CInt -> CInt -> m CInt -setPaletteColors v1 v2 v3 v4 = liftIO $ setPaletteColorsFFI v1 v2 v3 v4 -{-# INLINE setPaletteColors #-} - -setPixelFormatPalette :: MonadIO m => Ptr PixelFormat -> Ptr Palette -> m CInt -setPixelFormatPalette v1 v2 = liftIO $ setPixelFormatPaletteFFI v1 v2 -{-# INLINE setPixelFormatPalette #-} - -enclosePoints :: MonadIO m => Ptr Point -> CInt -> Ptr Rect -> Ptr Rect -> m Bool -enclosePoints v1 v2 v3 v4 = liftIO $ enclosePointsFFI v1 v2 v3 v4 -{-# INLINE enclosePoints #-} - -hasIntersection :: MonadIO m => Ptr Rect -> Ptr Rect -> m Bool -hasIntersection v1 v2 = liftIO $ hasIntersectionFFI v1 v2 -{-# INLINE hasIntersection #-} - -intersectRect :: MonadIO m => Ptr Rect -> Ptr Rect -> Ptr Rect -> m Bool -intersectRect v1 v2 v3 = liftIO $ intersectRectFFI v1 v2 v3 -{-# INLINE intersectRect #-} - -intersectRectAndLine :: MonadIO m => Ptr Rect -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> m Bool -intersectRectAndLine v1 v2 v3 v4 v5 = liftIO $ intersectRectAndLineFFI v1 v2 v3 v4 v5 -{-# INLINE intersectRectAndLine #-} - -unionRect :: MonadIO m => Ptr Rect -> Ptr Rect -> Ptr Rect -> m () -unionRect v1 v2 v3 = liftIO $ unionRectFFI v1 v2 v3 -{-# INLINE unionRect #-} - -blitScaled :: MonadIO m => Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> m CInt -blitScaled v1 v2 v3 v4 = liftIO $ blitScaledFFI v1 v2 v3 v4 -{-# INLINE blitScaled #-} - -blitSurface :: MonadIO m => Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> m CInt -blitSurface v1 v2 v3 v4 = liftIO $ blitSurfaceFFI v1 v2 v3 v4 -{-# INLINE blitSurface #-} - -convertPixels :: MonadIO m => CInt -> CInt -> Word32 -> Ptr () -> CInt -> Word32 -> Ptr () -> CInt -> m CInt -convertPixels v1 v2 v3 v4 v5 v6 v7 v8 = liftIO $ convertPixelsFFI v1 v2 v3 v4 v5 v6 v7 v8 -{-# INLINE convertPixels #-} - -convertSurface :: MonadIO m => Ptr Surface -> Ptr PixelFormat -> Word32 -> m (Ptr Surface) -convertSurface v1 v2 v3 = liftIO $ convertSurfaceFFI v1 v2 v3 -{-# INLINE convertSurface #-} - -convertSurfaceFormat :: MonadIO m => Ptr Surface -> Word32 -> Word32 -> m (Ptr Surface) -convertSurfaceFormat v1 v2 v3 = liftIO $ convertSurfaceFormatFFI v1 v2 v3 -{-# INLINE convertSurfaceFormat #-} - -createRGBSurface :: MonadIO m => Word32 -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> m (Ptr Surface) -createRGBSurface v1 v2 v3 v4 v5 v6 v7 v8 = liftIO $ createRGBSurfaceFFI v1 v2 v3 v4 v5 v6 v7 v8 -{-# INLINE createRGBSurface #-} - -createRGBSurfaceFrom :: MonadIO m => Ptr () -> CInt -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> m (Ptr Surface) -createRGBSurfaceFrom v1 v2 v3 v4 v5 v6 v7 v8 v9 = liftIO $ createRGBSurfaceFromFFI v1 v2 v3 v4 v5 v6 v7 v8 v9 -{-# INLINE createRGBSurfaceFrom #-} - -fillRect :: MonadIO m => Ptr Surface -> Ptr Rect -> Word32 -> m CInt -fillRect v1 v2 v3 = liftIO $ fillRectFFI v1 v2 v3 -{-# INLINE fillRect #-} - -fillRects :: MonadIO m => Ptr Surface -> Ptr Rect -> CInt -> Word32 -> m CInt -fillRects v1 v2 v3 v4 = liftIO $ fillRectsFFI v1 v2 v3 v4 -{-# INLINE fillRects #-} - -freeSurface :: MonadIO m => Ptr Surface -> m () -freeSurface v1 = liftIO $ freeSurfaceFFI v1 -{-# INLINE freeSurface #-} - -getClipRect :: MonadIO m => Ptr Surface -> Ptr Rect -> m () -getClipRect v1 v2 = liftIO $ getClipRectFFI v1 v2 -{-# INLINE getClipRect #-} - -getColorKey :: MonadIO m => Ptr Surface -> Ptr Word32 -> m CInt -getColorKey v1 v2 = liftIO $ getColorKeyFFI v1 v2 -{-# INLINE getColorKey #-} - -getSurfaceAlphaMod :: MonadIO m => Ptr Surface -> Ptr Word8 -> m CInt -getSurfaceAlphaMod v1 v2 = liftIO $ getSurfaceAlphaModFFI v1 v2 -{-# INLINE getSurfaceAlphaMod #-} - -getSurfaceBlendMode :: MonadIO m => Ptr Surface -> Ptr BlendMode -> m CInt -getSurfaceBlendMode v1 v2 = liftIO $ getSurfaceBlendModeFFI v1 v2 -{-# INLINE getSurfaceBlendMode #-} - -getSurfaceColorMod :: MonadIO m => Ptr Surface -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m CInt -getSurfaceColorMod v1 v2 v3 v4 = liftIO $ getSurfaceColorModFFI v1 v2 v3 v4 -{-# INLINE getSurfaceColorMod #-} - -loadBMP :: MonadIO m => CString -> m (Ptr Surface) -loadBMP file = liftIO $ do - rw <- withCString "rb" $ rwFromFile file - loadBMP_RW rw 1 -{-# INLINE loadBMP #-} - -loadBMP_RW :: MonadIO m => Ptr RWops -> CInt -> m (Ptr Surface) -loadBMP_RW v1 v2 = liftIO $ loadBMP_RWFFI v1 v2 -{-# INLINE loadBMP_RW #-} - -lockSurface :: MonadIO m => Ptr Surface -> m CInt -lockSurface v1 = liftIO $ lockSurfaceFFI v1 -{-# INLINE lockSurface #-} - -lowerBlit :: MonadIO m => Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> m CInt -lowerBlit v1 v2 v3 v4 = liftIO $ lowerBlitFFI v1 v2 v3 v4 -{-# INLINE lowerBlit #-} - -lowerBlitScaled :: MonadIO m => Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> m CInt -lowerBlitScaled v1 v2 v3 v4 = liftIO $ lowerBlitScaledFFI v1 v2 v3 v4 -{-# INLINE lowerBlitScaled #-} - -saveBMP :: MonadIO m => Ptr Surface -> CString -> m CInt -saveBMP surface file = liftIO $ do - rw <- withCString "wb" $ rwFromFile file - saveBMP_RW surface rw 1 -{-# INLINE saveBMP #-} - -saveBMP_RW :: MonadIO m => Ptr Surface -> Ptr RWops -> CInt -> m CInt -saveBMP_RW v1 v2 v3 = liftIO $ saveBMP_RWFFI v1 v2 v3 -{-# INLINE saveBMP_RW #-} - -setClipRect :: MonadIO m => Ptr Surface -> Ptr Rect -> m Bool -setClipRect v1 v2 = liftIO $ setClipRectFFI v1 v2 -{-# INLINE setClipRect #-} - -setColorKey :: MonadIO m => Ptr Surface -> CInt -> Word32 -> m CInt -setColorKey v1 v2 v3 = liftIO $ setColorKeyFFI v1 v2 v3 -{-# INLINE setColorKey #-} - -setSurfaceAlphaMod :: MonadIO m => Ptr Surface -> Word8 -> m CInt -setSurfaceAlphaMod v1 v2 = liftIO $ setSurfaceAlphaModFFI v1 v2 -{-# INLINE setSurfaceAlphaMod #-} - -setSurfaceBlendMode :: MonadIO m => Ptr Surface -> BlendMode -> m CInt -setSurfaceBlendMode v1 v2 = liftIO $ setSurfaceBlendModeFFI v1 v2 -{-# INLINE setSurfaceBlendMode #-} - -setSurfaceColorMod :: MonadIO m => Ptr Surface -> Word8 -> Word8 -> Word8 -> m CInt -setSurfaceColorMod v1 v2 v3 v4 = liftIO $ setSurfaceColorModFFI v1 v2 v3 v4 -{-# INLINE setSurfaceColorMod #-} - -setSurfacePalette :: MonadIO m => Ptr Surface -> Ptr Palette -> m CInt -setSurfacePalette v1 v2 = liftIO $ setSurfacePaletteFFI v1 v2 -{-# INLINE setSurfacePalette #-} - -setSurfaceRLE :: MonadIO m => Ptr Surface -> CInt -> m CInt -setSurfaceRLE v1 v2 = liftIO $ setSurfaceRLEFFI v1 v2 -{-# INLINE setSurfaceRLE #-} - -unlockSurface :: MonadIO m => Ptr Surface -> m () -unlockSurface v1 = liftIO $ unlockSurfaceFFI v1 -{-# INLINE unlockSurface #-} - -getWindowWMInfo :: MonadIO m => Window -> SysWMinfo -> m Bool -getWindowWMInfo v1 v2 = liftIO $ getWindowWMInfoFFI v1 v2 -{-# INLINE getWindowWMInfo #-} - -getClipboardText :: MonadIO m => m CString -getClipboardText = liftIO getClipboardTextFFI -{-# INLINE getClipboardText #-} - -hasClipboardText :: MonadIO m => m Bool -hasClipboardText = liftIO hasClipboardTextFFI -{-# INLINE hasClipboardText #-} - -setClipboardText :: MonadIO m => CString -> m CInt -setClipboardText v1 = liftIO $ setClipboardTextFFI v1 -{-# INLINE setClipboardText #-} +module SDL.Raw.Video (+ -- * Display and Window Management+ createWindow,+ createWindowAndRenderer,+ createWindowFrom,+ destroyWindow,+ disableScreenSaver,+ enableScreenSaver,+ glBindTexture,+ glCreateContext,+ glDeleteContext,+ glExtensionSupported,+ glGetAttribute,+ glGetCurrentContext,+ glGetCurrentWindow,+ glGetDrawableSize,+ glGetProcAddress,+ glGetSwapInterval,+ glLoadLibrary,+ glMakeCurrent,+ glResetAttributes,+ glSetAttribute,+ glSetSwapInterval,+ glSwapWindow,+ glUnbindTexture,+ glUnloadLibrary,+ getClosestDisplayMode,+ getCurrentDisplayMode,+ getCurrentVideoDriver,+ getDesktopDisplayMode,+ getDisplayBounds,+ getDisplayMode,+ getDisplayName,+ getNumDisplayModes,+ getNumVideoDisplays,+ getNumVideoDrivers,+ getVideoDriver,+ getWindowBrightness,+ getWindowData,+ getWindowDisplayIndex,+ getWindowDisplayMode,+ getWindowFlags,+ getWindowFromID,+ getWindowGammaRamp,+ getWindowGrab,+ getWindowID,+ getWindowMaximumSize,+ getWindowMinimumSize,+ getWindowPixelFormat,+ getWindowPosition,+ getWindowSize,+ getWindowSurface,+ getWindowTitle,+ hideWindow,+ isScreenSaverEnabled,+ maximizeWindow,+ minimizeWindow,+ raiseWindow,+ restoreWindow,+ setWindowBordered,+ setWindowBrightness,+ setWindowData,+ setWindowDisplayMode,+ setWindowFullscreen,+ setWindowGammaRamp,+ setWindowGrab,+ setWindowIcon,+ setWindowMaximumSize,+ setWindowMinimumSize,+ setWindowPosition,+ setWindowSize,+ setWindowTitle,+ showMessageBox,+ showSimpleMessageBox,+ showWindow,+ updateWindowSurface,+ updateWindowSurfaceRects,+ videoInit,+ videoQuit,++ -- * 2D Accelerated Rendering+ createRenderer,+ createSoftwareRenderer,+ createTexture,+ createTextureFromSurface,+ destroyRenderer,+ destroyTexture,+ getNumRenderDrivers,+ getRenderDrawBlendMode,+ getRenderDrawColor,+ getRenderDriverInfo,+ getRenderTarget,+ getRenderer,+ getRendererInfo,+ getRendererOutputSize,+ getTextureAlphaMod,+ getTextureBlendMode,+ getTextureColorMod,+ lockTexture,+ queryTexture,+ renderClear,+ renderCopy,+ renderCopyEx,+ renderDrawLine,+ renderDrawLines,+ renderDrawPoint,+ renderDrawPoints,+ renderDrawRect,+ renderDrawRects,+ renderFillRect,+ renderFillRects,+ renderGetClipRect,+ renderGetLogicalSize,+ renderGetScale,+ renderGetViewport,+ renderPresent,+ renderReadPixels,+ renderSetClipRect,+ renderSetLogicalSize,+ renderSetScale,+ renderSetViewport,+ renderTargetSupported,+ setRenderDrawBlendMode,+ setRenderDrawColor,+ setRenderTarget,+ setTextureAlphaMod,+ setTextureBlendMode,+ setTextureColorMod,+ unlockTexture,+ updateTexture,+ updateYUVTexture,++ -- * Pixel Formats and Conversion Routines+ allocFormat,+ allocPalette,+ calculateGammaRamp,+ freeFormat,+ freePalette,+ getPixelFormatName,+ getRGB,+ getRGBA,+ mapRGB,+ mapRGBA,+ masksToPixelFormatEnum,+ pixelFormatEnumToMasks,+ setPaletteColors,+ setPixelFormatPalette,++ -- * Rectangle Functions+ enclosePoints,+ hasIntersection,+ intersectRect,+ intersectRectAndLine,+ unionRect,++ -- * Surface Creation and Simple Drawing+ blitScaled,+ blitSurface,+ convertPixels,+ convertSurface,+ convertSurfaceFormat,+ createRGBSurface,+ createRGBSurfaceFrom,+ fillRect,+ fillRects,+ freeSurface,+ getClipRect,+ getColorKey,+ getSurfaceAlphaMod,+ getSurfaceBlendMode,+ getSurfaceColorMod,+ loadBMP,+ loadBMP_RW,+ lockSurface,+ lowerBlit,+ lowerBlitScaled,+ saveBMP,+ saveBMP_RW,+ setClipRect,+ setColorKey,+ setSurfaceAlphaMod,+ setSurfaceBlendMode,+ setSurfaceColorMod,+ setSurfacePalette,+ setSurfaceRLE,+ unlockSurface,++ -- * Platform-specific Window Management+ getWindowWMInfo,++ -- * Clipboard Handling+ getClipboardText,+ hasClipboardText,+ setClipboardText+) where++import Control.Monad.IO.Class+import Data.Word+import Foreign.C.String+import Foreign.C.Types+import Foreign.Ptr+import SDL.Raw.Enum+import SDL.Raw.Filesystem+import SDL.Raw.Types++foreign import ccall "SDL.h SDL_CreateWindow" createWindowFFI :: CString -> CInt -> CInt -> CInt -> CInt -> Word32 -> IO Window+foreign import ccall "SDL.h SDL_CreateWindowAndRenderer" createWindowAndRendererFFI :: CInt -> CInt -> Word32 -> Ptr Window -> Ptr Renderer -> IO CInt+foreign import ccall "SDL.h SDL_CreateWindowFrom" createWindowFromFFI :: Ptr () -> IO Window+foreign import ccall "SDL.h SDL_DestroyWindow" destroyWindowFFI :: Window -> IO ()+foreign import ccall "SDL.h SDL_DisableScreenSaver" disableScreenSaverFFI :: IO ()+foreign import ccall "SDL.h SDL_EnableScreenSaver" enableScreenSaverFFI :: IO ()+foreign import ccall "SDL.h SDL_GL_BindTexture" glBindTextureFFI :: Texture -> Ptr CFloat -> Ptr CFloat -> IO CInt+foreign import ccall "SDL.h SDL_GL_CreateContext" glCreateContextFFI :: Window -> IO GLContext+foreign import ccall "SDL.h SDL_GL_DeleteContext" glDeleteContextFFI :: GLContext -> IO ()+foreign import ccall "SDL.h SDL_GL_ExtensionSupported" glExtensionSupportedFFI :: CString -> IO Bool+foreign import ccall "SDL.h SDL_GL_GetAttribute" glGetAttributeFFI :: GLattr -> Ptr CInt -> IO CInt+foreign import ccall "SDL.h SDL_GL_GetCurrentContext" glGetCurrentContextFFI :: IO GLContext+foreign import ccall "SDL.h SDL_GL_GetCurrentWindow" glGetCurrentWindowFFI :: IO Window+foreign import ccall "SDL.h SDL_GL_GetDrawableSize" glGetDrawableSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO ()+foreign import ccall "SDL.h SDL_GL_GetProcAddress" glGetProcAddressFFI :: CString -> IO (Ptr ())+foreign import ccall "SDL.h SDL_GL_GetSwapInterval" glGetSwapIntervalFFI :: IO CInt+foreign import ccall "SDL.h SDL_GL_LoadLibrary" glLoadLibraryFFI :: CString -> IO CInt+foreign import ccall "SDL.h SDL_GL_MakeCurrent" glMakeCurrentFFI :: Window -> GLContext -> IO CInt+foreign import ccall "SDL.h SDL_GL_ResetAttributes" glResetAttributesFFI :: IO ()+foreign import ccall "SDL.h SDL_GL_SetAttribute" glSetAttributeFFI :: GLattr -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_GL_SetSwapInterval" glSetSwapIntervalFFI :: CInt -> IO CInt+foreign import ccall "SDL.h SDL_GL_SwapWindow" glSwapWindowFFI :: Window -> IO ()+foreign import ccall "SDL.h SDL_GL_UnbindTexture" glUnbindTextureFFI :: Texture -> IO CInt+foreign import ccall "SDL.h SDL_GL_UnloadLibrary" glUnloadLibraryFFI :: IO ()+foreign import ccall "SDL.h SDL_GetClosestDisplayMode" getClosestDisplayModeFFI :: CInt -> Ptr DisplayMode -> Ptr DisplayMode -> IO (Ptr DisplayMode)+foreign import ccall "SDL.h SDL_GetCurrentDisplayMode" getCurrentDisplayModeFFI :: CInt -> Ptr DisplayMode -> IO CInt+foreign import ccall "SDL.h SDL_GetCurrentVideoDriver" getCurrentVideoDriverFFI :: IO CString+foreign import ccall "SDL.h SDL_GetDesktopDisplayMode" getDesktopDisplayModeFFI :: CInt -> Ptr DisplayMode -> IO CInt+foreign import ccall "SDL.h SDL_GetDisplayBounds" getDisplayBoundsFFI :: CInt -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_GetDisplayMode" getDisplayModeFFI :: CInt -> CInt -> Ptr DisplayMode -> IO CInt+foreign import ccall "SDL.h SDL_GetDisplayName" getDisplayNameFFI :: CInt -> IO CString+foreign import ccall "SDL.h SDL_GetNumDisplayModes" getNumDisplayModesFFI :: CInt -> IO CInt+foreign import ccall "SDL.h SDL_GetNumVideoDisplays" getNumVideoDisplaysFFI :: IO CInt+foreign import ccall "SDL.h SDL_GetNumVideoDrivers" getNumVideoDriversFFI :: IO CInt+foreign import ccall "SDL.h SDL_GetVideoDriver" getVideoDriverFFI :: CInt -> IO CString+foreign import ccall "SDL.h SDL_GetWindowBrightness" getWindowBrightnessFFI :: Window -> IO CFloat+foreign import ccall "SDL.h SDL_GetWindowData" getWindowDataFFI :: Window -> CString -> IO (Ptr ())+foreign import ccall "SDL.h SDL_GetWindowDisplayIndex" getWindowDisplayIndexFFI :: Window -> IO CInt+foreign import ccall "SDL.h SDL_GetWindowDisplayMode" getWindowDisplayModeFFI :: Window -> Ptr DisplayMode -> IO CInt+foreign import ccall "SDL.h SDL_GetWindowFlags" getWindowFlagsFFI :: Window -> IO Word32+foreign import ccall "SDL.h SDL_GetWindowFromID" getWindowFromIDFFI :: Word32 -> IO Window+foreign import ccall "SDL.h SDL_GetWindowGammaRamp" getWindowGammaRampFFI :: Window -> Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> IO CInt+foreign import ccall "SDL.h SDL_GetWindowGrab" getWindowGrabFFI :: Window -> IO Bool+foreign import ccall "SDL.h SDL_GetWindowID" getWindowIDFFI :: Window -> IO Word32+foreign import ccall "SDL.h SDL_GetWindowMaximumSize" getWindowMaximumSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO ()+foreign import ccall "SDL.h SDL_GetWindowMinimumSize" getWindowMinimumSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO ()+foreign import ccall "SDL.h SDL_GetWindowPixelFormat" getWindowPixelFormatFFI :: Window -> IO Word32+foreign import ccall "SDL.h SDL_GetWindowPosition" getWindowPositionFFI :: Window -> Ptr CInt -> Ptr CInt -> IO ()+foreign import ccall "SDL.h SDL_GetWindowSize" getWindowSizeFFI :: Window -> Ptr CInt -> Ptr CInt -> IO ()+foreign import ccall "SDL.h SDL_GetWindowSurface" getWindowSurfaceFFI :: Window -> IO (Ptr Surface)+foreign import ccall "SDL.h SDL_GetWindowTitle" getWindowTitleFFI :: Window -> IO CString+foreign import ccall "SDL.h SDL_HideWindow" hideWindowFFI :: Window -> IO ()+foreign import ccall "SDL.h SDL_IsScreenSaverEnabled" isScreenSaverEnabledFFI :: IO Bool+foreign import ccall "SDL.h SDL_MaximizeWindow" maximizeWindowFFI :: Window -> IO ()+foreign import ccall "SDL.h SDL_MinimizeWindow" minimizeWindowFFI :: Window -> IO ()+foreign import ccall "SDL.h SDL_RaiseWindow" raiseWindowFFI :: Window -> IO ()+foreign import ccall "SDL.h SDL_RestoreWindow" restoreWindowFFI :: Window -> IO ()+foreign import ccall "SDL.h SDL_SetWindowBordered" setWindowBorderedFFI :: Window -> Bool -> IO ()+foreign import ccall "SDL.h SDL_SetWindowBrightness" setWindowBrightnessFFI :: Window -> CFloat -> IO CInt+foreign import ccall "SDL.h SDL_SetWindowData" setWindowDataFFI :: Window -> CString -> Ptr () -> IO (Ptr ())+foreign import ccall "SDL.h SDL_SetWindowDisplayMode" setWindowDisplayModeFFI :: Window -> Ptr DisplayMode -> IO CInt+foreign import ccall "SDL.h SDL_SetWindowFullscreen" setWindowFullscreenFFI :: Window -> Word32 -> IO CInt+foreign import ccall "SDL.h SDL_SetWindowGammaRamp" setWindowGammaRampFFI :: Window -> Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> IO CInt+foreign import ccall "SDL.h SDL_SetWindowGrab" setWindowGrabFFI :: Window -> Bool -> IO ()+foreign import ccall "SDL.h SDL_SetWindowIcon" setWindowIconFFI :: Window -> Ptr Surface -> IO ()+foreign import ccall "SDL.h SDL_SetWindowMaximumSize" setWindowMaximumSizeFFI :: Window -> CInt -> CInt -> IO ()+foreign import ccall "SDL.h SDL_SetWindowMinimumSize" setWindowMinimumSizeFFI :: Window -> CInt -> CInt -> IO ()+foreign import ccall "SDL.h SDL_SetWindowPosition" setWindowPositionFFI :: Window -> CInt -> CInt -> IO ()+foreign import ccall "SDL.h SDL_SetWindowSize" setWindowSizeFFI :: Window -> CInt -> CInt -> IO ()+foreign import ccall "SDL.h SDL_SetWindowTitle" setWindowTitleFFI :: Window -> CString -> IO ()+foreign import ccall "SDL.h SDL_ShowMessageBox" showMessageBoxFFI :: Ptr MessageBoxData -> Ptr CInt -> IO CInt+foreign import ccall "SDL.h SDL_ShowSimpleMessageBox" showSimpleMessageBoxFFI :: Word32 -> CString -> CString -> Window -> IO CInt+foreign import ccall "SDL.h SDL_ShowWindow" showWindowFFI :: Window -> IO ()+foreign import ccall "SDL.h SDL_UpdateWindowSurface" updateWindowSurfaceFFI :: Window -> IO CInt+foreign import ccall "SDL.h SDL_UpdateWindowSurfaceRects" updateWindowSurfaceRectsFFI :: Window -> Ptr Rect -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_VideoInit" videoInitFFI :: CString -> IO CInt+foreign import ccall "SDL.h SDL_VideoQuit" videoQuitFFI :: IO ()++foreign import ccall "SDL.h SDL_CreateRenderer" createRendererFFI :: Window -> CInt -> Word32 -> IO Renderer+foreign import ccall "SDL.h SDL_CreateSoftwareRenderer" createSoftwareRendererFFI :: Ptr Surface -> IO Renderer+foreign import ccall "SDL.h SDL_CreateTexture" createTextureFFI :: Renderer -> Word32 -> CInt -> CInt -> CInt -> IO Texture+foreign import ccall "SDL.h SDL_CreateTextureFromSurface" createTextureFromSurfaceFFI :: Renderer -> Ptr Surface -> IO Texture+foreign import ccall "SDL.h SDL_DestroyRenderer" destroyRendererFFI :: Renderer -> IO ()+foreign import ccall "SDL.h SDL_DestroyTexture" destroyTextureFFI :: Texture -> IO ()+foreign import ccall "SDL.h SDL_GetNumRenderDrivers" getNumRenderDriversFFI :: IO CInt+foreign import ccall "SDL.h SDL_GetRenderDrawBlendMode" getRenderDrawBlendModeFFI :: Renderer -> Ptr BlendMode -> IO Int+foreign import ccall "SDL.h SDL_GetRenderDrawColor" getRenderDrawColorFFI :: Renderer -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO CInt+foreign import ccall "SDL.h SDL_GetRenderDriverInfo" getRenderDriverInfoFFI :: CInt -> Ptr RendererInfo -> IO CInt+foreign import ccall "SDL.h SDL_GetRenderTarget" getRenderTargetFFI :: Renderer -> IO Texture+foreign import ccall "SDL.h SDL_GetRenderer" getRendererFFI :: Window -> IO Renderer+foreign import ccall "SDL.h SDL_GetRendererInfo" getRendererInfoFFI :: Renderer -> Ptr RendererInfo -> IO CInt+foreign import ccall "SDL.h SDL_GetRendererOutputSize" getRendererOutputSizeFFI :: Renderer -> Ptr CInt -> Ptr CInt -> IO CInt+foreign import ccall "SDL.h SDL_GetTextureAlphaMod" getTextureAlphaModFFI :: Texture -> Ptr Word8 -> IO CInt+foreign import ccall "SDL.h SDL_GetTextureBlendMode" getTextureBlendModeFFI :: Texture -> Ptr BlendMode -> IO CInt+foreign import ccall "SDL.h SDL_GetTextureColorMod" getTextureColorModFFI :: Texture -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO CInt+foreign import ccall "SDL.h SDL_LockTexture" lockTextureFFI :: Texture -> Ptr Rect -> Ptr (Ptr ()) -> Ptr CInt -> IO CInt+foreign import ccall "SDL.h SDL_QueryTexture" queryTextureFFI :: Texture -> Ptr Word32 -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO CInt+foreign import ccall "SDL.h SDL_RenderClear" renderClearFFI :: Renderer -> IO CInt+foreign import ccall "SDL.h SDL_RenderCopy" renderCopyFFI :: Renderer -> Texture -> Ptr Rect -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_RenderCopyEx" renderCopyExFFI :: Renderer -> Texture -> Ptr Rect -> Ptr Rect -> CDouble -> Ptr Point -> RendererFlip -> IO CInt+foreign import ccall "SDL.h SDL_RenderDrawLine" renderDrawLineFFI :: Renderer -> CInt -> CInt -> CInt -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_RenderDrawLines" renderDrawLinesFFI :: Renderer -> Ptr Point -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_RenderDrawPoint" renderDrawPointFFI :: Renderer -> CInt -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_RenderDrawPoints" renderDrawPointsFFI :: Renderer -> Ptr Point -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_RenderDrawRect" renderDrawRectFFI :: Renderer -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_RenderDrawRects" renderDrawRectsFFI :: Renderer -> Ptr Rect -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_RenderFillRect" renderFillRectFFI :: Renderer -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_RenderFillRects" renderFillRectsFFI :: Renderer -> Ptr Rect -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_RenderGetClipRect" renderGetClipRectFFI :: Renderer -> Ptr Rect -> IO ()+foreign import ccall "SDL.h SDL_RenderGetLogicalSize" renderGetLogicalSizeFFI :: Renderer -> Ptr CInt -> Ptr CInt -> IO ()+foreign import ccall "SDL.h SDL_RenderGetScale" renderGetScaleFFI :: Renderer -> Ptr CFloat -> Ptr CFloat -> IO ()+foreign import ccall "SDL.h SDL_RenderGetViewport" renderGetViewportFFI :: Renderer -> Ptr Rect -> IO ()+foreign import ccall "SDL.h SDL_RenderPresent" renderPresentFFI :: Renderer -> IO ()+foreign import ccall "SDL.h SDL_RenderReadPixels" renderReadPixelsFFI :: Renderer -> Ptr Rect -> Word32 -> Ptr () -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_RenderSetClipRect" renderSetClipRectFFI :: Renderer -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_RenderSetLogicalSize" renderSetLogicalSizeFFI :: Renderer -> CInt -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_RenderSetScale" renderSetScaleFFI :: Renderer -> CFloat -> CFloat -> IO CInt+foreign import ccall "SDL.h SDL_RenderSetViewport" renderSetViewportFFI :: Renderer -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_RenderTargetSupported" renderTargetSupportedFFI :: Renderer -> IO Bool+foreign import ccall "SDL.h SDL_SetRenderDrawBlendMode" setRenderDrawBlendModeFFI :: Renderer -> BlendMode -> IO CInt+foreign import ccall "SDL.h SDL_SetRenderDrawColor" setRenderDrawColorFFI :: Renderer -> Word8 -> Word8 -> Word8 -> Word8 -> IO CInt+foreign import ccall "SDL.h SDL_SetRenderTarget" setRenderTargetFFI :: Renderer -> Texture -> IO CInt+foreign import ccall "SDL.h SDL_SetTextureAlphaMod" setTextureAlphaModFFI :: Texture -> Word8 -> IO CInt+foreign import ccall "SDL.h SDL_SetTextureBlendMode" setTextureBlendModeFFI :: Texture -> BlendMode -> IO CInt+foreign import ccall "SDL.h SDL_SetTextureColorMod" setTextureColorModFFI :: Texture -> Word8 -> Word8 -> Word8 -> IO CInt+foreign import ccall "SDL.h SDL_UnlockTexture" unlockTextureFFI :: Texture -> IO ()+foreign import ccall "SDL.h SDL_UpdateTexture" updateTextureFFI :: Texture -> Ptr Rect -> Ptr () -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_UpdateYUVTexture" updateYUVTextureFFI :: Texture -> Ptr Rect -> Ptr Word8 -> CInt -> Ptr Word8 -> CInt -> Ptr Word8 -> CInt -> IO CInt++foreign import ccall "SDL.h SDL_AllocFormat" allocFormatFFI :: Word32 -> IO (Ptr PixelFormat)+foreign import ccall "SDL.h SDL_AllocPalette" allocPaletteFFI :: CInt -> IO (Ptr Palette)+foreign import ccall "SDL.h SDL_CalculateGammaRamp" calculateGammaRampFFI :: CFloat -> Ptr Word16 -> IO ()+foreign import ccall "SDL.h SDL_FreeFormat" freeFormatFFI :: Ptr PixelFormat -> IO ()+foreign import ccall "SDL.h SDL_FreePalette" freePaletteFFI :: Ptr Palette -> IO ()+foreign import ccall "SDL.h SDL_GetPixelFormatName" getPixelFormatNameFFI :: Word32 -> IO CString+foreign import ccall "SDL.h SDL_GetRGB" getRGBFFI :: Word32 -> Ptr PixelFormat -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO ()+foreign import ccall "SDL.h SDL_GetRGBA" getRGBAFFI :: Word32 -> Ptr PixelFormat -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO ()+foreign import ccall "SDL.h SDL_MapRGB" mapRGBFFI :: Ptr PixelFormat -> Word8 -> Word8 -> Word8 -> IO Word32+foreign import ccall "SDL.h SDL_MapRGBA" mapRGBAFFI :: Ptr PixelFormat -> Word8 -> Word8 -> Word8 -> Word8 -> IO Word32+foreign import ccall "SDL.h SDL_MasksToPixelFormatEnum" masksToPixelFormatEnumFFI :: CInt -> Word32 -> Word32 -> Word32 -> Word32 -> IO Word32+foreign import ccall "SDL.h SDL_PixelFormatEnumToMasks" pixelFormatEnumToMasksFFI :: Word32 -> Ptr CInt -> Ptr Word32 -> Ptr Word32 -> Ptr Word32 -> Ptr Word32 -> IO Bool+foreign import ccall "SDL.h SDL_SetPaletteColors" setPaletteColorsFFI :: Ptr Palette -> Ptr Color -> CInt -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_SetPixelFormatPalette" setPixelFormatPaletteFFI :: Ptr PixelFormat -> Ptr Palette -> IO CInt++foreign import ccall "SDL.h SDL_EnclosePoints" enclosePointsFFI :: Ptr Point -> CInt -> Ptr Rect -> Ptr Rect -> IO Bool+foreign import ccall "SDL.h SDL_HasIntersection" hasIntersectionFFI :: Ptr Rect -> Ptr Rect -> IO Bool+foreign import ccall "SDL.h SDL_IntersectRect" intersectRectFFI :: Ptr Rect -> Ptr Rect -> Ptr Rect -> IO Bool+foreign import ccall "SDL.h SDL_IntersectRectAndLine" intersectRectAndLineFFI :: Ptr Rect -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> IO Bool+foreign import ccall "SDL.h SDL_UnionRect" unionRectFFI :: Ptr Rect -> Ptr Rect -> Ptr Rect -> IO ()++foreign import ccall "SDL.h SDL_UpperBlitScaled" blitScaledFFI :: Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_UpperBlit" blitSurfaceFFI :: Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_ConvertPixels" convertPixelsFFI :: CInt -> CInt -> Word32 -> Ptr () -> CInt -> Word32 -> Ptr () -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_ConvertSurface" convertSurfaceFFI :: Ptr Surface -> Ptr PixelFormat -> Word32 -> IO (Ptr Surface)+foreign import ccall "SDL.h SDL_ConvertSurfaceFormat" convertSurfaceFormatFFI :: Ptr Surface -> Word32 -> Word32 -> IO (Ptr Surface)+foreign import ccall "SDL.h SDL_CreateRGBSurface" createRGBSurfaceFFI :: Word32 -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Ptr Surface)+foreign import ccall "SDL.h SDL_CreateRGBSurfaceFrom" createRGBSurfaceFromFFI :: Ptr () -> CInt -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Ptr Surface)+foreign import ccall "SDL.h SDL_FillRect" fillRectFFI :: Ptr Surface -> Ptr Rect -> Word32 -> IO CInt+foreign import ccall "SDL.h SDL_FillRects" fillRectsFFI :: Ptr Surface -> Ptr Rect -> CInt -> Word32 -> IO CInt+foreign import ccall "SDL.h SDL_FreeSurface" freeSurfaceFFI :: Ptr Surface -> IO ()+foreign import ccall "SDL.h SDL_GetClipRect" getClipRectFFI :: Ptr Surface -> Ptr Rect -> IO ()+foreign import ccall "SDL.h SDL_GetColorKey" getColorKeyFFI :: Ptr Surface -> Ptr Word32 -> IO CInt+foreign import ccall "SDL.h SDL_GetSurfaceAlphaMod" getSurfaceAlphaModFFI :: Ptr Surface -> Ptr Word8 -> IO CInt+foreign import ccall "SDL.h SDL_GetSurfaceBlendMode" getSurfaceBlendModeFFI :: Ptr Surface -> Ptr BlendMode -> IO CInt+foreign import ccall "SDL.h SDL_GetSurfaceColorMod" getSurfaceColorModFFI :: Ptr Surface -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> IO CInt+foreign import ccall "SDL.h SDL_LoadBMP_RW" loadBMP_RWFFI :: Ptr RWops -> CInt -> IO (Ptr Surface)+foreign import ccall "SDL.h SDL_LockSurface" lockSurfaceFFI :: Ptr Surface -> IO CInt+foreign import ccall "SDL.h SDL_LowerBlit" lowerBlitFFI :: Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_LowerBlitScaled" lowerBlitScaledFFI :: Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> IO CInt+foreign import ccall "SDL.h SDL_SaveBMP_RW" saveBMP_RWFFI :: Ptr Surface -> Ptr RWops -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_SetClipRect" setClipRectFFI :: Ptr Surface -> Ptr Rect -> IO Bool+foreign import ccall "SDL.h SDL_SetColorKey" setColorKeyFFI :: Ptr Surface -> CInt -> Word32 -> IO CInt+foreign import ccall "SDL.h SDL_SetSurfaceAlphaMod" setSurfaceAlphaModFFI :: Ptr Surface -> Word8 -> IO CInt+foreign import ccall "SDL.h SDL_SetSurfaceBlendMode" setSurfaceBlendModeFFI :: Ptr Surface -> BlendMode -> IO CInt+foreign import ccall "SDL.h SDL_SetSurfaceColorMod" setSurfaceColorModFFI :: Ptr Surface -> Word8 -> Word8 -> Word8 -> IO CInt+foreign import ccall "SDL.h SDL_SetSurfacePalette" setSurfacePaletteFFI :: Ptr Surface -> Ptr Palette -> IO CInt+foreign import ccall "SDL.h SDL_SetSurfaceRLE" setSurfaceRLEFFI :: Ptr Surface -> CInt -> IO CInt+foreign import ccall "SDL.h SDL_UnlockSurface" unlockSurfaceFFI :: Ptr Surface -> IO ()++foreign import ccall "SDL.h SDL_GetWindowWMInfo" getWindowWMInfoFFI :: Window -> SysWMinfo -> IO Bool++foreign import ccall "SDL.h SDL_GetClipboardText" getClipboardTextFFI :: IO CString+foreign import ccall "SDL.h SDL_HasClipboardText" hasClipboardTextFFI :: IO Bool+foreign import ccall "SDL.h SDL_SetClipboardText" setClipboardTextFFI :: CString -> IO CInt++createWindow :: MonadIO m => CString -> CInt -> CInt -> CInt -> CInt -> Word32 -> m Window+createWindow v1 v2 v3 v4 v5 v6 = liftIO $ createWindowFFI v1 v2 v3 v4 v5 v6+{-# INLINE createWindow #-}++createWindowAndRenderer :: MonadIO m => CInt -> CInt -> Word32 -> Ptr Window -> Ptr Renderer -> m CInt+createWindowAndRenderer v1 v2 v3 v4 v5 = liftIO $ createWindowAndRendererFFI v1 v2 v3 v4 v5+{-# INLINE createWindowAndRenderer #-}++createWindowFrom :: MonadIO m => Ptr () -> m Window+createWindowFrom v1 = liftIO $ createWindowFromFFI v1+{-# INLINE createWindowFrom #-}++destroyWindow :: MonadIO m => Window -> m ()+destroyWindow v1 = liftIO $ destroyWindowFFI v1+{-# INLINE destroyWindow #-}++disableScreenSaver :: MonadIO m => m ()+disableScreenSaver = liftIO disableScreenSaverFFI+{-# INLINE disableScreenSaver #-}++enableScreenSaver :: MonadIO m => m ()+enableScreenSaver = liftIO enableScreenSaverFFI+{-# INLINE enableScreenSaver #-}++glBindTexture :: MonadIO m => Texture -> Ptr CFloat -> Ptr CFloat -> m CInt+glBindTexture v1 v2 v3 = liftIO $ glBindTextureFFI v1 v2 v3+{-# INLINE glBindTexture #-}++glCreateContext :: MonadIO m => Window -> m GLContext+glCreateContext v1 = liftIO $ glCreateContextFFI v1+{-# INLINE glCreateContext #-}++glDeleteContext :: MonadIO m => GLContext -> m ()+glDeleteContext v1 = liftIO $ glDeleteContextFFI v1+{-# INLINE glDeleteContext #-}++glExtensionSupported :: MonadIO m => CString -> m Bool+glExtensionSupported v1 = liftIO $ glExtensionSupportedFFI v1+{-# INLINE glExtensionSupported #-}++glGetAttribute :: MonadIO m => GLattr -> Ptr CInt -> m CInt+glGetAttribute v1 v2 = liftIO $ glGetAttributeFFI v1 v2+{-# INLINE glGetAttribute #-}++glGetCurrentContext :: MonadIO m => m GLContext+glGetCurrentContext = liftIO glGetCurrentContextFFI+{-# INLINE glGetCurrentContext #-}++glGetCurrentWindow :: MonadIO m => m Window+glGetCurrentWindow = liftIO glGetCurrentWindowFFI+{-# INLINE glGetCurrentWindow #-}++glGetDrawableSize :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m ()+glGetDrawableSize v1 v2 v3 = liftIO $ glGetDrawableSizeFFI v1 v2 v3+{-# INLINE glGetDrawableSize #-}++glGetProcAddress :: MonadIO m => CString -> m (Ptr ())+glGetProcAddress v1 = liftIO $ glGetProcAddressFFI v1+{-# INLINE glGetProcAddress #-}++glGetSwapInterval :: MonadIO m => m CInt+glGetSwapInterval = liftIO glGetSwapIntervalFFI+{-# INLINE glGetSwapInterval #-}++glLoadLibrary :: MonadIO m => CString -> m CInt+glLoadLibrary v1 = liftIO $ glLoadLibraryFFI v1+{-# INLINE glLoadLibrary #-}++glMakeCurrent :: MonadIO m => Window -> GLContext -> m CInt+glMakeCurrent v1 v2 = liftIO $ glMakeCurrentFFI v1 v2+{-# INLINE glMakeCurrent #-}++glResetAttributes :: MonadIO m => m ()+glResetAttributes = liftIO glResetAttributesFFI+{-# INLINE glResetAttributes #-}++glSetAttribute :: MonadIO m => GLattr -> CInt -> m CInt+glSetAttribute v1 v2 = liftIO $ glSetAttributeFFI v1 v2+{-# INLINE glSetAttribute #-}++glSetSwapInterval :: MonadIO m => CInt -> m CInt+glSetSwapInterval v1 = liftIO $ glSetSwapIntervalFFI v1+{-# INLINE glSetSwapInterval #-}++glSwapWindow :: MonadIO m => Window -> m ()+glSwapWindow v1 = liftIO $ glSwapWindowFFI v1+{-# INLINE glSwapWindow #-}++glUnbindTexture :: MonadIO m => Texture -> m CInt+glUnbindTexture v1 = liftIO $ glUnbindTextureFFI v1+{-# INLINE glUnbindTexture #-}++glUnloadLibrary :: MonadIO m => m ()+glUnloadLibrary = liftIO glUnloadLibraryFFI+{-# INLINE glUnloadLibrary #-}++getClosestDisplayMode :: MonadIO m => CInt -> Ptr DisplayMode -> Ptr DisplayMode -> m (Ptr DisplayMode)+getClosestDisplayMode v1 v2 v3 = liftIO $ getClosestDisplayModeFFI v1 v2 v3+{-# INLINE getClosestDisplayMode #-}++getCurrentDisplayMode :: MonadIO m => CInt -> Ptr DisplayMode -> m CInt+getCurrentDisplayMode v1 v2 = liftIO $ getCurrentDisplayModeFFI v1 v2+{-# INLINE getCurrentDisplayMode #-}++getCurrentVideoDriver :: MonadIO m => m CString+getCurrentVideoDriver = liftIO getCurrentVideoDriverFFI+{-# INLINE getCurrentVideoDriver #-}++getDesktopDisplayMode :: MonadIO m => CInt -> Ptr DisplayMode -> m CInt+getDesktopDisplayMode v1 v2 = liftIO $ getDesktopDisplayModeFFI v1 v2+{-# INLINE getDesktopDisplayMode #-}++getDisplayBounds :: MonadIO m => CInt -> Ptr Rect -> m CInt+getDisplayBounds v1 v2 = liftIO $ getDisplayBoundsFFI v1 v2+{-# INLINE getDisplayBounds #-}++getDisplayMode :: MonadIO m => CInt -> CInt -> Ptr DisplayMode -> m CInt+getDisplayMode v1 v2 v3 = liftIO $ getDisplayModeFFI v1 v2 v3+{-# INLINE getDisplayMode #-}++getDisplayName :: MonadIO m => CInt -> m CString+getDisplayName v1 = liftIO $ getDisplayNameFFI v1+{-# INLINE getDisplayName #-}++getNumDisplayModes :: MonadIO m => CInt -> m CInt+getNumDisplayModes v1 = liftIO $ getNumDisplayModesFFI v1+{-# INLINE getNumDisplayModes #-}++getNumVideoDisplays :: MonadIO m => m CInt+getNumVideoDisplays = liftIO getNumVideoDisplaysFFI+{-# INLINE getNumVideoDisplays #-}++getNumVideoDrivers :: MonadIO m => m CInt+getNumVideoDrivers = liftIO getNumVideoDriversFFI+{-# INLINE getNumVideoDrivers #-}++getVideoDriver :: MonadIO m => CInt -> m CString+getVideoDriver v1 = liftIO $ getVideoDriverFFI v1+{-# INLINE getVideoDriver #-}++getWindowBrightness :: MonadIO m => Window -> m CFloat+getWindowBrightness v1 = liftIO $ getWindowBrightnessFFI v1+{-# INLINE getWindowBrightness #-}++getWindowData :: MonadIO m => Window -> CString -> m (Ptr ())+getWindowData v1 v2 = liftIO $ getWindowDataFFI v1 v2+{-# INLINE getWindowData #-}++getWindowDisplayIndex :: MonadIO m => Window -> m CInt+getWindowDisplayIndex v1 = liftIO $ getWindowDisplayIndexFFI v1+{-# INLINE getWindowDisplayIndex #-}++getWindowDisplayMode :: MonadIO m => Window -> Ptr DisplayMode -> m CInt+getWindowDisplayMode v1 v2 = liftIO $ getWindowDisplayModeFFI v1 v2+{-# INLINE getWindowDisplayMode #-}++getWindowFlags :: MonadIO m => Window -> m Word32+getWindowFlags v1 = liftIO $ getWindowFlagsFFI v1+{-# INLINE getWindowFlags #-}++getWindowFromID :: MonadIO m => Word32 -> m Window+getWindowFromID v1 = liftIO $ getWindowFromIDFFI v1+{-# INLINE getWindowFromID #-}++getWindowGammaRamp :: MonadIO m => Window -> Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> m CInt+getWindowGammaRamp v1 v2 v3 v4 = liftIO $ getWindowGammaRampFFI v1 v2 v3 v4+{-# INLINE getWindowGammaRamp #-}++getWindowGrab :: MonadIO m => Window -> m Bool+getWindowGrab v1 = liftIO $ getWindowGrabFFI v1+{-# INLINE getWindowGrab #-}++getWindowID :: MonadIO m => Window -> m Word32+getWindowID v1 = liftIO $ getWindowIDFFI v1+{-# INLINE getWindowID #-}++getWindowMaximumSize :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m ()+getWindowMaximumSize v1 v2 v3 = liftIO $ getWindowMaximumSizeFFI v1 v2 v3+{-# INLINE getWindowMaximumSize #-}++getWindowMinimumSize :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m ()+getWindowMinimumSize v1 v2 v3 = liftIO $ getWindowMinimumSizeFFI v1 v2 v3+{-# INLINE getWindowMinimumSize #-}++getWindowPixelFormat :: MonadIO m => Window -> m Word32+getWindowPixelFormat v1 = liftIO $ getWindowPixelFormatFFI v1+{-# INLINE getWindowPixelFormat #-}++getWindowPosition :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m ()+getWindowPosition v1 v2 v3 = liftIO $ getWindowPositionFFI v1 v2 v3+{-# INLINE getWindowPosition #-}++getWindowSize :: MonadIO m => Window -> Ptr CInt -> Ptr CInt -> m ()+getWindowSize v1 v2 v3 = liftIO $ getWindowSizeFFI v1 v2 v3+{-# INLINE getWindowSize #-}++getWindowSurface :: MonadIO m => Window -> m (Ptr Surface)+getWindowSurface v1 = liftIO $ getWindowSurfaceFFI v1+{-# INLINE getWindowSurface #-}++getWindowTitle :: MonadIO m => Window -> m CString+getWindowTitle v1 = liftIO $ getWindowTitleFFI v1+{-# INLINE getWindowTitle #-}++hideWindow :: MonadIO m => Window -> m ()+hideWindow v1 = liftIO $ hideWindowFFI v1+{-# INLINE hideWindow #-}++isScreenSaverEnabled :: MonadIO m => m Bool+isScreenSaverEnabled = liftIO isScreenSaverEnabledFFI+{-# INLINE isScreenSaverEnabled #-}++maximizeWindow :: MonadIO m => Window -> m ()+maximizeWindow v1 = liftIO $ maximizeWindowFFI v1+{-# INLINE maximizeWindow #-}++minimizeWindow :: MonadIO m => Window -> m ()+minimizeWindow v1 = liftIO $ minimizeWindowFFI v1+{-# INLINE minimizeWindow #-}++raiseWindow :: MonadIO m => Window -> m ()+raiseWindow v1 = liftIO $ raiseWindowFFI v1+{-# INLINE raiseWindow #-}++restoreWindow :: MonadIO m => Window -> m ()+restoreWindow v1 = liftIO $ restoreWindowFFI v1+{-# INLINE restoreWindow #-}++setWindowBordered :: MonadIO m => Window -> Bool -> m ()+setWindowBordered v1 v2 = liftIO $ setWindowBorderedFFI v1 v2+{-# INLINE setWindowBordered #-}++setWindowBrightness :: MonadIO m => Window -> CFloat -> m CInt+setWindowBrightness v1 v2 = liftIO $ setWindowBrightnessFFI v1 v2+{-# INLINE setWindowBrightness #-}++setWindowData :: MonadIO m => Window -> CString -> Ptr () -> m (Ptr ())+setWindowData v1 v2 v3 = liftIO $ setWindowDataFFI v1 v2 v3+{-# INLINE setWindowData #-}++setWindowDisplayMode :: MonadIO m => Window -> Ptr DisplayMode -> m CInt+setWindowDisplayMode v1 v2 = liftIO $ setWindowDisplayModeFFI v1 v2+{-# INLINE setWindowDisplayMode #-}++setWindowFullscreen :: MonadIO m => Window -> Word32 -> m CInt+setWindowFullscreen v1 v2 = liftIO $ setWindowFullscreenFFI v1 v2+{-# INLINE setWindowFullscreen #-}++setWindowGammaRamp :: MonadIO m => Window -> Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> m CInt+setWindowGammaRamp v1 v2 v3 v4 = liftIO $ setWindowGammaRampFFI v1 v2 v3 v4+{-# INLINE setWindowGammaRamp #-}++setWindowGrab :: MonadIO m => Window -> Bool -> m ()+setWindowGrab v1 v2 = liftIO $ setWindowGrabFFI v1 v2+{-# INLINE setWindowGrab #-}++setWindowIcon :: MonadIO m => Window -> Ptr Surface -> m ()+setWindowIcon v1 v2 = liftIO $ setWindowIconFFI v1 v2+{-# INLINE setWindowIcon #-}++setWindowMaximumSize :: MonadIO m => Window -> CInt -> CInt -> m ()+setWindowMaximumSize v1 v2 v3 = liftIO $ setWindowMaximumSizeFFI v1 v2 v3+{-# INLINE setWindowMaximumSize #-}++setWindowMinimumSize :: MonadIO m => Window -> CInt -> CInt -> m ()+setWindowMinimumSize v1 v2 v3 = liftIO $ setWindowMinimumSizeFFI v1 v2 v3+{-# INLINE setWindowMinimumSize #-}++setWindowPosition :: MonadIO m => Window -> CInt -> CInt -> m ()+setWindowPosition v1 v2 v3 = liftIO $ setWindowPositionFFI v1 v2 v3+{-# INLINE setWindowPosition #-}++setWindowSize :: MonadIO m => Window -> CInt -> CInt -> m ()+setWindowSize v1 v2 v3 = liftIO $ setWindowSizeFFI v1 v2 v3+{-# INLINE setWindowSize #-}++setWindowTitle :: MonadIO m => Window -> CString -> m ()+setWindowTitle v1 v2 = liftIO $ setWindowTitleFFI v1 v2+{-# INLINE setWindowTitle #-}++showMessageBox :: MonadIO m => Ptr MessageBoxData -> Ptr CInt -> m CInt+showMessageBox v1 v2 = liftIO $ showMessageBoxFFI v1 v2+{-# INLINE showMessageBox #-}++showSimpleMessageBox :: MonadIO m => Word32 -> CString -> CString -> Window -> m CInt+showSimpleMessageBox v1 v2 v3 v4 = liftIO $ showSimpleMessageBoxFFI v1 v2 v3 v4+{-# INLINE showSimpleMessageBox #-}++showWindow :: MonadIO m => Window -> m ()+showWindow v1 = liftIO $ showWindowFFI v1+{-# INLINE showWindow #-}++updateWindowSurface :: MonadIO m => Window -> m CInt+updateWindowSurface v1 = liftIO $ updateWindowSurfaceFFI v1+{-# INLINE updateWindowSurface #-}++updateWindowSurfaceRects :: MonadIO m => Window -> Ptr Rect -> CInt -> m CInt+updateWindowSurfaceRects v1 v2 v3 = liftIO $ updateWindowSurfaceRectsFFI v1 v2 v3+{-# INLINE updateWindowSurfaceRects #-}++videoInit :: MonadIO m => CString -> m CInt+videoInit v1 = liftIO $ videoInitFFI v1+{-# INLINE videoInit #-}++videoQuit :: MonadIO m => m ()+videoQuit = liftIO videoQuitFFI+{-# INLINE videoQuit #-}++createRenderer :: MonadIO m => Window -> CInt -> Word32 -> m Renderer+createRenderer v1 v2 v3 = liftIO $ createRendererFFI v1 v2 v3+{-# INLINE createRenderer #-}++createSoftwareRenderer :: MonadIO m => Ptr Surface -> m Renderer+createSoftwareRenderer v1 = liftIO $ createSoftwareRendererFFI v1+{-# INLINE createSoftwareRenderer #-}++createTexture :: MonadIO m => Renderer -> Word32 -> CInt -> CInt -> CInt -> m Texture+createTexture v1 v2 v3 v4 v5 = liftIO $ createTextureFFI v1 v2 v3 v4 v5+{-# INLINE createTexture #-}++createTextureFromSurface :: MonadIO m => Renderer -> Ptr Surface -> m Texture+createTextureFromSurface v1 v2 = liftIO $ createTextureFromSurfaceFFI v1 v2+{-# INLINE createTextureFromSurface #-}++destroyRenderer :: MonadIO m => Renderer -> m ()+destroyRenderer v1 = liftIO $ destroyRendererFFI v1+{-# INLINE destroyRenderer #-}++destroyTexture :: MonadIO m => Texture -> m ()+destroyTexture v1 = liftIO $ destroyTextureFFI v1+{-# INLINE destroyTexture #-}++getNumRenderDrivers :: MonadIO m => m CInt+getNumRenderDrivers = liftIO getNumRenderDriversFFI+{-# INLINE getNumRenderDrivers #-}++getRenderDrawBlendMode :: MonadIO m => Renderer -> Ptr BlendMode -> m Int+getRenderDrawBlendMode v1 v2 = liftIO $ getRenderDrawBlendModeFFI v1 v2+{-# INLINE getRenderDrawBlendMode #-}++getRenderDrawColor :: MonadIO m => Renderer -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m CInt+getRenderDrawColor v1 v2 v3 v4 v5 = liftIO $ getRenderDrawColorFFI v1 v2 v3 v4 v5+{-# INLINE getRenderDrawColor #-}++getRenderDriverInfo :: MonadIO m => CInt -> Ptr RendererInfo -> m CInt+getRenderDriverInfo v1 v2 = liftIO $ getRenderDriverInfoFFI v1 v2+{-# INLINE getRenderDriverInfo #-}++getRenderTarget :: MonadIO m => Renderer -> m Texture+getRenderTarget v1 = liftIO $ getRenderTargetFFI v1+{-# INLINE getRenderTarget #-}++getRenderer :: MonadIO m => Window -> m Renderer+getRenderer v1 = liftIO $ getRendererFFI v1+{-# INLINE getRenderer #-}++getRendererInfo :: MonadIO m => Renderer -> Ptr RendererInfo -> m CInt+getRendererInfo v1 v2 = liftIO $ getRendererInfoFFI v1 v2+{-# INLINE getRendererInfo #-}++getRendererOutputSize :: MonadIO m => Renderer -> Ptr CInt -> Ptr CInt -> m CInt+getRendererOutputSize v1 v2 v3 = liftIO $ getRendererOutputSizeFFI v1 v2 v3+{-# INLINE getRendererOutputSize #-}++getTextureAlphaMod :: MonadIO m => Texture -> Ptr Word8 -> m CInt+getTextureAlphaMod v1 v2 = liftIO $ getTextureAlphaModFFI v1 v2+{-# INLINE getTextureAlphaMod #-}++getTextureBlendMode :: MonadIO m => Texture -> Ptr BlendMode -> m CInt+getTextureBlendMode v1 v2 = liftIO $ getTextureBlendModeFFI v1 v2+{-# INLINE getTextureBlendMode #-}++getTextureColorMod :: MonadIO m => Texture -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m CInt+getTextureColorMod v1 v2 v3 v4 = liftIO $ getTextureColorModFFI v1 v2 v3 v4+{-# INLINE getTextureColorMod #-}++lockTexture :: MonadIO m => Texture -> Ptr Rect -> Ptr (Ptr ()) -> Ptr CInt -> m CInt+lockTexture v1 v2 v3 v4 = liftIO $ lockTextureFFI v1 v2 v3 v4+{-# INLINE lockTexture #-}++queryTexture :: MonadIO m => Texture -> Ptr Word32 -> Ptr CInt -> Ptr CInt -> Ptr CInt -> m CInt+queryTexture v1 v2 v3 v4 v5 = liftIO $ queryTextureFFI v1 v2 v3 v4 v5+{-# INLINE queryTexture #-}++renderClear :: MonadIO m => Renderer -> m CInt+renderClear v1 = liftIO $ renderClearFFI v1+{-# INLINE renderClear #-}++renderCopy :: MonadIO m => Renderer -> Texture -> Ptr Rect -> Ptr Rect -> m CInt+renderCopy v1 v2 v3 v4 = liftIO $ renderCopyFFI v1 v2 v3 v4+{-# INLINE renderCopy #-}++renderCopyEx :: MonadIO m => Renderer -> Texture -> Ptr Rect -> Ptr Rect -> CDouble -> Ptr Point -> RendererFlip -> m CInt+renderCopyEx v1 v2 v3 v4 v5 v6 v7 = liftIO $ renderCopyExFFI v1 v2 v3 v4 v5 v6 v7+{-# INLINE renderCopyEx #-}++renderDrawLine :: MonadIO m => Renderer -> CInt -> CInt -> CInt -> CInt -> m CInt+renderDrawLine v1 v2 v3 v4 v5 = liftIO $ renderDrawLineFFI v1 v2 v3 v4 v5+{-# INLINE renderDrawLine #-}++renderDrawLines :: MonadIO m => Renderer -> Ptr Point -> CInt -> m CInt+renderDrawLines v1 v2 v3 = liftIO $ renderDrawLinesFFI v1 v2 v3+{-# INLINE renderDrawLines #-}++renderDrawPoint :: MonadIO m => Renderer -> CInt -> CInt -> m CInt+renderDrawPoint v1 v2 v3 = liftIO $ renderDrawPointFFI v1 v2 v3+{-# INLINE renderDrawPoint #-}++renderDrawPoints :: MonadIO m => Renderer -> Ptr Point -> CInt -> m CInt+renderDrawPoints v1 v2 v3 = liftIO $ renderDrawPointsFFI v1 v2 v3+{-# INLINE renderDrawPoints #-}++renderDrawRect :: MonadIO m => Renderer -> Ptr Rect -> m CInt+renderDrawRect v1 v2 = liftIO $ renderDrawRectFFI v1 v2+{-# INLINE renderDrawRect #-}++renderDrawRects :: MonadIO m => Renderer -> Ptr Rect -> CInt -> m CInt+renderDrawRects v1 v2 v3 = liftIO $ renderDrawRectsFFI v1 v2 v3+{-# INLINE renderDrawRects #-}++renderFillRect :: MonadIO m => Renderer -> Ptr Rect -> m CInt+renderFillRect v1 v2 = liftIO $ renderFillRectFFI v1 v2+{-# INLINE renderFillRect #-}++renderFillRects :: MonadIO m => Renderer -> Ptr Rect -> CInt -> m CInt+renderFillRects v1 v2 v3 = liftIO $ renderFillRectsFFI v1 v2 v3+{-# INLINE renderFillRects #-}++renderGetClipRect :: MonadIO m => Renderer -> Ptr Rect -> m ()+renderGetClipRect v1 v2 = liftIO $ renderGetClipRectFFI v1 v2+{-# INLINE renderGetClipRect #-}++renderGetLogicalSize :: MonadIO m => Renderer -> Ptr CInt -> Ptr CInt -> m ()+renderGetLogicalSize v1 v2 v3 = liftIO $ renderGetLogicalSizeFFI v1 v2 v3+{-# INLINE renderGetLogicalSize #-}++renderGetScale :: MonadIO m => Renderer -> Ptr CFloat -> Ptr CFloat -> m ()+renderGetScale v1 v2 v3 = liftIO $ renderGetScaleFFI v1 v2 v3+{-# INLINE renderGetScale #-}++renderGetViewport :: MonadIO m => Renderer -> Ptr Rect -> m ()+renderGetViewport v1 v2 = liftIO $ renderGetViewportFFI v1 v2+{-# INLINE renderGetViewport #-}++renderPresent :: MonadIO m => Renderer -> m ()+renderPresent v1 = liftIO $ renderPresentFFI v1+{-# INLINE renderPresent #-}++renderReadPixels :: MonadIO m => Renderer -> Ptr Rect -> Word32 -> Ptr () -> CInt -> m CInt+renderReadPixels v1 v2 v3 v4 v5 = liftIO $ renderReadPixelsFFI v1 v2 v3 v4 v5+{-# INLINE renderReadPixels #-}++renderSetClipRect :: MonadIO m => Renderer -> Ptr Rect -> m CInt+renderSetClipRect v1 v2 = liftIO $ renderSetClipRectFFI v1 v2+{-# INLINE renderSetClipRect #-}++renderSetLogicalSize :: MonadIO m => Renderer -> CInt -> CInt -> m CInt+renderSetLogicalSize v1 v2 v3 = liftIO $ renderSetLogicalSizeFFI v1 v2 v3+{-# INLINE renderSetLogicalSize #-}++renderSetScale :: MonadIO m => Renderer -> CFloat -> CFloat -> m CInt+renderSetScale v1 v2 v3 = liftIO $ renderSetScaleFFI v1 v2 v3+{-# INLINE renderSetScale #-}++renderSetViewport :: MonadIO m => Renderer -> Ptr Rect -> m CInt+renderSetViewport v1 v2 = liftIO $ renderSetViewportFFI v1 v2+{-# INLINE renderSetViewport #-}++renderTargetSupported :: MonadIO m => Renderer -> m Bool+renderTargetSupported v1 = liftIO $ renderTargetSupportedFFI v1+{-# INLINE renderTargetSupported #-}++setRenderDrawBlendMode :: MonadIO m => Renderer -> BlendMode -> m CInt+setRenderDrawBlendMode v1 v2 = liftIO $ setRenderDrawBlendModeFFI v1 v2+{-# INLINE setRenderDrawBlendMode #-}++setRenderDrawColor :: MonadIO m => Renderer -> Word8 -> Word8 -> Word8 -> Word8 -> m CInt+setRenderDrawColor v1 v2 v3 v4 v5 = liftIO $ setRenderDrawColorFFI v1 v2 v3 v4 v5+{-# INLINE setRenderDrawColor #-}++setRenderTarget :: MonadIO m => Renderer -> Texture -> m CInt+setRenderTarget v1 v2 = liftIO $ setRenderTargetFFI v1 v2+{-# INLINE setRenderTarget #-}++setTextureAlphaMod :: MonadIO m => Texture -> Word8 -> m CInt+setTextureAlphaMod v1 v2 = liftIO $ setTextureAlphaModFFI v1 v2+{-# INLINE setTextureAlphaMod #-}++setTextureBlendMode :: MonadIO m => Texture -> BlendMode -> m CInt+setTextureBlendMode v1 v2 = liftIO $ setTextureBlendModeFFI v1 v2+{-# INLINE setTextureBlendMode #-}++setTextureColorMod :: MonadIO m => Texture -> Word8 -> Word8 -> Word8 -> m CInt+setTextureColorMod v1 v2 v3 v4 = liftIO $ setTextureColorModFFI v1 v2 v3 v4+{-# INLINE setTextureColorMod #-}++unlockTexture :: MonadIO m => Texture -> m ()+unlockTexture v1 = liftIO $ unlockTextureFFI v1+{-# INLINE unlockTexture #-}++updateTexture :: MonadIO m => Texture -> Ptr Rect -> Ptr () -> CInt -> m CInt+updateTexture v1 v2 v3 v4 = liftIO $ updateTextureFFI v1 v2 v3 v4+{-# INLINE updateTexture #-}++updateYUVTexture :: MonadIO m => Texture -> Ptr Rect -> Ptr Word8 -> CInt -> Ptr Word8 -> CInt -> Ptr Word8 -> CInt -> m CInt+updateYUVTexture v1 v2 v3 v4 v5 v6 v7 v8 = liftIO $ updateYUVTextureFFI v1 v2 v3 v4 v5 v6 v7 v8+{-# INLINE updateYUVTexture #-}++allocFormat :: MonadIO m => Word32 -> m (Ptr PixelFormat)+allocFormat v1 = liftIO $ allocFormatFFI v1+{-# INLINE allocFormat #-}++allocPalette :: MonadIO m => CInt -> m (Ptr Palette)+allocPalette v1 = liftIO $ allocPaletteFFI v1+{-# INLINE allocPalette #-}++calculateGammaRamp :: MonadIO m => CFloat -> Ptr Word16 -> m ()+calculateGammaRamp v1 v2 = liftIO $ calculateGammaRampFFI v1 v2+{-# INLINE calculateGammaRamp #-}++freeFormat :: MonadIO m => Ptr PixelFormat -> m ()+freeFormat v1 = liftIO $ freeFormatFFI v1+{-# INLINE freeFormat #-}++freePalette :: MonadIO m => Ptr Palette -> m ()+freePalette v1 = liftIO $ freePaletteFFI v1+{-# INLINE freePalette #-}++getPixelFormatName :: MonadIO m => Word32 -> m CString+getPixelFormatName v1 = liftIO $ getPixelFormatNameFFI v1+{-# INLINE getPixelFormatName #-}++getRGB :: MonadIO m => Word32 -> Ptr PixelFormat -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m ()+getRGB v1 v2 v3 v4 v5 = liftIO $ getRGBFFI v1 v2 v3 v4 v5+{-# INLINE getRGB #-}++getRGBA :: MonadIO m => Word32 -> Ptr PixelFormat -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m ()+getRGBA v1 v2 v3 v4 v5 v6 = liftIO $ getRGBAFFI v1 v2 v3 v4 v5 v6+{-# INLINE getRGBA #-}++mapRGB :: MonadIO m => Ptr PixelFormat -> Word8 -> Word8 -> Word8 -> m Word32+mapRGB v1 v2 v3 v4 = liftIO $ mapRGBFFI v1 v2 v3 v4+{-# INLINE mapRGB #-}++mapRGBA :: MonadIO m => Ptr PixelFormat -> Word8 -> Word8 -> Word8 -> Word8 -> m Word32+mapRGBA v1 v2 v3 v4 v5 = liftIO $ mapRGBAFFI v1 v2 v3 v4 v5+{-# INLINE mapRGBA #-}++masksToPixelFormatEnum :: MonadIO m => CInt -> Word32 -> Word32 -> Word32 -> Word32 -> m Word32+masksToPixelFormatEnum v1 v2 v3 v4 v5 = liftIO $ masksToPixelFormatEnumFFI v1 v2 v3 v4 v5+{-# INLINE masksToPixelFormatEnum #-}++pixelFormatEnumToMasks :: MonadIO m => Word32 -> Ptr CInt -> Ptr Word32 -> Ptr Word32 -> Ptr Word32 -> Ptr Word32 -> m Bool+pixelFormatEnumToMasks v1 v2 v3 v4 v5 v6 = liftIO $ pixelFormatEnumToMasksFFI v1 v2 v3 v4 v5 v6+{-# INLINE pixelFormatEnumToMasks #-}++setPaletteColors :: MonadIO m => Ptr Palette -> Ptr Color -> CInt -> CInt -> m CInt+setPaletteColors v1 v2 v3 v4 = liftIO $ setPaletteColorsFFI v1 v2 v3 v4+{-# INLINE setPaletteColors #-}++setPixelFormatPalette :: MonadIO m => Ptr PixelFormat -> Ptr Palette -> m CInt+setPixelFormatPalette v1 v2 = liftIO $ setPixelFormatPaletteFFI v1 v2+{-# INLINE setPixelFormatPalette #-}++enclosePoints :: MonadIO m => Ptr Point -> CInt -> Ptr Rect -> Ptr Rect -> m Bool+enclosePoints v1 v2 v3 v4 = liftIO $ enclosePointsFFI v1 v2 v3 v4+{-# INLINE enclosePoints #-}++hasIntersection :: MonadIO m => Ptr Rect -> Ptr Rect -> m Bool+hasIntersection v1 v2 = liftIO $ hasIntersectionFFI v1 v2+{-# INLINE hasIntersection #-}++intersectRect :: MonadIO m => Ptr Rect -> Ptr Rect -> Ptr Rect -> m Bool+intersectRect v1 v2 v3 = liftIO $ intersectRectFFI v1 v2 v3+{-# INLINE intersectRect #-}++intersectRectAndLine :: MonadIO m => Ptr Rect -> Ptr CInt -> Ptr CInt -> Ptr CInt -> Ptr CInt -> m Bool+intersectRectAndLine v1 v2 v3 v4 v5 = liftIO $ intersectRectAndLineFFI v1 v2 v3 v4 v5+{-# INLINE intersectRectAndLine #-}++unionRect :: MonadIO m => Ptr Rect -> Ptr Rect -> Ptr Rect -> m ()+unionRect v1 v2 v3 = liftIO $ unionRectFFI v1 v2 v3+{-# INLINE unionRect #-}++blitScaled :: MonadIO m => Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> m CInt+blitScaled v1 v2 v3 v4 = liftIO $ blitScaledFFI v1 v2 v3 v4+{-# INLINE blitScaled #-}++blitSurface :: MonadIO m => Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> m CInt+blitSurface v1 v2 v3 v4 = liftIO $ blitSurfaceFFI v1 v2 v3 v4+{-# INLINE blitSurface #-}++convertPixels :: MonadIO m => CInt -> CInt -> Word32 -> Ptr () -> CInt -> Word32 -> Ptr () -> CInt -> m CInt+convertPixels v1 v2 v3 v4 v5 v6 v7 v8 = liftIO $ convertPixelsFFI v1 v2 v3 v4 v5 v6 v7 v8+{-# INLINE convertPixels #-}++convertSurface :: MonadIO m => Ptr Surface -> Ptr PixelFormat -> Word32 -> m (Ptr Surface)+convertSurface v1 v2 v3 = liftIO $ convertSurfaceFFI v1 v2 v3+{-# INLINE convertSurface #-}++convertSurfaceFormat :: MonadIO m => Ptr Surface -> Word32 -> Word32 -> m (Ptr Surface)+convertSurfaceFormat v1 v2 v3 = liftIO $ convertSurfaceFormatFFI v1 v2 v3+{-# INLINE convertSurfaceFormat #-}++createRGBSurface :: MonadIO m => Word32 -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> m (Ptr Surface)+createRGBSurface v1 v2 v3 v4 v5 v6 v7 v8 = liftIO $ createRGBSurfaceFFI v1 v2 v3 v4 v5 v6 v7 v8+{-# INLINE createRGBSurface #-}++createRGBSurfaceFrom :: MonadIO m => Ptr () -> CInt -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> m (Ptr Surface)+createRGBSurfaceFrom v1 v2 v3 v4 v5 v6 v7 v8 v9 = liftIO $ createRGBSurfaceFromFFI v1 v2 v3 v4 v5 v6 v7 v8 v9+{-# INLINE createRGBSurfaceFrom #-}++fillRect :: MonadIO m => Ptr Surface -> Ptr Rect -> Word32 -> m CInt+fillRect v1 v2 v3 = liftIO $ fillRectFFI v1 v2 v3+{-# INLINE fillRect #-}++fillRects :: MonadIO m => Ptr Surface -> Ptr Rect -> CInt -> Word32 -> m CInt+fillRects v1 v2 v3 v4 = liftIO $ fillRectsFFI v1 v2 v3 v4+{-# INLINE fillRects #-}++freeSurface :: MonadIO m => Ptr Surface -> m ()+freeSurface v1 = liftIO $ freeSurfaceFFI v1+{-# INLINE freeSurface #-}++getClipRect :: MonadIO m => Ptr Surface -> Ptr Rect -> m ()+getClipRect v1 v2 = liftIO $ getClipRectFFI v1 v2+{-# INLINE getClipRect #-}++getColorKey :: MonadIO m => Ptr Surface -> Ptr Word32 -> m CInt+getColorKey v1 v2 = liftIO $ getColorKeyFFI v1 v2+{-# INLINE getColorKey #-}++getSurfaceAlphaMod :: MonadIO m => Ptr Surface -> Ptr Word8 -> m CInt+getSurfaceAlphaMod v1 v2 = liftIO $ getSurfaceAlphaModFFI v1 v2+{-# INLINE getSurfaceAlphaMod #-}++getSurfaceBlendMode :: MonadIO m => Ptr Surface -> Ptr BlendMode -> m CInt+getSurfaceBlendMode v1 v2 = liftIO $ getSurfaceBlendModeFFI v1 v2+{-# INLINE getSurfaceBlendMode #-}++getSurfaceColorMod :: MonadIO m => Ptr Surface -> Ptr Word8 -> Ptr Word8 -> Ptr Word8 -> m CInt+getSurfaceColorMod v1 v2 v3 v4 = liftIO $ getSurfaceColorModFFI v1 v2 v3 v4+{-# INLINE getSurfaceColorMod #-}++loadBMP :: MonadIO m => CString -> m (Ptr Surface)+loadBMP file = liftIO $ do+ rw <- withCString "rb" $ rwFromFile file+ loadBMP_RW rw 1+{-# INLINE loadBMP #-}++loadBMP_RW :: MonadIO m => Ptr RWops -> CInt -> m (Ptr Surface)+loadBMP_RW v1 v2 = liftIO $ loadBMP_RWFFI v1 v2+{-# INLINE loadBMP_RW #-}++lockSurface :: MonadIO m => Ptr Surface -> m CInt+lockSurface v1 = liftIO $ lockSurfaceFFI v1+{-# INLINE lockSurface #-}++lowerBlit :: MonadIO m => Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> m CInt+lowerBlit v1 v2 v3 v4 = liftIO $ lowerBlitFFI v1 v2 v3 v4+{-# INLINE lowerBlit #-}++lowerBlitScaled :: MonadIO m => Ptr Surface -> Ptr Rect -> Ptr Surface -> Ptr Rect -> m CInt+lowerBlitScaled v1 v2 v3 v4 = liftIO $ lowerBlitScaledFFI v1 v2 v3 v4+{-# INLINE lowerBlitScaled #-}++saveBMP :: MonadIO m => Ptr Surface -> CString -> m CInt+saveBMP surface file = liftIO $ do+ rw <- withCString "wb" $ rwFromFile file+ saveBMP_RW surface rw 1+{-# INLINE saveBMP #-}++saveBMP_RW :: MonadIO m => Ptr Surface -> Ptr RWops -> CInt -> m CInt+saveBMP_RW v1 v2 v3 = liftIO $ saveBMP_RWFFI v1 v2 v3+{-# INLINE saveBMP_RW #-}++setClipRect :: MonadIO m => Ptr Surface -> Ptr Rect -> m Bool+setClipRect v1 v2 = liftIO $ setClipRectFFI v1 v2+{-# INLINE setClipRect #-}++setColorKey :: MonadIO m => Ptr Surface -> CInt -> Word32 -> m CInt+setColorKey v1 v2 v3 = liftIO $ setColorKeyFFI v1 v2 v3+{-# INLINE setColorKey #-}++setSurfaceAlphaMod :: MonadIO m => Ptr Surface -> Word8 -> m CInt+setSurfaceAlphaMod v1 v2 = liftIO $ setSurfaceAlphaModFFI v1 v2+{-# INLINE setSurfaceAlphaMod #-}++setSurfaceBlendMode :: MonadIO m => Ptr Surface -> BlendMode -> m CInt+setSurfaceBlendMode v1 v2 = liftIO $ setSurfaceBlendModeFFI v1 v2+{-# INLINE setSurfaceBlendMode #-}++setSurfaceColorMod :: MonadIO m => Ptr Surface -> Word8 -> Word8 -> Word8 -> m CInt+setSurfaceColorMod v1 v2 v3 v4 = liftIO $ setSurfaceColorModFFI v1 v2 v3 v4+{-# INLINE setSurfaceColorMod #-}++setSurfacePalette :: MonadIO m => Ptr Surface -> Ptr Palette -> m CInt+setSurfacePalette v1 v2 = liftIO $ setSurfacePaletteFFI v1 v2+{-# INLINE setSurfacePalette #-}++setSurfaceRLE :: MonadIO m => Ptr Surface -> CInt -> m CInt+setSurfaceRLE v1 v2 = liftIO $ setSurfaceRLEFFI v1 v2+{-# INLINE setSurfaceRLE #-}++unlockSurface :: MonadIO m => Ptr Surface -> m ()+unlockSurface v1 = liftIO $ unlockSurfaceFFI v1+{-# INLINE unlockSurface #-}++getWindowWMInfo :: MonadIO m => Window -> SysWMinfo -> m Bool+getWindowWMInfo v1 v2 = liftIO $ getWindowWMInfoFFI v1 v2+{-# INLINE getWindowWMInfo #-}++getClipboardText :: MonadIO m => m CString+getClipboardText = liftIO getClipboardTextFFI+{-# INLINE getClipboardText #-}++hasClipboardText :: MonadIO m => m Bool+hasClipboardText = liftIO hasClipboardTextFFI+{-# INLINE hasClipboardText #-}++setClipboardText :: MonadIO m => CString -> m CInt+setClipboardText v1 = liftIO $ setClipboardTextFFI v1+{-# INLINE setClipboardText #-}
src/SDL/Time.hs view
@@ -1,95 +1,95 @@-{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE OverloadedStrings #-} -module SDL.Time - ( -- * Time Measurement - ticks - , time - - -- * Timer - , delay - , TimerCallback - , Timer - , RetriggerTimer(..) - , addTimer - , removeTimer - ) where - -import Control.Monad.IO.Class (MonadIO, liftIO) -import Data.Data (Data) -import Data.Typeable -import Data.Word -import Foreign -import GHC.Generics (Generic) - -import SDL.Exception - -import qualified SDL.Raw.Timer as Raw -import qualified SDL.Raw.Types as Raw - --- | Number of milliseconds since library initialization. --- --- See @<https://wiki.libsdl.org/SDL_GetTicks SDL_GetTicks>@ for C documentation. -ticks :: MonadIO m => m Word32 -ticks = Raw.getTicks - --- | The current time in seconds since some arbitrary starting point (consist over the life of the application). --- --- This time is derived from the system's performance counter - see @<https://wiki.libsdl.org/SDL_GetPerformanceFrequency SDL_GetPerformanceFrequency>@ and @<https://wiki.libsdl.org/SDL_GetPerformanceCounter SDL_GetPerformanceCounter>@ for C documentation about the implementation. -time :: (Fractional a, MonadIO m) => m a -time = do - freq <- Raw.getPerformanceFrequency - cnt <- Raw.getPerformanceCounter - return $ fromIntegral cnt / fromIntegral freq - --- | Wait a specified number of milliseconds before returning. --- --- Users are generally recommended to use 'threadDelay' instead, to take advantage of the abilities of the Haskell runtime. --- --- See @<https://wiki.libsdl.org/SDL_Delay SDL_Delay>@ for C documentation. -delay :: MonadIO m => Word32 -> m () -delay = Raw.delay - --- | 'RetriggerTimer' allows a callback to inform SDL if the timer should be retriggered or cancelled -data RetriggerTimer - = Reschedule Word32 - -- ^ Retrigger the timer again in a given number of milliseconds. - | Cancel - -- ^ Cancel future invocations of this timer. - deriving (Data, Eq, Generic, Ord, Read, Show, Typeable) - --- | A 'TimerCallback' is called with the interval size of the callback. It can return information as to whether or not the timer should continue to exist. -type TimerCallback = Word32 -> IO RetriggerTimer - --- | A timer created by 'addTimer'. This 'Timer' can be removed with 'removeTimer'. -newtype Timer = - Timer {runTimerRemoval :: IO Bool} - --- | Set up a callback function to be run on a separate thread after the specified number of milliseconds has elapsed. --- --- See @<https://wiki.libsdl.org/SDL_AddTimer SDL_AddTimer>@ for C documentation. -addTimer :: MonadIO m => Word32 -> TimerCallback -> m Timer -addTimer timeout callback = liftIO $ do - cb <- Raw.mkTimerCallback wrappedCb - tid <- throwIf0 "addTimer" "SDL_AddTimer" $ Raw.addTimer timeout cb nullPtr - return (Timer $ auxRemove cb tid) - where - wrappedCb :: Word32 -> Ptr () -> IO Word32 - wrappedCb w _ = do - next <- callback w - return $ case next of - Cancel -> 0 - Reschedule n -> n - - auxRemove :: Raw.TimerCallback -> Raw.TimerID -> IO Bool - auxRemove cb tid = do - isSuccess <- Raw.removeTimer tid - if (isSuccess) - then freeHaskellFunPtr cb >> return True - else return False - --- | Remove a 'Timer'. --- --- See @<https://wiki.libsdl.org/SDL_RemoveTimer SDL_RemoveTimer>@ for C documentation. -removeTimer :: MonadIO m => Timer -> m Bool -removeTimer f = liftIO $ runTimerRemoval f +{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE OverloadedStrings #-}+module SDL.Time+ ( -- * Time Measurement+ ticks+ , time++ -- * Timer+ , delay+ , TimerCallback+ , Timer+ , RetriggerTimer(..)+ , addTimer+ , removeTimer+ ) where++import Control.Monad.IO.Class (MonadIO, liftIO)+import Data.Data (Data)+import Data.Typeable+import Data.Word+import Foreign+import GHC.Generics (Generic)++import SDL.Exception++import qualified SDL.Raw.Timer as Raw+import qualified SDL.Raw.Types as Raw++-- | Number of milliseconds since library initialization.+--+-- See @<https://wiki.libsdl.org/SDL_GetTicks SDL_GetTicks>@ for C documentation.+ticks :: MonadIO m => m Word32+ticks = Raw.getTicks++-- | The current time in seconds since some arbitrary starting point (consist over the life of the application).+--+-- This time is derived from the system's performance counter - see @<https://wiki.libsdl.org/SDL_GetPerformanceFrequency SDL_GetPerformanceFrequency>@ and @<https://wiki.libsdl.org/SDL_GetPerformanceCounter SDL_GetPerformanceCounter>@ for C documentation about the implementation.+time :: (Fractional a, MonadIO m) => m a+time = do+ freq <- Raw.getPerformanceFrequency+ cnt <- Raw.getPerformanceCounter+ return $ fromIntegral cnt / fromIntegral freq++-- | Wait a specified number of milliseconds before returning.+--+-- Users are generally recommended to use 'threadDelay' instead, to take advantage of the abilities of the Haskell runtime.+--+-- See @<https://wiki.libsdl.org/SDL_Delay SDL_Delay>@ for C documentation.+delay :: MonadIO m => Word32 -> m ()+delay = Raw.delay++-- | 'RetriggerTimer' allows a callback to inform SDL if the timer should be retriggered or cancelled+data RetriggerTimer+ = Reschedule Word32+ -- ^ Retrigger the timer again in a given number of milliseconds.+ | Cancel+ -- ^ Cancel future invocations of this timer.+ deriving (Data, Eq, Generic, Ord, Read, Show, Typeable)++-- | A 'TimerCallback' is called with the interval size of the callback. It can return information as to whether or not the timer should continue to exist.+type TimerCallback = Word32 -> IO RetriggerTimer++-- | A timer created by 'addTimer'. This 'Timer' can be removed with 'removeTimer'.+newtype Timer =+ Timer {runTimerRemoval :: IO Bool}++-- | Set up a callback function to be run on a separate thread after the specified number of milliseconds has elapsed.+--+-- See @<https://wiki.libsdl.org/SDL_AddTimer SDL_AddTimer>@ for C documentation.+addTimer :: MonadIO m => Word32 -> TimerCallback -> m Timer+addTimer timeout callback = liftIO $ do+ cb <- Raw.mkTimerCallback wrappedCb+ tid <- throwIf0 "addTimer" "SDL_AddTimer" $ Raw.addTimer timeout cb nullPtr+ return (Timer $ auxRemove cb tid)+ where+ wrappedCb :: Word32 -> Ptr () -> IO Word32+ wrappedCb w _ = do+ next <- callback w+ return $ case next of+ Cancel -> 0+ Reschedule n -> n++ auxRemove :: Raw.TimerCallback -> Raw.TimerID -> IO Bool+ auxRemove cb tid = do+ isSuccess <- Raw.removeTimer tid+ if (isSuccess)+ then freeHaskellFunPtr cb >> return True+ else return False++-- | Remove a 'Timer'.+--+-- See @<https://wiki.libsdl.org/SDL_RemoveTimer SDL_RemoveTimer>@ for C documentation.+removeTimer :: MonadIO m => Timer -> m Bool+removeTimer f = liftIO $ runTimerRemoval f