module SFML.Graphics.SFShape
where


import SFML.Graphics.Color
import SFML.System.Vector2


class SFShape a where
    
    -- | Set the fill color of a shape.
    --
    -- This color is modulated (multiplied) with the shape's
    -- texture if any. It can be used to colorize the shape,
    -- or change its global opacity.
    --
    -- You can use 'Transparent' to make the inside of
    -- the shape transparent, and have the outline alone.
    --
    -- By default, the shape's fill color is opaque white.
    setFillColor :: a -> Color -> IO ()
    
    -- | Set the outline color of a shape.
    --
    -- You can use 'Transparent' to disable the outline.
    --
    -- By default, the shape's outline color is opaque white.
    setOutlineColor :: a -> Color -> IO ()
    
    -- | Set the thickness of a shape's outline.
    --
    -- This number cannot be negative. Using zero disables
    -- the outline.
    --
    -- By default, the outline thickness is 0.
    setOutlineThickness
        :: a
        -> Float -- ^ New outline thickness
        -> IO ()
    
    -- | Get the fill color of a shape.
    getFillColor :: a -> IO Color
    
    -- | Get the outline color of a shape.
    getOutlineColor :: a -> IO Color
    
    -- | Get the outline thickness of a shape.
    getOutlineThickness :: a -> IO Float
    
    -- | Get the total number of points of a shape.
    getPointCount :: a -> IO Int

    -- | Get the ith point of a shape.
    --
    -- The result is undefined if index is out of the valid range.
    getPoint
        :: a
        -> Int -- ^ Index of the point to get, in range [0 .. 'getPointCount' - 1]
        -> IO Vec2f