packages feed

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 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: