{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- t'GI.Clutter.Objects.DesaturateEffect.DesaturateEffect' is an opaque structure
-- whose members cannot be directly accessed
-- 
-- /Since: 1.4/

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.Clutter.Objects.DesaturateEffect
    ( 

-- * Exported types
    DesaturateEffect(..)                    ,
    IsDesaturateEffect                      ,
    toDesaturateEffect                      ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [createTexture]("GI.Clutter.Objects.OffscreenEffect#g:method:createTexture"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [paintTarget]("GI.Clutter.Objects.OffscreenEffect#g:method:paintTarget"), [queueRepaint]("GI.Clutter.Objects.Effect#g:method:queueRepaint"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getActor]("GI.Clutter.Objects.ActorMeta#g:method:getActor"), [getData]("GI.GObject.Objects.Object#g:method:getData"), [getEnabled]("GI.Clutter.Objects.ActorMeta#g:method:getEnabled"), [getFactor]("GI.Clutter.Objects.DesaturateEffect#g:method:getFactor"), [getName]("GI.Clutter.Objects.ActorMeta#g:method:getName"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getTarget]("GI.Clutter.Objects.OffscreenEffect#g:method:getTarget"), [getTargetRect]("GI.Clutter.Objects.OffscreenEffect#g:method:getTargetRect"), [getTargetSize]("GI.Clutter.Objects.OffscreenEffect#g:method:getTargetSize"), [getTexture]("GI.Clutter.Objects.OffscreenEffect#g:method:getTexture").
-- 
-- ==== Setters
-- [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setEnabled]("GI.Clutter.Objects.ActorMeta#g:method:setEnabled"), [setFactor]("GI.Clutter.Objects.DesaturateEffect#g:method:setFactor"), [setName]("GI.Clutter.Objects.ActorMeta#g:method:setName"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

#if defined(ENABLE_OVERLOADING)
    ResolveDesaturateEffectMethod           ,
#endif

-- ** getFactor #method:getFactor#

#if defined(ENABLE_OVERLOADING)
    DesaturateEffectGetFactorMethodInfo     ,
#endif
    desaturateEffectGetFactor               ,


-- ** new #method:new#

    desaturateEffectNew                     ,


-- ** setFactor #method:setFactor#

#if defined(ENABLE_OVERLOADING)
    DesaturateEffectSetFactorMethodInfo     ,
#endif
    desaturateEffectSetFactor               ,




 -- * Properties


-- ** factor #attr:factor#
-- | The desaturation factor, between 0.0 (no desaturation) and 1.0 (full
-- desaturation).
-- 
-- /Since: 1.4/

#if defined(ENABLE_OVERLOADING)
    DesaturateEffectFactorPropertyInfo      ,
#endif
    constructDesaturateEffectFactor         ,
#if defined(ENABLE_OVERLOADING)
    desaturateEffectFactor                  ,
#endif
    getDesaturateEffectFactor               ,
    setDesaturateEffectFactor               ,




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
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.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.Kind as DK
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 qualified GHC.Records as R

import {-# SOURCE #-} qualified GI.Clutter.Objects.ActorMeta as Clutter.ActorMeta
import {-# SOURCE #-} qualified GI.Clutter.Objects.Effect as Clutter.Effect
import {-# SOURCE #-} qualified GI.Clutter.Objects.OffscreenEffect as Clutter.OffscreenEffect
import qualified GI.GObject.Objects.Object as GObject.Object

-- | Memory-managed wrapper type.
newtype DesaturateEffect = DesaturateEffect (SP.ManagedPtr DesaturateEffect)
    deriving (DesaturateEffect -> DesaturateEffect -> Bool
(DesaturateEffect -> DesaturateEffect -> Bool)
-> (DesaturateEffect -> DesaturateEffect -> Bool)
-> Eq DesaturateEffect
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DesaturateEffect -> DesaturateEffect -> Bool
== :: DesaturateEffect -> DesaturateEffect -> Bool
$c/= :: DesaturateEffect -> DesaturateEffect -> Bool
/= :: DesaturateEffect -> DesaturateEffect -> Bool
Eq)

instance SP.ManagedPtrNewtype DesaturateEffect where
    toManagedPtr :: DesaturateEffect -> ManagedPtr DesaturateEffect
toManagedPtr (DesaturateEffect ManagedPtr DesaturateEffect
p) = ManagedPtr DesaturateEffect
p

foreign import ccall "clutter_desaturate_effect_get_type"
    c_clutter_desaturate_effect_get_type :: IO B.Types.GType

instance B.Types.TypedObject DesaturateEffect where
    glibType :: IO GType
glibType = IO GType
c_clutter_desaturate_effect_get_type

instance B.Types.GObject DesaturateEffect

-- | Type class for types which can be safely cast to `DesaturateEffect`, for instance with `toDesaturateEffect`.
class (SP.GObject o, O.IsDescendantOf DesaturateEffect o) => IsDesaturateEffect o
instance (SP.GObject o, O.IsDescendantOf DesaturateEffect o) => IsDesaturateEffect o

instance O.HasParentTypes DesaturateEffect
type instance O.ParentTypes DesaturateEffect = '[Clutter.OffscreenEffect.OffscreenEffect, Clutter.Effect.Effect, Clutter.ActorMeta.ActorMeta, GObject.Object.Object]

-- | Cast to `DesaturateEffect`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toDesaturateEffect :: (MIO.MonadIO m, IsDesaturateEffect o) => o -> m DesaturateEffect
toDesaturateEffect :: forall (m :: * -> *) o.
(MonadIO m, IsDesaturateEffect o) =>
o -> m DesaturateEffect
toDesaturateEffect = IO DesaturateEffect -> m DesaturateEffect
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO DesaturateEffect -> m DesaturateEffect)
-> (o -> IO DesaturateEffect) -> o -> m DesaturateEffect
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr DesaturateEffect -> DesaturateEffect)
-> o -> IO DesaturateEffect
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr DesaturateEffect -> DesaturateEffect
DesaturateEffect

-- | Convert 'DesaturateEffect' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe DesaturateEffect) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_clutter_desaturate_effect_get_type
    gvalueSet_ :: Ptr GValue -> Maybe DesaturateEffect -> IO ()
gvalueSet_ Ptr GValue
gv Maybe DesaturateEffect
P.Nothing = Ptr GValue -> Ptr DesaturateEffect -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr DesaturateEffect
forall a. Ptr a
FP.nullPtr :: FP.Ptr DesaturateEffect)
    gvalueSet_ Ptr GValue
gv (P.Just DesaturateEffect
obj) = DesaturateEffect -> (Ptr DesaturateEffect -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr DesaturateEffect
obj (Ptr GValue -> Ptr DesaturateEffect -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe DesaturateEffect)
gvalueGet_ Ptr GValue
gv = do
        Ptr DesaturateEffect
ptr <- Ptr GValue -> IO (Ptr DesaturateEffect)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr DesaturateEffect)
        if Ptr DesaturateEffect
ptr Ptr DesaturateEffect -> Ptr DesaturateEffect -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr DesaturateEffect
forall a. Ptr a
FP.nullPtr
        then DesaturateEffect -> Maybe DesaturateEffect
forall a. a -> Maybe a
P.Just (DesaturateEffect -> Maybe DesaturateEffect)
-> IO DesaturateEffect -> IO (Maybe DesaturateEffect)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr DesaturateEffect -> DesaturateEffect)
-> Ptr DesaturateEffect -> IO DesaturateEffect
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr DesaturateEffect -> DesaturateEffect
DesaturateEffect Ptr DesaturateEffect
ptr
        else Maybe DesaturateEffect -> IO (Maybe DesaturateEffect)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe DesaturateEffect
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveDesaturateEffectMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveDesaturateEffectMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveDesaturateEffectMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveDesaturateEffectMethod "createTexture" o = Clutter.OffscreenEffect.OffscreenEffectCreateTextureMethodInfo
    ResolveDesaturateEffectMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveDesaturateEffectMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveDesaturateEffectMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveDesaturateEffectMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveDesaturateEffectMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveDesaturateEffectMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveDesaturateEffectMethod "paintTarget" o = Clutter.OffscreenEffect.OffscreenEffectPaintTargetMethodInfo
    ResolveDesaturateEffectMethod "queueRepaint" o = Clutter.Effect.EffectQueueRepaintMethodInfo
    ResolveDesaturateEffectMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveDesaturateEffectMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveDesaturateEffectMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveDesaturateEffectMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveDesaturateEffectMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveDesaturateEffectMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveDesaturateEffectMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveDesaturateEffectMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveDesaturateEffectMethod "getActor" o = Clutter.ActorMeta.ActorMetaGetActorMethodInfo
    ResolveDesaturateEffectMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveDesaturateEffectMethod "getEnabled" o = Clutter.ActorMeta.ActorMetaGetEnabledMethodInfo
    ResolveDesaturateEffectMethod "getFactor" o = DesaturateEffectGetFactorMethodInfo
    ResolveDesaturateEffectMethod "getName" o = Clutter.ActorMeta.ActorMetaGetNameMethodInfo
    ResolveDesaturateEffectMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveDesaturateEffectMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveDesaturateEffectMethod "getTarget" o = Clutter.OffscreenEffect.OffscreenEffectGetTargetMethodInfo
    ResolveDesaturateEffectMethod "getTargetRect" o = Clutter.OffscreenEffect.OffscreenEffectGetTargetRectMethodInfo
    ResolveDesaturateEffectMethod "getTargetSize" o = Clutter.OffscreenEffect.OffscreenEffectGetTargetSizeMethodInfo
    ResolveDesaturateEffectMethod "getTexture" o = Clutter.OffscreenEffect.OffscreenEffectGetTextureMethodInfo
    ResolveDesaturateEffectMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveDesaturateEffectMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveDesaturateEffectMethod "setEnabled" o = Clutter.ActorMeta.ActorMetaSetEnabledMethodInfo
    ResolveDesaturateEffectMethod "setFactor" o = DesaturateEffectSetFactorMethodInfo
    ResolveDesaturateEffectMethod "setName" o = Clutter.ActorMeta.ActorMetaSetNameMethodInfo
    ResolveDesaturateEffectMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveDesaturateEffectMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveDesaturateEffectMethod t DesaturateEffect, O.OverloadedMethod info DesaturateEffect p) => OL.IsLabel t (DesaturateEffect -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveDesaturateEffectMethod t DesaturateEffect, O.OverloadedMethod info DesaturateEffect p, R.HasField t DesaturateEffect p) => R.HasField t DesaturateEffect p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveDesaturateEffectMethod t DesaturateEffect, O.OverloadedMethodInfo info DesaturateEffect) => OL.IsLabel t (O.MethodProxy info DesaturateEffect) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

