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