packages feed

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

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

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

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

import Control.Exception (bracket_)
import DearImGui.Raw (ImWchar)
import DearImGui.Raw.ImFontAtlas (ImFontAtlas)
import DearImGui.Raw.ImFontBaked (ImFontBaked)
import DearImGui.Raw.ImFontConfig (ImFontConfig)
import DearImGui.Raw.ImFontGlyph (ImFontGlyph)
import Foreign.C.String (CString)
import Foreign.C.Types
import Foreign.Marshal.Alloc (alloca)
import Foreign.Ptr (FunPtr, 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" "ImFontLoader" #-} ImFontLoader = ImFontLoader
  { name :: CString
  , loaderInit :: FunPtr ((Ptr ImFontAtlas) -> IO CBool)
  , loaderShutdown :: FunPtr ((Ptr ImFontAtlas) -> IO ())
  , fontSrcInit :: FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> IO CBool)
  , fontSrcDestroy :: FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> IO ())
  , fontSrcGetGlyphIndexFromCodepoint :: FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> ImWchar -> IO CInt)
  , fontSrcContainsGlyph :: FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> CInt -> IO CBool)
  , fontBakedInit :: FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> (Ptr ImFontBaked) -> (Ptr ()) -> IO CBool)
  , fontBakedDestroy :: FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> (Ptr ImFontBaked) -> (Ptr ()) -> IO ())
  , fontBakedLoadGlyph :: FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> (Ptr ImFontBaked) -> (Ptr ()) -> CInt -> (Ptr ImFontGlyph) -> (Ptr Float) -> IO CBool)
  , fontBakedSrcLoaderDataSize :: CSize
  }
  deriving (Eq, Show)
instance Storable ImFontLoader where
  sizeOf _    = #{size ImFontLoader}
  alignment _ = #{alignment ImFontLoader}
  peek p = ImFontLoader <$> #{peek ImFontLoader, Name} p <*> #{peek ImFontLoader, LoaderInit} p <*> #{peek ImFontLoader, LoaderShutdown} p <*> #{peek ImFontLoader, FontSrcInit} p <*> #{peek ImFontLoader, FontSrcDestroy} p <*> #{peek ImFontLoader, FontSrcGetGlyphIndexFromCodepoint} p <*> #{peek ImFontLoader, FontSrcContainsGlyph} p <*> #{peek ImFontLoader, FontBakedInit} p <*> #{peek ImFontLoader, FontBakedDestroy} p <*> #{peek ImFontLoader, FontBakedLoadGlyph} p <*> #{peek ImFontLoader, FontBakedSrcLoaderDataSize} p
  poke p v = do
    #{poke ImFontLoader, Name} p v.name
    #{poke ImFontLoader, LoaderInit} p v.loaderInit
    #{poke ImFontLoader, LoaderShutdown} p v.loaderShutdown
    #{poke ImFontLoader, FontSrcInit} p v.fontSrcInit
    #{poke ImFontLoader, FontSrcDestroy} p v.fontSrcDestroy
    #{poke ImFontLoader, FontSrcGetGlyphIndexFromCodepoint} p v.fontSrcGetGlyphIndexFromCodepoint
    #{poke ImFontLoader, FontSrcContainsGlyph} p v.fontSrcContainsGlyph
    #{poke ImFontLoader, FontBakedInit} p v.fontBakedInit
    #{poke ImFontLoader, FontBakedDestroy} p v.fontBakedDestroy
    #{poke ImFontLoader, FontBakedLoadGlyph} p v.fontBakedLoadGlyph
    #{poke ImFontLoader, FontBakedSrcLoaderDataSize} p v.fontBakedSrcLoaderDataSize

instance HasField "name" (Ptr ImFontLoader) (Ptr CString) where
  getField = #{ptr ImFontLoader, Name}

instance HasField "loaderInit" (Ptr ImFontLoader) (Ptr (FunPtr ((Ptr ImFontAtlas) -> IO CBool))) where
  getField = #{ptr ImFontLoader, LoaderInit}

instance HasField "loaderShutdown" (Ptr ImFontLoader) (Ptr (FunPtr ((Ptr ImFontAtlas) -> IO ()))) where
  getField = #{ptr ImFontLoader, LoaderShutdown}

instance HasField "fontSrcInit" (Ptr ImFontLoader) (Ptr (FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> IO CBool))) where
  getField = #{ptr ImFontLoader, FontSrcInit}

instance HasField "fontSrcDestroy" (Ptr ImFontLoader) (Ptr (FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> IO ()))) where
  getField = #{ptr ImFontLoader, FontSrcDestroy}

instance HasField "fontSrcGetGlyphIndexFromCodepoint" (Ptr ImFontLoader) (Ptr (FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> ImWchar -> IO CInt))) where
  getField = #{ptr ImFontLoader, FontSrcGetGlyphIndexFromCodepoint}

instance HasField "fontSrcContainsGlyph" (Ptr ImFontLoader) (Ptr (FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> CInt -> IO CBool))) where
  getField = #{ptr ImFontLoader, FontSrcContainsGlyph}

instance HasField "fontBakedInit" (Ptr ImFontLoader) (Ptr (FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> (Ptr ImFontBaked) -> (Ptr ()) -> IO CBool))) where
  getField = #{ptr ImFontLoader, FontBakedInit}

instance HasField "fontBakedDestroy" (Ptr ImFontLoader) (Ptr (FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> (Ptr ImFontBaked) -> (Ptr ()) -> IO ()))) where
  getField = #{ptr ImFontLoader, FontBakedDestroy}

instance HasField "fontBakedLoadGlyph" (Ptr ImFontLoader) (Ptr (FunPtr ((Ptr ImFontAtlas) -> (Ptr ImFontConfig) -> (Ptr ImFontBaked) -> (Ptr ()) -> CInt -> (Ptr ImFontGlyph) -> (Ptr Float) -> IO CBool))) where
  getField = #{ptr ImFontLoader, FontBakedLoadGlyph}

instance HasField "fontBakedSrcLoaderDataSize" (Ptr ImFontLoader) (Ptr CSize) where
  getField = #{ptr ImFontLoader, FontBakedSrcLoaderDataSize}

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

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

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