-- VVV Prop "factor"
   -- Type: TBasicType TDouble
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Just False,Just False)

-- | Get the value of the “@factor@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' desaturateEffect #factor
-- @
getDesaturateEffectFactor :: (MonadIO m, IsDesaturateEffect o) => o -> m Double
getDesaturateEffectFactor :: forall (m :: * -> *) o.
(MonadIO m, IsDesaturateEffect o) =>
o -> m Double
getDesaturateEffectFactor o
obj = IO Double -> m Double
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO Double -> m Double) -> IO Double -> m Double
forall a b. (a -> b) -> a -> b
$ o -> String -> IO Double
forall a. GObject a => a -> String -> IO Double
B.Properties.getObjectPropertyDouble o
obj String
"factor"

-- | Set the value of the “@factor@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' desaturateEffect [ #factor 'Data.GI.Base.Attributes.:=' value ]
-- @
setDesaturateEffectFactor :: (MonadIO m, IsDesaturateEffect o) => o -> Double -> m ()
setDesaturateEffectFactor :: forall (m :: * -> *) o.
(MonadIO m, IsDesaturateEffect o) =>
o -> Double -> m ()
setDesaturateEffectFactor o
obj Double
val = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    o -> String -> Double -> IO ()
forall a. GObject a => a -> String -> Double -> IO ()
B.Properties.setObjectPropertyDouble o
obj String
"factor" Double
val

