packages feed

ltk-0.16.1.0: src/Graphics/UI/Frame/Rectangle.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
-----------------------------------------------------------------------------
--
-- Module      :  IDE.Core.ViewFrame
-- Copyright   :  (c) Juergen Nicklisch-Franken, Hamish Mackenzie
-- License     :  GNU-GPL
--
-- Maintainer  :  <maintainer at leksah.org>
-- Stability   :  provisional
-- Portability :  portable
--
--
-- | Portable Rectangle type that works with older Gdk versions
--
---------------------------------------------------------------------------------

module Graphics.UI.Frame.Rectangle (
    Rectangle(..)
,   newRectangle
,   setRectangleWidth
,   setRectangleHeight
,   setRectangleX
,   setRectangleY
,   getRectangleWidth
,   getRectangleHeight
,   getRectangleX
,   getRectangleY
) where

import Data.Int (Int32)
import Data.GI.Base (new, AttrOp)
import Data.GI.Base.Attributes (AttrOpTag(..))
import Control.Monad.IO.Class (MonadIO)
#ifdef MIN_VERSION_GDK_3_18
import GI.Gdk (Rectangle(..), getRectangleWidth, getRectangleHeight, getRectangleX, getRectangleY,
                              setRectangleWidth, setRectangleHeight, setRectangleX, setRectangleY)
#else
import GI.Cairo (RectangleInt(..), getRectangleIntWidth, getRectangleIntHeight, getRectangleIntX, getRectangleIntY,
                                   setRectangleIntWidth, setRectangleIntHeight, setRectangleIntX, setRectangleIntY)
#endif

#ifdef MIN_VERSION_GDK_3_18
rectangle = Rectangle
#else
type Rectangle     = RectangleInt
rectangle          = RectangleInt
getRectangleWidth, getRectangleHeight, getRectangleX, getRectangleY :: MonadIO m => Rectangle -> m Int32
getRectangleWidth  = getRectangleIntWidth
getRectangleHeight = getRectangleIntHeight
getRectangleX      = getRectangleIntX
getRectangleY      = getRectangleIntY
setRectangleWidth, setRectangleHeight, setRectangleX, setRectangleY :: MonadIO m => Rectangle -> Int32 -> m ()
setRectangleWidth  = setRectangleIntWidth
setRectangleHeight = setRectangleIntHeight
setRectangleX      = setRectangleIntX
setRectangleY      = setRectangleIntY
#endif

newRectangle :: MonadIO m => Int32 -> Int32 -> Int32 -> Int32 -> m Rectangle
newRectangle x y width height = do
    r <- new rectangle []
    setRectangleX      r x
    setRectangleY      r y
    setRectangleWidth  r width
    setRectangleHeight r height
    return r