packages feed

dear-imgui-raw-implot-1.0.0: src/DearImGui/Raw/ImPlot/Spec.hsc

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

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

module DearImGui.Raw.ImPlot.Spec
  ( Spec (..)
  , destroy
  , init
  , withDefault
  ) where

import Control.Exception (bracket_)
import DearImGui.Raw (ImU32)
import DearImGui.Raw.ImPlot.Enums.ItemFlags (ItemFlags)
import DearImGui.Raw.ImPlot.Enums.Marker (Marker)
import DearImGui.Raw.ImVec4 (ImVec4)
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_implot.h"

-- structs (opaque)

-- by-value
data {-# CTYPE "dcimgui_implot.h" "ImPlotSpec" #-} Spec = Spec
  { lineColor :: ImVec4
  , lineColors :: Ptr ImU32
  , lineWeight :: Float
  , fillColor :: ImVec4
  , fillColors :: Ptr ImU32
  , fillAlpha :: Float
  , marker :: Marker
  , markerSize :: Float
  , markerSizes :: Ptr Float
  , markerLineColor :: ImVec4
  , markerLineColors :: Ptr ImU32
  , markerFillColor :: ImVec4
  , markerFillColors :: Ptr ImU32
  , size :: Float
  , offset :: CInt
  , stride :: CInt
  , flags :: ItemFlags
  }
  deriving (Eq, Show)
instance Storable Spec where
  sizeOf _    = #{size ImPlotSpec}
  alignment _ = #{alignment ImPlotSpec}
  peek p = Spec <$> #{peek ImPlotSpec, LineColor} p <*> #{peek ImPlotSpec, LineColors} p <*> #{peek ImPlotSpec, LineWeight} p <*> #{peek ImPlotSpec, FillColor} p <*> #{peek ImPlotSpec, FillColors} p <*> #{peek ImPlotSpec, FillAlpha} p <*> #{peek ImPlotSpec, Marker} p <*> #{peek ImPlotSpec, MarkerSize} p <*> #{peek ImPlotSpec, MarkerSizes} p <*> #{peek ImPlotSpec, MarkerLineColor} p <*> #{peek ImPlotSpec, MarkerLineColors} p <*> #{peek ImPlotSpec, MarkerFillColor} p <*> #{peek ImPlotSpec, MarkerFillColors} p <*> #{peek ImPlotSpec, Size} p <*> #{peek ImPlotSpec, Offset} p <*> #{peek ImPlotSpec, Stride} p <*> #{peek ImPlotSpec, Flags} p
  poke p v = do
    #{poke ImPlotSpec, LineColor} p v.lineColor
    #{poke ImPlotSpec, LineColors} p v.lineColors
    #{poke ImPlotSpec, LineWeight} p v.lineWeight
    #{poke ImPlotSpec, FillColor} p v.fillColor
    #{poke ImPlotSpec, FillColors} p v.fillColors
    #{poke ImPlotSpec, FillAlpha} p v.fillAlpha
    #{poke ImPlotSpec, Marker} p v.marker
    #{poke ImPlotSpec, MarkerSize} p v.markerSize
    #{poke ImPlotSpec, MarkerSizes} p v.markerSizes
    #{poke ImPlotSpec, MarkerLineColor} p v.markerLineColor
    #{poke ImPlotSpec, MarkerLineColors} p v.markerLineColors
    #{poke ImPlotSpec, MarkerFillColor} p v.markerFillColor
    #{poke ImPlotSpec, MarkerFillColors} p v.markerFillColors
    #{poke ImPlotSpec, Size} p v.size
    #{poke ImPlotSpec, Offset} p v.offset
    #{poke ImPlotSpec, Stride} p v.stride
    #{poke ImPlotSpec, Flags} p v.flags

instance HasField "lineColor" (Ptr Spec) (Ptr ImVec4) where
  getField = #{ptr ImPlotSpec, LineColor}

instance HasField "lineColors" (Ptr Spec) (Ptr (Ptr ImU32)) where
  getField = #{ptr ImPlotSpec, LineColors}

instance HasField "lineWeight" (Ptr Spec) (Ptr Float) where
  getField = #{ptr ImPlotSpec, LineWeight}

instance HasField "fillColor" (Ptr Spec) (Ptr ImVec4) where
  getField = #{ptr ImPlotSpec, FillColor}

instance HasField "fillColors" (Ptr Spec) (Ptr (Ptr ImU32)) where
  getField = #{ptr ImPlotSpec, FillColors}

instance HasField "fillAlpha" (Ptr Spec) (Ptr Float) where
  getField = #{ptr ImPlotSpec, FillAlpha}

instance HasField "marker" (Ptr Spec) (Ptr Marker) where
  getField = #{ptr ImPlotSpec, Marker}

instance HasField "markerSize" (Ptr Spec) (Ptr Float) where
  getField = #{ptr ImPlotSpec, MarkerSize}

instance HasField "markerSizes" (Ptr Spec) (Ptr (Ptr Float)) where
  getField = #{ptr ImPlotSpec, MarkerSizes}

instance HasField "markerLineColor" (Ptr Spec) (Ptr ImVec4) where
  getField = #{ptr ImPlotSpec, MarkerLineColor}

instance HasField "markerLineColors" (Ptr Spec) (Ptr (Ptr ImU32)) where
  getField = #{ptr ImPlotSpec, MarkerLineColors}

instance HasField "markerFillColor" (Ptr Spec) (Ptr ImVec4) where
  getField = #{ptr ImPlotSpec, MarkerFillColor}

instance HasField "markerFillColors" (Ptr Spec) (Ptr (Ptr ImU32)) where
  getField = #{ptr ImPlotSpec, MarkerFillColors}

instance HasField "size" (Ptr Spec) (Ptr Float) where
  getField = #{ptr ImPlotSpec, Size}

instance HasField "offset" (Ptr Spec) (Ptr CInt) where
  getField = #{ptr ImPlotSpec, Offset}

instance HasField "stride" (Ptr Spec) (Ptr CInt) where
  getField = #{ptr ImPlotSpec, Stride}

instance HasField "flags" (Ptr Spec) (Ptr ItemFlags) where
  getField = #{ptr ImPlotSpec, Flags}

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

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

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