File: Xrender.hsc

package info (click to toggle)
haskell-x11-xft 0.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 100 kB
  • sloc: haskell: 28; makefile: 2
file content (124 lines) | stat: -rw-r--r-- 4,641 bytes parent folder | download | duplicates (6)
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