module SFML.Graphics.RectangleShape
(
module SFML.Utils
, createRectangleShape
, copy
, destroy
, setPosition
, setRotation
, setScale
, setOrigin
, getPosition
, getRotation
, getScale
, getOrigin
, move
, rotate
, scale
, getTransform
, getInverseTransform
, setTexture
, setTextureRect
, getTexture
, getTextureRect
, setFillColor
, setOutlineColor
, setOutlineThickness
, getFillColor
, getOutlineColor
, getOutlineThickness
, getPointCount
, getPoint
, setPointCount
, setSize
, getSize
, getLocalBounds
, getGlobalBounds
)
where
import SFML.Graphics.SFBounded
import SFML.Graphics.Color
import SFML.Graphics.Rect
import SFML.Graphics.SFShape
import SFML.Graphics.SFShapeResizable
import SFML.Graphics.SFTexturable
import SFML.Graphics.Transform
import SFML.Graphics.SFTransformable
import SFML.Graphics.Types
import SFML.SFCopyable
import SFML.SFException
import SFML.SFResource
import SFML.System.Vector2
import SFML.Utils
import Control.Monad ((>=>))
import Foreign.C.Types
import Foreign.Ptr (Ptr, nullPtr)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Utils (with)
import Foreign.Storable (peek)
checkNull :: RectangleShape -> Maybe RectangleShape
checkNull rs@(RectangleShape ptr) = if ptr == nullPtr then Nothing else Just rs
checkNullTexture :: Texture -> Maybe Texture
checkNullTexture tex@(Texture ptr) = if ptr == nullPtr then Nothing else Just tex
createRectangleShape :: IO (Either SFException RectangleShape)
createRectangleShape =
let err = SFException "Failed creating rectangle shape"
in fmap (tagErr err . checkNull) sfRectangleShape_create
foreign import ccall unsafe "sfRectangleShape_create"
sfRectangleShape_create :: IO RectangleShape
instance SFCopyable RectangleShape where
copy = sfRectangleShape_copy
foreign import ccall unsafe "sfRectangleShape_copy"
sfRectangleShape_copy :: RectangleShape -> IO RectangleShape
instance SFResource RectangleShape where
destroy = sfRectangleShape_destroy
foreign import ccall unsafe "sfRectangleShape_destroy"
sfRectangleShape_destroy :: RectangleShape -> IO ()
instance SFTransformable RectangleShape where
setPosition c p = with p $ sfRectangleShape_setPosition_helper c
setRotation s r = sfRectangleShape_setRotation s (realToFrac r)
setScale c s = with s $ sfRectangleShape_setScale_helper c
setOrigin c o = with o $ sfRectangleShape_setOrigin_helper c
getPosition c = alloca $ \ptr -> sfRectangleShape_getPosition_helper c ptr >> peek ptr
getRotation = sfRectangleShape_getRotation >=> return . realToFrac
getScale c = alloca $ \ptr -> sfRectangleShape_getScale_helper c ptr >> peek ptr
getOrigin c = alloca $ \ptr -> sfRectangleShape_getOrigin_helper c ptr >> peek ptr
move c off = with off $ sfRectangleShape_move_helper c
rotate r a = sfRectangleShape_rotate r (realToFrac a)
scale c s = with s $ sfRectangleShape_scale_helper c
getTransform c = alloca $ \ptr -> sfRectangleShape_getTransform_helper c ptr >> peek ptr
getInverseTransform c = alloca $ \ptr -> sfRectangleShape_getInverseTransform_helper c ptr >> peek ptr
foreign import ccall unsafe "sfRectangleShape_setPosition_helper"
sfRectangleShape_setPosition_helper :: RectangleShape -> Ptr Vec2f -> IO ()
foreign import ccall unsafe "sfRectangleShape_setRotation"
sfRectangleShape_setRotation :: RectangleShape -> CFloat -> IO ()
foreign import ccall unsafe "sfRectangleShape_setScale_helper"
sfRectangleShape_setScale_helper :: RectangleShape -> Ptr Vec2f -> IO ()
foreign import ccall unsafe "sfRectangleShape_setOrigin_helper"
sfRectangleShape_setOrigin_helper :: RectangleShape -> Ptr Vec2f -> IO ()
foreign import ccall unsafe "sfRectangleShape_getPosition_helper"
sfRectangleShape_getPosition_helper :: RectangleShape -> Ptr Vec2f -> IO ()
foreign import ccall unsafe "sfRectangleShape_getRotation"
sfRectangleShape_getRotation :: RectangleShape -> IO CFloat
foreign import ccall unsafe "sfRectangleShape_getScale_helper"
sfRectangleShape_getScale_helper :: RectangleShape -> Ptr Vec2f -> IO ()
foreign import ccall unsafe "sfRectangleShape_getOrigin_helper"
sfRectangleShape_getOrigin_helper :: RectangleShape -> Ptr Vec2f -> IO ()
foreign import ccall unsafe "sfRectangleShape_move_helper"
sfRectangleShape_move_helper :: RectangleShape -> Ptr Vec2f -> IO ()
foreign import ccall unsafe "sfRectangleShape_rotate"
sfRectangleShape_rotate :: RectangleShape -> CFloat -> IO ()
foreign import ccall unsafe "sfRectangleShape_scale_helper"
sfRectangleShape_scale_helper :: RectangleShape -> Ptr Vec2f -> IO ()
foreign import ccall unsafe "sfRectangleShape_getTransform_helper"
sfRectangleShape_getTransform_helper :: RectangleShape -> Ptr Transform -> IO ()
foreign import ccall unsafe "sfRectangleShape_getInverseTransform_helper"
sfRectangleShape_getInverseTransform_helper :: RectangleShape -> Ptr Transform -> IO ()
instance SFTexturable RectangleShape where
setTexture c tex reset = sfRectangleShape_setTexture c tex (fromIntegral . fromEnum $ reset)
setTextureRect c rect = with rect $ sfRectangleShape_setTextureRect_helper c
getTexture = sfRectangleShape_getTexture >=> return . checkNullTexture
getTextureRect c = alloca $ \ptr -> sfRectangleShape_getTextureRect_helper c ptr >> peek ptr
foreign import ccall unsafe "sfRectangleShape_setTexture"
sfRectangleShape_setTexture :: RectangleShape -> Texture -> CInt -> IO ()
foreign import ccall unsafe "sfRectangleShape_setTextureRect_helper"
sfRectangleShape_setTextureRect_helper :: RectangleShape -> Ptr IntRect -> IO ()
foreign import ccall unsafe "sfRectangleShape_getTexture"
sfRectangleShape_getTexture :: RectangleShape -> IO Texture
foreign import ccall unsafe "sfRectangleShape_getTextureRect_helper"
sfRectangleShape_getTextureRect_helper :: RectangleShape -> Ptr IntRect -> IO ()
instance SFShape RectangleShape where
setFillColor c color = with color $ sfRectangleShape_setFillColor_helper c
setOutlineColor c color = with color $ sfRectangleShape_setOutlineColor_helper c
setOutlineThickness r t = sfRectangleShape_setOutlineThickness r (realToFrac t)
getFillColor c = alloca $ \ptr -> sfRectangleShape_getFillColor_helper c ptr >> peek ptr
getOutlineColor c = alloca $ \ptr -> sfRectangleShape_getOutlineColor_helper c ptr >> peek ptr
getOutlineThickness = sfRectangleShape_getOutlineThickness >=> return . realToFrac
getPointCount = sfRectangleShape_getPointCount >=> return . fromIntegral
getPoint c idx = alloca $ \ptr -> sfRectangleShape_getPoint_helper c (fromIntegral idx) ptr >> peek ptr
foreign import ccall unsafe "sfRectangleShape_setFillColor_helper"
sfRectangleShape_setFillColor_helper :: RectangleShape -> Ptr Color -> IO ()
foreign import ccall unsafe "sfRectangleShape_setOutlineColor_helper"
sfRectangleShape_setOutlineColor_helper :: RectangleShape -> Ptr Color -> IO ()
foreign import ccall unsafe "sfRectangleShape_setOutlineThickness"
sfRectangleShape_setOutlineThickness :: RectangleShape -> CFloat -> IO ()
foreign import ccall unsafe "sfRectangleShape_getFillColor_helper"
sfRectangleShape_getFillColor_helper :: RectangleShape -> Ptr Color -> IO ()
foreign import ccall unsafe "sfRectangleShape_getOutlineColor_helper"
sfRectangleShape_getOutlineColor_helper :: RectangleShape -> Ptr Color -> IO ()
foreign import ccall unsafe "sfRectangleShape_getOutlineThickness"
sfRectangleShape_getOutlineThickness :: RectangleShape -> IO CFloat
foreign import ccall unsafe "sfRectangleShape_getPointCount"
sfRectangleShape_getPointCount :: RectangleShape -> IO CUInt
foreign import ccall unsafe "sfRectangleShape_getPoint_helper"
sfRectangleShape_getPoint_helper :: RectangleShape -> CUInt -> Ptr Vec2f -> IO ()
setSize :: RectangleShape -> Vec2f -> IO ()
setSize rs s = with s $ sfRectangleShape_setSize_helper rs
foreign import ccall unsafe "sfRectangleShape_setSize_helper"
sfRectangleShape_setSize_helper :: RectangleShape -> Ptr Vec2f -> IO ()
getSize :: RectangleShape -> IO Vec2f
getSize r = alloca $ \ptr -> sfRectangleShape_getSize_helper r ptr >> peek ptr
foreign import ccall unsafe "sfRectangleShape_getSize_helper"
sfRectangleShape_getSize_helper :: RectangleShape -> Ptr Vec2f -> IO ()
instance SFBounded RectangleShape where
getLocalBounds c = alloca $ \ptr -> sfRectangleShape_getLocalBounds_helper c ptr >> peek ptr
getGlobalBounds c = alloca $ \ptr -> sfRectangleShape_getGlobalBounds_helper c ptr >> peek ptr
foreign import ccall unsafe "sfRectangleShape_getLocalBounds_helper"
sfRectangleShape_getLocalBounds_helper :: RectangleShape -> Ptr FloatRect -> IO ()
foreign import ccall unsafe "sfRectangleShape_getGlobalBounds_helper"
sfRectangleShape_getGlobalBounds_helper :: RectangleShape -> Ptr FloatRect -> IO ()