{-# LINE 2 "./Graphics/UI/Gtk/Gdk/Keys.chs" #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LINE 3 "./Graphics/UI/Gtk/Gdk/Keys.chs" #-}
module Graphics.UI.Gtk.Gdk.Keys (
KeyVal,
KeyCode,
keyName,
keyFromName,
keyToChar,
keyvalName,
keyvalFromName,
keyvalToChar,
keyvalConvertCase,
keyvalToUpper,
keyvalToLower,
keyvalIsUpper,
keyvalIsLower,
) where
import Control.Monad (liftM)
import System.Glib.FFI
import System.Glib.UTFString
{-# LINE 55 "./Graphics/UI/Gtk/Gdk/Keys.chs" #-}
type KeyVal = Word32
type KeyCode = Word16
keyName :: KeyVal -> DefaultGlibString
keyName k = unsafePerformIO $ keyvalName k
keyFromName :: DefaultGlibString -> KeyVal
keyFromName k = unsafePerformIO $ keyvalFromName k
keyToChar ::
KeyVal
-> Maybe Char
keyToChar k = unsafePerformIO $ keyvalToChar k
keyvalName :: KeyVal -> IO DefaultGlibString
keyvalName keyval = do
strPtr <- gdk_keyval_name (fromIntegral keyval)
if strPtr==nullPtr then return "" else peekUTFString strPtr
keyvalFromName :: DefaultGlibString -> IO KeyVal
keyvalFromName keyvalName =
liftM fromIntegral $
withUTFString keyvalName $ \keyvalNamePtr ->
gdk_keyval_from_name
{-# LINE 90 "./Graphics/UI/Gtk/Gdk/Keys.chs" #-}
keyvalNamePtr
keyvalToChar :: KeyVal -> IO (Maybe Char)
keyvalToChar keyval =
gdk_keyval_to_unicode (fromIntegral keyval)
>>= \code -> if code == 0 then return Nothing
else return $ Just $ toEnum $ fromIntegral code
keyvalConvertCase :: KeyVal
-> (KeyVal, KeyVal)
keyvalConvertCase keyval =
unsafePerformIO $
alloca $ \ lowerPtr ->
alloca $ \ upperPtr -> do
gdk_keyval_convert_case
{-# LINE 109 "./Graphics/UI/Gtk/Gdk/Keys.chs" #-}
(fromIntegral keyval)
lowerPtr
upperPtr
lower <- peek lowerPtr
upper <- peek upperPtr
return (fromIntegral lower, fromIntegral upper)
keyvalToUpper :: KeyVal
-> KeyVal
keyvalToUpper keyval =
unsafePerformIO $
liftM fromIntegral $
gdk_keyval_to_upper
{-# LINE 124 "./Graphics/UI/Gtk/Gdk/Keys.chs" #-}
(fromIntegral keyval)
keyvalToLower :: KeyVal
-> KeyVal
keyvalToLower keyval =
unsafePerformIO $
liftM fromIntegral $
gdk_keyval_to_lower
{-# LINE 134 "./Graphics/UI/Gtk/Gdk/Keys.chs" #-}
(fromIntegral keyval)
keyvalIsLower :: KeyVal
-> Bool
keyvalIsLower keyval =
unsafePerformIO $
liftM toBool $
gdk_keyval_is_lower
{-# LINE 143 "./Graphics/UI/Gtk/Gdk/Keys.chs" #-}
(fromIntegral keyval)
keyvalIsUpper :: KeyVal
-> Bool
keyvalIsUpper keyval =
unsafePerformIO $
liftM toBool $
gdk_keyval_is_upper
{-# LINE 152 "./Graphics/UI/Gtk/Gdk/Keys.chs" #-}
(fromIntegral keyval)
foreign import ccall safe "gdk_keyval_name"
gdk_keyval_name :: (CUInt -> (IO (Ptr CChar)))
foreign import ccall safe "gdk_keyval_from_name"
gdk_keyval_from_name :: ((Ptr CChar) -> (IO CUInt))
foreign import ccall safe "gdk_keyval_to_unicode"
gdk_keyval_to_unicode :: (CUInt -> (IO CUInt))
foreign import ccall safe "gdk_keyval_convert_case"
gdk_keyval_convert_case :: (CUInt -> ((Ptr CUInt) -> ((Ptr CUInt) -> (IO ()))))
foreign import ccall safe "gdk_keyval_to_upper"
gdk_keyval_to_upper :: (CUInt -> (IO CUInt))
foreign import ccall safe "gdk_keyval_to_lower"
gdk_keyval_to_lower :: (CUInt -> (IO CUInt))
foreign import ccall safe "gdk_keyval_is_lower"
gdk_keyval_is_lower :: (CUInt -> (IO CInt))
foreign import ccall safe "gdk_keyval_is_upper"
gdk_keyval_is_upper :: (CUInt -> (IO CInt))