dear-imgui 1.5.0 → 2.0.0
raw patch · 7 files changed
+302/−228 lines, 7 filesdep ~textPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: text
API changes (from Hackage documentation)
- DearImGui: instance DearImGui.ToID GHC.Base.String
+ DearImGui: instance DearImGui.ToID Data.Text.Internal.Text
+ DearImGui.Internal.Text: data Text
+ DearImGui.Internal.Text: pack :: String -> Text
+ DearImGui.Internal.Text: peekCString :: CString -> IO Text
+ DearImGui.Internal.Text: unpack :: Text -> String
+ DearImGui.Internal.Text: withCString :: MonadUnliftIO m => Text -> (CString -> m a) -> m a
+ DearImGui.Internal.Text: withCStringEnd :: MonadUnliftIO m => Text -> (CString -> CString -> m a) -> m a
+ DearImGui.Internal.Text: withCStringLen :: Text -> (CStringLen -> IO a) -> IO a
+ DearImGui.Internal.Text: withCStringOrNull :: Maybe Text -> (CString -> IO a) -> IO a
- DearImGui: arrowButton :: MonadIO m => String -> ImGuiDir -> m Bool
+ DearImGui: arrowButton :: MonadIO m => Text -> ImGuiDir -> m Bool
- DearImGui: begin :: MonadIO m => String -> m Bool
+ DearImGui: begin :: MonadIO m => Text -> m Bool
- DearImGui: beginChild :: MonadIO m => String -> ImVec2 -> Bool -> ImGuiWindowFlags -> m Bool
+ DearImGui: beginChild :: MonadIO m => Text -> ImVec2 -> Bool -> ImGuiWindowFlags -> m Bool
- DearImGui: beginCombo :: MonadIO m => String -> String -> m Bool
+ DearImGui: beginCombo :: MonadIO m => Text -> Text -> m Bool
- DearImGui: beginMenu :: MonadIO m => String -> m Bool
+ DearImGui: beginMenu :: MonadIO m => Text -> m Bool
- DearImGui: beginPopup :: MonadIO m => String -> m Bool
+ DearImGui: beginPopup :: MonadIO m => Text -> m Bool
- DearImGui: beginPopupContextItem :: MonadIO m => Maybe String -> ImGuiPopupFlags -> m Bool
+ DearImGui: beginPopupContextItem :: MonadIO m => Maybe Text -> ImGuiPopupFlags -> m Bool
- DearImGui: beginPopupContextVoid :: MonadIO m => Maybe String -> ImGuiPopupFlags -> m Bool
+ DearImGui: beginPopupContextVoid :: MonadIO m => Maybe Text -> ImGuiPopupFlags -> m Bool
- DearImGui: beginPopupContextWindow :: MonadIO m => Maybe String -> ImGuiPopupFlags -> m Bool
+ DearImGui: beginPopupContextWindow :: MonadIO m => Maybe Text -> ImGuiPopupFlags -> m Bool
- DearImGui: beginPopupModal :: MonadIO m => String -> m Bool
+ DearImGui: beginPopupModal :: MonadIO m => Text -> m Bool
- DearImGui: beginTabBar :: MonadIO m => String -> ImGuiTabBarFlags -> m Bool
+ DearImGui: beginTabBar :: MonadIO m => Text -> ImGuiTabBarFlags -> m Bool
- DearImGui: beginTabItem :: (MonadIO m, HasGetter ref Bool, HasSetter ref Bool) => String -> ref -> ImGuiTabBarFlags -> m Bool
+ DearImGui: beginTabItem :: (MonadIO m, HasGetter ref Bool, HasSetter ref Bool) => Text -> ref -> ImGuiTabBarFlags -> m Bool
- DearImGui: beginTable :: MonadIO m => TableOptions -> String -> Int -> m Bool
+ DearImGui: beginTable :: MonadIO m => TableOptions -> Text -> Int -> m Bool
- DearImGui: bulletText :: MonadIO m => String -> m ()
+ DearImGui: bulletText :: MonadIO m => Text -> m ()
- DearImGui: button :: MonadIO m => String -> m Bool
+ DearImGui: button :: MonadIO m => Text -> m Bool
- DearImGui: checkbox :: (HasSetter ref Bool, HasGetter ref Bool, MonadIO m) => String -> ref -> m Bool
+ DearImGui: checkbox :: (HasSetter ref Bool, HasGetter ref Bool, MonadIO m) => Text -> ref -> m Bool
- DearImGui: colorButton :: (MonadIO m, HasSetter ref ImVec4, HasGetter ref ImVec4) => String -> ref -> m Bool
+ DearImGui: colorButton :: (MonadIO m, HasSetter ref ImVec4, HasGetter ref ImVec4) => Text -> ref -> m Bool
- DearImGui: colorPicker3 :: (MonadIO m, HasSetter ref ImVec3, HasGetter ref ImVec3) => String -> ref -> m Bool
+ DearImGui: colorPicker3 :: (MonadIO m, HasSetter ref ImVec3, HasGetter ref ImVec3) => Text -> ref -> m Bool
- DearImGui: combo :: (MonadIO m, HasGetter ref Int, HasSetter ref Int) => String -> ref -> [String] -> m Bool
+ DearImGui: combo :: (MonadIO m, HasGetter ref Int, HasSetter ref Int) => Text -> ref -> [Text] -> m Bool
- DearImGui: dragFloat :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => String -> ref -> Float -> Float -> Float -> m Bool
+ DearImGui: dragFloat :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => Text -> ref -> Float -> Float -> Float -> m Bool
- DearImGui: dragFloat2 :: (MonadIO m, HasSetter ref (Float, Float), HasGetter ref (Float, Float)) => String -> ref -> Float -> Float -> Float -> m Bool
+ DearImGui: dragFloat2 :: (MonadIO m, HasSetter ref (Float, Float), HasGetter ref (Float, Float)) => Text -> ref -> Float -> Float -> Float -> m Bool
- DearImGui: dragFloat3 :: (MonadIO m, HasSetter ref (Float, Float, Float), HasGetter ref (Float, Float, Float)) => String -> ref -> Float -> Float -> Float -> m Bool
+ DearImGui: dragFloat3 :: (MonadIO m, HasSetter ref (Float, Float, Float), HasGetter ref (Float, Float, Float)) => Text -> ref -> Float -> Float -> Float -> m Bool
- DearImGui: dragFloat4 :: (MonadIO m, HasSetter ref (Float, Float, Float, Float), HasGetter ref (Float, Float, Float, Float)) => String -> ref -> Float -> Float -> Float -> m Bool
+ DearImGui: dragFloat4 :: (MonadIO m, HasSetter ref (Float, Float, Float, Float), HasGetter ref (Float, Float, Float, Float)) => Text -> ref -> Float -> Float -> Float -> m Bool
- DearImGui: dragFloatRange2 :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => String -> ref -> ref -> Float -> Float -> Float -> String -> String -> m Bool
+ DearImGui: dragFloatRange2 :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => Text -> ref -> ref -> Float -> Float -> Float -> Text -> Text -> m Bool
- DearImGui: dragInt :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => String -> ref -> Float -> Int -> Int -> m Bool
+ DearImGui: dragInt :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => Text -> ref -> Float -> Int -> Int -> m Bool
- DearImGui: dragInt2 :: (MonadIO m, HasSetter ref (Int, Int), HasGetter ref (Int, Int)) => String -> ref -> Float -> Int -> Int -> m Bool
+ DearImGui: dragInt2 :: (MonadIO m, HasSetter ref (Int, Int), HasGetter ref (Int, Int)) => Text -> ref -> Float -> Int -> Int -> m Bool
- DearImGui: dragInt3 :: (MonadIO m, HasSetter ref (Int, Int, Int), HasGetter ref (Int, Int, Int)) => String -> ref -> Float -> Int -> Int -> m Bool
+ DearImGui: dragInt3 :: (MonadIO m, HasSetter ref (Int, Int, Int), HasGetter ref (Int, Int, Int)) => Text -> ref -> Float -> Int -> Int -> m Bool
- DearImGui: dragInt4 :: (MonadIO m, HasSetter ref (Int, Int, Int, Int), HasGetter ref (Int, Int, Int, Int)) => String -> ref -> Float -> Int -> Int -> m Bool
+ DearImGui: dragInt4 :: (MonadIO m, HasSetter ref (Int, Int, Int, Int), HasGetter ref (Int, Int, Int, Int)) => Text -> ref -> Float -> Int -> Int -> m Bool
- DearImGui: dragIntRange2 :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => String -> ref -> ref -> Float -> Int -> Int -> String -> String -> m Bool
+ DearImGui: dragIntRange2 :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => Text -> ref -> ref -> Float -> Int -> Int -> Text -> Text -> m Bool
- DearImGui: dragScalar :: (HasSetter ref a, HasGetter ref a, HasGetter range a, Storable a, MonadIO m) => String -> ImGuiDataType -> ref -> Float -> range -> range -> String -> ImGuiSliderFlags -> m Bool
+ DearImGui: dragScalar :: (HasSetter ref a, HasGetter ref a, HasGetter range a, Storable a, MonadIO m) => Text -> ImGuiDataType -> ref -> Float -> range -> range -> Text -> ImGuiSliderFlags -> m Bool
- DearImGui: dragScalarN :: (HasSetter ref [a], HasGetter ref [a], HasGetter range a, Storable a, MonadIO m) => String -> ImGuiDataType -> ref -> Float -> range -> range -> String -> ImGuiSliderFlags -> m Bool
+ DearImGui: dragScalarN :: (HasSetter ref [a], HasGetter ref [a], HasGetter range a, Storable a, MonadIO m) => Text -> ImGuiDataType -> ref -> Float -> range -> range -> Text -> ImGuiSliderFlags -> m Bool
- DearImGui: getVersion :: MonadIO m => m String
+ DearImGui: getVersion :: MonadIO m => m Text
- DearImGui: inputText :: (MonadIO m, HasSetter ref String, HasGetter ref String) => String -> ref -> Int -> m Bool
+ DearImGui: inputText :: (MonadIO m, HasSetter ref Text, HasGetter ref Text) => Text -> ref -> Int -> m Bool
- DearImGui: inputTextMultiline :: (MonadIO m, HasSetter ref String, HasGetter ref String) => String -> ref -> Int -> ImVec2 -> m Bool
+ DearImGui: inputTextMultiline :: (MonadIO m, HasSetter ref Text, HasGetter ref Text) => Text -> ref -> Int -> ImVec2 -> m Bool
- DearImGui: inputTextWithHint :: (MonadIO m, HasSetter ref String, HasGetter ref String) => String -> String -> ref -> Int -> m Bool
+ DearImGui: inputTextWithHint :: (MonadIO m, HasSetter ref Text, HasGetter ref Text) => Text -> Text -> ref -> Int -> m Bool
- DearImGui: invisibleButton :: MonadIO m => String -> ImVec2 -> ImGuiButtonFlags -> m Bool
+ DearImGui: invisibleButton :: MonadIO m => Text -> ImVec2 -> ImGuiButtonFlags -> m Bool
- DearImGui: isAnyLevelPopupOpen :: MonadIO m => String -> m Bool
+ DearImGui: isAnyLevelPopupOpen :: MonadIO m => Text -> m Bool
- DearImGui: isAnyPopupOpen :: MonadIO m => String -> m Bool
+ DearImGui: isAnyPopupOpen :: MonadIO m => Text -> m Bool
- DearImGui: isCurrentPopupOpen :: MonadIO m => String -> m Bool
+ DearImGui: isCurrentPopupOpen :: MonadIO m => Text -> m Bool
- DearImGui: labelText :: MonadIO m => String -> String -> m ()
+ DearImGui: labelText :: MonadIO m => Text -> Text -> m ()
- DearImGui: listBox :: (MonadIO m, HasGetter ref Int, HasSetter ref Int) => String -> ref -> [String] -> m Bool
+ DearImGui: listBox :: (MonadIO m, HasGetter ref Int, HasSetter ref Int) => Text -> ref -> [Text] -> m Bool
- DearImGui: menuItem :: MonadIO m => String -> m Bool
+ DearImGui: menuItem :: MonadIO m => Text -> m Bool
- DearImGui: openPopup :: MonadIO m => String -> m ()
+ DearImGui: openPopup :: MonadIO m => Text -> m ()
- DearImGui: openPopupOnItemClick :: MonadIO m => String -> ImGuiPopupFlags -> m ()
+ DearImGui: openPopupOnItemClick :: MonadIO m => Text -> ImGuiPopupFlags -> m ()
- DearImGui: plotHistogram :: MonadIO m => String -> [CFloat] -> m ()
+ DearImGui: plotHistogram :: MonadIO m => Text -> [CFloat] -> m ()
- DearImGui: progressBar :: MonadIO m => Float -> Maybe String -> m ()
+ DearImGui: progressBar :: MonadIO m => Float -> Maybe Text -> m ()
- DearImGui: selectable :: MonadIO m => String -> m Bool
+ DearImGui: selectable :: MonadIO m => Text -> m Bool
- DearImGui: selectableWith :: MonadIO m => SelectableOptions -> String -> m Bool
+ DearImGui: selectableWith :: MonadIO m => SelectableOptions -> Text -> m Bool
- DearImGui: setTabItemClosed :: MonadIO m => String -> m ()
+ DearImGui: setTabItemClosed :: MonadIO m => Text -> m ()
- DearImGui: sliderAngle :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => String -> ref -> Float -> Float -> m Bool
+ DearImGui: sliderAngle :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => Text -> ref -> Float -> Float -> m Bool
- DearImGui: sliderFloat :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => String -> ref -> Float -> Float -> m Bool
+ DearImGui: sliderFloat :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => Text -> ref -> Float -> Float -> m Bool
- DearImGui: sliderFloat2 :: (MonadIO m, HasSetter ref (Float, Float), HasGetter ref (Float, Float)) => String -> ref -> Float -> Float -> m Bool
+ DearImGui: sliderFloat2 :: (MonadIO m, HasSetter ref (Float, Float), HasGetter ref (Float, Float)) => Text -> ref -> Float -> Float -> m Bool
- DearImGui: sliderFloat3 :: (MonadIO m, HasSetter ref (Float, Float, Float), HasGetter ref (Float, Float, Float)) => String -> ref -> Float -> Float -> m Bool
+ DearImGui: sliderFloat3 :: (MonadIO m, HasSetter ref (Float, Float, Float), HasGetter ref (Float, Float, Float)) => Text -> ref -> Float -> Float -> m Bool
- DearImGui: sliderFloat4 :: (MonadIO m, HasSetter ref (Float, Float, Float, Float), HasGetter ref (Float, Float, Float, Float)) => String -> ref -> Float -> Float -> m Bool
+ DearImGui: sliderFloat4 :: (MonadIO m, HasSetter ref (Float, Float, Float, Float), HasGetter ref (Float, Float, Float, Float)) => Text -> ref -> Float -> Float -> m Bool
- DearImGui: sliderInt :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => String -> ref -> Int -> Int -> m Bool
+ DearImGui: sliderInt :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => Text -> ref -> Int -> Int -> m Bool
- DearImGui: sliderInt2 :: (MonadIO m, HasSetter ref (Int, Int), HasGetter ref (Int, Int)) => String -> ref -> Int -> Int -> m Bool
+ DearImGui: sliderInt2 :: (MonadIO m, HasSetter ref (Int, Int), HasGetter ref (Int, Int)) => Text -> ref -> Int -> Int -> m Bool
- DearImGui: sliderInt3 :: (MonadIO m, HasSetter ref (Int, Int, Int), HasGetter ref (Int, Int, Int)) => String -> ref -> Int -> Int -> m Bool
+ DearImGui: sliderInt3 :: (MonadIO m, HasSetter ref (Int, Int, Int), HasGetter ref (Int, Int, Int)) => Text -> ref -> Int -> Int -> m Bool
- DearImGui: sliderInt4 :: (MonadIO m, HasSetter ref (Int, Int, Int, Int), HasGetter ref (Int, Int, Int, Int)) => String -> ref -> Int -> Int -> m Bool
+ DearImGui: sliderInt4 :: (MonadIO m, HasSetter ref (Int, Int, Int, Int), HasGetter ref (Int, Int, Int, Int)) => Text -> ref -> Int -> Int -> m Bool
- DearImGui: sliderScalar :: (HasGetter ref a, HasSetter ref a, HasGetter range a, Storable a, MonadIO m) => String -> ImGuiDataType -> ref -> range -> range -> String -> ImGuiSliderFlags -> m Bool
+ DearImGui: sliderScalar :: (HasGetter ref a, HasSetter ref a, HasGetter range a, Storable a, MonadIO m) => Text -> ImGuiDataType -> ref -> range -> range -> Text -> ImGuiSliderFlags -> m Bool
- DearImGui: sliderScalarN :: (HasSetter value [a], HasGetter value [a], HasGetter range a, Storable a, MonadIO m) => String -> ImGuiDataType -> value -> range -> range -> String -> ImGuiSliderFlags -> m Bool
+ DearImGui: sliderScalarN :: (HasSetter value [a], HasGetter value [a], HasGetter range a, Storable a, MonadIO m) => Text -> ImGuiDataType -> value -> range -> range -> Text -> ImGuiSliderFlags -> m Bool
- DearImGui: smallButton :: MonadIO m => String -> m Bool
+ DearImGui: smallButton :: MonadIO m => Text -> m Bool
- DearImGui: tabItemButton :: MonadIO m => String -> ImGuiTabItemFlags -> m Bool
+ DearImGui: tabItemButton :: MonadIO m => Text -> ImGuiTabItemFlags -> m Bool
- DearImGui: tableGetColumnName :: MonadIO m => Maybe Int -> m String
+ DearImGui: tableGetColumnName :: MonadIO m => Maybe Int -> m Text
- DearImGui: tableSetupColumn :: MonadIO m => String -> m ()
+ DearImGui: tableSetupColumn :: MonadIO m => Text -> m ()
- DearImGui: tableSetupColumnWith :: MonadIO m => TableColumnOptions -> String -> m ()
+ DearImGui: tableSetupColumnWith :: MonadIO m => TableColumnOptions -> Text -> m ()
- DearImGui: text :: MonadIO m => String -> m ()
+ DearImGui: text :: MonadIO m => Text -> m ()
- DearImGui: textColored :: (HasGetter ref ImVec4, MonadIO m) => ref -> String -> m ()
+ DearImGui: textColored :: (HasGetter ref ImVec4, MonadIO m) => ref -> Text -> m ()
- DearImGui: textDisabled :: MonadIO m => String -> m ()
+ DearImGui: textDisabled :: MonadIO m => Text -> m ()
- DearImGui: textWrapped :: MonadIO m => String -> m ()
+ DearImGui: textWrapped :: MonadIO m => Text -> m ()
- DearImGui: treeNode :: MonadIO m => String -> m Bool
+ DearImGui: treeNode :: MonadIO m => Text -> m Bool
- DearImGui: treePush :: MonadIO m => String -> m ()
+ DearImGui: treePush :: MonadIO m => Text -> m ()
- DearImGui: vSliderFloat :: (HasSetter ref Float, HasGetter ref Float, MonadIO m) => String -> ImVec2 -> ref -> Float -> Float -> m Bool
+ DearImGui: vSliderFloat :: (HasSetter ref Float, HasGetter ref Float, MonadIO m) => Text -> ImVec2 -> ref -> Float -> Float -> m Bool
- DearImGui: vSliderInt :: (HasSetter ref Int, HasGetter ref Int, MonadIO m) => String -> ImVec2 -> ref -> Int -> Int -> m Bool
+ DearImGui: vSliderInt :: (HasSetter ref Int, HasGetter ref Int, MonadIO m) => Text -> ImVec2 -> ref -> Int -> Int -> m Bool
- DearImGui: vSliderScalar :: (HasSetter ref a, HasGetter ref a, HasGetter range a, Storable a, MonadIO m) => String -> ImVec2 -> ImGuiDataType -> ref -> range -> range -> String -> ImGuiSliderFlags -> m Bool
+ DearImGui: vSliderScalar :: (HasSetter ref a, HasGetter ref a, HasGetter range a, Storable a, MonadIO m) => Text -> ImVec2 -> ImGuiDataType -> ref -> range -> range -> Text -> ImGuiSliderFlags -> m Bool
- DearImGui: withChild :: MonadUnliftIO m => String -> ImVec2 -> Bool -> ImGuiWindowFlags -> (Bool -> m a) -> m a
+ DearImGui: withChild :: MonadUnliftIO m => Text -> ImVec2 -> Bool -> ImGuiWindowFlags -> (Bool -> m a) -> m a
- DearImGui: withChildContext :: MonadUnliftIO m => String -> (Bool -> m a) -> m a
+ DearImGui: withChildContext :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a
- DearImGui: withChildOpen :: MonadUnliftIO m => String -> ImVec2 -> Bool -> ImGuiWindowFlags -> m () -> m ()
+ DearImGui: withChildOpen :: MonadUnliftIO m => Text -> ImVec2 -> Bool -> ImGuiWindowFlags -> m () -> m ()
- DearImGui: withCombo :: MonadUnliftIO m => String -> String -> (Bool -> m a) -> m a
+ DearImGui: withCombo :: MonadUnliftIO m => Text -> Text -> (Bool -> m a) -> m a
- DearImGui: withComboOpen :: MonadUnliftIO m => String -> String -> m () -> m ()
+ DearImGui: withComboOpen :: MonadUnliftIO m => Text -> Text -> m () -> m ()
- DearImGui: withMenu :: MonadUnliftIO m => String -> (Bool -> m a) -> m a
+ DearImGui: withMenu :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a
- DearImGui: withMenuOpen :: MonadUnliftIO m => String -> m () -> m ()
+ DearImGui: withMenuOpen :: MonadUnliftIO m => Text -> m () -> m ()
- DearImGui: withPopup :: MonadUnliftIO m => String -> (Bool -> m a) -> m a
+ DearImGui: withPopup :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a
- DearImGui: withPopupContextItem :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> (Bool -> m a) -> m a
+ DearImGui: withPopupContextItem :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> (Bool -> m a) -> m a
- DearImGui: withPopupContextItemOpen :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> m () -> m ()
+ DearImGui: withPopupContextItemOpen :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> m () -> m ()
- DearImGui: withPopupContextVoid :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> (Bool -> m a) -> m a
+ DearImGui: withPopupContextVoid :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> (Bool -> m a) -> m a
- DearImGui: withPopupContextVoidOpen :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> m () -> m ()
+ DearImGui: withPopupContextVoidOpen :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> m () -> m ()
- DearImGui: withPopupContextWindow :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> (Bool -> m a) -> m a
+ DearImGui: withPopupContextWindow :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> (Bool -> m a) -> m a
- DearImGui: withPopupContextWindowOpen :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> m () -> m ()
+ DearImGui: withPopupContextWindowOpen :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> m () -> m ()
- DearImGui: withPopupModal :: MonadUnliftIO m => String -> (Bool -> m a) -> m a
+ DearImGui: withPopupModal :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a
- DearImGui: withPopupModalOpen :: MonadUnliftIO m => String -> m () -> m ()
+ DearImGui: withPopupModalOpen :: MonadUnliftIO m => Text -> m () -> m ()
- DearImGui: withPopupOpen :: MonadUnliftIO m => String -> m () -> m ()
+ DearImGui: withPopupOpen :: MonadUnliftIO m => Text -> m () -> m ()
- DearImGui: withTabBar :: MonadUnliftIO m => String -> ImGuiTabBarFlags -> (Bool -> m a) -> m a
+ DearImGui: withTabBar :: MonadUnliftIO m => Text -> ImGuiTabBarFlags -> (Bool -> m a) -> m a
- DearImGui: withTabBarOpen :: MonadUnliftIO m => String -> ImGuiTabBarFlags -> m () -> m ()
+ DearImGui: withTabBarOpen :: MonadUnliftIO m => Text -> ImGuiTabBarFlags -> m () -> m ()
- DearImGui: withTabItem :: (MonadUnliftIO m, HasGetter ref Bool, HasSetter ref Bool) => String -> ref -> ImGuiTabBarFlags -> (Bool -> m a) -> m a
+ DearImGui: withTabItem :: (MonadUnliftIO m, HasGetter ref Bool, HasSetter ref Bool) => Text -> ref -> ImGuiTabBarFlags -> (Bool -> m a) -> m a
- DearImGui: withTabItemOpen :: (MonadUnliftIO m, HasGetter ref Bool, HasSetter ref Bool) => String -> ref -> ImGuiTabBarFlags -> m () -> m ()
+ DearImGui: withTabItemOpen :: (MonadUnliftIO m, HasGetter ref Bool, HasSetter ref Bool) => Text -> ref -> ImGuiTabBarFlags -> m () -> m ()
- DearImGui: withTable :: MonadUnliftIO m => TableOptions -> String -> Int -> (Bool -> m a) -> m a
+ DearImGui: withTable :: MonadUnliftIO m => TableOptions -> Text -> Int -> (Bool -> m a) -> m a
- DearImGui: withTableOpen :: MonadUnliftIO m => TableOptions -> String -> Int -> m () -> m ()
+ DearImGui: withTableOpen :: MonadUnliftIO m => TableOptions -> Text -> Int -> m () -> m ()
- DearImGui: withWindow :: MonadUnliftIO m => String -> (Bool -> m a) -> m a
+ DearImGui: withWindow :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a
- DearImGui: withWindowOpen :: MonadUnliftIO m => String -> m () -> m ()
+ DearImGui: withWindowOpen :: MonadUnliftIO m => Text -> m () -> m ()
- DearImGui.FontAtlas: addText :: String -> RangesBuilderSetup
+ DearImGui.FontAtlas: addText :: Text -> RangesBuilderSetup
Files
- ChangeLog.md +6/−0
- Main.hs +4/−3
- dear-imgui.cabal +7/−5
- examples/glfw/Main.hs +4/−3
- src/DearImGui.hs +205/−215
- src/DearImGui/FontAtlas.hs +4/−2
- src/DearImGui/Internal/Text.hs +72/−0
ChangeLog.md view
@@ -1,5 +1,10 @@ # Changelog for dear-imgui +## [2.0.0]++- `String` arguments replaced with `Text`.+ * Upgrading to `text-2` recommended to reap the UTF-8 benefits.+ ## [1.5.0] - Added table wrappers.@@ -76,6 +81,7 @@ [1.3.1]: https://github.com/haskell-game/dear-imgui.hs/tree/v1.3.1 [1.4.0]: https://github.com/haskell-game/dear-imgui.hs/tree/v1.4.0 [1.5.0]: https://github.com/haskell-game/dear-imgui.hs/tree/v1.5.0+[2.0.0]: https://github.com/haskell-game/dear-imgui.hs/tree/v2.0.0 [1.87]: https://github.com/ocornut/imgui/releases/tag/v1.87 [1.86]: https://github.com/ocornut/imgui/releases/tag/v1.86
Main.hs view
@@ -10,6 +10,7 @@ import qualified Data.Vector as Vector import DearImGui import DearImGui.OpenGL3+import DearImGui.Internal.Text (pack) import DearImGui.SDL import DearImGui.SDL.OpenGL import Control.Exception@@ -134,18 +135,18 @@ text "ListClipper" withChildOpen "##fixed" (ImVec2 0 200) True ImGuiWindowFlags_None do- let lotsOfItems = Vector.generate 50 (mappend "Item " . show)+ let lotsOfItems = Vector.generate 50 (pack . mappend "Item " . show) withListClipper Nothing lotsOfItems text text "ListClipper, Haskell-powered" withChildOpen "##infinite" (ImVec2 0 200) True ImGuiWindowFlags_None do- let infiniteItems = map (mappend "Item " . show) [0 :: Int ..]+ let infiniteItems = map (pack . mappend "Item " . show) [0 :: Int ..] withListClipper Nothing infiniteItems text text "Ethereal ListClipper" withChildOpen "##ethereal" (ImVec2 0 200) True ImGuiWindowFlags_None do withListClipper Nothing (ClipRange (0 :: Int) 1000) $- text . mappend "Item " . show+ text . pack . mappend "Item " . show plotHistogram "A histogram" [ 10, 10, 20, 30, 90 ]
dear-imgui.cabal view
@@ -1,7 +1,7 @@ cabal-version: 3.0 name: dear-imgui-version: 1.5.0+version: 2.0.0 author: Oliver Charles maintainer: ollie@ocharles.org.uk, aenor.realm@gmail.com license: BSD-3-Clause@@ -140,13 +140,14 @@ exposed-modules: DearImGui DearImGui.FontAtlas+ DearImGui.Internal.Text DearImGui.Raw DearImGui.Raw.DrawList DearImGui.Raw.Font DearImGui.Raw.Font.Config DearImGui.Raw.Font.GlyphRanges- DearImGui.Raw.ListClipper DearImGui.Raw.IO+ DearImGui.Raw.ListClipper other-modules: DearImGui.Context DearImGui.Enums@@ -171,6 +172,7 @@ , StateVar , unliftio , vector+ , text if flag(disable-obsolete) cxx-options: -DIMGUI_DISABLE_OBSOLETE_FUNCTIONS@@ -286,7 +288,7 @@ , scientific >= 0.3.6.2 && < 0.3.8 , text- >= 1.2.4 && < 1.3+ >= 1.2.4 && < 2.1 , th-lift >= 0.7 && < 0.9 , transformers@@ -308,10 +310,10 @@ main-is: Main.hs hs-source-dirs: examples/glfw default-language: Haskell2010- if (!flag(examples) || !flag(glfw) || !flag(opengl2))+ if (!flag(examples) || !flag(glfw) || !flag(opengl3)) buildable: False else- build-depends: base, GLFW-b, gl, dear-imgui, managed+ build-depends: base, GLFW-b, gl, dear-imgui, managed, text executable readme import: common, exe-flags
examples/glfw/Main.hs view
@@ -13,6 +13,7 @@ import Data.IORef import Data.List (sortBy) import Data.Foldable (traverse_)+import Data.Text (Text, pack) import DearImGui import DearImGui.OpenGL2@@ -61,7 +62,7 @@ GLFW.terminate -mainLoop :: Window -> IORef [(Integer, String)] -> IO ()+mainLoop :: Window -> IORef [(Integer, Text)] -> IO () mainLoop win tableRef = do -- Process the event loop GLFW.pollEvents@@ -102,7 +103,7 @@ mainLoop win tableRef -mkTable :: IORef [(Integer, String)] -> IO ()+mkTable :: IORef [(Integer, Text)] -> IO () mkTable tableRef = withTableOpen sortable "MyTable" 3 $ do tableSetupColumn "Hello"@@ -120,7 +121,7 @@ readIORef tableRef >>= traverse_ \(ix, title) -> do tableNextRow- tableNextColumn $ text (show ix)+ tableNextColumn $ text (pack $ show ix) tableNextColumn $ text title tableNextColumn $ void (button "♥") where
src/DearImGui.hs view
@@ -6,10 +6,7 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PatternSynonyms #-}-{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE TemplateHaskell #-} {-| Module: DearImGui@@ -350,13 +347,12 @@ ( foldl' ) import Foreign import Foreign.C-import qualified GHC.Foreign as Foreign-import System.IO- ( utf8 ) -- dear-imgui import DearImGui.Enums+import DearImGui.Internal.Text (Text) import DearImGui.Structs+import qualified DearImGui.Internal.Text as Text import qualified DearImGui.Raw as Raw import qualified DearImGui.Raw.Font as Raw.Font import qualified DearImGui.Raw.ListClipper as Raw.ListClipper@@ -383,10 +379,9 @@ -- | Get the compiled version string e.g. "1.80 WIP" (essentially the value for -- @IMGUI_VERSION@ from the compiled version of @imgui.cpp@).-getVersion :: MonadIO m => m String+getVersion :: MonadIO m => m Text getVersion = liftIO do- peekCString =<< Raw.getVersion-+ Raw.getVersion >>= Text.peekCString -- | Push window to the stack and start appending to it. --@@ -395,9 +390,9 @@ -- matching 'end' for each 'begin' call, regardless of its return value! -- -- Wraps @ImGui::Begin()@ with default options.-begin :: MonadIO m => String -> m Bool+begin :: MonadIO m => Text -> m Bool begin name = liftIO do- withCString name \namePtr ->+ Text.withCString name \namePtr -> Raw.begin namePtr Nothing Nothing -- | Append items to a window.@@ -406,14 +401,14 @@ -- -- You may append multiple times to the same window during the same frame -- by calling 'withWindow' in multiple places.-withWindow :: MonadUnliftIO m => String -> (Bool -> m a) -> m a+withWindow :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a withWindow name = bracket (begin name) (const Raw.end) -- | Append items to a window unless it is collapsed or fully clipped. -- -- You may append multiple times to the same window during the same frame -- by calling 'withWindowOpen' in multiple places.-withWindowOpen :: MonadUnliftIO m => String -> m () -> m ()+withWindowOpen :: MonadUnliftIO m => Text -> m () -> m () withWindowOpen name action = withWindow name (`when` action) @@ -429,7 +424,7 @@ where open = liftIO do Raw.setNextWindowFullscreen- withCString "FullScreen" \namePtr ->+ Text.withCString "FullScreen" \namePtr -> Raw.begin namePtr (Just nullPtr) (Just fullscreenFlags) close = liftIO . const Raw.end@@ -465,88 +460,88 @@ -- Always call a matching `endChild` for each `beginChild` call, regardless of its return value. -- -- Wraps @ImGui::BeginChild()@.-beginChild :: MonadIO m => String -> ImVec2 -> Bool -> ImGuiWindowFlags -> m Bool+beginChild :: MonadIO m => Text -> ImVec2 -> Bool -> ImGuiWindowFlags -> m Bool beginChild name size border flags = liftIO do- withCString name \namePtr ->+ Text.withCString name \namePtr -> with size \sizePtr -> Raw.beginChild namePtr sizePtr (bool 0 1 border) flags -- | Action wrapper for child windows. -- -- Action will get 'False' if the child region is collapsed or fully clipped.-withChild :: MonadUnliftIO m => String -> ImVec2 -> Bool -> ImGuiWindowFlags -> (Bool -> m a) -> m a+withChild :: MonadUnliftIO m => Text -> ImVec2 -> Bool -> ImGuiWindowFlags -> (Bool -> m a) -> m a withChild name size border flags = bracket (beginChild name size border flags) (const Raw.endChild) -- | Action-skipping wrapper for child windows. -- -- Action will be skipped if the child region is collapsed or fully clipped.-withChildOpen :: MonadUnliftIO m => String -> ImVec2 -> Bool -> ImGuiWindowFlags -> m () -> m ()+withChildOpen :: MonadUnliftIO m => Text -> ImVec2 -> Bool -> ImGuiWindowFlags -> m () -> m () withChildOpen name size border flags action = withChild name size border flags (`when` action) -- | Action wrapper to run in a context of another child window addressed by its name. -- -- Action will get 'False' if the child region is collapsed or fully clipped.-withChildContext :: MonadUnliftIO m => String -> (Bool -> m a) -> m a+withChildContext :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a withChildContext name action = bracket- (liftIO $ withCString name Raw.beginChildContext)+ (liftIO $ Text.withCString name Raw.beginChildContext) (const Raw.endChild) action -- | Plain text.-text :: MonadIO m => String -> m ()+text :: MonadIO m => Text -> m () text t = liftIO do- withCString t \textPtr ->+ Text.withCString t \textPtr -> Raw.textUnformatted textPtr Nothing -- | Colored text.-textColored :: (HasGetter ref ImVec4, MonadIO m) => ref -> String -> m ()+textColored :: (HasGetter ref ImVec4, MonadIO m) => ref -> Text -> m () textColored ref t = liftIO do currentValue <- get ref with currentValue \refPtr ->- withCString t $ Raw.textColored refPtr+ Text.withCString t $ Raw.textColored refPtr -- | Plain text in a "disabled" color according to current style.-textDisabled :: MonadIO m => String -> m ()+textDisabled :: MonadIO m => Text -> m () textDisabled t = liftIO do- withCString t Raw.textDisabled+ Text.withCString t Raw.textDisabled -- | Plain text with a word-wrap capability. -- -- Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, -- you may need to set a size using 'setNextWindowSize'.-textWrapped :: MonadIO m => String -> m ()+textWrapped :: MonadIO m => Text -> m () textWrapped t = liftIO do- withCString t Raw.textWrapped+ Text.withCString t Raw.textWrapped -- | Label+text combo aligned to other label+value widgets.-labelText :: MonadIO m => String -> String -> m ()+labelText :: MonadIO m => Text -> Text -> m () labelText label t = liftIO do- withCString label \labelPtr ->- withCString t \textPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString t \textPtr -> Raw.labelText labelPtr textPtr -- | Text with a little bullet aligned to the typical tree node.-bulletText :: MonadIO m => String -> m ()+bulletText :: MonadIO m => Text -> m () bulletText t = liftIO do- withCString t Raw.bulletText+ Text.withCString t Raw.bulletText -- | A button. Returns 'True' when clicked. -- -- Wraps @ImGui::Button()@.-button :: MonadIO m => String -> m Bool+button :: MonadIO m => Text -> m Bool button label = liftIO do- withCString label Raw.button+ Text.withCString label Raw.button -- | Button with @FramePadding=(0,0)@ to easily embed within text. -- -- Wraps @ImGui::SmallButton()@.-smallButton :: MonadIO m => String -> m Bool+smallButton :: MonadIO m => Text -> m Bool smallButton label = liftIO do- withCString label Raw.smallButton+ Text.withCString label Raw.smallButton -- | Flexible button behavior without the visuals.@@ -555,9 +550,9 @@ -- (along with IsItemActive, IsItemHovered, etc). -- -- Wraps @ImGui::InvisibleButton()@.-invisibleButton :: MonadIO m => String -> ImVec2 -> ImGuiButtonFlags -> m Bool+invisibleButton :: MonadIO m => Text -> ImVec2 -> ImGuiButtonFlags -> m Bool invisibleButton label size flags = liftIO do- withCString label \labelPtr ->+ Text.withCString label \labelPtr -> with size \sizePtr -> Raw.invisibleButton labelPtr sizePtr flags @@ -565,18 +560,18 @@ -- | Square button with an arrow shape. -- -- Wraps @ImGui::ArrowButton()@.-arrowButton :: MonadIO m => String -> ImGuiDir -> m Bool+arrowButton :: MonadIO m => Text -> ImGuiDir -> m Bool arrowButton strId dir = liftIO do- withCString strId \strIdPtr ->+ Text.withCString strId \strIdPtr -> Raw.arrowButton strIdPtr dir -- | Wraps @ImGui::Checkbox()@.-checkbox :: (HasSetter ref Bool, HasGetter ref Bool, MonadIO m) => String -> ref -> m Bool+checkbox :: (HasSetter ref Bool, HasGetter ref Bool, MonadIO m) => Text -> ref -> m Bool checkbox label ref = liftIO do currentValue <- get ref with (bool 0 1 currentValue) \boolPtr -> do- changed <- withCString label \labelPtr ->+ changed <- Text.withCString label \labelPtr -> Raw.checkbox labelPtr boolPtr when changed do@@ -586,9 +581,9 @@ return changed -progressBar :: MonadIO m => Float -> Maybe String -> m ()+progressBar :: MonadIO m => Float -> Maybe Text -> m () progressBar progress overlay = liftIO do- withCStringOrNull overlay \overlayPtr ->+ Text.withCStringOrNull overlay \overlayPtr -> Raw.progressBar (CFloat progress) overlayPtr @@ -600,17 +595,17 @@ -- Only call 'endCombo' if 'beginCombo' returns 'True'! -- -- Wraps @ImGui::BeginCombo()@.-beginCombo :: MonadIO m => String -> String -> m Bool+beginCombo :: MonadIO m => Text -> Text -> m Bool beginCombo label previewValue = liftIO $- withCString label \labelPtr ->- withCString previewValue \previewValuePtr ->+ Text.withCString label \labelPtr ->+ Text.withCString previewValue \previewValuePtr -> Raw.beginCombo labelPtr previewValuePtr -- | Create a combo box with a given label and preview value. -- -- Action will get 'True' if the combo box is open. -- In this state, you should populate the contents of the combo box - for example, by calling 'selectable'.-withCombo :: MonadUnliftIO m => String -> String -> (Bool -> m a) -> m a+withCombo :: MonadUnliftIO m => Text -> Text -> (Bool -> m a) -> m a withCombo label previewValue = bracket (beginCombo label previewValue) (`when` Raw.endCombo) @@ -618,19 +613,19 @@ -- -- Action will be called if the combo box is open to populate the contents -- of the combo box - for example, by calling 'selectable'.-withComboOpen :: MonadUnliftIO m => String -> String -> m () -> m ()+withComboOpen :: MonadUnliftIO m => Text -> Text -> m () -> m () withComboOpen label previewValue action = withCombo label previewValue (`when` action) -- | Wraps @ImGui::Combo()@.-combo :: (MonadIO m, HasGetter ref Int, HasSetter ref Int) => String -> ref -> [String] -> m Bool+combo :: (MonadIO m, HasGetter ref Int, HasSetter ref Int) => Text -> ref -> [Text] -> m Bool combo label selectedIndex items = liftIO $ Managed.with m return where m = do i <- get selectedIndex - cStrings <- traverse (\str -> Managed.managed (withCString str)) items- labelPtr <- Managed.managed $ withCString label+ cStrings <- traverse (\str -> Managed.managed (Text.withCString str)) items+ labelPtr <- Managed.managed $ Text.withCString label iPtr <- Managed.managed $ with (fromIntegral i) liftIO $ withArrayLen cStrings \len itemsPtr -> do@@ -644,11 +639,11 @@ -- | Wraps @ImGui::DragFloat()@-dragFloat :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => String -> ref -> Float -> Float -> Float -> m Bool+dragFloat :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => Text -> ref -> Float -> Float -> Float -> m Bool dragFloat desc ref speed minValue maxValue = liftIO do currentValue <- get ref with (realToFrac currentValue) \floatPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.dragFloat descPtr floatPtr (CFloat speed) (CFloat minValue) (CFloat maxValue) when changed do@@ -659,11 +654,11 @@ -- | Wraps @ImGui::DragFloat2()@-dragFloat2 :: (MonadIO m, HasSetter ref (Float, Float), HasGetter ref (Float, Float)) => String -> ref -> Float -> Float -> Float -> m Bool+dragFloat2 :: (MonadIO m, HasSetter ref (Float, Float), HasGetter ref (Float, Float)) => Text -> ref -> Float -> Float -> Float -> m Bool dragFloat2 desc ref speed minValue maxValue = liftIO do (x, y) <- get ref withArray [ realToFrac x, realToFrac y ] \floatPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.dragFloat2 descPtr floatPtr (CFloat speed) (CFloat minValue) (CFloat maxValue) when changed do@@ -673,11 +668,11 @@ return changed -- | Wraps @ImGui::DragFloat3()@-dragFloat3 :: (MonadIO m, HasSetter ref (Float, Float, Float), HasGetter ref (Float, Float, Float)) => String -> ref -> Float -> Float -> Float -> m Bool+dragFloat3 :: (MonadIO m, HasSetter ref (Float, Float, Float), HasGetter ref (Float, Float, Float)) => Text -> ref -> Float -> Float -> Float -> m Bool dragFloat3 desc ref speed minValue maxValue = liftIO do (x, y, z) <- get ref withArray [ realToFrac x, realToFrac y, realToFrac z ] \floatPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.dragFloat3 descPtr floatPtr (CFloat speed) (CFloat minValue) (CFloat maxValue) when changed do@@ -688,11 +683,11 @@ -- | Wraps @ImGui::DragFloat4()@-dragFloat4 :: (MonadIO m, HasSetter ref (Float, Float, Float, Float), HasGetter ref (Float, Float, Float, Float)) => String -> ref -> Float -> Float -> Float -> m Bool+dragFloat4 :: (MonadIO m, HasSetter ref (Float, Float, Float, Float), HasGetter ref (Float, Float, Float, Float)) => Text -> ref -> Float -> Float -> Float -> m Bool dragFloat4 desc ref speed minValue maxValue = liftIO do (x, y, z, u) <- get ref withArray [ realToFrac x, realToFrac y, realToFrac z, realToFrac u ] \floatPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.dragFloat4 descPtr floatPtr (CFloat speed) (CFloat minValue) (CFloat maxValue) when changed do@@ -701,16 +696,16 @@ return changed -dragFloatRange2 :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => String -> ref -> ref -> Float -> Float -> Float -> String -> String -> m Bool+dragFloatRange2 :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => Text -> ref -> ref -> Float -> Float -> Float -> Text -> Text -> m Bool dragFloatRange2 desc refMin refMax speed minValue maxValue minFmt maxFmt = liftIO do curMin <- get refMin curMax <- get refMax with (CFloat curMin) \minPtr -> with (CFloat curMax) \maxPtr -> do changed <-- withCString desc \descPtr ->- withCString minFmt \minFmtPtr ->- withCString maxFmt \maxFmtPtr ->+ Text.withCString desc \descPtr ->+ Text.withCString minFmt \minFmtPtr ->+ Text.withCString maxFmt \maxFmtPtr -> Raw.dragFloatRange2 descPtr minPtr maxPtr@@ -727,13 +722,13 @@ return changed -- | Wraps @ImGui::DragFloat()@-dragInt :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => String -> ref -> Float -> Int -> Int -> m Bool+dragInt :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => Text -> ref -> Float -> Int -> Int -> m Bool dragInt label ref speed minValue maxValue = liftIO do currentValue <- get ref with (fromIntegral currentValue) \vPtr -> do changed <-- withCString label \labelPtr ->- withCString "%d" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%d" \formatPtr -> Raw.dragInt labelPtr vPtr@@ -750,13 +745,13 @@ return changed -- | Wraps @ImGui::DragInt2()@-dragInt2 :: (MonadIO m, HasSetter ref (Int, Int), HasGetter ref (Int, Int)) => String -> ref -> Float -> Int -> Int -> m Bool+dragInt2 :: (MonadIO m, HasSetter ref (Int, Int), HasGetter ref (Int, Int)) => Text -> ref -> Float -> Int -> Int -> m Bool dragInt2 label ref speed minValue maxValue = liftIO do (x, y) <- get ref withArray [ fromIntegral x, fromIntegral y ] \vPtr -> do changed <-- withCString label \labelPtr ->- withCString "%d" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%d" \formatPtr -> Raw.dragInt2 labelPtr vPtr@@ -773,13 +768,13 @@ return changed -- | Wraps @ImGui::DragInt3()@-dragInt3 :: (MonadIO m, HasSetter ref (Int, Int, Int), HasGetter ref (Int, Int, Int)) => String -> ref -> Float -> Int -> Int -> m Bool+dragInt3 :: (MonadIO m, HasSetter ref (Int, Int, Int), HasGetter ref (Int, Int, Int)) => Text -> ref -> Float -> Int -> Int -> m Bool dragInt3 label ref speed minValue maxValue = liftIO do (x, y, z) <- get ref withArray [ fromIntegral x, fromIntegral y, fromIntegral z ] \vPtr -> do changed <-- withCString label \labelPtr ->- withCString "%d" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%d" \formatPtr -> Raw.dragInt3 labelPtr vPtr@@ -796,13 +791,13 @@ return changed -- | Wraps @ImGui::DragInt4()@-dragInt4 :: (MonadIO m, HasSetter ref (Int, Int, Int, Int), HasGetter ref (Int, Int, Int, Int)) => String -> ref -> Float -> Int -> Int -> m Bool+dragInt4 :: (MonadIO m, HasSetter ref (Int, Int, Int, Int), HasGetter ref (Int, Int, Int, Int)) => Text -> ref -> Float -> Int -> Int -> m Bool dragInt4 label ref speed minValue maxValue = liftIO do (x, y, z, w) <- get ref withArray [ fromIntegral x, fromIntegral y, fromIntegral z, fromIntegral w ] \vPtr -> do changed <-- withCString label \labelPtr ->- withCString "%d" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%d" \formatPtr -> Raw.dragInt4 labelPtr vPtr@@ -818,16 +813,16 @@ return changed -dragIntRange2 :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => String -> ref -> ref -> Float -> Int -> Int -> String -> String -> m Bool+dragIntRange2 :: (MonadIO m, HasSetter ref Int, HasGetter ref Int) => Text -> ref -> ref -> Float -> Int -> Int -> Text -> Text -> m Bool dragIntRange2 desc refMin refMax speed minValue maxValue minFmt maxFmt = liftIO do curMin <- get refMin curMax <- get refMax with (fromIntegral curMin) \minPtr -> with (fromIntegral curMax) \maxPtr -> do changed <-- withCString desc \descPtr ->- withCString minFmt \minFmtPtr ->- withCString maxFmt \maxFmtPtr ->+ Text.withCString desc \descPtr ->+ Text.withCString minFmt \minFmtPtr ->+ Text.withCString maxFmt \maxFmtPtr -> Raw.dragIntRange2 descPtr minPtr@@ -848,7 +843,7 @@ dragScalar :: (HasSetter ref a, HasGetter ref a, HasGetter range a, Storable a, MonadIO m)- => String -> ImGuiDataType -> ref -> Float -> range -> range -> String -> ImGuiSliderFlags -> m Bool+ => Text -> ImGuiDataType -> ref -> Float -> range -> range -> Text -> ImGuiSliderFlags -> m Bool dragScalar label dataType ref vSpeed refMin refMax format flags = liftIO do currentValue <- get ref minValue <- get refMin@@ -858,8 +853,8 @@ with minValue \minPtr -> with maxValue \maxPtr -> do changed <-- withCString label \labelPtr ->- withCString format \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString format \formatPtr -> Raw.dragScalar labelPtr dataType@@ -878,7 +873,7 @@ dragScalarN :: (HasSetter ref [a], HasGetter ref [a], HasGetter range a, Storable a, MonadIO m)- => String -> ImGuiDataType -> ref -> Float -> range -> range -> String -> ImGuiSliderFlags -> m Bool+ => Text -> ImGuiDataType -> ref -> Float -> range -> range -> Text -> ImGuiSliderFlags -> m Bool dragScalarN label dataType ref vSpeed refMin refMax format flags = liftIO do currentValues <- get ref minValue <- get refMin@@ -888,8 +883,8 @@ with minValue \minPtr -> with maxValue \maxPtr -> do changed <-- withCString label \labelPtr ->- withCString format \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString format \formatPtr -> Raw.dragScalarN labelPtr dataType@@ -909,7 +904,7 @@ sliderScalar :: (HasGetter ref a, HasSetter ref a, HasGetter range a, Storable a, MonadIO m)- => String -> ImGuiDataType -> ref -> range -> range -> String -> ImGuiSliderFlags -> m Bool+ => Text -> ImGuiDataType -> ref -> range -> range -> Text -> ImGuiSliderFlags -> m Bool sliderScalar label dataType ref refMin refMax format flags = liftIO do currentValue <- get ref minValue <- get refMin@@ -919,8 +914,8 @@ with minValue \minPtr -> with maxValue \maxPtr -> do changed <-- withCString label \labelPtr ->- withCString format \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString format \formatPtr -> Raw.sliderScalar labelPtr dataType@@ -938,7 +933,7 @@ sliderScalarN :: (HasSetter value [a], HasGetter value [a], HasGetter range a, Storable a, MonadIO m)- => String -> ImGuiDataType -> value -> range -> range -> String -> ImGuiSliderFlags -> m Bool+ => Text -> ImGuiDataType -> value -> range -> range -> Text -> ImGuiSliderFlags -> m Bool sliderScalarN label dataType ref refMin refMax format flags = liftIO do currentValues <- get ref minValue <- get refMin@@ -948,8 +943,8 @@ with minValue \minPtr -> with maxValue \maxPtr -> do changed <-- withCString label \labelPtr ->- withCString format \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString format \formatPtr -> Raw.sliderScalarN labelPtr dataType@@ -967,11 +962,11 @@ return changed -- | Wraps @ImGui::SliderFloat()@-sliderFloat :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => String -> ref -> Float -> Float -> m Bool+sliderFloat :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => Text -> ref -> Float -> Float -> m Bool sliderFloat desc ref minValue maxValue = liftIO do currentValue <- get ref with (realToFrac currentValue) \floatPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.sliderFloat descPtr floatPtr (CFloat minValue) (CFloat maxValue) when changed do@@ -981,11 +976,11 @@ return changed -- | Wraps @ImGui::SliderFloat2()@-sliderFloat2 :: (MonadIO m, HasSetter ref (Float, Float), HasGetter ref (Float, Float)) => String -> ref -> Float -> Float -> m Bool+sliderFloat2 :: (MonadIO m, HasSetter ref (Float, Float), HasGetter ref (Float, Float)) => Text -> ref -> Float -> Float -> m Bool sliderFloat2 desc ref minValue maxValue = liftIO do (x, y) <- get ref withArray [ realToFrac x, realToFrac y ] \floatPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.sliderFloat descPtr floatPtr (CFloat minValue) (CFloat maxValue) when changed do@@ -995,11 +990,11 @@ return changed -- | Wraps @ImGui::SliderFloat3()@-sliderFloat3 :: (MonadIO m, HasSetter ref (Float, Float, Float), HasGetter ref (Float, Float, Float)) => String -> ref -> Float -> Float -> m Bool+sliderFloat3 :: (MonadIO m, HasSetter ref (Float, Float, Float), HasGetter ref (Float, Float, Float)) => Text -> ref -> Float -> Float -> m Bool sliderFloat3 desc ref minValue maxValue = liftIO do (x, y, z) <- get ref withArray [ realToFrac x, realToFrac y, realToFrac z ] \floatPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.sliderFloat descPtr floatPtr (CFloat minValue) (CFloat maxValue) when changed do@@ -1009,11 +1004,11 @@ return changed -- | Wraps @ImGui::SliderFloat4()@-sliderFloat4 :: (MonadIO m, HasSetter ref (Float, Float, Float, Float), HasGetter ref (Float, Float, Float, Float)) => String -> ref -> Float -> Float -> m Bool+sliderFloat4 :: (MonadIO m, HasSetter ref (Float, Float, Float, Float), HasGetter ref (Float, Float, Float, Float)) => Text -> ref -> Float -> Float -> m Bool sliderFloat4 desc ref minValue maxValue = liftIO do (x, y, z, u) <- get ref withArray [ realToFrac x, realToFrac y, realToFrac z, realToFrac u ] \floatPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.sliderFloat descPtr floatPtr (CFloat minValue) (CFloat maxValue) when changed do@@ -1023,13 +1018,13 @@ return changed -- | Slider widget to select an angle in radians, while displaying degrees.-sliderAngle :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => String -> ref -> Float -> Float -> m Bool+sliderAngle :: (MonadIO m, HasSetter ref Float, HasGetter ref Float) => Text -> ref -> Float -> Float -> m Bool sliderAngle desc refRads minDegs maxDegs = liftIO do currentRads <- get refRads with (CFloat currentRads) \currentRadsPtr -> do changed <-- withCString desc \descPtr ->- withCString "%.0f deg" \formatPtr ->+ Text.withCString desc \descPtr ->+ Text.withCString "%.0f deg" \formatPtr -> Raw.sliderAngle descPtr currentRadsPtr (CFloat minDegs) (CFloat maxDegs) formatPtr ImGuiSliderFlags_AlwaysClamp when changed do@@ -1041,13 +1036,13 @@ -- | Wraps @ImGui::SliderInt()@ sliderInt :: (MonadIO m, HasSetter ref Int, HasGetter ref Int)- => String -> ref -> Int -> Int -> m Bool+ => Text -> ref -> Int -> Int -> m Bool sliderInt label ref minValue maxValue = liftIO do currentValue <- get ref with (fromIntegral currentValue) \vPtr -> do changed <-- withCString label \labelPtr ->- withCString "%d" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%d" \formatPtr -> Raw.sliderInt labelPtr vPtr@@ -1065,13 +1060,13 @@ -- | Wraps @ImGui::SliderInt2()@ sliderInt2 :: (MonadIO m, HasSetter ref (Int, Int), HasGetter ref (Int, Int))- => String -> ref -> Int -> Int -> m Bool+ => Text -> ref -> Int -> Int -> m Bool sliderInt2 label ref minValue maxValue = liftIO do (x, y) <- get ref withArray [ fromIntegral x, fromIntegral y ] \vPtr -> do changed <-- withCString label \labelPtr ->- withCString "%d" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%d" \formatPtr -> Raw.sliderInt2 labelPtr vPtr@@ -1089,13 +1084,13 @@ -- | Wraps @ImGui::SliderInt3()@ sliderInt3 :: (MonadIO m, HasSetter ref (Int, Int, Int), HasGetter ref (Int, Int, Int))- => String -> ref -> Int -> Int -> m Bool+ => Text -> ref -> Int -> Int -> m Bool sliderInt3 label ref minValue maxValue = liftIO do (x, y, z) <- get ref withArray [ fromIntegral x, fromIntegral y, fromIntegral z ] \vPtr -> do changed <-- withCString label \labelPtr ->- withCString "%d" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%d" \formatPtr -> Raw.sliderInt3 labelPtr vPtr@@ -1113,13 +1108,13 @@ -- | Wraps @ImGui::SliderInt4()@ sliderInt4 :: (MonadIO m, HasSetter ref (Int, Int, Int, Int), HasGetter ref (Int, Int, Int, Int))- => String -> ref -> Int -> Int -> m Bool+ => Text -> ref -> Int -> Int -> m Bool sliderInt4 label ref minValue maxValue = liftIO do (x, y, z, w) <- get ref withArray [ fromIntegral x, fromIntegral y, fromIntegral z, fromIntegral w] \vPtr -> do changed <-- withCString label \labelPtr ->- withCString "%d" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%d" \formatPtr -> Raw.sliderInt4 labelPtr vPtr@@ -1136,15 +1131,15 @@ vSliderFloat :: (HasSetter ref Float, HasGetter ref Float, MonadIO m)- => String -> ImVec2 -> ref -> Float -> Float -> m Bool+ => Text -> ImVec2 -> ref -> Float -> Float -> m Bool vSliderFloat label size ref minValue maxValue = liftIO do currentValue <- get ref with size \sizePtr -> with (CFloat currentValue) \dataPtr -> do changed <-- withCString label \labelPtr ->- withCString "%.3f" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%.3f" \formatPtr -> Raw.vSliderFloat labelPtr sizePtr@@ -1162,15 +1157,15 @@ vSliderInt :: (HasSetter ref Int, HasGetter ref Int, MonadIO m)- => String -> ImVec2 -> ref -> Int -> Int -> m Bool+ => Text -> ImVec2 -> ref -> Int -> Int -> m Bool vSliderInt label size ref minValue maxValue = liftIO do currentValue <- get ref with size \sizePtr -> with (fromIntegral currentValue) \dataPtr -> do changed <-- withCString label \labelPtr ->- withCString "%d" \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString "%d" \formatPtr -> Raw.vSliderInt labelPtr sizePtr@@ -1188,7 +1183,7 @@ vSliderScalar :: (HasSetter ref a, HasGetter ref a, HasGetter range a, Storable a, MonadIO m)- => String -> ImVec2 -> ImGuiDataType -> ref -> range -> range -> String -> ImGuiSliderFlags -> m Bool+ => Text -> ImVec2 -> ImGuiDataType -> ref -> range -> range -> Text -> ImGuiSliderFlags -> m Bool vSliderScalar label size dataType ref refMin refMax format flags = liftIO do currentValue <- get ref minValue <- get refMin@@ -1199,8 +1194,8 @@ with minValue \minPtr -> with maxValue \maxPtr -> do changed <-- withCString label \labelPtr ->- withCString format \formatPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString format \formatPtr -> Raw.vSliderScalar labelPtr sizePtr@@ -1219,10 +1214,10 @@ -- | Wraps @ImGui::InputText()@.-inputText :: (MonadIO m, HasSetter ref String, HasGetter ref String) => String -> ref -> Int -> m Bool+inputText :: (MonadIO m, HasSetter ref Text, HasGetter ref Text) => Text -> ref -> Int -> m Bool inputText label ref bufSize = withInputString ref bufSize \bufPtrLen ->- Foreign.withCString utf8 label \labelPtr ->+ Text.withCString label \labelPtr -> Raw.inputText labelPtr bufPtrLen@@ -1230,10 +1225,10 @@ -- | Wraps @ImGui::InputTextMultiline()@.-inputTextMultiline :: (MonadIO m, HasSetter ref String, HasGetter ref String) => String -> ref -> Int -> ImVec2 -> m Bool+inputTextMultiline :: (MonadIO m, HasSetter ref Text, HasGetter ref Text) => Text -> ref -> Int -> ImVec2 -> m Bool inputTextMultiline label ref bufSize size = withInputString ref bufSize \bufPtrLen ->- Foreign.withCString utf8 label \labelPtr ->+ Text.withCString label \labelPtr -> with size \sizePtr -> Raw.inputTextMultiline labelPtr@@ -1243,11 +1238,11 @@ -- | Wraps @ImGui::InputTextWithHint()@.-inputTextWithHint :: (MonadIO m, HasSetter ref String, HasGetter ref String) => String -> String -> ref -> Int -> m Bool+inputTextWithHint :: (MonadIO m, HasSetter ref Text, HasGetter ref Text) => Text -> Text -> ref -> Int -> m Bool inputTextWithHint label hint ref bufSize = withInputString ref bufSize \bufPtrLen ->- Foreign.withCString utf8 label \labelPtr ->- Foreign.withCString utf8 hint \hintPtr ->+ Text.withCString label \labelPtr ->+ Text.withCString hint \hintPtr -> Raw.inputTextWithHint labelPtr hintPtr@@ -1257,14 +1252,14 @@ -- | Internal helper to prepare appropriately sized and encoded input buffer. withInputString- :: (MonadIO m, HasSetter ref String, HasGetter ref String)+ :: (MonadIO m, HasSetter ref Text, HasGetter ref Text) => ref -> Int -> (CStringLen -> IO Bool) -> m Bool withInputString ref bufSize action = liftIO do input <- get ref- Foreign.withCStringLen utf8 input \(refPtr, refSize) ->+ Text.withCStringLen input \(refPtr, refSize) -> -- XXX: Allocate and zero buffer to receive imgui updates. bracket (mkBuf refSize) free \bufPtr -> do -- XXX: Copy the original input.@@ -1274,7 +1269,7 @@ when changed do -- XXX: Assuming Imgui wouldn't write over the bump stop so peekCString would finish.- newValue <- Foreign.peekCString utf8 bufPtr+ newValue <- Text.peekCString bufPtr ref $=! newValue return changed@@ -1286,11 +1281,11 @@ -- | Wraps @ImGui::ColorPicker3()@.-colorPicker3 :: (MonadIO m, HasSetter ref ImVec3, HasGetter ref ImVec3) => String -> ref -> m Bool+colorPicker3 :: (MonadIO m, HasSetter ref ImVec3, HasGetter ref ImVec3) => Text -> ref -> m Bool colorPicker3 desc ref = liftIO do ImVec3{x, y, z} <- get ref withArray (realToFrac <$> [x, y, z]) \refPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.colorPicker3 descPtr refPtr when changed do@@ -1303,11 +1298,11 @@ -- | Display a color square/button, hover for details, return true when pressed. -- -- Wraps @ImGui::ColorButton()@.-colorButton :: (MonadIO m, HasSetter ref ImVec4, HasGetter ref ImVec4) => String -> ref -> m Bool+colorButton :: (MonadIO m, HasSetter ref ImVec4, HasGetter ref ImVec4) => Text -> ref -> m Bool colorButton desc ref = liftIO do currentValue <- get ref with currentValue \refPtr -> do- changed <- withCString desc \descPtr ->+ changed <- Text.withCString desc \descPtr -> Raw.colorButton descPtr refPtr when changed do@@ -1329,9 +1324,9 @@ , tableInnerWidth = 0 } -- | Wraps @ImGui::BeginTable()@.-beginTable :: MonadIO m => TableOptions -> String -> Int -> m Bool+beginTable :: MonadIO m => TableOptions -> Text -> Int -> m Bool beginTable TableOptions{..} label columns = liftIO do- withCString label \labelPtr ->+ Text.withCString label \labelPtr -> with tableOuterSize \outerSizePtr -> Raw.beginTable labelPtr (fromIntegral columns) tableFlags outerSizePtr (CFloat tableInnerWidth) @@ -1360,11 +1355,11 @@ -- | b | 2 | -- @ ---withTable :: MonadUnliftIO m => TableOptions -> String -> Int -> (Bool -> m a) -> m a+withTable :: MonadUnliftIO m => TableOptions -> Text -> Int -> (Bool -> m a) -> m a withTable options label columns = bracket (beginTable options label columns) (`when` Raw.endTable) -withTableOpen :: MonadUnliftIO m => TableOptions -> String -> Int -> m () -> m ()+withTableOpen :: MonadUnliftIO m => TableOptions -> Text -> Int -> m () -> m () withTableOpen options label columns action = withTable options label columns (`when` action) @@ -1412,13 +1407,13 @@ } -- | Wraps @ImGui::TableSetupColumn()@ using 'defTableColumnOptions'.-tableSetupColumn :: MonadIO m => String -> m ()+tableSetupColumn :: MonadIO m => Text -> m () tableSetupColumn = tableSetupColumnWith defTableColumnOptions -- | Wraps @ImGui::TableSetupColumn() with explicit options@.-tableSetupColumnWith :: MonadIO m => TableColumnOptions -> String -> m ()+tableSetupColumnWith :: MonadIO m => TableColumnOptions -> Text -> m () tableSetupColumnWith TableColumnOptions{..} label = liftIO do- withCString label \labelPtr ->+ Text.withCString label \labelPtr -> Raw.tableSetupColumn labelPtr tableColumnFlags (CFloat tableColumnInitWidthOrWeight) tableColumnUserId -- | Wraps @ImGui::TableSetupScrollFreeze()@.@@ -1510,9 +1505,9 @@ -- | Wraps @ImGui::TableGetColumnName -- returns "" if column didn't have a name declared by TableSetupColumn -- 'Nothing' returns the current column name-tableGetColumnName :: MonadIO m => Maybe Int -> m String+tableGetColumnName :: MonadIO m => Maybe Int -> m Text tableGetColumnName c = liftIO do- Raw.tableGetColumnName (fromIntegral <$> c) >>= peekCString+ Raw.tableGetColumnName (fromIntegral <$> c) >>= Text.peekCString -- | Wraps @ImGui::TableGetRowIndex()@. -- return column flags so you can query their Enabled/Visible/Sorted/Hovered@@ -1540,19 +1535,19 @@ Raw.tableSetBgColor target color (fromIntegral <$> column_n) -- | Wraps @ImGui::TreeNode()@.-treeNode :: MonadIO m => String -> m Bool+treeNode :: MonadIO m => Text -> m Bool treeNode label = liftIO do- withCString label Raw.treeNode+ Text.withCString label Raw.treeNode -- | Wraps @ImGui::TreePush()@.-treePush :: MonadIO m => String -> m ()+treePush :: MonadIO m => Text -> m () treePush label = liftIO do- withCString label Raw.treePush+ Text.withCString label Raw.treePush -- | Wraps @ImGui::Selectable()@ with default options.-selectable :: MonadIO m => String -> m Bool+selectable :: MonadIO m => Text -> m Bool selectable = selectableWith defSelectableOptions data SelectableOptions = SelectableOptions@@ -1569,21 +1564,21 @@ } -- | Wraps @ImGui::Selectable()@ with explicit options.-selectableWith :: MonadIO m => SelectableOptions -> String -> m Bool+selectableWith :: MonadIO m => SelectableOptions -> Text -> m Bool selectableWith (SelectableOptions selected flags size) label = liftIO do with size \sizePtr ->- withCString label \labelPtr ->+ Text.withCString label \labelPtr -> Raw.selectable labelPtr (bool 0 1 selected) flags sizePtr -listBox :: (MonadIO m, HasGetter ref Int, HasSetter ref Int) => String -> ref -> [String] -> m Bool+listBox :: (MonadIO m, HasGetter ref Int, HasSetter ref Int) => Text -> ref -> [Text] -> m Bool listBox label selectedIndex items = liftIO $ Managed.with m return where m = do i <- get selectedIndex - cStrings <- traverse (\str -> Managed.managed (withCString str)) items- labelPtr <- Managed.managed $ withCString label+ cStrings <- traverse (\str -> Managed.managed (Text.withCString str)) items+ labelPtr <- Managed.managed $ Text.withCString label iPtr <- Managed.managed $ with (fromIntegral i) liftIO $ withArrayLen cStrings \len itemsPtr -> do@@ -1597,10 +1592,10 @@ -- | Wraps @ImGui::PlotHistogram()@.-plotHistogram :: MonadIO m => String -> [CFloat] -> m ()+plotHistogram :: MonadIO m => Text -> [CFloat] -> m () plotHistogram label values = liftIO $ withArrayLen values \len valuesPtr ->- withCString label \labelPtr ->+ Text.withCString label \labelPtr -> Raw.plotHistogram labelPtr valuesPtr (fromIntegral len) -- | Create a menu bar at the top of the screen and append to it.@@ -1632,20 +1627,20 @@ -- | Create a sub-menu entry. -- -- Wraps @ImGui::BeginMenu()@.-beginMenu :: MonadIO m => String -> m Bool+beginMenu :: MonadIO m => Text -> m Bool beginMenu label = liftIO do- withCString label Raw.beginMenu+ Text.withCString label Raw.beginMenu -- | Create a sub-menu entry. -- -- The action will get 'False' if the entry is not visible.-withMenu :: MonadUnliftIO m => String -> (Bool -> m a) -> m a+withMenu :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a withMenu label = bracket (beginMenu label) (`when` Raw.endMenu) -- | Create a sub-menu entry. -- -- The action will be skipped if the entry is not visible.-withMenuOpen :: MonadUnliftIO m => String -> m () -> m ()+withMenuOpen :: MonadUnliftIO m => Text -> m () -> m () withMenuOpen label action = withMenu label (`when` action) @@ -1653,41 +1648,41 @@ -- processed by ImGui at the moment -- -- Wraps @ImGui::MenuItem()@-menuItem :: MonadIO m => String -> m Bool+menuItem :: MonadIO m => Text -> m Bool menuItem label = liftIO do- withCString label Raw.menuItem+ Text.withCString label Raw.menuItem -- | Create a @TabBar@ and start appending to it. -- -- Wraps @ImGui::BeginTabBar@.-beginTabBar :: MonadIO m => String -> ImGuiTabBarFlags -> m Bool+beginTabBar :: MonadIO m => Text -> ImGuiTabBarFlags -> m Bool beginTabBar tabBarID flags = liftIO do- withCString tabBarID \ptr ->+ Text.withCString tabBarID \ptr -> Raw.beginTabBar ptr flags -- | Create a @TabBar@ and start appending to it. -- -- The action will get 'False' if the Tab bar is not visible.-withTabBar :: MonadUnliftIO m => String -> ImGuiTabBarFlags -> (Bool -> m a) -> m a+withTabBar :: MonadUnliftIO m => Text -> ImGuiTabBarFlags -> (Bool -> m a) -> m a withTabBar tabBarID flags = bracket (beginTabBar tabBarID flags) (`when` Raw.endTabBar) -- | Create a @TabBar@ and start appending to it. -- -- The action will be skipped if the Tab bar is not visible.-withTabBarOpen :: MonadUnliftIO m => String -> ImGuiTabBarFlags -> m () -> m ()+withTabBarOpen :: MonadUnliftIO m => Text -> ImGuiTabBarFlags -> m () -> m () withTabBarOpen tabBarID flags action = withTabBar tabBarID flags (`when` action) -- | Create a new tab. Returns @True@ if the tab is selected. -- -- Wraps @ImGui::BeginTabItem@.-beginTabItem :: (MonadIO m, HasGetter ref Bool, HasSetter ref Bool) => String -> ref -> ImGuiTabBarFlags -> m Bool+beginTabItem :: (MonadIO m, HasGetter ref Bool, HasSetter ref Bool) => Text -> ref -> ImGuiTabBarFlags -> m Bool beginTabItem tabName ref flags = liftIO do currentValue <- get ref with (bool 0 1 currentValue) \refPtr -> do- open <- withCString tabName \ptrName ->+ open <- Text.withCString tabName \ptrName -> Raw.beginTabItem ptrName refPtr flags newValue <- (0 /=) <$> peek refPtr@@ -1699,23 +1694,23 @@ -- | Create a new tab. -- -- The action will get 'True' if the tab is selected.-withTabItem :: (MonadUnliftIO m, HasGetter ref Bool, HasSetter ref Bool) => String -> ref -> ImGuiTabBarFlags -> (Bool -> m a) -> m a+withTabItem :: (MonadUnliftIO m, HasGetter ref Bool, HasSetter ref Bool) => Text -> ref -> ImGuiTabBarFlags -> (Bool -> m a) -> m a withTabItem tabName ref flags = bracket (beginTabItem tabName ref flags) (`when` Raw.endTabItem) -- | Create a new tab. -- -- The action will be skipped unless the tab is selected.-withTabItemOpen :: (MonadUnliftIO m, HasGetter ref Bool, HasSetter ref Bool) => String -> ref -> ImGuiTabBarFlags -> m () -> m ()+withTabItemOpen :: (MonadUnliftIO m, HasGetter ref Bool, HasSetter ref Bool) => Text -> ref -> ImGuiTabBarFlags -> m () -> m () withTabItemOpen tabName ref flags action = withTabItem tabName ref flags (`when` action) -- | Create a tab that behaves like a button. Returns @True@ when clicked. Cannot be selected in the tab bar. -- -- Wraps @ImGui.TabItemButton@.-tabItemButton :: MonadIO m => String -> ImGuiTabItemFlags -> m Bool+tabItemButton :: MonadIO m => Text -> ImGuiTabItemFlags -> m Bool tabItemButton tabName flags = liftIO do- withCString tabName \namePtr ->+ Text.withCString tabName \namePtr -> Raw.tabItemButton namePtr flags @@ -1723,9 +1718,9 @@ -- Useful to reduce visual flicker on reorderable tab bars. -- -- __For tab-bar__: call after 'beginTabBar' and before tab submission. Otherwise, call with a window name.-setTabItemClosed :: MonadIO m => String -> m ()+setTabItemClosed :: MonadIO m => Text -> m () setTabItemClosed tabName = liftIO do- withCString tabName Raw.setTabItemClosed+ Text.withCString tabName Raw.setTabItemClosed -- | Create a tooltip. --@@ -1737,9 +1732,9 @@ -- | Returns 'True' if the popup is open, and you can start outputting to it. -- -- Wraps @ImGui::BeginPopup()@-beginPopup :: MonadIO m => String -> m Bool+beginPopup :: MonadIO m => Text -> m Bool beginPopup popupId = liftIO do- withCString popupId Raw.beginPopup+ Text.withCString popupId Raw.beginPopup -- | Append intems to a non-modal Popup. --@@ -1749,7 +1744,7 @@ -- Visibility state is held internally instead of being held by the programmer. -- -- The action will get 'True' if the popup is open.-withPopup :: MonadUnliftIO m => String -> (Bool -> m a) -> m a+withPopup :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a withPopup popupId = bracket (beginPopup popupId) (`when` Raw.endPopup) -- | Append intems to a non-modal Popup.@@ -1760,16 +1755,16 @@ -- Visibility state is held internally instead of being held by the programmer. -- -- The action will be called only if the popup is open.-withPopupOpen :: MonadUnliftIO m => String -> m () -> m ()+withPopupOpen :: MonadUnliftIO m => Text -> m () -> m () withPopupOpen popupId action = withPopup popupId (`when` action) -- | Returns 'True' if the modal is open, and you can start outputting to it. -- -- Wraps @ImGui::BeginPopupModal()@-beginPopupModal :: MonadIO m => String -> m Bool+beginPopupModal :: MonadIO m => Text -> m Bool beginPopupModal popupId = liftIO do- withCString popupId Raw.beginPopupModal+ Text.withCString popupId Raw.beginPopupModal -- | Append intems to a modal Popup. --@@ -1778,7 +1773,7 @@ -- Visibility state is held internally instead of being held by the programmer. -- -- The action will get 'True' if the popup is open.-withPopupModal :: MonadUnliftIO m => String -> (Bool -> m a) -> m a+withPopupModal :: MonadUnliftIO m => Text -> (Bool -> m a) -> m a withPopupModal popupId = bracket (beginPopupModal popupId) (`when` Raw.endPopup) -- | Append intems to a modal Popup.@@ -1788,49 +1783,49 @@ -- Visibility state is held internally instead of being held by the programmer. -- -- The action will be called only if the popup is open.-withPopupModalOpen :: MonadUnliftIO m => String -> m () -> m ()+withPopupModalOpen :: MonadUnliftIO m => Text -> m () -> m () withPopupModalOpen popupId action = withPopupModal popupId (`when` action) -beginPopupContextItem :: MonadIO m => Maybe String -> ImGuiPopupFlags -> m Bool+beginPopupContextItem :: MonadIO m => Maybe Text -> ImGuiPopupFlags -> m Bool beginPopupContextItem itemId flags = liftIO do- withCStringOrNull itemId \popupIdPtr ->+ Text.withCStringOrNull itemId \popupIdPtr -> Raw.beginPopupContextItem popupIdPtr flags -withPopupContextItem :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> (Bool -> m a) -> m a+withPopupContextItem :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> (Bool -> m a) -> m a withPopupContextItem popupId flags = bracket (beginPopupContextItem popupId flags) (`when` Raw.endPopup) -withPopupContextItemOpen :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> m () -> m ()+withPopupContextItemOpen :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> m () -> m () withPopupContextItemOpen popupId flags action = withPopupContextItem popupId flags (`when` action) -- | Attach item context popup to right mouse button click on a last item. itemContextPopup :: MonadUnliftIO m => m () -> m () itemContextPopup = withPopupContextItemOpen Nothing ImGuiPopupFlags_MouseButtonRight -beginPopupContextWindow :: MonadIO m => Maybe String -> ImGuiPopupFlags -> m Bool+beginPopupContextWindow :: MonadIO m => Maybe Text -> ImGuiPopupFlags -> m Bool beginPopupContextWindow popupId flags = liftIO do- withCStringOrNull popupId \popupIdPtr ->+ Text.withCStringOrNull popupId \popupIdPtr -> Raw.beginPopupContextWindow popupIdPtr flags -withPopupContextWindow :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> (Bool -> m a) -> m a+withPopupContextWindow :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> (Bool -> m a) -> m a withPopupContextWindow popupId flags = bracket (beginPopupContextWindow popupId flags) (`when` Raw.endPopup) -withPopupContextWindowOpen :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> m () -> m ()+withPopupContextWindowOpen :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> m () -> m () withPopupContextWindowOpen popupId flags action = withPopupContextWindow popupId flags (`when` action) -- | Attach item context popup to right mouse button click on a current window. windowContextPopup :: MonadUnliftIO m => m () -> m () windowContextPopup = withPopupContextWindowOpen Nothing ImGuiPopupFlags_MouseButtonRight -beginPopupContextVoid :: MonadIO m => Maybe String -> ImGuiPopupFlags -> m Bool+beginPopupContextVoid :: MonadIO m => Maybe Text -> ImGuiPopupFlags -> m Bool beginPopupContextVoid popupId flags = liftIO do- withCStringOrNull popupId \popupIdPtr ->+ Text.withCStringOrNull popupId \popupIdPtr -> Raw.beginPopupContextVoid popupIdPtr flags -withPopupContextVoid :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> (Bool -> m a) -> m a+withPopupContextVoid :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> (Bool -> m a) -> m a withPopupContextVoid popupId flags = bracket (beginPopupContextVoid popupId flags) (`when` Raw.endPopup) -withPopupContextVoidOpen :: MonadUnliftIO m => Maybe String -> ImGuiPopupFlags -> m () -> m ()+withPopupContextVoidOpen :: MonadUnliftIO m => Maybe Text -> ImGuiPopupFlags -> m () -> m () withPopupContextVoidOpen popupId flags action = withPopupContextVoid popupId flags (`when` action) -- | Attach item context popup to right mouse button click outside of any windows.@@ -1841,9 +1836,9 @@ -- | Call to mark popup as open (don't call every frame!). -- -- Wraps @ImGui::OpenPopup()@-openPopup :: MonadIO m => String -> m ()+openPopup :: MonadIO m => Text -> m () openPopup popupId = liftIO do- withCString popupId Raw.openPopup+ Text.withCString popupId Raw.openPopup -- | Opens a defined popup (i.e. defined with 'withPopup') on defined action. --@@ -1852,36 +1847,31 @@ -- > openPopupOnItemClick "myPopup" ImGuiPopupFlags_MouseButtonRight -- -- Wraps @ImGui::OpenPopup()@-openPopupOnItemClick :: MonadIO m => String -> ImGuiPopupFlags -> m ()+openPopupOnItemClick :: MonadIO m => Text -> ImGuiPopupFlags -> m () openPopupOnItemClick popupId flags = liftIO do- withCString popupId $ \idPtr ->+ Text.withCString popupId $ \idPtr -> Raw.openPopupOnItemClick idPtr flags -- | Check if the popup is open at the current 'beginPopup' level of the popup stack.-isCurrentPopupOpen :: MonadIO m => String -> m Bool+isCurrentPopupOpen :: MonadIO m => Text -> m Bool isCurrentPopupOpen popupId = liftIO do- withCString popupId $ \idPtr ->+ Text.withCString popupId $ \idPtr -> Raw.isPopupOpen idPtr ImGuiPopupFlags_None -- | Check if *any* popup is open at the current 'beginPopup' level of the popup stack.-isAnyPopupOpen :: MonadIO m => String -> m Bool+isAnyPopupOpen :: MonadIO m => Text -> m Bool isAnyPopupOpen popupId = liftIO do- withCString popupId $ \idPtr ->+ Text.withCString popupId $ \idPtr -> Raw.isPopupOpen idPtr ImGuiPopupFlags_AnyPopupId -- | Check if *any* popup is open at any level of the popup stack.-isAnyLevelPopupOpen :: MonadIO m => String -> m Bool+isAnyLevelPopupOpen :: MonadIO m => Text -> m Bool isAnyLevelPopupOpen popupId = liftIO do- withCString popupId $ \idPtr ->+ Text.withCString popupId $ \idPtr -> Raw.isPopupOpen idPtr $ ImGuiPopupFlags_AnyPopupId .|. ImGuiPopupFlags_AnyPopupLevel -withCStringOrNull :: Maybe String -> (Ptr CChar -> IO a) -> IO a-withCStringOrNull Nothing k = k nullPtr-withCStringOrNull (Just s) k = withCString s k-- -- | Set next window position. Call before `begin` Use pivot=(0.5,0.5) to center on given point, etc. -- -- Wraps @ImGui::SetNextWindowPos()@@@ -2044,8 +2034,8 @@ instance ToID (Ptr CChar, Int) where pushID = Raw.pushIDStrLen -instance ToID String where- pushID s = liftIO $ withCStringLen s pushID+instance ToID Text where+ pushID t = liftIO $ Text.withCStringLen t pushID withStyleColor :: (MonadUnliftIO m, HasGetter ref ImVec4) => ImGuiCol -> ref -> m a -> m a withStyleColor color ref =
src/DearImGui/FontAtlas.hs view
@@ -119,6 +119,8 @@ import qualified DearImGui.Raw.Font.Config as FontConfig import DearImGui.Raw.Font.GlyphRanges (GlyphRanges(..), GlyphRangesBuilder(..)) import qualified DearImGui.Raw.Font.GlyphRanges as GlyphRanges+import DearImGui.Internal.Text (Text)+import qualified DearImGui.Internal.Text as Text import DearImGui.Structs (ImVec2(..), ImWchar) @@ -332,10 +334,10 @@ GlyphRanges.addChar builder char -- | UTF-8 string-addText :: String -> RangesBuilderSetup+addText :: Text -> RangesBuilderSetup addText str = RangesBuilderSetup \builder ->- withCString str (GlyphRanges.addText builder)+ Text.withCString str (GlyphRanges.addText builder) -- | Existing ranges (as is) addRangesRaw :: GlyphRanges -> RangesBuilderSetup
+ src/DearImGui/Internal/Text.hs view
@@ -0,0 +1,72 @@+{-# LANGUAGE CPP #-}++module DearImGui.Internal.Text+ ( withCString+ , withCStringOrNull+ , withCStringLen+ , withCStringEnd+ , peekCString++ , Text+ , pack+ , unpack+ ) where++-- base+import Control.Monad.IO.Class (liftIO)+import Foreign (nullPtr, plusPtr)+import Foreign.C.String (CString)+import qualified GHC.Foreign as Foreign+import System.IO (utf8)++-- text+import Data.Text (Text, pack, unpack)+import Data.Text.Foreign (withCStringLen)++-- unliftio-core+import UnliftIO (MonadUnliftIO, UnliftIO(..), withUnliftIO)++#if MIN_VERSION_text(2,0,0)++import Data.Text.Foreign (lengthWord8, unsafeCopyToPtr)+import Data.Word (Word8)+import Foreign (castPtr, free, mallocBytes, pokeByteOff)+import UnliftIO.Exception (bracket)++withCString :: MonadUnliftIO m => Text -> (CString -> m a) -> m a+withCString t = bracket create destroy+ where+ size0 = lengthWord8 t + 1++ create = liftIO $ do+ ptr <- mallocBytes size0+ unsafeCopyToPtr t (castPtr ptr)+ pokeByteOff ptr size0 (0 :: Word8)+ pure ptr++ destroy ptr =+ liftIO $ free ptr++#else++withCString :: MonadUnliftIO m => Text -> (CString -> m a) -> m a+withCString t action = do+ withUnliftIO $ \(UnliftIO unlift) ->+ liftIO $+ Foreign.withCString utf8 (unpack t) $ \textPtr ->+ unlift $ action textPtr++#endif++peekCString :: CString -> IO Text+peekCString = fmap pack . Foreign.peekCString utf8++withCStringOrNull :: Maybe Text -> (CString -> IO a) -> IO a+withCStringOrNull Nothing k = k nullPtr+withCStringOrNull (Just s) k = withCString s k++withCStringEnd :: MonadUnliftIO m => Text -> (CString -> CString -> m a) -> m a+withCStringEnd t action =+ withUnliftIO $ \(UnliftIO unlift) ->+ withCStringLen t $ \(textPtr, size) ->+ unlift $ action textPtr (textPtr `plusPtr` size)