#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))
module GI.Poppler.Structs.Quadrilateral
    (
    Quadrilateral(..)                       ,
    newZeroQuadrilateral                    ,
    noQuadrilateral                         ,
 
#if ENABLE_OVERLOADING
    QuadrilateralCopyMethodInfo             ,
#endif
    quadrilateralCopy                       ,
#if ENABLE_OVERLOADING
    QuadrilateralFreeMethodInfo             ,
#endif
    quadrilateralFree                       ,
    quadrilateralNew                        ,
 
    getQuadrilateralP1                      ,
#if ENABLE_OVERLOADING
    quadrilateral_p1                        ,
#endif
    getQuadrilateralP2                      ,
#if ENABLE_OVERLOADING
    quadrilateral_p2                        ,
#endif
    getQuadrilateralP3                      ,
#if ENABLE_OVERLOADING
    quadrilateral_p3                        ,
#endif
    getQuadrilateralP4                      ,
#if ENABLE_OVERLOADING
    quadrilateral_p4                        ,
#endif
    ) where
import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P
import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import {-# SOURCE #-} qualified GI.Poppler.Structs.Point as Poppler.Point
newtype Quadrilateral = Quadrilateral (ManagedPtr Quadrilateral)
foreign import ccall "poppler_quadrilateral_get_type" c_poppler_quadrilateral_get_type ::
    IO GType
instance BoxedObject Quadrilateral where
    boxedType _ = c_poppler_quadrilateral_get_type
newZeroQuadrilateral :: MonadIO m => m Quadrilateral
newZeroQuadrilateral = liftIO $ callocBoxedBytes 64 >>= wrapBoxed Quadrilateral
instance tag ~ 'AttrSet => Constructible Quadrilateral tag where
    new _ attrs = do
        o <- newZeroQuadrilateral
        GI.Attributes.set o attrs
        return o
noQuadrilateral :: Maybe Quadrilateral
noQuadrilateral = Nothing
getQuadrilateralP1 :: MonadIO m => Quadrilateral -> m Poppler.Point.Point
getQuadrilateralP1 s = liftIO $ withManagedPtr s $ \ptr -> do
    let val = ptr `plusPtr` 0 :: (Ptr Poppler.Point.Point)
    val' <- (newBoxed Poppler.Point.Point) val
    return val'
#if ENABLE_OVERLOADING
data QuadrilateralP1FieldInfo
instance AttrInfo QuadrilateralP1FieldInfo where
    type AttrAllowedOps QuadrilateralP1FieldInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint QuadrilateralP1FieldInfo = (~) (Ptr Poppler.Point.Point)
    type AttrBaseTypeConstraint QuadrilateralP1FieldInfo = (~) Quadrilateral
    type AttrGetType QuadrilateralP1FieldInfo = Poppler.Point.Point
    type AttrLabel QuadrilateralP1FieldInfo = "p1"
    type AttrOrigin QuadrilateralP1FieldInfo = Quadrilateral
    attrGet _ = getQuadrilateralP1
    attrSet _ = undefined
    attrConstruct = undefined
    attrClear _ = undefined
quadrilateral_p1 :: AttrLabelProxy "p1"
quadrilateral_p1 = AttrLabelProxy
#endif
getQuadrilateralP2 :: MonadIO m => Quadrilateral -> m Poppler.Point.Point
getQuadrilateralP2 s = liftIO $ withManagedPtr s $ \ptr -> do
    let val = ptr `plusPtr` 16 :: (Ptr Poppler.Point.Point)
    val' <- (newBoxed Poppler.Point.Point) val
    return val'
#if ENABLE_OVERLOADING
data QuadrilateralP2FieldInfo
instance AttrInfo QuadrilateralP2FieldInfo where
    type AttrAllowedOps QuadrilateralP2FieldInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint QuadrilateralP2FieldInfo = (~) (Ptr Poppler.Point.Point)
    type AttrBaseTypeConstraint QuadrilateralP2FieldInfo = (~) Quadrilateral
    type AttrGetType QuadrilateralP2FieldInfo = Poppler.Point.Point
    type AttrLabel QuadrilateralP2FieldInfo = "p2"
    type AttrOrigin QuadrilateralP2FieldInfo = Quadrilateral
    attrGet _ = getQuadrilateralP2
    attrSet _ = undefined
    attrConstruct = undefined
    attrClear _ = undefined
quadrilateral_p2 :: AttrLabelProxy "p2"
quadrilateral_p2 = AttrLabelProxy
#endif
getQuadrilateralP3 :: MonadIO m => Quadrilateral -> m Poppler.Point.Point
getQuadrilateralP3 s = liftIO $ withManagedPtr s $ \ptr -> do
    let val = ptr `plusPtr` 32 :: (Ptr Poppler.Point.Point)
    val' <- (newBoxed Poppler.Point.Point) val
    return val'
#if ENABLE_OVERLOADING
data QuadrilateralP3FieldInfo
instance AttrInfo QuadrilateralP3FieldInfo where
    type AttrAllowedOps QuadrilateralP3FieldInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint QuadrilateralP3FieldInfo = (~) (Ptr Poppler.Point.Point)
    type AttrBaseTypeConstraint QuadrilateralP3FieldInfo = (~) Quadrilateral
    type AttrGetType QuadrilateralP3FieldInfo = Poppler.Point.Point
    type AttrLabel QuadrilateralP3FieldInfo = "p3"
    type AttrOrigin QuadrilateralP3FieldInfo = Quadrilateral
    attrGet _ = getQuadrilateralP3
    attrSet _ = undefined
    attrConstruct = undefined
    attrClear _ = undefined
quadrilateral_p3 :: AttrLabelProxy "p3"
quadrilateral_p3 = AttrLabelProxy
#endif
getQuadrilateralP4 :: MonadIO m => Quadrilateral -> m Poppler.Point.Point
getQuadrilateralP4 s = liftIO $ withManagedPtr s $ \ptr -> do
    let val = ptr `plusPtr` 48 :: (Ptr Poppler.Point.Point)
    val' <- (newBoxed Poppler.Point.Point) val
    return val'
#if ENABLE_OVERLOADING
data QuadrilateralP4FieldInfo
instance AttrInfo QuadrilateralP4FieldInfo where
    type AttrAllowedOps QuadrilateralP4FieldInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint QuadrilateralP4FieldInfo = (~) (Ptr Poppler.Point.Point)
    type AttrBaseTypeConstraint QuadrilateralP4FieldInfo = (~) Quadrilateral
    type AttrGetType QuadrilateralP4FieldInfo = Poppler.Point.Point
    type AttrLabel QuadrilateralP4FieldInfo = "p4"
    type AttrOrigin QuadrilateralP4FieldInfo = Quadrilateral
    attrGet _ = getQuadrilateralP4
    attrSet _ = undefined
    attrConstruct = undefined
    attrClear _ = undefined
quadrilateral_p4 :: AttrLabelProxy "p4"
quadrilateral_p4 = AttrLabelProxy
#endif
#if ENABLE_OVERLOADING
instance O.HasAttributeList Quadrilateral
type instance O.AttributeList Quadrilateral = QuadrilateralAttributeList
type QuadrilateralAttributeList = ('[ '("p1", QuadrilateralP1FieldInfo), '("p2", QuadrilateralP2FieldInfo), '("p3", QuadrilateralP3FieldInfo), '("p4", QuadrilateralP4FieldInfo)] :: [(Symbol, *)])
#endif
foreign import ccall "poppler_quadrilateral_new" poppler_quadrilateral_new ::
    IO (Ptr Quadrilateral)
quadrilateralNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m Quadrilateral
    
quadrilateralNew  = liftIO $ do
    result <- poppler_quadrilateral_new
    checkUnexpectedReturnNULL "quadrilateralNew" result
    result' <- (wrapBoxed Quadrilateral) result
    return result'
#if ENABLE_OVERLOADING
#endif
foreign import ccall "poppler_quadrilateral_copy" poppler_quadrilateral_copy ::
    Ptr Quadrilateral ->                    
    IO (Ptr Quadrilateral)
quadrilateralCopy ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Quadrilateral
    
    -> m Quadrilateral
    
quadrilateralCopy quad = liftIO $ do
    quad' <- unsafeManagedPtrGetPtr quad
    result <- poppler_quadrilateral_copy quad'
    checkUnexpectedReturnNULL "quadrilateralCopy" result
    result' <- (wrapBoxed Quadrilateral) result
    touchManagedPtr quad
    return result'
#if ENABLE_OVERLOADING
data QuadrilateralCopyMethodInfo
instance (signature ~ (m Quadrilateral), MonadIO m) => O.MethodInfo QuadrilateralCopyMethodInfo Quadrilateral signature where
    overloadedMethod _ = quadrilateralCopy
#endif
foreign import ccall "poppler_quadrilateral_free" poppler_quadrilateral_free ::
    Ptr Quadrilateral ->                    
    IO ()
quadrilateralFree ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Quadrilateral
    
    -> m ()
quadrilateralFree quad = liftIO $ do
    quad' <- unsafeManagedPtrGetPtr quad
    poppler_quadrilateral_free quad'
    touchManagedPtr quad
    return ()
#if ENABLE_OVERLOADING
data QuadrilateralFreeMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.MethodInfo QuadrilateralFreeMethodInfo Quadrilateral signature where
    overloadedMethod _ = quadrilateralFree
#endif
#if ENABLE_OVERLOADING
type family ResolveQuadrilateralMethod (t :: Symbol) (o :: *) :: * where
    ResolveQuadrilateralMethod "copy" o = QuadrilateralCopyMethodInfo
    ResolveQuadrilateralMethod "free" o = QuadrilateralFreeMethodInfo
    ResolveQuadrilateralMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveQuadrilateralMethod t Quadrilateral, O.MethodInfo info Quadrilateral p) => OL.IsLabel t (Quadrilateral -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif
#endif