module DearImGui.Impl.SDL3
( windowPtr
, rendererPtr
, eventPtr
, gamepadPtr
, initForOpenGL
, initForVulkan
, initForSDLRenderer
, initForSDLGPU
, initForOther
, withInitForOpenGL
, withInitForVulkan
, withInitForSDLRenderer
, withInitForSDLGPU
, withInitForOther
, processEvent
, pollEvent
, Raw.newFrame
, Raw.setGamepadMode
, Raw.setMouseCaptureMode
, Raw.shutdown
) where
import Control.Monad (void, when)
import Control.Monad.IO.Unlift (MonadUnliftIO)
import Foreign.Marshal.Utils (toBool)
import Foreign.Ptr (Ptr, castPtr)
import SDL3.Sys qualified as SDL3
import DearImGui.Impl.Init (withInitOrFail)
import DearImGui.Raw.Impl.SDL3 (SDL_Event, SDL_Gamepad, SDL_Renderer, SDL_Window)
import DearImGui.Raw.Impl.SDL3 qualified as Raw
windowPtr :: Ptr SDL3.SDL_Window -> Ptr SDL_Window
windowPtr = castPtr
rendererPtr :: Ptr SDL3.SDL_Renderer -> Ptr SDL_Renderer
rendererPtr = castPtr
eventPtr :: Ptr SDL3.SDL_Event -> Ptr SDL_Event
eventPtr = castPtr
gamepadPtr :: Ptr SDL3.SDL_Gamepad -> Ptr SDL_Gamepad
gamepadPtr = castPtr
initForOpenGL :: Ptr SDL3.SDL_Window -> SDL3.SDL_GLContext -> IO Bool
initForOpenGL window (SDL3.SDL_GLContext context) =
toBool <$> Raw.initForOpenGL (windowPtr window) (castPtr context)
initForVulkan :: Ptr SDL3.SDL_Window -> IO Bool
initForVulkan window =
toBool <$> Raw.initForVulkan (windowPtr window)
initForSDLRenderer :: Ptr SDL3.SDL_Window -> Ptr SDL3.SDL_Renderer -> IO Bool
initForSDLRenderer window renderer =
toBool <$> Raw.initForSDLRenderer (windowPtr window) (rendererPtr renderer)
initForSDLGPU :: Ptr SDL3.SDL_Window -> IO Bool
initForSDLGPU window =
toBool <$> Raw.initForSDLGPU (windowPtr window)
initForOther :: Ptr SDL3.SDL_Window -> IO Bool
initForOther window =
toBool <$> Raw.initForOther (windowPtr window)
withInitForOpenGL :: (MonadUnliftIO m) => Ptr SDL3.SDL_Window -> SDL3.SDL_GLContext -> m a -> m a
withInitForOpenGL window context =
withInitOrFail "ImGui_ImplSDL3_InitForOpenGL" (initForOpenGL window context) Raw.shutdown
withInitForVulkan :: (MonadUnliftIO m) => Ptr SDL3.SDL_Window -> m a -> m a
withInitForVulkan window =
withInitOrFail "ImGui_ImplSDL3_InitForVulkan" (initForVulkan window) Raw.shutdown
withInitForSDLRenderer :: (MonadUnliftIO m) => Ptr SDL3.SDL_Window -> Ptr SDL3.SDL_Renderer -> m a -> m a
withInitForSDLRenderer window renderer =
withInitOrFail "ImGui_ImplSDL3_InitForSDLRenderer" (initForSDLRenderer window renderer) Raw.shutdown
withInitForSDLGPU :: (MonadUnliftIO m) => Ptr SDL3.SDL_Window -> m a -> m a
withInitForSDLGPU window =
withInitOrFail "ImGui_ImplSDL3_InitForSDLGPU" (initForSDLGPU window) Raw.shutdown
withInitForOther :: (MonadUnliftIO m) => Ptr SDL3.SDL_Window -> m a -> m a
withInitForOther window =
withInitOrFail "ImGui_ImplSDL3_InitForOther" (initForOther window) Raw.shutdown
processEvent :: Ptr SDL3.SDL_Event -> IO Bool
processEvent event =
toBool <$> Raw.processEvent (eventPtr event)
pollEvent :: Ptr SDL3.SDL_Event -> IO Bool
pollEvent event = do
pending <- SDL3.pollEventSafe event
when pending $
void (processEvent event)
pure pending