-- | Construct a `GValueConstruct` with valid value for the “@factor@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
constructDesaturateEffectFactor :: (IsDesaturateEffect o, MIO.MonadIO m) => Double -> m (GValueConstruct o)
constructDesaturateEffectFactor :: forall o (m :: * -> *).
(IsDesaturateEffect o, MonadIO m) =>
Double -> m (GValueConstruct o)
constructDesaturateEffectFactor Double
val = IO (GValueConstruct o) -> m (GValueConstruct o)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> m (GValueConstruct o))
-> IO (GValueConstruct o) -> m (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ do
    IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a. IO a -> IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> IO (GValueConstruct o))
-> IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ String -> Double -> IO (GValueConstruct o)
forall o. String -> Double -> IO (GValueConstruct o)
B.Properties.constructObjectPropertyDouble String
"factor" Double
val

#if defined(ENABLE_OVERLOADING)
data DesaturateEffectFactorPropertyInfo
instance AttrInfo DesaturateEffectFactorPropertyInfo where
    type AttrAllowedOps DesaturateEffectFactorPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrBaseTypeConstraint DesaturateEffectFactorPropertyInfo = IsDesaturateEffect
    type AttrSetTypeConstraint DesaturateEffectFactorPropertyInfo = (~) Double
    type AttrTransferTypeConstraint DesaturateEffectFactorPropertyInfo = (~) Double
    type AttrTransferType DesaturateEffectFactorPropertyInfo = Double
    type AttrGetType DesaturateEffectFactorPropertyInfo = Double
    type AttrLabel DesaturateEffectFactorPropertyInfo = "factor"
    type AttrOrigin DesaturateEffectFactorPropertyInfo = DesaturateEffect
    attrGet = getDesaturateEffectFactor
    attrSet = setDesaturateEffectFactor
    attrTransfer _ v = do
        return v
    attrConstruct = constructDesaturateEffectFactor
    attrClear = undefined
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.DesaturateEffect.factor"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.5/docs/GI-Clutter-Objects-DesaturateEffect.html#g:attr:factor"
        })
