module Graphics.Proc.Lib.Color( stroke, noStroke, fill, noFill, background, clear, strokeFill, rgb, grey, rgba, greya, setAlpha, white, black, navy, blue, aqua, teal, olive, green, lime, yellow, orange, red, maroon, fushsia, purple, gray, silver ) where import Control.Monad.Trans.State.Strict import Graphics.Rendering.OpenGL hiding(clear) import qualified Graphics.Rendering.OpenGL as G import Graphics.Proc.Core -- | Sets the color used to draw lines and borders around shapes. -- -- processing docs: stroke :: Col -> Draw stroke = putStroke . Just -- | Disables drawing the stroke (outline). If both noStroke() and noFill() are called, nothing will be drawn to the screen -- -- processing docs: noStroke :: Draw noStroke = putStroke Nothing -- | Sets the color used to fill shapes. For example, if you run @fill (rgb 204 102 0)@, all subsequent shapes will be filled with orange. -- -- processing docs: fill :: Col -> Draw fill = putFill . Just -- | Disables filling geometry. If both noStroke() and noFill() are called, nothing will be drawn to the screen. -- -- processing docs: noFill :: Draw noFill = putFill Nothing -- | Sets stroke and fill to the same color. strokeFill :: Col -> Draw strokeFill col = do stroke col fill col ------------------------------------------------------ -- | The background() function sets the color used for the background of the Processing window. The default background is light gray. This function is typically used within draw() to clear the display window at the beginning of each frame, but it can be used inside setup() to set the background on the first frame of animation or if the backgound need only be set once. -- -- processing docs: background :: Col -> Draw background x = liftIO $ do clearColor $= glCol x G.clear [ColorBuffer] -- | Clears the pixels within a buffer. -- -- processing docs: clear :: Draw clear = liftIO $ do G.clear [ColorBuffer] ------------------------------------------------------ -- | Creates an RGB-color from three values. The values are from 0 to 255. rgb :: Float -> Float -> Float -> Col rgb r g b = rgba r g b 255 -- | Creates a grey value out of single float value. The value is from 0 to 255. grey :: Float -> Col grey g = rgb g g g -- | Creates an RGB-color with transparency. rgba :: Float -> Float -> Float -> Float -> Col rgba r g b a = Col (r / 255) (g / 255) (b / 255) (a / 255) -- | Creates an grey-color with transparency. greya :: Float -> Float -> Col greya g a = rgba g g g a ------------------------------------------------------ setAlpha :: Float -> Col -> Col setAlpha x (Col r g b _) = Col r g b (x) -- | White color. white :: Col white = Col 1 1 1 1 -- | Black color. black :: Col black = Col 0 0 0 1 -- | Nave color. navy :: Col navy = rgb 0 31 63 -- | Blue color. blue :: Col blue = rgb 0 116 217 -- | Aqua color. aqua :: Col aqua = rgb 127 219 255 -- | Teal color. teal :: Col teal = rgb 57 204 204 -- | Olive color. olive :: Col olive = rgb 61 153 112 -- | Green color. green :: Col green = rgb 46 204 64 -- | Lime color. lime :: Col lime = rgb 1 255 112 -- | Yellow color. yellow :: Col yellow = rgb 255 220 0 -- | Orange color orange :: Col orange = rgb 255 33 27 -- | Red color red :: Col red = rgb 255 65 54 -- | Maroon color. maroon :: Col maroon = rgb 133 20 75 -- | Fuchsia color. fushsia :: Col fushsia = rgb 240 18 190 -- | Purple color purple :: Col purple = rgb 177 13 201 -- | Gray color. gray :: Col gray = grey 170 -- | Silver color. silver :: Col silver = grey 221