{-| This module provides an abstraction over the default representations of color in the Haskell OpenGL bindings. -} module FRP.Spice.Graphics.Color where -------------------- -- Global Imports -- import Graphics.Rendering.OpenGL (Color4 (..), color) ------------------- -- Local Imports -- import FRP.Spice.Graphics.Element import FRP.Spice.Graphics.Scene import FRP.Spice.Graphics.Utils ---------- -- Code -- {-| Representing a Color using four @'Float'@ representing reg, green, blue, and the alpha mask respectively. The @'Float'@s are in a range from 0-1, representing @'Int'@s from 0-255. -} data Color = Color { getRed :: Float , getGreen :: Float , getBlue :: Float , getAlpha :: Float } deriving (Eq, Show, Read) {-| Converting a color to an action in a @'Scene'@. -} bindColor :: Color -> Scene bindColor (Color r g b a) = fromElements [SetColor r g b a] {-| A synonym for the @'Color'@ constructor. -} color4f :: Float -> Float -> Float -> Float -> Color color4f = Color {-| Constructing a @'Color'@ from 3 @'Float'@s, defaulting the alpha mask to 1.0. -} color3f :: Float -> Float -> Float -> Color color3f r g b = color4f r g b 1.0 {-| Creating a @'Color'@ from 4 @'Int'@s. The ints, similarly to @'color4f'@ represent red, green, blue, and the alpha mask respectively. The ints should be in the range of 0-255. (Note: @'color4i'@ is functionally equivalent (and also equivalent in source code) to calling color4f with each of its arguments divided by 255.) -} color4i :: Int -> Int -> Int -> Int -> Color color4i r g b a = color4f (fromIntegral r / 255) (fromIntegral g / 255) (fromIntegral b / 255) (fromIntegral a / 255) {-| Constructing a @'Color'@ from 3 @'Int'@s, defaulting the alpha mask to 255. -} color3i :: Int -> Int -> Int -> Color color3i r g b = color4i r g b 255 {-| The color black. -} black :: Color black = color3i 0 0 0 {-| The color white. -} white :: Color white = color3i 255 255 255 {-| The color red. -} red :: Color red = color3i 255 0 0 {-| The color green. -} green :: Color green = color3i 0 255 0 {-| The color blue. -} blue :: Color blue = color3i 0 0 255