1#if __GLASGOW_HASKELL__ >= 709
2{-# LANGUAGE Safe #-}
3#elif __GLASGOW_HASKELL__ >= 701
4{-# LANGUAGE Trustworthy #-}
5#endif
6-----------------------------------------------------------------------------
7-- |
8-- Module      :  Graphics.Win32.GDI.Pen
9-- Copyright   :  (c) Alastair Reid, 1997-2003
10-- License     :  BSD-style (see the file libraries/base/LICENSE)
11--
12-- Maintainer  :  Esa Ilari Vuokko <ei@vuokko.info>
13-- Stability   :  provisional
14-- Portability :  portable
15--
16-- A collection of FFI declarations for interfacing with Win32.
17--
18-----------------------------------------------------------------------------
19
20module Graphics.Win32.GDI.Pen where
21
22import System.Win32.Types
23import Graphics.Win32.GDI.Types
24
25##include "windows_cconv.h"
26
27#include <windows.h>
28
29----------------------------------------------------------------
30-- Stock Objects
31----------------------------------------------------------------
32
33type StockPen   = INT
34
35#{enum StockPen,
36 , wHITE_PEN    = WHITE_PEN
37 , bLACK_PEN    = BLACK_PEN
38 , nULL_PEN     = NULL_PEN
39 }
40
41getStockPen :: StockPen -> IO HPEN
42getStockPen stockpen =
43  failIfNull "GetStockPen" $ c_GetStockPen stockpen
44foreign import WINDOWS_CCONV unsafe "windows.h GetStockObject"
45  c_GetStockPen :: StockPen -> IO HPEN
46
47deletePen :: HPEN -> IO ()
48deletePen pen =
49  failIfFalse_ "DeletePen" $ c_DeletePen pen
50foreign import WINDOWS_CCONV unsafe "windows.h DeleteObject"
51  c_DeletePen :: HPEN -> IO Bool
52
53----------------------------------------------------------------
54-- Creating pens
55----------------------------------------------------------------
56
57type PenStyle   = INT
58
59#{enum PenStyle,
60 , pS_SOLID             = PS_SOLID            // default
61 , pS_DASH              = PS_DASH             // -------
62 , pS_DOT               = PS_DOT              // .......
63 , pS_DASHDOT           = PS_DASHDOT          // _._._._
64 , pS_DASHDOTDOT        = PS_DASHDOTDOT       // _.._.._
65 , pS_NULL              = PS_NULL
66 , pS_INSIDEFRAME       = PS_INSIDEFRAME
67 , pS_USERSTYLE         = PS_USERSTYLE
68 , pS_ALTERNATE         = PS_ALTERNATE
69 , pS_STYLE_MASK        = PS_STYLE_MASK       // all the above
70 }
71
72#{enum PenStyle,
73 , pS_ENDCAP_ROUND      = PS_ENDCAP_ROUND     // default
74 , pS_ENDCAP_SQUARE     = PS_ENDCAP_SQUARE
75 , pS_ENDCAP_FLAT       = PS_ENDCAP_FLAT
76 , pS_ENDCAP_MASK       = PS_ENDCAP_MASK      // all the above
77 }
78
79#{enum PenStyle,
80 , pS_JOIN_ROUND        = PS_JOIN_ROUND       // default
81 , pS_JOIN_BEVEL        = PS_JOIN_BEVEL
82 , pS_JOIN_MITER        = PS_JOIN_MITER
83 }
84-- , pS_JOIN_MASK         = PS_JOIN_MASK
85{-
86If PS_JOIN_MASK is not defined with your GNU Windows32 header files,
87you'll have to define it.
88-}
89
90#{enum PenStyle,
91 , pS_COSMETIC          = PS_COSMETIC         // default
92 , pS_GEOMETRIC         = PS_GEOMETRIC
93 , pS_TYPE_MASK         = PS_TYPE_MASK        // all the above
94 }
95
96createPen :: PenStyle -> INT -> COLORREF -> IO HPEN
97createPen style n color =
98  failIfNull "CreatePen" $ c_CreatePen style n color
99foreign import WINDOWS_CCONV unsafe "windows.h CreatePen"
100  c_CreatePen :: PenStyle -> INT -> COLORREF -> IO HPEN
101
102-- Not very well supported on Win'95
103-- %fun NullHANDLE ExtCreatePen :: PenStyle -> INT -> LOGBRUSH -> [StyleBit] -> IO HPEN
104
105-- ToDo: CreatePenIndirect
106
107----------------------------------------------------------------
108-- End
109----------------------------------------------------------------
110