{-# LANGUAGE ForeignFunctionInterface #-} -- | -- Module : Mac.QuickDraw -- Maintainer : Yakov Z <> -- Stability : experimental -- module Mac.QuickDraw ( -- * QuickDraw GDHandle, PixMap(..), --TO-DO hide PixMapHandle, -- ** Hiding and Showing Cursors initCursor, -- ** Getting the Available Graphics Devices getMainDevice, -- ** Managing and Offscreen Graphics World's Pixel Image getPixBaseAddr, lockPixels, -- ** Miscellaneous getPortPixMap, getPixRowBytes ) where import Foreign.Ptr import Foreign.C.Types import Foreign.Storable import Mac.Carbon #include type GDHandle = Ptr () -- | Contains information about the dimensions and contents of a pixel image, as well as -- its storage format, depth, resolution, and color usage. -- -- For an onscreen pixel image, 'baseAddr' is a pointer to the first byte of the image. For optimal performance, -- this should be multiple of 4. -- -- The 'baseAddr' of the 'PixMap' for an /offscreen/ graphics world contains a handle instead of a pointer. -- -- Your application should never directly access the 'baseAddr' for an /offscreen/ graphics world. -- -- -- data PixMap = PixMap { baseAddr :: Ptr (), rowBytes :: CShort } instance Storable PixMap where sizeOf _ = #const sizeof(PixMap) alignment _ = alignment (undefined :: CInt) -- ??? peek p = do baseAddr' <- (#peek PixMap, baseAddr) p rowBytes' <- (#peek PixMap, rowBytes) p return PixMap { baseAddr = baseAddr', rowBytes = rowBytes' } type PixMapPtr = Ptr PixMap type PixMapHandle = Ptr PixMapPtr -- | Sets the cursor to the standard arrow and makes the cursor visible. foreign import ccall unsafe "InitCursor" initCursor :: IO () -- | Obtains a handle to the GDevice structure for the main screen. -- -- Deprecated in Mac OS X v10.4 foreign import ccall unsafe "GetMainDevice" getMainDevice :: IO GDHandle foreign import ccall unsafe "GetPixBaseAddr" getPixBaseAddr :: PixMapHandle -> IO (Ptr ()) foreign import ccall unsafe "LockPixels" lockPixels :: PixMapHandle -> IO Boolean foreign import ccall unsafe "GetPortPixMap" getPortPixMap :: CGrafPtr -> IO PixMapHandle foreign import ccall unsafe "GetPixRowBytes" getPixRowBytes :: PixMapHandle -> IO CInt