Wrap ImGui::SliderFloat() (#9)

Co-authored-by: Ollie Charles <ollie@ocharles.org.uk>
This commit is contained in:
Tristan de Cacqueray 2021-01-25 19:04:43 +00:00 committed by GitHub
parent 3185bf5e90
commit 2fbe257c24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 4 deletions

11
Main.hs
View File

@ -28,12 +28,13 @@ main = do
checked <- newIORef False
color <- newIORef $ ImVec3 1 0 0
loop w checked color
slider <- newIORef 0.42
loop w checked color slider
openGL2Shutdown
loop :: Window -> IORef Bool -> IORef ImVec3 -> IO ()
loop w checked color = do
loop :: Window -> IORef Bool -> IORef ImVec3 -> IORef Float -> IO ()
loop w checked color slider = do
quit <- pollEvents
openGL2NewFrame
@ -73,6 +74,8 @@ loop w checked color = do
separator
sliderFloat "Slider" slider 0.0 1.0
progressBar 0.314 (Just "Pi")
beginCombo "Label" "Preview" >>= whenTrue do
@ -104,7 +107,7 @@ loop w checked color = do
glSwapWindow w
if quit then return () else loop w checked color
if quit then return () else loop w checked color slider
where

View File

@ -59,6 +59,9 @@ module DearImGui
, progressBar
, bullet
-- ** Slider
, sliderFloat
-- ** Combo Box
, beginCombo
, endCombo
@ -390,6 +393,22 @@ colorPicker3 desc ref = liftIO do
return changed
-- | Wraps @ImGui::SliderFloat()@
sliderFloat :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => String -> ref -> Float -> Float -> m Bool
sliderFloat desc ref minValue maxValue = liftIO do
currentValue <- get ref
with (realToFrac currentValue) \floatPtr -> do
changed <- withCString desc \descPtr ->
(1 ==) <$> [C.exp| bool { SliderFloat( $(char* descPtr), $(float *floatPtr), $(float min'), $(float max')) } |]
newValue <- peek floatPtr
ref $=! realToFrac newValue
return changed
where
min', max' :: CFloat
min' = realToFrac minValue
max' = realToFrac maxValue
-- | Display a color square/button, hover for details, return true when pressed.
--