packages feed

animate-preview-0.0.0: library/Animate/Preview/Color.hs

module Animate.Preview.Color where

import Linear
import Data.Word (Word8)

data Mono
  = Mono'Black
  | Mono'Gray
  | Mono'White
  deriving (Show, Eq, Enum, Bounded)

toggleMono :: Mono -> Mono
toggleMono = \case
  Mono'White -> Mono'Black
  m -> succ m

fromMono :: Mono -> (V4 Word8, V4 Word8)
fromMono = \case
  Mono'White -> (V4 0xff 0xff 0xff 0xff, V4 0xdd 0xdd 0xdd 0xff)
  Mono'Gray -> (V4 0x88 0x88 0x88 0xff, V4 0x66 0x66 0x66 0xff)
  Mono'Black -> (V4 0x22 0x22 0x22 0xff, V4 0x00 0x00 0x00 0xff)

data Color
  = Color'Red
  | Color'Green
  | Color'Blue
  | Color'Magenta
  | Color'Yellow
  | Color'Cyan
  deriving (Show, Eq, Enum, Bounded)

fromColor :: Color -> V4 Word8
fromColor = \case
  Color'Red -> V4 0xff 0x00 0x00 0xff
  Color'Green -> V4 0x00 0xff 0x00 0xff
  Color'Blue -> V4 0x00 0x00 0xff 0xff
  Color'Magenta -> V4 0xff 0x00 0xff 0xff
  Color'Yellow -> V4 0xff 0xff 0x00 0xff
  Color'Cyan -> V4 0x00 0xff 0xff 0xff

toggleColors :: Maybe Color -> Maybe Color
toggleColors Nothing = Just Color'Red
toggleColors (Just c) = case c of
    Color'Cyan -> Nothing
    _ -> Just $ succ c