packages feed

dear-imgui-raw-internal-1.0.0: src/DearImGui/Raw/Internal/ImGuiPopupData.hsc

{-# LANGUAGE CApiFFI #-}
{-# LANGUAGE PatternSynonyms #-}

-- This file was generated by dear-bindings-ffi. Do not edit by hand.

module DearImGui.Raw.Internal.ImGuiPopupData
  ( ImGuiPopupData (..)
  , destroy
  , init
  , withDefault
  ) where

import Control.Exception (bracket_)
import DearImGui.Raw (ImGuiID)
import DearImGui.Raw.ImVec2 (ImVec2)
import DearImGui.Raw.Internal.ImGuiWindow (ImGuiWindow)
import Foreign.C.Types
import Foreign.Marshal.Alloc (alloca)
import Foreign.Ptr (Ptr, plusPtr)
import Foreign.Storable (Storable (..))
import GHC.Records (HasField (..))
import Prelude hiding (init)

#include "dcimgui_nodefaultargfunctions_internal.h"

-- structs (opaque)

data {-# CTYPE "dcimgui_nodefaultargfunctions_internal.h" "ImGuiPopupData" #-} ImGuiPopupData = ImGuiPopupData
  { popupId :: ImGuiID
  , window :: Ptr ImGuiWindow
  , restoreNavWindow :: Ptr ImGuiWindow
  , parentNavLayer :: CInt
  , openFrameCount :: CInt
  , openParentId :: ImGuiID
  , openPopupPos :: ImVec2
  , openMousePos :: ImVec2
  }
  deriving (Eq, Show)
instance Storable ImGuiPopupData where
  sizeOf _    = #{size ImGuiPopupData}
  alignment _ = #{alignment ImGuiPopupData}
  peek p = ImGuiPopupData <$> #{peek ImGuiPopupData, PopupId} p <*> #{peek ImGuiPopupData, Window} p <*> #{peek ImGuiPopupData, RestoreNavWindow} p <*> #{peek ImGuiPopupData, ParentNavLayer} p <*> #{peek ImGuiPopupData, OpenFrameCount} p <*> #{peek ImGuiPopupData, OpenParentId} p <*> #{peek ImGuiPopupData, OpenPopupPos} p <*> #{peek ImGuiPopupData, OpenMousePos} p
  poke p v = do
    #{poke ImGuiPopupData, PopupId} p v.popupId
    #{poke ImGuiPopupData, Window} p v.window
    #{poke ImGuiPopupData, RestoreNavWindow} p v.restoreNavWindow
    #{poke ImGuiPopupData, ParentNavLayer} p v.parentNavLayer
    #{poke ImGuiPopupData, OpenFrameCount} p v.openFrameCount
    #{poke ImGuiPopupData, OpenParentId} p v.openParentId
    #{poke ImGuiPopupData, OpenPopupPos} p v.openPopupPos
    #{poke ImGuiPopupData, OpenMousePos} p v.openMousePos

instance HasField "popupId" (Ptr ImGuiPopupData) (Ptr ImGuiID) where
  getField = #{ptr ImGuiPopupData, PopupId}

instance HasField "window" (Ptr ImGuiPopupData) (Ptr (Ptr ImGuiWindow)) where
  getField = #{ptr ImGuiPopupData, Window}

instance HasField "restoreNavWindow" (Ptr ImGuiPopupData) (Ptr (Ptr ImGuiWindow)) where
  getField = #{ptr ImGuiPopupData, RestoreNavWindow}

instance HasField "parentNavLayer" (Ptr ImGuiPopupData) (Ptr CInt) where
  getField = #{ptr ImGuiPopupData, ParentNavLayer}

instance HasField "openFrameCount" (Ptr ImGuiPopupData) (Ptr CInt) where
  getField = #{ptr ImGuiPopupData, OpenFrameCount}

instance HasField "openParentId" (Ptr ImGuiPopupData) (Ptr ImGuiID) where
  getField = #{ptr ImGuiPopupData, OpenParentId}

instance HasField "openPopupPos" (Ptr ImGuiPopupData) (Ptr ImVec2) where
  getField = #{ptr ImGuiPopupData, OpenPopupPos}

instance HasField "openMousePos" (Ptr ImGuiPopupData) (Ptr ImVec2) where
  getField = #{ptr ImGuiPopupData, OpenMousePos}

foreign import capi unsafe "DearImGuiWrappers.h ImGuiPopupData_Init_wrap"
  init
    :: Ptr ImGuiPopupData
    -> IO ()

foreign import capi unsafe "DearImGuiWrappers.h ImGuiPopupData_Destroy_wrap"
  destroy
    :: Ptr ImGuiPopupData
    -> IO ()

withDefault :: (Ptr ImGuiPopupData -> IO a) -> IO a
withDefault k = alloca $ \p -> bracket_ (init p) (destroy p) (k p)