{-# OPTIONS_HADDOCK ignore-exports#-}
{-# LANGUAGE DataKinds                  #-}
{-# LANGUAGE FlexibleInstances          #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE KindSignatures             #-}
{-# LANGUAGE PatternSynonyms            #-}
{-# LANGUAGE StandaloneDeriving         #-}
{-# LANGUAGE Strict                     #-}
{-# LANGUAGE TypeSynonymInstances       #-}
module Graphics.Vulkan.Types.Enum.CompositeAlphaFlagsKHR
       (VkCompositeAlphaBitmaskKHR(VkCompositeAlphaBitmaskKHR,
                                   VkCompositeAlphaFlagsKHR, VkCompositeAlphaFlagBitsKHR,
                                   VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
                                   VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
                                   VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
                                   VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR),
        VkCompositeAlphaFlagsKHR, VkCompositeAlphaFlagBitsKHR)
       where
import Data.Bits                       (Bits, FiniteBits)
import Foreign.Storable                (Storable)
import GHC.Read                        (choose, expectP)
import Graphics.Vulkan.Marshal         (FlagBit, FlagMask, FlagType)
import Graphics.Vulkan.Types.BaseTypes (VkFlags (..))
import Text.ParserCombinators.ReadPrec (prec, step, (+++))
import Text.Read                       (Read (..), parens)
import Text.Read.Lex                   (Lexeme (..))

newtype VkCompositeAlphaBitmaskKHR (a ::
                                      FlagType) = VkCompositeAlphaBitmaskKHR VkFlags
                                                  deriving (Eq, Ord, Storable)

type VkCompositeAlphaFlagsKHR = VkCompositeAlphaBitmaskKHR FlagMask

type VkCompositeAlphaFlagBitsKHR =
     VkCompositeAlphaBitmaskKHR FlagBit

pattern VkCompositeAlphaFlagBitsKHR ::
        VkFlags -> VkCompositeAlphaBitmaskKHR FlagBit

pattern VkCompositeAlphaFlagBitsKHR n =
        VkCompositeAlphaBitmaskKHR n

pattern VkCompositeAlphaFlagsKHR ::
        VkFlags -> VkCompositeAlphaBitmaskKHR FlagMask

pattern VkCompositeAlphaFlagsKHR n = VkCompositeAlphaBitmaskKHR n

deriving instance Bits (VkCompositeAlphaBitmaskKHR FlagMask)

deriving instance FiniteBits (VkCompositeAlphaBitmaskKHR FlagMask)

instance Show (VkCompositeAlphaBitmaskKHR a) where
    showsPrec _ VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR
      = showString "VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"
    showsPrec _ VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR
      = showString "VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"
    showsPrec _ VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR
      = showString "VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"
    showsPrec _ VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
      = showString "VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"
    showsPrec p (VkCompositeAlphaBitmaskKHR x)
      = showParen (p >= 11)
          (showString "VkCompositeAlphaBitmaskKHR " . showsPrec 11 x)

instance Read (VkCompositeAlphaBitmaskKHR a) where
    readPrec
      = parens
          (choose
             [("VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR",
               pure VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR),
              ("VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR",
               pure VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR),
              ("VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR",
               pure VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR),
              ("VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR",
               pure VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR)]
             +++
             prec 10
               (expectP (Ident "VkCompositeAlphaBitmaskKHR") >>
                  (VkCompositeAlphaBitmaskKHR <$> step readPrec)))

-- | bitpos = @0@
pattern VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR ::
        VkCompositeAlphaBitmaskKHR a

pattern VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR =
        VkCompositeAlphaBitmaskKHR 1

-- | bitpos = @1@
pattern VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR ::
        VkCompositeAlphaBitmaskKHR a

pattern VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR =
        VkCompositeAlphaBitmaskKHR 2

-- | bitpos = @2@
pattern VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR ::
        VkCompositeAlphaBitmaskKHR a

pattern VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR =
        VkCompositeAlphaBitmaskKHR 4

-- | bitpos = @3@
pattern VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR ::
        VkCompositeAlphaBitmaskKHR a

pattern VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR =
        VkCompositeAlphaBitmaskKHR 8