-- | Functions used to add shapes to a PDF documents

module Graphics.PDF.Shape 
 (-- * Shapes
  -- ** Drawing operators
  line, rectangle, fillRectangle
  -- ** Path operators
  ,startPathAt,closePath,addLineToPath,addRectangleToPath,strokePath,fillPath, fillAndStrokePath, clipPath
  -- ** Shape settings
  , lineWidth, dashPattern
 )
 where
 
import Graphics.PDF.LowLevel

-- | Add a line to a PDF document                            
line :: Float -> Float -> Float -> Float -> PdfCmd
line xa ya xb yb  = (PdfL xa ya xb yb,[])
                    

-- | Change the line width used in a PDF document                  
lineWidth :: Float -> PdfCmd
lineWidth w  = (PdfW w,[])
                
-- | Add a rectangle to the PDF
rectangle :: Float -> Float -> Float -> Float -> PdfCmd
rectangle xa ya width height  = (PdfRect xa ya width height,[])
                                 
  
-- | Add a filled a rectangle to the PDF
fillRectangle :: Float -> Float -> Float -> Float -> PdfCmd
fillRectangle xa ya width height  = (PdfFillRect xa ya width height,[])
                                    
                                   
-- | Set the dash array and phase
dashPattern :: [Float] -> Float -> PdfCmd
dashPattern a phase  =  (PdfDash a phase,[])
                        
                         
-- | Start a new path
startPathAt :: Float -> Float -> PdfCmd
startPathAt xa ya  = (PdfStartPath xa ya,[])
                     
                    
-- | Close path
closePath :: PdfCmd
closePath  = (PdfClosePath,[])
              
              
-- | Add a line to the current path
addLineToPath :: Float -> Float -> PdfCmd
addLineToPath xa ya  = (PdfAddLineToPath xa ya,[])
                        
                         
-- | Add a rectangle to the PDF
addRectangleToPath :: Float -> Float -> Float -> Float -> PdfCmd
addRectangleToPath xa ya width height  = (PdfAddRectangleToPath xa ya width height,[])
                                          
                                        
-- | Stroke path
strokePath :: PdfCmd
strokePath  = (PdfStroke,[])
               
-- | Fill path
fillPath :: PdfCmd
fillPath  = (PdfFill,[])
            

-- | Fill and stroke path
fillAndStrokePath :: PdfCmd
fillAndStrokePath  = (PdfFillAndStroke,[])

-- | Clip path
clipPath :: PdfCmd
clipPath  = (PdfClip,[])