#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList DesaturateEffect
type instance O.AttributeList DesaturateEffect = DesaturateEffectAttributeList
type DesaturateEffectAttributeList = ('[ '("actor", Clutter.ActorMeta.ActorMetaActorPropertyInfo), '("enabled", Clutter.ActorMeta.ActorMetaEnabledPropertyInfo), '("factor", DesaturateEffectFactorPropertyInfo), '("name", Clutter.ActorMeta.ActorMetaNamePropertyInfo)] :: [(Symbol, DK.Type)])
#endif

#if defined(ENABLE_OVERLOADING)
desaturateEffectFactor :: AttrLabelProxy "factor"
desaturateEffectFactor = AttrLabelProxy

#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList DesaturateEffect = DesaturateEffectSignalList
type DesaturateEffectSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, DK.Type)])

#endif

-- method DesaturateEffect::new
-- method type : Constructor
-- Args: [ Arg
--           { argCName = "factor"
--           , argType = TBasicType TDouble
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the desaturation factor, between 0.0 and 1.0"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TInterface
--                  Name { namespace = "Clutter" , name = "DesaturateEffect" })
-- throws : False
-- Skip return : False

foreign import ccall "clutter_desaturate_effect_new" clutter_desaturate_effect_new :: 
    CDouble ->                              -- factor : TBasicType TDouble
    IO (Ptr DesaturateEffect)

-- | Creates a new t'GI.Clutter.Objects.DesaturateEffect.DesaturateEffect' to be used with
-- 'GI.Clutter.Objects.Actor.actorAddEffect'
-- 
-- /Since: 1.4/
desaturateEffectNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Double
    -- ^ /@factor@/: the desaturation factor, between 0.0 and 1.0
    -> m DesaturateEffect
    -- ^ __Returns:__ the newly created t'GI.Clutter.Objects.DesaturateEffect.DesaturateEffect' or 'P.Nothing'
desaturateEffectNew :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
Double -> m DesaturateEffect
desaturateEffectNew Double
factor = IO DesaturateEffect -> m DesaturateEffect
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO DesaturateEffect -> m DesaturateEffect)
-> IO DesaturateEffect -> m DesaturateEffect
forall a b. (a -> b) -> a -> b
$ do
    let factor' :: CDouble
factor' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
factor
    Ptr DesaturateEffect
result <- CDouble -> IO (Ptr DesaturateEffect)
clutter_desaturate_effect_new CDouble
factor'
    Text -> Ptr DesaturateEffect -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"desaturateEffectNew" Ptr DesaturateEffect
result
    DesaturateEffect
result' <- ((ManagedPtr DesaturateEffect -> DesaturateEffect)
-> Ptr DesaturateEffect -> IO DesaturateEffect
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr DesaturateEffect -> DesaturateEffect
DesaturateEffect) Ptr DesaturateEffect
result
    DesaturateEffect -> IO DesaturateEffect
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return DesaturateEffect
result'

#if defined(ENABLE_OVERLOADING)
#endif

