mirror of
https://github.com/Drezil/dear-imgui.hs.git
synced 2024-11-24 01:27:00 +00:00
Add support for dispatching raw SDL events to Dear ImGui (#195)
This commit is contained in:
parent
47402c1a93
commit
49f7bb245e
@ -21,12 +21,14 @@ module DearImGui.SDL (
|
|||||||
, sdl2Shutdown
|
, sdl2Shutdown
|
||||||
, pollEventWithImGui
|
, pollEventWithImGui
|
||||||
, pollEventsWithImGui
|
, pollEventsWithImGui
|
||||||
|
-- *** Raw
|
||||||
|
, dispatchRawEvent
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
-- base
|
-- base
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
( when )
|
( void, when )
|
||||||
import Foreign.Marshal.Alloc
|
import Foreign.Marshal.Alloc
|
||||||
( alloca )
|
( alloca )
|
||||||
import Foreign.Ptr
|
import Foreign.Ptr
|
||||||
@ -42,6 +44,7 @@ import qualified Language.C.Inline.Cpp as Cpp
|
|||||||
import SDL
|
import SDL
|
||||||
import SDL.Raw.Enum as Raw
|
import SDL.Raw.Enum as Raw
|
||||||
import qualified SDL.Raw.Event as Raw
|
import qualified SDL.Raw.Event as Raw
|
||||||
|
import qualified SDL.Raw.Types as Raw
|
||||||
|
|
||||||
-- transformers
|
-- transformers
|
||||||
import Control.Monad.IO.Class
|
import Control.Monad.IO.Class
|
||||||
@ -77,11 +80,24 @@ pollEventWithImGui = liftIO do
|
|||||||
nEvents <- Raw.peepEvents evPtr 1 Raw.SDL_PEEKEVENT Raw.SDL_FIRSTEVENT Raw.SDL_LASTEVENT
|
nEvents <- Raw.peepEvents evPtr 1 Raw.SDL_PEEKEVENT Raw.SDL_FIRSTEVENT Raw.SDL_LASTEVENT
|
||||||
|
|
||||||
when (nEvents > 0) do
|
when (nEvents > 0) do
|
||||||
let evPtr' = castPtr evPtr :: Ptr ()
|
void $ dispatchRawEvent evPtr
|
||||||
[C.exp| void { ImGui_ImplSDL2_ProcessEvent((SDL_Event*) $(void* evPtr')) } |]
|
|
||||||
|
|
||||||
pollEvent
|
pollEvent
|
||||||
|
|
||||||
|
-- | Dispatch a raw 'Raw.Event' value to Dear ImGui.
|
||||||
|
--
|
||||||
|
-- You may want this function instead of 'pollEventWithImGui' if you do not use
|
||||||
|
-- @sdl2@'s higher-level 'Event' type (e.g. your application has its own polling
|
||||||
|
-- mechanism).
|
||||||
|
--
|
||||||
|
-- __It is your application's responsibility to both manage the input__
|
||||||
|
-- __pointer's memory and to fill the memory location with a raw 'Raw.Event'__
|
||||||
|
-- __value.__
|
||||||
|
dispatchRawEvent :: MonadIO m => Ptr Raw.Event -> m Bool
|
||||||
|
dispatchRawEvent evPtr = liftIO do
|
||||||
|
let evPtr' = castPtr evPtr :: Ptr ()
|
||||||
|
(0 /=) <$> [C.exp| bool { ImGui_ImplSDL2_ProcessEvent((const SDL_Event*) $(void* evPtr')) } |]
|
||||||
|
|
||||||
-- | Like the SDL2 'pollEvents' function, while also dispatching the events to
|
-- | Like the SDL2 'pollEvents' function, while also dispatching the events to
|
||||||
-- Dear ImGui. See 'pollEventWithImGui'.
|
-- Dear ImGui. See 'pollEventWithImGui'.
|
||||||
pollEventsWithImGui :: MonadIO m => m [Event]
|
pollEventsWithImGui :: MonadIO m => m [Event]
|
||||||
|
Loading…
Reference in New Issue
Block a user