macos-corelibs-0.0.1.0: src/MacSdk/Framework/CoreGraphics/Event/Mask.hsc
-- | Constants and ADTs to define a mask that identifies the set of Quartz
-- events to be observed in an event tap.
module MacSdk.Framework.CoreGraphics.Event.Mask where
#include <Carbon/Carbon.h>
import Data.Word
import Data.Bits
import MacSdk.Framework.CoreGraphics.Event.Type
foreign import ccall unsafe event_type_to_mask_bit :: Word32 -> Word64
type CGEventMask = Word64
newtype EventMask = EventMask { getEventMask :: Word64 }
instance Semigroup EventMask where
EventMask m1 <> EventMask m2 = EventMask (m1 .|. m2)
instance Monoid EventMask where
mempty = EventMask 0
mappend = (<>)
data QuartzEvents = AllEvents | EventList [EventType]
allEvents :: Word64
allEvents = #const kCGEventMaskForAllEvents
toMask :: QuartzEvents -> EventMask
toMask AllEvents = EventMask allEvents
toMask (EventList tys) =
mconcat (fmap (EventMask . event_type_to_mask_bit . toEventTypeCode) tys)