{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) The 'GI.Pango.Structs.Rectangle.Rectangle' structure represents a rectangle. It is frequently used to represent the logical or ink extents of a single glyph or section of text. (See, for instance, 'GI.Pango.Objects.Font.fontGetGlyphExtents') -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Pango.Structs.Rectangle ( -- * Exported types Rectangle(..) , newZeroRectangle , noRectangle , -- * Properties -- ** height #attr:height# {- | height of the rectangle. -} getRectangleHeight , #if ENABLE_OVERLOADING rectangle_height , #endif setRectangleHeight , -- ** width #attr:width# {- | width of the rectangle. -} getRectangleWidth , #if ENABLE_OVERLOADING rectangle_width , #endif setRectangleWidth , -- ** x #attr:x# {- | X coordinate of the left side of the rectangle. -} getRectangleX , #if ENABLE_OVERLOADING rectangle_x , #endif setRectangleX , -- ** y #attr:y# {- | Y coordinate of the the top side of the rectangle. -} getRectangleY , #if ENABLE_OVERLOADING rectangle_y , #endif setRectangleY , ) 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 -- | Memory-managed wrapper type. newtype Rectangle = Rectangle (ManagedPtr Rectangle) instance WrappedPtr Rectangle where wrappedPtrCalloc = callocBytes 16 wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 16 >=> wrapPtr Rectangle) wrappedPtrFree = Just ptr_to_g_free -- | Construct a `Rectangle` struct initialized to zero. newZeroRectangle :: MonadIO m => m Rectangle newZeroRectangle = liftIO $ wrappedPtrCalloc >>= wrapPtr Rectangle instance tag ~ 'AttrSet => Constructible Rectangle tag where new _ attrs = do o <- newZeroRectangle GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `Rectangle`. noRectangle :: Maybe Rectangle noRectangle = Nothing {- | Get the value of the “@x@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' rectangle #x @ -} getRectangleX :: MonadIO m => Rectangle -> m Int32 getRectangleX s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO Int32 return val {- | Set the value of the “@x@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' rectangle [ #x 'Data.GI.Base.Attributes.:=' value ] @ -} setRectangleX :: MonadIO m => Rectangle -> Int32 -> m () setRectangleX s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 0) (val :: Int32) #if ENABLE_OVERLOADING data RectangleXFieldInfo instance AttrInfo RectangleXFieldInfo where type AttrAllowedOps RectangleXFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint RectangleXFieldInfo = (~) Int32 type AttrBaseTypeConstraint RectangleXFieldInfo = (~) Rectangle type AttrGetType RectangleXFieldInfo = Int32 type AttrLabel RectangleXFieldInfo = "x" type AttrOrigin RectangleXFieldInfo = Rectangle attrGet _ = getRectangleX attrSet _ = setRectangleX attrConstruct = undefined attrClear _ = undefined rectangle_x :: AttrLabelProxy "x" rectangle_x = AttrLabelProxy #endif {- | Get the value of the “@y@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' rectangle #y @ -} getRectangleY :: MonadIO m => Rectangle -> m Int32 getRectangleY s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 4) :: IO Int32 return val {- | Set the value of the “@y@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' rectangle [ #y 'Data.GI.Base.Attributes.:=' value ] @ -} setRectangleY :: MonadIO m => Rectangle -> Int32 -> m () setRectangleY s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 4) (val :: Int32) #if ENABLE_OVERLOADING data RectangleYFieldInfo instance AttrInfo RectangleYFieldInfo where type AttrAllowedOps RectangleYFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint RectangleYFieldInfo = (~) Int32 type AttrBaseTypeConstraint RectangleYFieldInfo = (~) Rectangle type AttrGetType RectangleYFieldInfo = Int32 type AttrLabel RectangleYFieldInfo = "y" type AttrOrigin RectangleYFieldInfo = Rectangle attrGet _ = getRectangleY attrSet _ = setRectangleY attrConstruct = undefined attrClear _ = undefined rectangle_y :: AttrLabelProxy "y" rectangle_y = AttrLabelProxy #endif {- | Get the value of the “@width@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' rectangle #width @ -} getRectangleWidth :: MonadIO m => Rectangle -> m Int32 getRectangleWidth s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO Int32 return val {- | Set the value of the “@width@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' rectangle [ #width 'Data.GI.Base.Attributes.:=' value ] @ -} setRectangleWidth :: MonadIO m => Rectangle -> Int32 -> m () setRectangleWidth s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 8) (val :: Int32) #if ENABLE_OVERLOADING data RectangleWidthFieldInfo instance AttrInfo RectangleWidthFieldInfo where type AttrAllowedOps RectangleWidthFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint RectangleWidthFieldInfo = (~) Int32 type AttrBaseTypeConstraint RectangleWidthFieldInfo = (~) Rectangle type AttrGetType RectangleWidthFieldInfo = Int32 type AttrLabel RectangleWidthFieldInfo = "width" type AttrOrigin RectangleWidthFieldInfo = Rectangle attrGet _ = getRectangleWidth attrSet _ = setRectangleWidth attrConstruct = undefined attrClear _ = undefined rectangle_width :: AttrLabelProxy "width" rectangle_width = AttrLabelProxy #endif {- | Get the value of the “@height@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' rectangle #height @ -} getRectangleHeight :: MonadIO m => Rectangle -> m Int32 getRectangleHeight s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 12) :: IO Int32 return val {- | Set the value of the “@height@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' rectangle [ #height 'Data.GI.Base.Attributes.:=' value ] @ -} setRectangleHeight :: MonadIO m => Rectangle -> Int32 -> m () setRectangleHeight s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 12) (val :: Int32) #if ENABLE_OVERLOADING data RectangleHeightFieldInfo instance AttrInfo RectangleHeightFieldInfo where type AttrAllowedOps RectangleHeightFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint RectangleHeightFieldInfo = (~) Int32 type AttrBaseTypeConstraint RectangleHeightFieldInfo = (~) Rectangle type AttrGetType RectangleHeightFieldInfo = Int32 type AttrLabel RectangleHeightFieldInfo = "height" type AttrOrigin RectangleHeightFieldInfo = Rectangle attrGet _ = getRectangleHeight attrSet _ = setRectangleHeight attrConstruct = undefined attrClear _ = undefined rectangle_height :: AttrLabelProxy "height" rectangle_height = AttrLabelProxy #endif #if ENABLE_OVERLOADING instance O.HasAttributeList Rectangle type instance O.AttributeList Rectangle = RectangleAttributeList type RectangleAttributeList = ('[ '("x", RectangleXFieldInfo), '("y", RectangleYFieldInfo), '("width", RectangleWidthFieldInfo), '("height", RectangleHeightFieldInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING type family ResolveRectangleMethod (t :: Symbol) (o :: *) :: * where ResolveRectangleMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveRectangleMethod t Rectangle, O.MethodInfo info Rectangle p) => OL.IsLabel t (Rectangle -> 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