1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
-----------------------------------------------------------------------------
-- Module : Graphics.X11.Xrender
-- Copyright : Clemens Fruhwirth <clemens@endorphin.org> 2007
--
-- Haskell bindings for the Xrender extension.
--
-----------------------------------------------------------------------------
module Graphics.X11.Xrender
where
import Graphics.X11
import Graphics.X11.Xlib.Types
import Foreign
import Foreign.C
import Foreign.C.Types
import Foreign.Ptr
import Foreign.Storable( Storable(..) )
#include <X11/extensions/Xrender.h>
peekCUShort :: Ptr a -> CInt -> IO Int
peekCUShort ptr off = do
v <- peekByteOff ptr (fromIntegral off)
return (fromIntegral (v::CUShort))
pokeCUShort :: Ptr a -> CInt -> Int -> IO ()
pokeCUShort ptr off v =
pokeByteOff ptr (fromIntegral off) (fromIntegral v::CUShort)
peekCShort :: Ptr a -> CInt -> IO Int
peekCShort ptr off = do
v <- peekByteOff ptr (fromIntegral off)
return (fromIntegral (v::CShort))
pokeCShort :: Ptr a -> CInt -> Int -> IO ()
pokeCShort ptr off v =
pokeByteOff ptr (fromIntegral off) (fromIntegral v::CShort)
data XRenderColor = XRenderColor {
xrendercolor_red :: Int,
xrendercolor_green :: Int,
xrendercolor_blue :: Int,
xrendercolor_alpha :: Int
}
instance Storable XRenderColor where
sizeOf _ = #{size XRenderColor}
alignment _ = alignment (undefined::CInt)
peek p = do
red <- peekCUShort p #{offset XRenderColor, red}
blue <- peekCUShort p #{offset XRenderColor, blue}
green <- peekCUShort p #{offset XRenderColor, green}
alpha <- peekCUShort p #{offset XRenderColor, alpha}
return (XRenderColor red blue green alpha)
poke p (XRenderColor red blue green alpha) = do
pokeCUShort p #{offset XRenderColor,red} red
pokeCUShort p #{offset XRenderColor,blue} blue
pokeCUShort p #{offset XRenderColor,green} green
pokeCUShort p #{offset XRenderColor,alpha} alpha
data XGlyphInfo = XGlyphInfo {
xglyphinfo_width :: Int,
xglyphinfo_height :: Int,
xglyphinfo_x :: Int,
xglyphinfo_y :: Int,
xglyphinfo_xOff :: Int,
xglyphinfo_yOff :: Int
}
instance Storable XGlyphInfo where
sizeOf _ = #{size XGlyphInfo}
alignment _ = alignment (undefined::CInt)
peek p = do
width <- peekCUShort p #{offset XGlyphInfo, width}
height <- peekCUShort p #{offset XGlyphInfo, height}
x <- peekCShort p #{offset XGlyphInfo, x}
y <- peekCShort p #{offset XGlyphInfo, y}
xOff <- peekCShort p #{offset XGlyphInfo, xOff}
yOff <- peekCShort p #{offset XGlyphInfo, yOff}
return (XGlyphInfo width height x y xOff yOff)
poke p (XGlyphInfo width height x y xOff yOff) = do
pokeCUShort p #{offset XGlyphInfo,width} width
pokeCUShort p #{offset XGlyphInfo,height} height
pokeCShort p #{offset XGlyphInfo,x} x
pokeCShort p #{offset XGlyphInfo,y} y
pokeCShort p #{offset XGlyphInfo,xOff} xOff
pokeCShort p #{offset XGlyphInfo,yOff} yOff
data XRenderDirectFormat = XRenderDirectFormat {
xrenderdirectformat_red :: Int,
xrenderdirectformat_redMask :: Int,
xrenderdirectformat_green :: Int,
xrenderdirectformat_greenMask :: Int,
xrenderdirectformat_blue :: Int,
xrenderdirectformat_blueMask :: Int,
xrenderdirectformat_alpha :: Int,
xrenderdirectformat_alphaMask :: Int
}
instance Storable XRenderDirectFormat where
sizeOf _ = #{size XRenderDirectFormat}
alignment _ = alignment (undefined::CInt)
peek p = do
red <- peekCShort p #{offset XRenderDirectFormat, red}
redMask <- peekCShort p #{offset XRenderDirectFormat, redMask}
green <- peekCShort p #{offset XRenderDirectFormat, green}
greenMask <- peekCShort p #{offset XRenderDirectFormat, greenMask}
blue <- peekCShort p #{offset XRenderDirectFormat, blue}
blueMask <- peekCShort p #{offset XRenderDirectFormat, blueMask}
alpha <- peekCShort p #{offset XRenderDirectFormat, alpha}
alphaMask <- peekCShort p #{offset XRenderDirectFormat, alphaMask}
return (XRenderDirectFormat red redMask green greenMask blue blueMask alpha alphaMask)
poke p (XRenderDirectFormat red redMask green greenMask blue blueMask alpha alphaMask) = do
pokeCShort p #{offset XRenderDirectFormat,red} red
pokeCShort p #{offset XRenderDirectFormat,redMask} redMask
pokeCShort p #{offset XRenderDirectFormat,blue} blue
pokeCShort p #{offset XRenderDirectFormat,blueMask} blueMask
pokeCShort p #{offset XRenderDirectFormat,green} green
pokeCShort p #{offset XRenderDirectFormat,greenMask} greenMask
pokeCShort p #{offset XRenderDirectFormat,alpha} alpha
pokeCShort p #{offset XRenderDirectFormat,alphaMask} alphaMask
|