    {- |
    Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
    License    : LGPL-2.1
    Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)

    Generated from button presses for the buttons 4 to 7. Wheel mice are
    usually configured to generate button press events for buttons 4 and 5
    when the wheel is turned.

    Some GDK backends can also generate “smooth” scroll events, which
    can be recognized by the 'GI.Gdk.Enums.ScrollDirectionSmooth' scroll direction. For
    these, the scroll deltas can be obtained with
    'GI.Gdk.Unions.Event.eventGetScrollDeltas'.
    -}

    #define ENABLE_OVERLOADING \
           (!defined(__HADDOCK_VERSION__))

    module GI.Gdk.Structs.EventScroll
        (

    -- * Exported types
        EventScroll(..)                         ,
        newZeroEventScroll                      ,
        noEventScroll                           ,

     -- * Properties
    -- ** deltaX #attr:deltaX#
    {- | the x coordinate of the scroll delta
    -}
    #if ENABLE_OVERLOADING
        eventScroll_deltaX                      ,
    #endif
        getEventScrollDeltaX                    ,
        setEventScrollDeltaX                    ,

    -- ** deltaY #attr:deltaY#
    {- | the y coordinate of the scroll delta
    -}
    #if ENABLE_OVERLOADING
        eventScroll_deltaY                      ,
    #endif
        getEventScrollDeltaY                    ,
        setEventScrollDeltaY                    ,

    -- ** device #attr:device#
    {- | the master device that the event originated from. Use
    'GI.Gdk.Unions.Event.eventGetSourceDevice' to get the slave device.
    -}
        clearEventScrollDevice                  ,
    #if ENABLE_OVERLOADING
        eventScroll_device                      ,
    #endif
        getEventScrollDevice                    ,
        setEventScrollDevice                    ,

    -- ** direction #attr:direction#
    {- | the direction to scroll to (one of 'GI.Gdk.Enums.ScrollDirectionUp',
      'GI.Gdk.Enums.ScrollDirectionDown', 'GI.Gdk.Enums.ScrollDirectionLeft', 'GI.Gdk.Enums.ScrollDirectionRight' or
      'GI.Gdk.Enums.ScrollDirectionSmooth').
    -}
    #if ENABLE_OVERLOADING
        eventScroll_direction                   ,
    #endif
        getEventScrollDirection                 ,
        setEventScrollDirection                 ,

    -- ** isStop #attr:isStop#
    {- | /No description available in the introspection data./
    -}
    #if ENABLE_OVERLOADING
        eventScroll_isStop                      ,
    #endif
        getEventScrollIsStop                    ,
        setEventScrollIsStop                    ,

    -- ** sendEvent #attr:sendEvent#
    {- | 'True' if the event was sent explicitly.
    -}
    #if ENABLE_OVERLOADING
        eventScroll_sendEvent                   ,
    #endif
        getEventScrollSendEvent                 ,
        setEventScrollSendEvent                 ,

    -- ** state #attr:state#
    {- | a bit-mask representing the state of
      the modifier keys (e.g. Control, Shift and Alt) and the pointer
      buttons. See 'GI.Gdk.Flags.ModifierType'.
    -}
    #if ENABLE_OVERLOADING
        eventScroll_state                       ,
    #endif
        getEventScrollState                     ,
        setEventScrollState                     ,

    -- ** time #attr:time#
    {- | the time of the event in milliseconds.
    -}
    #if ENABLE_OVERLOADING
        eventScroll_time                        ,
    #endif
        getEventScrollTime                      ,
        setEventScrollTime                      ,

    -- ** type #attr:type#
    {- | the type of the event ('GI.Gdk.Enums.EventTypeScroll').
    -}
    #if ENABLE_OVERLOADING
        eventScroll_type                        ,
    #endif
        getEventScrollType                      ,
        setEventScrollType                      ,

    -- ** window #attr:window#
    {- | the window which received the event.
    -}
        clearEventScrollWindow                  ,
    #if ENABLE_OVERLOADING
        eventScroll_window                      ,
    #endif
        getEventScrollWindow                    ,
        setEventScrollWindow                    ,

    -- ** x #attr:x#
    {- | the x coordinate of the pointer relative to the window.
    -}
    #if ENABLE_OVERLOADING
        eventScroll_x                           ,
    #endif
        getEventScrollX                         ,
        setEventScrollX                         ,

    -- ** xRoot #attr:xRoot#
    {- | the x coordinate of the pointer relative to the root of the
      screen.
    -}
    #if ENABLE_OVERLOADING
        eventScroll_xRoot                       ,
    #endif
        getEventScrollXRoot                     ,
        setEventScrollXRoot                     ,

    -- ** y #attr:y#
    {- | the y coordinate of the pointer relative to the window.
    -}
    #if ENABLE_OVERLOADING
        eventScroll_y                           ,
    #endif
        getEventScrollY                         ,
        setEventScrollY                         ,

    -- ** yRoot #attr:yRoot#
    {- | the y coordinate of the pointer relative to the root of the
      screen.
    -}
    #if ENABLE_OVERLOADING
        eventScroll_yRoot                       ,
    #endif
        getEventScrollYRoot                     ,
        setEventScrollYRoot                     ,

        ) 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.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.Text as T
    import qualified Data.ByteString.Char8 as B
    import qualified Data.Map as Map
    import qualified Foreign.Ptr as FP

    import {-# SOURCE #-} qualified GI.Gdk.Enums as Gdk.Enums
    import {-# SOURCE #-} qualified GI.Gdk.Flags as Gdk.Flags
    import {-# SOURCE #-} qualified GI.Gdk.Objects.Device as Gdk.Device
    import {-# SOURCE #-} qualified GI.Gdk.Objects.Window as Gdk.Window

    -- | Memory-managed wrapper type.
    newtype EventScroll = EventScroll (ManagedPtr EventScroll)
    instance WrappedPtr EventScroll where
        wrappedPtrCalloc = callocBytes 96
        wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 96 >=> wrapPtr EventScroll)
        wrappedPtrFree = Just ptr_to_g_free

    -- | Construct a `EventScroll` struct initialized to zero.
    newZeroEventScroll :: MonadIO m => m EventScroll
    newZeroEventScroll = liftIO $ wrappedPtrCalloc >>= wrapPtr EventScroll

    instance tag ~ 'AttrSet => Constructible EventScroll tag where
        new _ attrs = do
            o <- newZeroEventScroll
            GI.Attributes.set o attrs
            return o

    -- | A convenience alias for `Nothing` :: `Maybe` `EventScroll`.
    noEventScroll :: Maybe EventScroll
    noEventScroll = Nothing

    {- |
    Get the value of the “@type@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #type
    @
    -}
    getEventScrollType :: MonadIO m => EventScroll -> m Gdk.Enums.EventType
    getEventScrollType s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 0) :: IO CInt
        let val' = (toEnum . fromIntegral) val
        return val'

    {- |
    Set the value of the “@type@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #type 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollType :: MonadIO m => EventScroll -> Gdk.Enums.EventType -> m ()
    setEventScrollType s val = liftIO $ withManagedPtr s $ \ptr -> do
        let val' = (fromIntegral . fromEnum) val
        poke (ptr `plusPtr` 0) (val' :: CInt)

    #if ENABLE_OVERLOADING
    data EventScrollTypeFieldInfo
    instance AttrInfo EventScrollTypeFieldInfo where
        type AttrAllowedOps EventScrollTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollTypeFieldInfo = (~) Gdk.Enums.EventType
        type AttrBaseTypeConstraint EventScrollTypeFieldInfo = (~) EventScroll
        type AttrGetType EventScrollTypeFieldInfo = Gdk.Enums.EventType
        type AttrLabel EventScrollTypeFieldInfo = "type"
        type AttrOrigin EventScrollTypeFieldInfo = EventScroll
        attrGet _ = getEventScrollType
        attrSet _ = setEventScrollType
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_type :: AttrLabelProxy "type"
    eventScroll_type = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@window@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #window
    @
    -}
    getEventScrollWindow :: MonadIO m => EventScroll -> m (Maybe Gdk.Window.Window)
    getEventScrollWindow s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 8) :: IO (Ptr Gdk.Window.Window)
        result <- SP.convertIfNonNull val $ \val' -> do
            val'' <- (newObject Gdk.Window.Window) val'
            return val''
        return result

    {- |
    Set the value of the “@window@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #window 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollWindow :: MonadIO m => EventScroll -> Ptr Gdk.Window.Window -> m ()
    setEventScrollWindow s val = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 8) (val :: Ptr Gdk.Window.Window)

    {- |
    Set the value of the “@window@” field to `Nothing`.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.clear' #window
    @
    -}
    clearEventScrollWindow :: MonadIO m => EventScroll -> m ()
    clearEventScrollWindow s = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 8) (FP.nullPtr :: Ptr Gdk.Window.Window)

    #if ENABLE_OVERLOADING
    data EventScrollWindowFieldInfo
    instance AttrInfo EventScrollWindowFieldInfo where
        type AttrAllowedOps EventScrollWindowFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
        type AttrSetTypeConstraint EventScrollWindowFieldInfo = (~) (Ptr Gdk.Window.Window)
        type AttrBaseTypeConstraint EventScrollWindowFieldInfo = (~) EventScroll
        type AttrGetType EventScrollWindowFieldInfo = Maybe Gdk.Window.Window
        type AttrLabel EventScrollWindowFieldInfo = "window"
        type AttrOrigin EventScrollWindowFieldInfo = EventScroll
        attrGet _ = getEventScrollWindow
        attrSet _ = setEventScrollWindow
        attrConstruct = undefined
        attrClear _ = clearEventScrollWindow

    eventScroll_window :: AttrLabelProxy "window"
    eventScroll_window = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@send_event@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #sendEvent
    @
    -}
    getEventScrollSendEvent :: MonadIO m => EventScroll -> m Int8
    getEventScrollSendEvent s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 16) :: IO Int8
        return val

    {- |
    Set the value of the “@send_event@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #sendEvent 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollSendEvent :: MonadIO m => EventScroll -> Int8 -> m ()
    setEventScrollSendEvent s val = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 16) (val :: Int8)

    #if ENABLE_OVERLOADING
    data EventScrollSendEventFieldInfo
    instance AttrInfo EventScrollSendEventFieldInfo where
        type AttrAllowedOps EventScrollSendEventFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollSendEventFieldInfo = (~) Int8
        type AttrBaseTypeConstraint EventScrollSendEventFieldInfo = (~) EventScroll
        type AttrGetType EventScrollSendEventFieldInfo = Int8
        type AttrLabel EventScrollSendEventFieldInfo = "send_event"
        type AttrOrigin EventScrollSendEventFieldInfo = EventScroll
        attrGet _ = getEventScrollSendEvent
        attrSet _ = setEventScrollSendEvent
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_sendEvent :: AttrLabelProxy "sendEvent"
    eventScroll_sendEvent = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@time@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #time
    @
    -}
    getEventScrollTime :: MonadIO m => EventScroll -> m Word32
    getEventScrollTime s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 20) :: IO Word32
        return val

    {- |
    Set the value of the “@time@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #time 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollTime :: MonadIO m => EventScroll -> Word32 -> m ()
    setEventScrollTime s val = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 20) (val :: Word32)

    #if ENABLE_OVERLOADING
    data EventScrollTimeFieldInfo
    instance AttrInfo EventScrollTimeFieldInfo where
        type AttrAllowedOps EventScrollTimeFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollTimeFieldInfo = (~) Word32
        type AttrBaseTypeConstraint EventScrollTimeFieldInfo = (~) EventScroll
        type AttrGetType EventScrollTimeFieldInfo = Word32
        type AttrLabel EventScrollTimeFieldInfo = "time"
        type AttrOrigin EventScrollTimeFieldInfo = EventScroll
        attrGet _ = getEventScrollTime
        attrSet _ = setEventScrollTime
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_time :: AttrLabelProxy "time"
    eventScroll_time = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@x@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #x
    @
    -}
    getEventScrollX :: MonadIO m => EventScroll -> m Double
    getEventScrollX s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 24) :: IO CDouble
        let val' = realToFrac val
        return val'

    {- |
    Set the value of the “@x@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #x 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollX :: MonadIO m => EventScroll -> Double -> m ()
    setEventScrollX s val = liftIO $ withManagedPtr s $ \ptr -> do
        let val' = realToFrac val
        poke (ptr `plusPtr` 24) (val' :: CDouble)

    #if ENABLE_OVERLOADING
    data EventScrollXFieldInfo
    instance AttrInfo EventScrollXFieldInfo where
        type AttrAllowedOps EventScrollXFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollXFieldInfo = (~) Double
        type AttrBaseTypeConstraint EventScrollXFieldInfo = (~) EventScroll
        type AttrGetType EventScrollXFieldInfo = Double
        type AttrLabel EventScrollXFieldInfo = "x"
        type AttrOrigin EventScrollXFieldInfo = EventScroll
        attrGet _ = getEventScrollX
        attrSet _ = setEventScrollX
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_x :: AttrLabelProxy "x"
    eventScroll_x = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@y@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #y
    @
    -}
    getEventScrollY :: MonadIO m => EventScroll -> m Double
    getEventScrollY s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 32) :: IO CDouble
        let val' = realToFrac val
        return val'

    {- |
    Set the value of the “@y@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #y 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollY :: MonadIO m => EventScroll -> Double -> m ()
    setEventScrollY s val = liftIO $ withManagedPtr s $ \ptr -> do
        let val' = realToFrac val
        poke (ptr `plusPtr` 32) (val' :: CDouble)

    #if ENABLE_OVERLOADING
    data EventScrollYFieldInfo
    instance AttrInfo EventScrollYFieldInfo where
        type AttrAllowedOps EventScrollYFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollYFieldInfo = (~) Double
        type AttrBaseTypeConstraint EventScrollYFieldInfo = (~) EventScroll
        type AttrGetType EventScrollYFieldInfo = Double
        type AttrLabel EventScrollYFieldInfo = "y"
        type AttrOrigin EventScrollYFieldInfo = EventScroll
        attrGet _ = getEventScrollY
        attrSet _ = setEventScrollY
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_y :: AttrLabelProxy "y"
    eventScroll_y = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@state@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #state
    @
    -}
    getEventScrollState :: MonadIO m => EventScroll -> m [Gdk.Flags.ModifierType]
    getEventScrollState s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 40) :: IO CUInt
        let val' = wordToGFlags val
        return val'

    {- |
    Set the value of the “@state@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #state 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollState :: MonadIO m => EventScroll -> [Gdk.Flags.ModifierType] -> m ()
    setEventScrollState s val = liftIO $ withManagedPtr s $ \ptr -> do
        let val' = gflagsToWord val
        poke (ptr `plusPtr` 40) (val' :: CUInt)

    #if ENABLE_OVERLOADING
    data EventScrollStateFieldInfo
    instance AttrInfo EventScrollStateFieldInfo where
        type AttrAllowedOps EventScrollStateFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollStateFieldInfo = (~) [Gdk.Flags.ModifierType]
        type AttrBaseTypeConstraint EventScrollStateFieldInfo = (~) EventScroll
        type AttrGetType EventScrollStateFieldInfo = [Gdk.Flags.ModifierType]
        type AttrLabel EventScrollStateFieldInfo = "state"
        type AttrOrigin EventScrollStateFieldInfo = EventScroll
        attrGet _ = getEventScrollState
        attrSet _ = setEventScrollState
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_state :: AttrLabelProxy "state"
    eventScroll_state = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@direction@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #direction
    @
    -}
    getEventScrollDirection :: MonadIO m => EventScroll -> m Gdk.Enums.ScrollDirection
    getEventScrollDirection s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 44) :: IO CUInt
        let val' = (toEnum . fromIntegral) val
        return val'

    {- |
    Set the value of the “@direction@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #direction 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollDirection :: MonadIO m => EventScroll -> Gdk.Enums.ScrollDirection -> m ()
    setEventScrollDirection s val = liftIO $ withManagedPtr s $ \ptr -> do
        let val' = (fromIntegral . fromEnum) val
        poke (ptr `plusPtr` 44) (val' :: CUInt)

    #if ENABLE_OVERLOADING
    data EventScrollDirectionFieldInfo
    instance AttrInfo EventScrollDirectionFieldInfo where
        type AttrAllowedOps EventScrollDirectionFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollDirectionFieldInfo = (~) Gdk.Enums.ScrollDirection
        type AttrBaseTypeConstraint EventScrollDirectionFieldInfo = (~) EventScroll
        type AttrGetType EventScrollDirectionFieldInfo = Gdk.Enums.ScrollDirection
        type AttrLabel EventScrollDirectionFieldInfo = "direction"
        type AttrOrigin EventScrollDirectionFieldInfo = EventScroll
        attrGet _ = getEventScrollDirection
        attrSet _ = setEventScrollDirection
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_direction :: AttrLabelProxy "direction"
    eventScroll_direction = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@device@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #device
    @
    -}
    getEventScrollDevice :: MonadIO m => EventScroll -> m (Maybe Gdk.Device.Device)
    getEventScrollDevice s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 48) :: IO (Ptr Gdk.Device.Device)
        result <- SP.convertIfNonNull val $ \val' -> do
            val'' <- (newObject Gdk.Device.Device) val'
            return val''
        return result

    {- |
    Set the value of the “@device@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #device 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollDevice :: MonadIO m => EventScroll -> Ptr Gdk.Device.Device -> m ()
    setEventScrollDevice s val = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 48) (val :: Ptr Gdk.Device.Device)

    {- |
    Set the value of the “@device@” field to `Nothing`.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.clear' #device
    @
    -}
    clearEventScrollDevice :: MonadIO m => EventScroll -> m ()
    clearEventScrollDevice s = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 48) (FP.nullPtr :: Ptr Gdk.Device.Device)

    #if ENABLE_OVERLOADING
    data EventScrollDeviceFieldInfo
    instance AttrInfo EventScrollDeviceFieldInfo where
        type AttrAllowedOps EventScrollDeviceFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
        type AttrSetTypeConstraint EventScrollDeviceFieldInfo = (~) (Ptr Gdk.Device.Device)
        type AttrBaseTypeConstraint EventScrollDeviceFieldInfo = (~) EventScroll
        type AttrGetType EventScrollDeviceFieldInfo = Maybe Gdk.Device.Device
        type AttrLabel EventScrollDeviceFieldInfo = "device"
        type AttrOrigin EventScrollDeviceFieldInfo = EventScroll
        attrGet _ = getEventScrollDevice
        attrSet _ = setEventScrollDevice
        attrConstruct = undefined
        attrClear _ = clearEventScrollDevice

    eventScroll_device :: AttrLabelProxy "device"
    eventScroll_device = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@x_root@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #xRoot
    @
    -}
    getEventScrollXRoot :: MonadIO m => EventScroll -> m Double
    getEventScrollXRoot s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 56) :: IO CDouble
        let val' = realToFrac val
        return val'

    {- |
    Set the value of the “@x_root@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #xRoot 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollXRoot :: MonadIO m => EventScroll -> Double -> m ()
    setEventScrollXRoot s val = liftIO $ withManagedPtr s $ \ptr -> do
        let val' = realToFrac val
        poke (ptr `plusPtr` 56) (val' :: CDouble)

    #if ENABLE_OVERLOADING
    data EventScrollXRootFieldInfo
    instance AttrInfo EventScrollXRootFieldInfo where
        type AttrAllowedOps EventScrollXRootFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollXRootFieldInfo = (~) Double
        type AttrBaseTypeConstraint EventScrollXRootFieldInfo = (~) EventScroll
        type AttrGetType EventScrollXRootFieldInfo = Double
        type AttrLabel EventScrollXRootFieldInfo = "x_root"
        type AttrOrigin EventScrollXRootFieldInfo = EventScroll
        attrGet _ = getEventScrollXRoot
        attrSet _ = setEventScrollXRoot
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_xRoot :: AttrLabelProxy "xRoot"
    eventScroll_xRoot = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@y_root@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #yRoot
    @
    -}
    getEventScrollYRoot :: MonadIO m => EventScroll -> m Double
    getEventScrollYRoot s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 64) :: IO CDouble
        let val' = realToFrac val
        return val'

    {- |
    Set the value of the “@y_root@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #yRoot 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollYRoot :: MonadIO m => EventScroll -> Double -> m ()
    setEventScrollYRoot s val = liftIO $ withManagedPtr s $ \ptr -> do
        let val' = realToFrac val
        poke (ptr `plusPtr` 64) (val' :: CDouble)

    #if ENABLE_OVERLOADING
    data EventScrollYRootFieldInfo
    instance AttrInfo EventScrollYRootFieldInfo where
        type AttrAllowedOps EventScrollYRootFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollYRootFieldInfo = (~) Double
        type AttrBaseTypeConstraint EventScrollYRootFieldInfo = (~) EventScroll
        type AttrGetType EventScrollYRootFieldInfo = Double
        type AttrLabel EventScrollYRootFieldInfo = "y_root"
        type AttrOrigin EventScrollYRootFieldInfo = EventScroll
        attrGet _ = getEventScrollYRoot
        attrSet _ = setEventScrollYRoot
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_yRoot :: AttrLabelProxy "yRoot"
    eventScroll_yRoot = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@delta_x@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #deltaX
    @
    -}
    getEventScrollDeltaX :: MonadIO m => EventScroll -> m Double
    getEventScrollDeltaX s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 72) :: IO CDouble
        let val' = realToFrac val
        return val'

    {- |
    Set the value of the “@delta_x@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #deltaX 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollDeltaX :: MonadIO m => EventScroll -> Double -> m ()
    setEventScrollDeltaX s val = liftIO $ withManagedPtr s $ \ptr -> do
        let val' = realToFrac val
        poke (ptr `plusPtr` 72) (val' :: CDouble)

    #if ENABLE_OVERLOADING
    data EventScrollDeltaXFieldInfo
    instance AttrInfo EventScrollDeltaXFieldInfo where
        type AttrAllowedOps EventScrollDeltaXFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollDeltaXFieldInfo = (~) Double
        type AttrBaseTypeConstraint EventScrollDeltaXFieldInfo = (~) EventScroll
        type AttrGetType EventScrollDeltaXFieldInfo = Double
        type AttrLabel EventScrollDeltaXFieldInfo = "delta_x"
        type AttrOrigin EventScrollDeltaXFieldInfo = EventScroll
        attrGet _ = getEventScrollDeltaX
        attrSet _ = setEventScrollDeltaX
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_deltaX :: AttrLabelProxy "deltaX"
    eventScroll_deltaX = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@delta_y@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #deltaY
    @
    -}
    getEventScrollDeltaY :: MonadIO m => EventScroll -> m Double
    getEventScrollDeltaY s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 80) :: IO CDouble
        let val' = realToFrac val
        return val'

    {- |
    Set the value of the “@delta_y@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #deltaY 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollDeltaY :: MonadIO m => EventScroll -> Double -> m ()
    setEventScrollDeltaY s val = liftIO $ withManagedPtr s $ \ptr -> do
        let val' = realToFrac val
        poke (ptr `plusPtr` 80) (val' :: CDouble)

    #if ENABLE_OVERLOADING
    data EventScrollDeltaYFieldInfo
    instance AttrInfo EventScrollDeltaYFieldInfo where
        type AttrAllowedOps EventScrollDeltaYFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollDeltaYFieldInfo = (~) Double
        type AttrBaseTypeConstraint EventScrollDeltaYFieldInfo = (~) EventScroll
        type AttrGetType EventScrollDeltaYFieldInfo = Double
        type AttrLabel EventScrollDeltaYFieldInfo = "delta_y"
        type AttrOrigin EventScrollDeltaYFieldInfo = EventScroll
        attrGet _ = getEventScrollDeltaY
        attrSet _ = setEventScrollDeltaY
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_deltaY :: AttrLabelProxy "deltaY"
    eventScroll_deltaY = AttrLabelProxy

    #endif

    {- |
    Get the value of the “@is_stop@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.get' eventScroll #isStop
    @
    -}
    getEventScrollIsStop :: MonadIO m => EventScroll -> m Word32
    getEventScrollIsStop s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 88) :: IO Word32
        return val

    {- |
    Set the value of the “@is_stop@” field.
    When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

    @
    'Data.GI.Base.Attributes.set' eventScroll [ #isStop 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setEventScrollIsStop :: MonadIO m => EventScroll -> Word32 -> m ()
    setEventScrollIsStop s val = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 88) (val :: Word32)

    #if ENABLE_OVERLOADING
    data EventScrollIsStopFieldInfo
    instance AttrInfo EventScrollIsStopFieldInfo where
        type AttrAllowedOps EventScrollIsStopFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint EventScrollIsStopFieldInfo = (~) Word32
        type AttrBaseTypeConstraint EventScrollIsStopFieldInfo = (~) EventScroll
        type AttrGetType EventScrollIsStopFieldInfo = Word32
        type AttrLabel EventScrollIsStopFieldInfo = "is_stop"
        type AttrOrigin EventScrollIsStopFieldInfo = EventScroll
        attrGet _ = getEventScrollIsStop
        attrSet _ = setEventScrollIsStop
        attrConstruct = undefined
        attrClear _ = undefined

    eventScroll_isStop :: AttrLabelProxy "isStop"
    eventScroll_isStop = AttrLabelProxy

    #endif

    #if ENABLE_OVERLOADING
    instance O.HasAttributeList EventScroll
    type instance O.AttributeList EventScroll = EventScrollAttributeList
    type EventScrollAttributeList = ('[ '("type", EventScrollTypeFieldInfo), '("window", EventScrollWindowFieldInfo), '("sendEvent", EventScrollSendEventFieldInfo), '("time", EventScrollTimeFieldInfo), '("x", EventScrollXFieldInfo), '("y", EventScrollYFieldInfo), '("state", EventScrollStateFieldInfo), '("direction", EventScrollDirectionFieldInfo), '("device", EventScrollDeviceFieldInfo), '("xRoot", EventScrollXRootFieldInfo), '("yRoot", EventScrollYRootFieldInfo), '("deltaX", EventScrollDeltaXFieldInfo), '("deltaY", EventScrollDeltaYFieldInfo), '("isStop", EventScrollIsStopFieldInfo)] :: [(Symbol, *)])
    #endif

    #if ENABLE_OVERLOADING
    type family ResolveEventScrollMethod (t :: Symbol) (o :: *) :: * where
        ResolveEventScrollMethod l o = O.MethodResolutionFailed l o

    instance (info ~ ResolveEventScrollMethod t EventScroll, O.MethodInfo info EventScroll p) => O.IsLabelProxy t (EventScroll -> p) where
        fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

    #if MIN_VERSION_base(4,9,0)
    instance (info ~ ResolveEventScrollMethod t EventScroll, O.MethodInfo info EventScroll p) => O.IsLabel t (EventScroll -> 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

    #endif