From 36a38f774a41d2050108874f2ff2321cabeb6942 Mon Sep 17 00:00:00 2001 From: Ollie Charles Date: Wed, 27 Jan 2021 09:12:38 +0000 Subject: [PATCH] Wrap GetCurrentContext and SetCurrentContext --- src/DearImGui.hs | 20 +++++++++++++++++--- src/DearImGui/Context.hs | 4 ++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/DearImGui.hs b/src/DearImGui.hs index a796b22..9591853 100644 --- a/src/DearImGui.hs +++ b/src/DearImGui.hs @@ -18,6 +18,8 @@ module DearImGui Context(..) , createContext , destroyContext + , getCurrentContext + , setCurrentContext -- * Main , newFrame @@ -139,19 +141,31 @@ Cpp.using "namespace ImGui" -- | Wraps @ImGuiContext*@. -newtype Context = Context (Ptr ()) +newtype Context = Context (Ptr ImGuiContext) -- | Wraps @ImGui::CreateContext()@. createContext :: MonadIO m => m Context createContext = liftIO do - Context <$> [C.exp| void* { CreateContext() } |] + Context <$> [C.exp| ImGuiContext* { CreateContext() } |] -- | Wraps @ImGui::DestroyContext()@. destroyContext :: MonadIO m => Context -> m () destroyContext (Context contextPtr) = liftIO do - [C.exp| void { DestroyContext((ImGuiContext*)$(void* contextPtr)); } |] + [C.exp| void { DestroyContext($(ImGuiContext* contextPtr)); } |] + + +-- | Wraps @ImGui::GetCurrentContext()@. +getCurrentContext :: MonadIO m => m Context +getCurrentContext = liftIO do + Context <$> [C.exp| ImGuiContext* { GetCurrentContext() } |] + + +-- | Wraps @ImGui::SetCurrentContext()@. +setCurrentContext :: MonadIO m => Context -> m () +setCurrentContext (Context contextPtr) = liftIO do + [C.exp| void { SetCurrentContext($(ImGuiContext* contextPtr)) } |] -- | Start a new Dear ImGui frame, you can submit any command from this point diff --git a/src/DearImGui/Context.hs b/src/DearImGui/Context.hs index 3220ae3..37937a4 100644 --- a/src/DearImGui/Context.hs +++ b/src/DearImGui/Context.hs @@ -53,10 +53,14 @@ instance Storable ImVec4 where return ImVec4{ x, y, z, w } +data ImGuiContext + + imguiContext :: Context imguiContext = mempty { ctxTypesTable = Map.fromList [ ( TypeName "ImVec3", [t| ImVec3 |] ) , ( TypeName "ImVec4", [t| ImVec4 |] ) + , ( TypeName "ImGuiContext", [t| ImGuiContext |]) ] }