-- method DesaturateEffect::get_factor
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "effect"
--           , argType =
--               TInterface
--                 Name { namespace = "Clutter" , name = "DesaturateEffect" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #ClutterDesaturateEffect"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TBasicType TDouble)
-- throws : False
-- Skip return : False

foreign import ccall "clutter_desaturate_effect_get_factor" clutter_desaturate_effect_get_factor :: 
    Ptr DesaturateEffect ->                 -- effect : TInterface (Name {namespace = "Clutter", name = "DesaturateEffect"})
    IO CDouble

-- | Retrieves the desaturation factor of /@effect@/
-- 
-- /Since: 1.4/
desaturateEffectGetFactor ::
    (B.CallStack.HasCallStack, MonadIO m, IsDesaturateEffect a) =>
    a
    -- ^ /@effect@/: a t'GI.Clutter.Objects.DesaturateEffect.DesaturateEffect'
    -> m Double
    -- ^ __Returns:__ the desaturation factor
desaturateEffectGetFactor :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsDesaturateEffect a) =>
a -> m Double
desaturateEffectGetFactor a
effect = IO Double -> m Double
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Double -> m Double) -> IO Double -> m Double
forall a b. (a -> b) -> a -> b
$ do
    Ptr DesaturateEffect
effect' <- a -> IO (Ptr DesaturateEffect)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
effect
    CDouble
result <- Ptr DesaturateEffect -> IO CDouble
clutter_desaturate_effect_get_factor Ptr DesaturateEffect
effect'
    let result' :: Double
result' = CDouble -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac CDouble
result
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
effect
    Double -> IO Double
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Double
result'

#if defined(ENABLE_OVERLOADING)
data DesaturateEffectGetFactorMethodInfo
instance (signature ~ (m Double), MonadIO m, IsDesaturateEffect a) => O.OverloadedMethod DesaturateEffectGetFactorMethodInfo a signature where
    overloadedMethod = desaturateEffectGetFactor

instance O.OverloadedMethodInfo DesaturateEffectGetFactorMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.DesaturateEffect.desaturateEffectGetFactor",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.5/docs/GI-Clutter-Objects-DesaturateEffect.html#v:desaturateEffectGetFactor"
        })


#endif

-- method DesaturateEffect::set_factor
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "effect"
--           , argType =
--               TInterface
--                 Name { namespace = "Clutter" , name = "DesaturateEffect" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #ClutterDesaturateEffect"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "factor"
--           , argType = TBasicType TDouble
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the desaturation factor, between 0.0 and 1.0"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "clutter_desaturate_effect_set_factor" clutter_desaturate_effect_set_factor :: 
    Ptr DesaturateEffect ->                 -- effect : TInterface (Name {namespace = "Clutter", name = "DesaturateEffect"})
    CDouble ->                              -- factor : TBasicType TDouble
    IO ()

-- | Sets the desaturation factor for /@effect@/, with 0.0 being \"do not desaturate\"
-- and 1.0 being \"fully desaturate\"
-- 
-- /Since: 1.4/
desaturateEffectSetFactor ::
    (B.CallStack.HasCallStack, MonadIO m, IsDesaturateEffect a) =>
    a
    -- ^ /@effect@/: a t'GI.Clutter.Objects.DesaturateEffect.DesaturateEffect'
    -> Double
    -- ^ /@factor@/: the desaturation factor, between 0.0 and 1.0
    -> m ()
desaturateEffectSetFactor :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsDesaturateEffect a) =>
a -> Double -> m ()
desaturateEffectSetFactor a
effect Double
factor = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr DesaturateEffect
effect' <- a -> IO (Ptr DesaturateEffect)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
effect
    let factor' :: CDouble
factor' = Double -> CDouble
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
factor
    Ptr DesaturateEffect -> CDouble -> IO ()
clutter_desaturate_effect_set_factor Ptr DesaturateEffect
effect' CDouble
factor'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
effect
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data DesaturateEffectSetFactorMethodInfo
instance (signature ~ (Double -> m ()), MonadIO m, IsDesaturateEffect a) => O.OverloadedMethod DesaturateEffectSetFactorMethodInfo a signature where
    overloadedMethod = desaturateEffectSetFactor

instance O.OverloadedMethodInfo DesaturateEffectSetFactorMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Clutter.Objects.DesaturateEffect.desaturateEffectSetFactor",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-clutter-1.0.5/docs/GI-Clutter-Objects-DesaturateEffect.html#v:desaturateEffectSetFactor"
        })


#endif