packages feed

termbox-1.1.0: src/Termbox/Internal/Mouse.hs

module Termbox.Internal.Mouse
  ( Mouse (..),
    MouseButton
      ( MouseButton,
        LeftClick,
        MiddleClick,
        RightClick,
        ReleaseClick,
        WheelDown,
        WheelUp
      ),
  )
where

import GHC.Generics (Generic)
import qualified Termbox.Bindings.Hs
import Termbox.Internal.Pos (Pos)

-- | A mouse event.
data Mouse = Mouse
  { button :: !MouseButton,
    pos :: !Pos
  }
  deriving stock (Eq, Generic, Ord, Show)

-- | A mouse button.
newtype MouseButton
  = MouseButton Termbox.Bindings.Hs.Tb_key
  deriving stock (Eq, Ord)

instance Show MouseButton where
  show = \case
    LeftClick -> "LeftClick"
    MiddleClick -> "MiddleClick"
    ReleaseClick -> "ReleaseClick"
    RightClick -> "RightClick"
    WheelDown -> "WheelDown"
    WheelUp -> "WheelUp"

pattern LeftClick :: MouseButton
pattern LeftClick = MouseButton Termbox.Bindings.Hs.TB_KEY_MOUSE_LEFT

pattern MiddleClick :: MouseButton
pattern MiddleClick = MouseButton Termbox.Bindings.Hs.TB_KEY_MOUSE_MIDDLE

pattern RightClick :: MouseButton
pattern RightClick = MouseButton Termbox.Bindings.Hs.TB_KEY_MOUSE_RIGHT

pattern ReleaseClick :: MouseButton
pattern ReleaseClick = MouseButton Termbox.Bindings.Hs.TB_KEY_MOUSE_RELEASE

pattern WheelDown :: MouseButton
pattern WheelDown = MouseButton Termbox.Bindings.Hs.TB_KEY_MOUSE_WHEEL_DOWN

pattern WheelUp :: MouseButton
pattern WheelUp = MouseButton Termbox.Bindings.Hs.TB_KEY_MOUSE_WHEEL_UP

{-# COMPLETE LeftClick, MiddleClick, ReleaseClick, RightClick, WheelDown, WheelUp #-}