mirror of
				https://github.com/Drezil/dear-imgui.hs.git
				synced 2025-11-03 22:51:07 +01:00 
			
		
		
		
	Wrap ImGui popups
This commit is contained in:
		
							
								
								
									
										6
									
								
								Main.hs
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								Main.hs
									
									
									
									
									
								
							@@ -45,9 +45,13 @@ loop w checked = do
 | 
			
		||||
  text "Hello!"
 | 
			
		||||
 | 
			
		||||
  button "Click me" >>= \case
 | 
			
		||||
    True  -> putStrLn "Oh hi Mark"
 | 
			
		||||
    True  -> openPopup "Button Popup"
 | 
			
		||||
    False -> return ()
 | 
			
		||||
 | 
			
		||||
  beginPopupModal "Button Popup" >>= whenTrue do
 | 
			
		||||
    button "Close" >>= whenTrue closeCurrentPopup
 | 
			
		||||
    endPopup
 | 
			
		||||
 | 
			
		||||
  sameLine >> smallButton "Click me" >>= \case
 | 
			
		||||
    True  -> putStrLn "Oh hi Mark"
 | 
			
		||||
    False -> return ()
 | 
			
		||||
 
 | 
			
		||||
@@ -80,6 +80,13 @@ module DearImGui
 | 
			
		||||
  , endMenu
 | 
			
		||||
  , menuItem
 | 
			
		||||
 | 
			
		||||
    -- * Popups/Modals
 | 
			
		||||
  , beginPopup
 | 
			
		||||
  , beginPopupModal
 | 
			
		||||
  , endPopup
 | 
			
		||||
  , openPopup
 | 
			
		||||
  , closeCurrentPopup
 | 
			
		||||
 | 
			
		||||
    -- * Types
 | 
			
		||||
  , ImGuiDir
 | 
			
		||||
  , pattern ImGuiDirLeft
 | 
			
		||||
@@ -483,6 +490,49 @@ menuItem label = liftIO do
 | 
			
		||||
    (1 ==) <$> [C.exp| bool { MenuItem($(char* labelPtr)) } |]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- | Returns 'True' if the popup is open, and you can start outputting to it.
 | 
			
		||||
--
 | 
			
		||||
-- Wraps @ImGui::BeginPopup()@
 | 
			
		||||
beginPopup :: MonadIO m => String -> m Bool
 | 
			
		||||
beginPopup popupId = liftIO do
 | 
			
		||||
  withCString popupId \popupIdPtr ->
 | 
			
		||||
    (1 ==) <$> [C.exp| bool { BeginPopup($(char* popupIdPtr)) } |]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- | Returns 'True' if the modal is open, and you can start outputting to it.
 | 
			
		||||
--
 | 
			
		||||
-- Wraps @ImGui::BeginPopupModal()@
 | 
			
		||||
beginPopupModal :: MonadIO m => String -> m Bool
 | 
			
		||||
beginPopupModal popupId = liftIO do
 | 
			
		||||
  withCString popupId \popupIdPtr ->
 | 
			
		||||
    (1 ==) <$> [C.exp| bool { BeginPopupModal($(char* popupIdPtr)) } |]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- | Only call 'endPopup' if 'beginPopup' or 'beginPopupModal' returns 'True'!
 | 
			
		||||
--
 | 
			
		||||
-- Wraps @ImGui::BeginPopupModal()@
 | 
			
		||||
endPopup :: MonadIO m => m ()
 | 
			
		||||
endPopup = liftIO do
 | 
			
		||||
  [C.exp| void { EndPopup() } |]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- | Call to mark popup as open (don't call every frame!).
 | 
			
		||||
--
 | 
			
		||||
-- Wraps @ImGui::OpenPopup()@
 | 
			
		||||
openPopup :: MonadIO m => String -> m ()
 | 
			
		||||
openPopup popupId = liftIO do
 | 
			
		||||
  withCString popupId \popupIdPtr ->
 | 
			
		||||
    [C.exp| void { OpenPopup($(char* popupIdPtr)) } |]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- | Manually close the popup we have begin-ed into.
 | 
			
		||||
--
 | 
			
		||||
-- Wraps @ImGui::ClosePopup()@
 | 
			
		||||
closeCurrentPopup :: MonadIO m => m ()
 | 
			
		||||
closeCurrentPopup = liftIO do
 | 
			
		||||
  [C.exp| void { CloseCurrentPopup() } |]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- | A cardinal direction.
 | 
			
		||||
newtype ImGuiDir      = ImGuiDir CInt
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user