mirror of
				https://github.com/Drezil/dear-imgui.hs.git
				synced 2025-10-31 21:21:08 +01:00 
			
		
		
		
	
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							76ce7bb569
						
					
				
				
					commit
					b4bc36ca89
				
			
							
								
								
									
										34
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								README.md
									
									
									
									
									
								
							| @@ -54,38 +54,35 @@ 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 | ||||
|   -- Process the event loop | ||||
|   untilNothingM pollEventWithImGui | ||||
|  | ||||
| mainLoop window = unlessQuit do | ||||
|   -- Tell ImGui we're starting a new frame | ||||
|   openGL2NewFrame | ||||
|   sdl2NewFrame | ||||
|   newFrame | ||||
|  | ||||
|   -- Build the GUI | ||||
|   bracket_ (begin "Hello, ImGui!") end do | ||||
|   withWindowOpen "Hello, ImGui!" do | ||||
|     -- Add a text widget | ||||
|     text "Hello, ImGui!" | ||||
|  | ||||
| @@ -103,12 +100,25 @@ mainLoop w = do | ||||
|   render | ||||
|   openGL2RenderDrawData =<< getDrawData | ||||
|  | ||||
|   glSwapWindow w | ||||
|   glSwapWindow window | ||||
|  | ||||
|   mainLoop w | ||||
|   mainLoop window | ||||
|  | ||||
|   where | ||||
|     untilNothingM m = m >>= maybe (return ()) (\_ -> untilNothingM m) | ||||
|     -- Process the event loop | ||||
|     unlessQuit action = do | ||||
|       shouldQuit <- checkEvents | ||||
|       if shouldQuit then pure () else action | ||||
|  | ||||
|     checkEvents = do | ||||
|       pollEventWithImGui >>= \case | ||||
|         Nothing -> | ||||
|           return False | ||||
|         Just event -> | ||||
|           (isQuit event ||) <$> checkEvents | ||||
|  | ||||
|     isQuit event = | ||||
|       SDL.eventPayload event == SDL.QuitEvent | ||||
| ``` | ||||
|  | ||||
| # Hacking | ||||
|   | ||||
| @@ -45,10 +45,7 @@ main = do | ||||
|  | ||||
|  | ||||
| mainLoop :: Window -> IO () | ||||
| mainLoop window = do | ||||
|   -- Process the event loop | ||||
|   untilNothingM pollEventWithImGui | ||||
|  | ||||
| mainLoop window = unlessQuit do | ||||
|   -- Tell ImGui we're starting a new frame | ||||
|   openGL2NewFrame | ||||
|   sdl2NewFrame | ||||
| @@ -78,4 +75,17 @@ mainLoop window = do | ||||
|   mainLoop window | ||||
|  | ||||
|   where | ||||
|     untilNothingM m = m >>= maybe (return ()) (\_ -> untilNothingM m) | ||||
|     -- Process the event loop | ||||
|     unlessQuit action = do | ||||
|       shouldQuit <- checkEvents | ||||
|       if shouldQuit then pure () else action | ||||
|  | ||||
|     checkEvents = do | ||||
|       pollEventWithImGui >>= \case | ||||
|         Nothing -> | ||||
|           return False | ||||
|         Just event -> | ||||
|           (isQuit event ||) <$> checkEvents | ||||
|  | ||||
|     isQuit event = | ||||
|       SDL.eventPayload event == SDL.QuitEvent | ||||
|   | ||||
		Reference in New Issue
	
	Block a user