union-color 0.1.1.0 → 0.1.2.0
raw patch · 3 files changed
+293/−25 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.Color: alphaInt32 :: Int32 -> Maybe (Alpha d)
+ Data.Color: pattern RgbaInt32 :: RealFrac d => Int32 -> Int32 -> Int32 -> Int32 -> Rgba d
+ Data.Color: pattern RgbaWord32 :: RealFrac d => Word32 -> Word32 -> Word32 -> Word32 -> Rgba d
+ Data.Color: rgbInt32 :: Int32 -> Int32 -> Int32 -> Maybe (Rgb d)
+ Data.Color: rgbaInt32 :: Int32 -> Int32 -> Int32 -> Int32 -> Maybe (Rgba d)
+ Data.Color.Internal: AlphaInt32_ :: Int32 -> Alpha d
+ Data.Color.Internal: AlphaWord32_ :: Word32 -> Alpha d
+ Data.Color.Internal: RgbInt32_ :: Int32 -> Int32 -> Int32 -> Rgb d
+ Data.Color.Internal: RgbWord32_ :: Word32 -> Word32 -> Word32 -> Rgb d
+ Data.Color.Internal: RgbaInt32_ :: Int32 -> Int32 -> Int32 -> Int32 -> Rgba d
+ Data.Color.Internal: RgbaWord32_ :: Word32 -> Word32 -> Word32 -> Word32 -> Rgba d
+ Data.Color.Internal: alphaInt32 :: Int32 -> Maybe (Alpha d)
+ Data.Color.Internal: pattern RgbaInt32 :: RealFrac d => Int32 -> Int32 -> Int32 -> Int32 -> Rgba d
+ Data.Color.Internal: pattern RgbaWord32 :: RealFrac d => Word32 -> Word32 -> Word32 -> Word32 -> Rgba d
+ Data.Color.Internal: rgbInt32 :: Int32 -> Int32 -> Int32 -> Maybe (Rgb d)
+ Data.Color.Internal: rgbaInt32 :: Int32 -> Int32 -> Int32 -> Int32 -> Maybe (Rgba d)
Files
- src/Data/Color.hs +9/−6
- src/Data/Color/Internal.hs +274/−11
- union-color.cabal +10/−8
src/Data/Color.hs view
@@ -3,15 +3,18 @@ module Data.Color ( -- * Alpha- Alpha, pattern AlphaWord8, pattern AlphaWord16, pattern AlphaDouble,- alphaDouble, alphaRealToFrac,+ Alpha, pattern AlphaWord8, pattern AlphaWord16, pattern AlphaWord32,+ pattern AlphaInt32, alphaInt32,+ pattern AlphaDouble, alphaDouble, alphaRealToFrac, -- * RGB- Rgb, pattern RgbWord8, pattern RgbWord16, pattern RgbDouble,- rgbDouble, rgbRealToFrac,+ Rgb, pattern RgbWord8, pattern RgbWord16, pattern RgbWord32,+ pattern RgbInt32, rgbInt32,+ pattern RgbDouble, rgbDouble, rgbRealToFrac, -- * RGBA -- ** Straight- Rgba, pattern RgbaWord8, pattern RgbaWord16, pattern RgbaDouble,- rgbaDouble,+ Rgba, pattern RgbaWord8, pattern RgbaWord16, pattern RgbaWord32,+ pattern RgbaInt32, rgbaInt32,+ pattern RgbaDouble, rgbaDouble, -- ** Premultiplied pattern RgbaPremultipliedWord8, rgbaPremultipliedWord8, pattern RgbaPremultipliedWord16, rgbaPremultipliedWord16,
src/Data/Color/Internal.hs view
@@ -4,15 +4,18 @@ module Data.Color.Internal ( -- * Alpha- Alpha(..), pattern AlphaWord8, pattern AlphaWord16, pattern AlphaDouble,- alphaDouble, alphaRealToFrac,+ Alpha(..), pattern AlphaWord8, pattern AlphaWord16, pattern AlphaWord32,+ pattern AlphaInt32, alphaInt32,+ pattern AlphaDouble, alphaDouble, alphaRealToFrac, -- * RGB- Rgb(..), pattern RgbWord8, pattern RgbWord16, pattern RgbDouble,- rgbDouble, rgbRealToFrac,+ Rgb(..), pattern RgbWord8, pattern RgbWord16, pattern RgbWord32,+ pattern RgbInt32, rgbInt32,+ pattern RgbDouble, rgbDouble, rgbRealToFrac, -- * RGBA -- ** Straight- Rgba(..), pattern RgbaWord8, pattern RgbaWord16, pattern RgbaDouble,- rgbaDouble,+ Rgba(..), pattern RgbaWord8, pattern RgbaWord16, pattern RgbaWord32,+ pattern RgbaInt32, rgbaInt32,+ pattern RgbaDouble, rgbaDouble, -- ** Premultiplied pattern RgbaPremultipliedWord8, rgbaPremultipliedWord8, pattern RgbaPremultipliedWord16, rgbaPremultipliedWord16,@@ -23,9 +26,13 @@ rgbaRealToFrac ) where import Data.Bits+import Data.Bool import Data.Word+import Data.Int -data Alpha d = AlphaWord8_ Word8 | AlphaWord16_ Word16 | AlphaDouble_ d+data Alpha d+ = AlphaWord8_ Word8 | AlphaWord16_ Word16 | AlphaWord32_ Word32+ | AlphaInt32_ Int32 | AlphaDouble_ d deriving Show {-# COMPLETE AlphaWord8 #-}@@ -38,6 +45,8 @@ fromAlphaWord8 = \case AlphaWord8_ a -> a AlphaWord16_ a -> fromIntegral $ a `shiftR` 8+ AlphaWord32_ a -> fromIntegral $ a `shiftR` 24+ AlphaInt32_ a -> fromIntegral $ a `shiftR` 23 AlphaDouble_ a -> cDoubleToWord8 a {-# COMPLETE AlphaWord16 #-}@@ -50,8 +59,44 @@ fromAlphaWord16 = \case AlphaWord8_ (fromIntegral -> a) -> a `shiftL` 8 .|. a AlphaWord16_ a -> a+ AlphaWord32_ a -> fromIntegral $ a `shiftR` 16+ AlphaInt32_ a -> fromIntegral $ a `shiftR` 15 AlphaDouble_ a -> cDoubleToWord16 a +{-# COMPLETE AlphaWord32 #-}++pattern AlphaWord32 :: RealFrac d => Word32 -> Alpha d+pattern AlphaWord32 a <- (fromAlphaWord32 -> a)+ where AlphaWord32 = AlphaWord32_++fromAlphaWord32 :: RealFrac d => Alpha d -> Word32+fromAlphaWord32 = \case+ AlphaWord8_ (fromIntegral -> a) ->+ a `shiftL` 24 .|. a `shiftL` 16 .|. a `shiftL` 8 .|. a+ AlphaWord16_ (fromIntegral -> a) -> a `shiftL` 16 .|. a+ AlphaWord32_ a -> a+ AlphaInt32_ (fromIntegral -> a) -> a `shiftL` 1 .|. a `shiftR` 30+ AlphaDouble_ a -> cDoubleToWord32 a++{-# COMPLETE AlphaInt32 #-}++pattern AlphaInt32 :: RealFrac d => Int32 -> Alpha d+pattern AlphaInt32 a <- (fromAlphaInt32 -> a)++alphaInt32 :: Int32 -> Maybe (Alpha d)+alphaInt32 a = bool Nothing (Just $ AlphaInt32_ a) (a >= 0)++fromAlphaInt32 :: RealFrac d => Alpha d -> Int32+fromAlphaInt32 = \case+ AlphaWord8_ (fromIntegral -> a) ->+ a `shiftL` 23 .|. a `shiftL` 15 .|.+ a `shiftL` 7 .|. a `shiftR` 1+ AlphaWord16_ (fromIntegral -> a) ->+ a `shiftL` 15 .|. a `shiftR` 1+ AlphaWord32_ a -> fromIntegral $ a `shiftR` 1+ AlphaInt32_ a -> a+ AlphaDouble_ a -> cDoubleToInt32 a+ {-# COMPLETE AlphaDouble #-} pattern AlphaDouble :: Fractional d => d -> (Alpha d)@@ -61,6 +106,8 @@ fromAlphaDouble = \case AlphaWord8_ a -> word8ToCDouble a AlphaWord16_ a -> word16ToCDouble a+ AlphaWord32_ a -> word32ToCDouble a+ AlphaInt32_ a -> int32ToCDouble a AlphaDouble_ a -> a alphaDouble :: (Ord d, Num d) => d -> Maybe (Alpha d)@@ -72,11 +119,15 @@ alphaRealToFrac = \case AlphaWord8_ a -> AlphaWord8_ a AlphaWord16_ a -> AlphaWord16_ a+ AlphaWord32_ a -> AlphaWord32_ a+ AlphaInt32_ a -> AlphaInt32_ a AlphaDouble_ a -> AlphaDouble_ $ realToFrac a data Rgb d = RgbWord8_ Word8 Word8 Word8 | RgbWord16_ Word16 Word16 Word16+ | RgbWord32_ Word32 Word32 Word32+ | RgbInt32_ Int32 Int32 Int32 | RgbDouble_ d d d deriving Show @@ -93,6 +144,14 @@ fromIntegral $ r `shiftR` 8, fromIntegral $ g `shiftR` 8, fromIntegral $ b `shiftR` 8 )+ RgbWord32_ r g b -> (+ fromIntegral $ r `shiftR` 24,+ fromIntegral $ g `shiftR` 24,+ fromIntegral $ b `shiftR` 24 )+ RgbInt32_ r g b -> (+ fromIntegral $ r `shiftR` 23,+ fromIntegral $ g `shiftR` 23,+ fromIntegral $ b `shiftR` 23 ) RgbDouble_ r g b -> let [r', g', b'] = cDoubleToWord8 <$> [r, g, b] in (r', g', b') @@ -107,9 +166,70 @@ RgbWord8_ (fromIntegral -> r) (fromIntegral -> g) (fromIntegral -> b) -> (r `shiftL` 8 .|. r, g `shiftL` 8 .|. g, b `shiftL` 8 .|. b) RgbWord16_ r g b -> (r, g, b)+ RgbWord32_ r g b -> (+ fromIntegral $ r `shiftR` 16,+ fromIntegral $ g `shiftR` 16,+ fromIntegral $ b `shiftR` 16 )+ RgbInt32_ r g b -> (+ fromIntegral $ r `shiftR` 15,+ fromIntegral $ g `shiftR` 15,+ fromIntegral $ b `shiftR` 15 ) RgbDouble_ r g b -> let [r', g', b'] = cDoubleToWord16 <$> [r, g, b] in (r', g', b') +{-# COMPLETE RgbWord32 #-}++pattern RgbWord32 :: RealFrac d => Word32 -> Word32 -> Word32 -> Rgb d+pattern RgbWord32 r g b <- (fromRgbWord32 -> (r, g, b))+ where RgbWord32 = RgbWord32_++fromRgbWord32 :: RealFrac d => Rgb d -> (Word32, Word32, Word32)+fromRgbWord32 = \case+ RgbWord8_ (fromIntegral -> r) (fromIntegral -> g) (fromIntegral -> b) ->+ ( r `shiftL` 24 .|. r `shiftL` 16 .|. r `shiftL` 8 .|. r,+ g `shiftL` 24 .|. g `shiftL` 16 .|. g `shiftL` 8 .|. g,+ b `shiftL` 24 .|. b `shiftL` 16 .|. b `shiftL` 8 .|. b )+ RgbWord16_ (fromIntegral -> r) (fromIntegral -> g) (fromIntegral -> b)+ -> ( r `shiftL` 16 .|. r, g `shiftL` 16 .|. g,+ b `shiftL` 16 .|. b )+ RgbWord32_ r g b -> (r, g, b)+ RgbInt32_ (fromIntegral -> r) (fromIntegral -> g) (fromIntegral -> b) ->+ ( r `shiftL` 1 .|. r `shiftR` 30,+ g `shiftL` 1 .|. g `shiftR` 30,+ b `shiftL` 1 .|. b `shiftR` 30 )+ RgbDouble_ r g b ->+ let [r', g', b'] = cDoubleToWord32 <$> [r, g, b] in (r', g', b')++{-# COMPLETE RgbInt32 #-}++pattern RgbInt32 :: RealFrac d => Int32 -> Int32 -> Int32 -> Rgb d+pattern RgbInt32 r g b <- (fromRgbInt32 -> (r, g, b))++rgbInt32 :: Int32 -> Int32 -> Int32 -> Maybe (Rgb d)+rgbInt32 r g b+ | r < 0 || g < 0 || b < 0 = Nothing+ | otherwise = Just $ RgbInt32_ r g b++fromRgbInt32 :: RealFrac d => Rgb d -> (Int32, Int32, Int32)+fromRgbInt32 = \case+ RgbWord8_ (fromIntegral -> r) (fromIntegral -> g) (fromIntegral -> b) ->+ ( r `shiftL` 23 .|. r `shiftL` 15 .|.+ r `shiftL` 7 .|. r `shiftR` 1,+ g `shiftL` 23 .|. g `shiftL` 15 .|.+ g `shiftL` 7 .|. g `shiftR` 1,+ b `shiftL` 23 .|. b `shiftL` 15 .|.+ b `shiftL` 7 .|. b `shiftR` 1 )+ RgbWord16_ (fromIntegral -> r) (fromIntegral -> g) (fromIntegral -> b) ->+ ( r `shiftL` 15 .|. r `shiftR` 1,+ g `shiftL` 15 .|. g `shiftR` 1,+ b `shiftL` 15 .|. b `shiftR` 1 )+ RgbWord32_ r g b -> (+ fromIntegral $ r `shiftR` 1, fromIntegral $ g `shiftR` 1,+ fromIntegral $ b `shiftR` 1 )+ RgbInt32_ r g b -> (r, g, b)+ RgbDouble_ r g b ->+ let [r', g', b'] = cDoubleToInt32 <$> [r, g, b] in (r', g', b')+ {-# COMPLETE RgbDouble #-} pattern RgbDouble :: Fractional d => d -> d -> d -> (Rgb d)@@ -121,6 +241,10 @@ let [r', g', b'] = word8ToCDouble <$> [r, g, b] in (r', g', b') RgbWord16_ r g b -> let [r', g', b'] = word16ToCDouble <$> [r, g, b] in (r', g', b')+ RgbWord32_ r g b ->+ let [r', g', b'] = word32ToCDouble <$> [r, g, b] in (r', g', b')+ RgbInt32_ r g b ->+ let [r', g', b'] = int32ToCDouble <$> [r, g, b] in (r', g', b') RgbDouble_ r g b -> (r, g, b) rgbDouble :: (Ord d, Num d) => d -> d -> d -> Maybe (Rgb d)@@ -132,12 +256,16 @@ rgbRealToFrac = \case RgbWord8_ r g b -> RgbWord8_ r g b RgbWord16_ r g b -> RgbWord16_ r g b+ RgbWord32_ r g b -> RgbWord32_ r g b+ RgbInt32_ r g b -> RgbInt32_ r g b RgbDouble_ r g b -> RgbDouble_ r' g' b' where [r', g', b'] = realToFrac <$> [r, g, b] data Rgba d = RgbaWord8_ Word8 Word8 Word8 Word8 | RgbaWord16_ Word16 Word16 Word16 Word16+ | RgbaWord32_ Word32 Word32 Word32 Word32+ | RgbaInt32_ Int32 Int32 Int32 Int32 | RgbaDouble_ d d d d | RgbaPremultipliedWord8_ Word8 Word8 Word8 Word8 | RgbaPremultipliedWord16_ Word16 Word16 Word16 Word16@@ -154,10 +282,14 @@ fromRgbaWord8 = \case RgbaWord8_ r g b a -> (r, g, b, a) RgbaWord16_ r g b a -> (- fromIntegral $ r `shiftR` 8,- fromIntegral $ g `shiftR` 8,- fromIntegral $ b `shiftR` 8,- fromIntegral $ a `shiftR` 8 )+ fromIntegral $ r `shiftR` 8, fromIntegral $ g `shiftR` 8,+ fromIntegral $ b `shiftR` 8, fromIntegral $ a `shiftR` 8 )+ RgbaWord32_ r g b a -> (+ fromIntegral $ r `shiftR` 24, fromIntegral $ g `shiftR` 24,+ fromIntegral $ b `shiftR` 24, fromIntegral $ a `shiftR` 24 )+ RgbaInt32_ r g b a -> (+ fromIntegral $ r `shiftR` 23, fromIntegral $ g `shiftR` 23,+ fromIntegral $ b `shiftR` 23, fromIntegral $ a `shiftR` 23 ) RgbaDouble_ r g b a -> (r', g', b', a') where [r', g', b', a'] = cDoubleToWord8 <$> [r, g, b, a] RgbaPremultipliedWord8_ r g b a -> (r', g', b', a')@@ -186,6 +318,12 @@ r `shiftL` 8 .|. r, g `shiftL` 8 .|. g, b `shiftL` 8 .|. b, a `shiftL` 8 .|. a) RgbaWord16_ r g b a -> (r, g, b, a)+ RgbaWord32_ r g b a -> (+ fromIntegral $ r `shiftR` 16, fromIntegral $ g `shiftR` 16,+ fromIntegral $ b `shiftR` 16, fromIntegral $ a `shiftR` 16 )+ RgbaInt32_ r g b a -> (+ fromIntegral $ r `shiftR` 15, fromIntegral $ g `shiftR` 15,+ fromIntegral $ b `shiftR` 15, fromIntegral $ a `shiftR` 15 ) RgbaDouble_ r g b a -> let [r', g', b', a'] = cDoubleToWord16 <$> [r, g, b, a] in (r', g', b', a') RgbaPremultipliedWord8_ r g b a -> (@@ -199,6 +337,109 @@ where [r', g', b', a'] = cDoubleToWord16 <$> unPremultipliedDouble (r, g, b, a) +{-# COMPLETE RgbaWord32 #-}++pattern RgbaWord32 :: RealFrac d =>+ Word32 -> Word32 -> Word32 -> Word32 -> Rgba d+pattern RgbaWord32 r g b a <- (fromRgbaWord32 -> (r, g, b, a))+ where RgbaWord32 = RgbaWord32_++fromRgbaWord32 :: RealFrac d => Rgba d -> (Word32, Word32, Word32, Word32)+fromRgbaWord32 = \case+ RgbaWord8_+ (fromIntegral -> r) (fromIntegral -> g)+ (fromIntegral -> b) (fromIntegral -> a) -> (+ r `shiftL` 24 .|. r `shiftL` 16 .|. r `shiftL` 8 .|. r,+ g `shiftL` 24 .|. g `shiftL` 16 .|. g `shiftL` 8 .|. g,+ b `shiftL` 24 .|. b `shiftL` 16 .|. b `shiftL` 8 .|. b,+ a `shiftL` 24 .|. a `shiftL` 16 .|. a `shiftL` 8 .|. a )+ RgbaWord16_+ (fromIntegral -> r) (fromIntegral -> g)+ (fromIntegral -> b) (fromIntegral -> a) -> (+ r `shiftL` 16 .|. r, g `shiftL` 16 .|. g,+ b `shiftL` 16 .|. b, a `shiftL` 16 .|. a )+ RgbaWord32_ r g b a -> (r, g, b, a)+ RgbaInt32_+ (fromIntegral -> r) (fromIntegral -> g)+ (fromIntegral -> b) (fromIntegral -> a) -> (+ r `shiftL` 1 .|. r `shiftR` 30, g `shiftL` 1 .|. g `shiftR` 30,+ b `shiftL` 1 .|. b `shiftR` 30, a `shiftL` 1 .|. a `shiftR` 30 )+ RgbaDouble_ r g b a -> let+ [r', g', b', a'] = cDoubleToWord32 <$> [r, g, b, a] in+ (r', g', b', a')+ RgbaPremultipliedWord8_ r g b a -> (+ r' `shiftL` 24 .|. r' `shiftL` 16 .|. r' `shiftL` 8 .|. r',+ g' `shiftL` 24 .|. g' `shiftL` 16 .|. g' `shiftL` 8 .|. g',+ b' `shiftL` 24 .|. b' `shiftL` 16 .|. b' `shiftL` 8 .|. b',+ a' `shiftL` 24 .|. a' `shiftL` 16 .|. a' `shiftL` 8 .|. a' )+ where [r', g', b', a'] =+ fromIntegral <$> unPremultipliedWord8 (r, g, b, a)+ RgbaPremultipliedWord16_ r g b a -> (+ r' `shiftL` 16 .|. r', g' `shiftL` 16 .|. g',+ b' `shiftL` 16 .|. b', a' `shiftL` 16 .|. a' )+ where [r', g', b', a'] =+ fromIntegral <$> unPremultipliedWord16 (r, g, b, a)+ RgbaPremultipliedDouble_ r g b a -> (r', g', b', a')+ where [r', g', b', a'] =+ cDoubleToWord32 <$> unPremultipliedDouble (r, g, b, a)++{-# COMPLETE RgbaInt32 #-}++pattern RgbaInt32 :: RealFrac d => Int32 -> Int32 -> Int32 -> Int32 -> Rgba d+pattern RgbaInt32 r g b a <- (fromRgbaInt32 -> (r, g, b, a))++rgbaInt32 :: Int32 -> Int32 -> Int32 -> Int32 -> Maybe (Rgba d)+rgbaInt32 r g b a+ | r < 0 || g < 0 || b < 0 || a < 0 = Nothing+ | otherwise = Just $ RgbaInt32_ r g b a++fromRgbaInt32 :: RealFrac d => Rgba d -> (Int32, Int32, Int32, Int32)+fromRgbaInt32 = \case+ RgbaWord8_+ (fromIntegral -> r) (fromIntegral -> g)+ (fromIntegral -> b) (fromIntegral -> a) -> (+ r `shiftL` 23 .|. r `shiftL` 15 .|.+ r `shiftL` 7 .|. r `shiftR` 1,+ g `shiftL` 23 .|. g `shiftL` 15 .|.+ g `shiftL` 7 .|. g `shiftR` 1,+ b `shiftL` 23 .|. b `shiftL` 15 .|.+ b `shiftL` 7 .|. b `shiftR` 1,+ a `shiftL` 23 .|. a `shiftL` 15 .|.+ a `shiftL` 7 .|. a `shiftR` 1 )+ RgbaWord16_+ (fromIntegral -> r) (fromIntegral -> g)+ (fromIntegral -> b) (fromIntegral -> a) -> (+ r `shiftL` 15 .|. r `shiftR` 1, g `shiftL` 15 .|. g `shiftR` 1,+ b `shiftL` 15 .|. b `shiftR` 1, a `shiftL` 15 .|. a `shiftR` 1 )+ RgbaWord32_ r g b a -> (+ fromIntegral $ r `shiftR` 1, fromIntegral $ g `shiftR` 1,+ fromIntegral $ b `shiftR` 1, fromIntegral $ a `shiftR` 1 )+ RgbaInt32_ r g b a -> (r, g, b, a)+ RgbaDouble_ r g b a -> let+ [r', g', b', a'] = cDoubleToInt32 <$> [r, g, b, a] in+ (r', g', b', a')+ RgbaPremultipliedWord8_ r g b a -> (+ r' `shiftL` 23 .|. r' `shiftL` 15 .|.+ r' `shiftL` 7 .|. r' `shiftR` 1,+ g' `shiftL` 23 .|. g' `shiftL` 15 .|.+ g' `shiftL` 7 .|. g' `shiftR` 1,+ b' `shiftL` 23 .|. b' `shiftL` 15 .|.+ b' `shiftL` 7 .|. b' `shiftR` 1,+ a' `shiftL` 23 .|. a' `shiftL` 15 .|.+ a' `shiftL` 7 .|. a' `shiftR` 1 )+ where [r', g', b', a'] =+ fromIntegral <$> unPremultipliedWord8 (r, g, b, a)+ RgbaPremultipliedWord16_ r g b a -> (+ r' `shiftL` 15 .|. r' `shiftR` 1,+ g' `shiftL` 15 .|. g' `shiftR` 1,+ b' `shiftL` 15 .|. b' `shiftR` 1,+ a' `shiftL` 15 .|. a' `shiftR` 1 )+ where [r', g', b', a'] =+ fromIntegral <$> unPremultipliedWord16 (r, g, b, a)+ RgbaPremultipliedDouble_ r g b a -> (r', g', b', a')+ where [r', g', b', a'] =+ cDoubleToInt32 <$> unPremultipliedDouble (r, g, b, a)+ {-# COMPLETE RgbaDouble #-} pattern RgbaDouble :: (Eq d, Fractional d) => d -> d -> d -> d -> Rgba d@@ -210,6 +451,10 @@ where [r', g', b', a'] = word8ToCDouble <$> [r, g, b, a] RgbaWord16_ r g b a -> (r', g', b', a') where [r', g', b', a'] = word16ToCDouble <$> [r, g, b, a]+ RgbaWord32_ r g b a -> (r', g', b', a')+ where [r', g', b', a'] = word32ToCDouble <$> [r, g, b, a]+ RgbaInt32_ r g b a -> (r', g', b', a')+ where [r', g', b', a'] = int32ToCDouble <$> [r, g, b, a] RgbaDouble_ r g b a -> (r, g, b, a) RgbaPremultipliedWord8_ r g b a -> (r', g', b', a') where [r', g', b', a'] =@@ -230,6 +475,8 @@ fromRgba = \case RgbaWord8_ r g b a -> (RgbWord8_ r g b, AlphaWord8_ a) RgbaWord16_ r g b a -> (RgbWord16_ r g b, AlphaWord16_ a)+ RgbaWord32_ r g b a -> (RgbWord32_ r g b, AlphaWord32_ a)+ RgbaInt32_ r g b a -> (RgbInt32_ r g b, AlphaInt32_ a) RgbaDouble_ r g b a -> (RgbDouble_ r g b, AlphaDouble_ a) RgbaPremultipliedWord8_ r g b a -> (RgbWord8_ r' g' b', AlphaWord8_ a') where [r', g', b', a'] = unPremultipliedWord8 (r, g, b, a)@@ -241,12 +488,16 @@ toRgba :: RealFrac d => Rgb d -> Alpha d -> Rgba d toRgba (RgbWord8_ r g b) (AlphaWord8 a) = RgbaWord8 r g b a toRgba (RgbWord16_ r g b) (AlphaWord16 a) = RgbaWord16 r g b a+toRgba (RgbWord32_ r g b) (AlphaWord32 a) = RgbaWord32 r g b a+toRgba (RgbInt32_ r g b) (AlphaInt32 a) = RgbaInt32_ r g b a toRgba (RgbDouble_ r g b) (AlphaDouble a) = RgbaDouble_ r g b a rgbaRealToFrac :: (Real d, Fractional d') => Rgba d -> Rgba d' rgbaRealToFrac = \case RgbaWord8_ r g b a -> RgbaWord8_ r g b a RgbaWord16_ r g b a -> RgbaWord16_ r g b a+ RgbaWord32_ r g b a -> RgbaWord32_ r g b a+ RgbaInt32_ r g b a -> RgbaInt32_ r g b a RgbaDouble_ r g b a -> RgbaDouble_ r' g' b' a' where [r', g', b', a'] = realToFrac <$> [r, g, b, a] RgbaPremultipliedWord8_ r g b a -> RgbaPremultipliedWord8_ r g b a@@ -260,11 +511,23 @@ cDoubleToWord16 :: RealFrac d => d -> Word16 cDoubleToWord16 = round . (* 0xffff) +cDoubleToWord32 :: RealFrac d => d -> Word32+cDoubleToWord32 = round . (* 0xffffffff)++cDoubleToInt32 :: RealFrac d => d -> Int32+cDoubleToInt32 = round . (* 0x7fffffff)+ word8ToCDouble :: Fractional d => Word8 -> d word8ToCDouble = (/ 0xff) . fromIntegral word16ToCDouble :: Fractional d => Word16 -> d word16ToCDouble = (/ 0xffff) . fromIntegral++word32ToCDouble :: Fractional d => Word32 -> d+word32ToCDouble = (/ 0xffffffff) . fromIntegral++int32ToCDouble :: Fractional d => Int32 -> d+int32ToCDouble = (/ 0x7fffffff) . fromIntegral from0to1 :: (Ord d, Num d) => d -> Bool from0to1 n = 0 <= n && n <= 1
union-color.cabal view
@@ -5,13 +5,15 @@ -- see: https://github.com/sol/hpack name: union-color-version: 0.1.1.0-description: Please see the README on GitHub at <https://github.com/githubuser/union-color#readme>-homepage: https://github.com/githubuser/union-color#readme-bug-reports: https://github.com/githubuser/union-color/issues-author: Author name here-maintainer: example@example.com-copyright: 2021 Author name here+version: 0.1.2.0+synopsis: Unify verious color formats+description: Please see the README on GitHub at <https://github.com/YoshikuniJujo/union-color#readme>+category: data, graphics+homepage: https://github.com/YoshikuniJujo/union-color#readme+bug-reports: https://github.com/YoshikuniJujo/union-color/issues+author: Yoshikuni Jujo+maintainer: yoshikuni.jujo.pc@gmail.com+copyright: 2022 Yoshikuni Jujo license: BSD3 license-file: LICENSE build-type: Simple@@ -21,7 +23,7 @@ source-repository head type: git- location: https://github.com/githubuser/union-color+ location: https://github.com/YoshikuniJujo/union-color library exposed-modules: