diff --git a/Main.hs b/Main.hs index 2fe3afa..3416e60 100644 --- a/Main.hs +++ b/Main.hs @@ -41,20 +41,20 @@ main = do openGL3Shutdown -loop - :: Window - -> IORef Bool - -> IORef ImVec3 - -> IORef (Float, Float, Float) - -> IORef Int - -> IORef ImVec2 +loop + :: Window + -> IORef Bool + -> IORef ImVec3 + -> IORef (Float, Float, Float) + -> IORef Int -> IORef ImVec2 - -> IORef Int + -> IORef ImVec2 + -> IORef Int -> IORef Bool -> IORef Bool -> IO () -loop w checked color slider r pos size' selected tab1Ref tab2Ref = do - quit <- pollEvents +loop window checked color slider r pos size' selected tab1Ref tab2Ref = do + shouldQuit <- checkEvents openGL3NewFrame sdl2NewFrame @@ -68,7 +68,7 @@ loop w checked color slider r pos size' selected tab1Ref tab2Ref = do setNextWindowPos pos ImGuiCond_Once Nothing setNextWindowSize size' ImGuiCond_Once -- Works, but will make the window contents illegible without doing something more involved. - -- setNextWindowContentSize size' + -- setNextWindowContentSize size' -- setNextWindowSizeConstraints size' size' setNextWindowCollapsed False ImGuiCond_Once @@ -164,13 +164,15 @@ loop w checked color slider r pos size' selected tab1Ref tab2Ref = do glClear GL_COLOR_BUFFER_BIT openGL3RenderDrawData =<< getDrawData - glSwapWindow w + glSwapWindow window - if quit then return () else loop w checked color slider r pos size' selected tab1Ref tab2Ref + if shouldQuit + then return () + else loop window checked color slider r pos size' selected tab1Ref tab2Ref where - pollEvents = do + checkEvents = do ev <- pollEventWithImGui case ev of @@ -180,9 +182,9 @@ loop w checked color slider r pos size' selected tab1Ref tab2Ref = do QuitEvent -> True _ -> False - (isQuit ||) <$> pollEvents + (isQuit ||) <$> checkEvents whenTrue :: IO () -> Bool -> IO () whenTrue io True = io -whenTrue io False = return () +whenTrue _io False = return () diff --git a/cabal.project b/cabal.project index b784198..f6bcbc0 100644 --- a/cabal.project +++ b/cabal.project @@ -1,3 +1,4 @@ packages: *.cabal package dear-imgui flags: +sdl2 +glfw +opengl2 +opengl3 +vulkan +examples + ghc-options: -Wall -Wcompat -fno-warn-unused-do-bind diff --git a/examples/Readme.hs b/examples/Readme.hs index 7aa3476..405aa65 100644 --- a/examples/Readme.hs +++ b/examples/Readme.hs @@ -24,28 +24,28 @@ main = do runManaged do -- Create a window using SDL. As we're using OpenGL, we need to enable OpenGL too. - w <- do + window <- do let title = "Hello, Dear ImGui!" let config = defaultWindow { windowGraphicsContext = OpenGLContext defaultOpenGL } managed $ bracket (createWindow title config) destroyWindow -- Create an OpenGL context - glContext <- managed $ bracket (glCreateContext w) glDeleteContext + glContext <- managed $ bracket (glCreateContext window) glDeleteContext -- Create an ImGui context _ <- managed $ bracket createContext destroyContext -- Initialize ImGui's SDL2 backend - _ <- managed_ $ bracket_ (sdl2InitForOpenGL w glContext) sdl2Shutdown + _ <- managed_ $ bracket_ (sdl2InitForOpenGL window glContext) sdl2Shutdown -- Initialize ImGui's OpenGL backend _ <- managed_ $ bracket_ openGL2Init openGL2Shutdown - liftIO $ mainLoop w + liftIO $ mainLoop window mainLoop :: Window -> IO () -mainLoop w = do +mainLoop window = do -- Process the event loop untilNothingM pollEventWithImGui @@ -73,9 +73,9 @@ mainLoop w = do render openGL2RenderDrawData =<< getDrawData - glSwapWindow w + glSwapWindow window - mainLoop w + mainLoop window where untilNothingM m = m >>= maybe (return ()) (\_ -> untilNothingM m) diff --git a/examples/vulkan/Main.hs b/examples/vulkan/Main.hs index 270da70..d9c435a 100644 --- a/examples/vulkan/Main.hs +++ b/examples/vulkan/Main.hs @@ -370,7 +370,7 @@ app = do freeOldResources let freeOldResources :: m () - freeOldResources = pure () + freeOldResources = pure () unless quit $ mainLoop ( AppState {..} ) let diff --git a/generator/DearImGui/Generator.hs b/generator/DearImGui/Generator.hs index 2c36d5b..0e788cd 100644 --- a/generator/DearImGui/Generator.hs +++ b/generator/DearImGui/Generator.hs @@ -12,8 +12,6 @@ module DearImGui.Generator -- base import Control.Arrow ( second ) -import Data.Coerce - ( coerce ) import Data.Bits ( Bits ) import Data.Foldable @@ -54,7 +52,6 @@ import qualified Language.Haskell.TH.Syntax as TH -- text import qualified Data.Text as Text - ( isInfixOf, null, unpack, unlines ) import qualified Data.Text.IO as Text ( readFile ) @@ -157,11 +154,11 @@ declareEnumeration finiteEnumName countName ( Enumeration {..} ) = do <$> TH.appT ( TH.conT countName ) ( TH.conT tyName ) <*> TH.litT ( TH.numTyLit enumSize ) ) - ] + ] pure ( finiteEnumInst : ) else pure id - synonyms <- for patterns \ ( patternName, patternValue, CommentText patDoc ) -> do + synonyms <- for patterns \ ( patternName, patternValue, CommentText _patDoc ) -> do let patNameStr :: String patNameStr = Text.unpack patternName @@ -169,7 +166,7 @@ declareEnumeration finiteEnumName countName ( Enumeration {..} ) = do patSynSig <- TH.patSynSigD patName ( TH.conT tyName ) pat <- #if MIN_VERSION_template_haskell(2,18,0) - ( if Text.null patDoc + ( if Text.null _patDoc then TH.patSynD else \ nm args dir pat ->