gegl-0.0.0.1: src/GEGL/Color.hs
module GEGL.Color
( FFI.GeglColor
, Color(..)
, gegl_color_new
, gegl_color_set_rgba
) where
import Foreign.C.Types (CInt, CDouble(..))
import Foreign.C.String (withCString)
import Foreign.Ptr (Ptr)
import qualified GEGL.FFI.Color as FFI
-- ANOTHER HACKY POINTER!!
-- type GeglColorDummy = CInt
-- newtype GeglColor = GeglColor (Ptr GeglColorDummy)
data Color = RGB Double Double Double
| RGBA Double Double Double Double
instance Show Color where
show (RGB r g b) = "rgb(" ++ show r ++ "," ++ show g ++ "," ++ show b ++ ")"
show (RGBA r g b a) = "rgba(" ++ show r ++ "," ++ show g ++ "," ++ show b ++ "," ++ show a ++ ")"
-- | Create a new 'GeglColor'
gegl_color_new :: Color -> IO FFI.GeglColor
gegl_color_new (RGB r g b) = FFI.GeglColor <$> withCString
(show $ RGB r g b) FFI.c_gegl_color_new
gegl_color_new (RGBA r g b a) = FFI.GeglColor <$> withCString
(show $ RGBA r g b a) FFI.c_gegl_color_new
-- gegl_color_new _ = error "Colors other than RGB are not yet implemented"
-- | Set the color of a 'GeglColor'
gegl_color_set_rgba :: FFI.GeglColor -> Color -> IO ()
gegl_color_set_rgba (FFI.GeglColor col) (RGBA r g b a) =
FFI.c_gegl_color_set_rgba col (CDouble r) (CDouble g) (CDouble b) (CDouble a)