{-# OPTIONS -Wall #-} -------------------------------------------------------------------------------- -- | -- Module : Graphics.Rendering.OpenVG.VG.Parameters -- Copyright : (c) Stephen Tetley 2008-2010 -- License : BSD3 -- -- Maintainer : Stephen Tetley -- Stability : unstable -- Portability : GHC -- -- This module corresponds to section 5 (Setting API Parameters) -- of the OpenVG 1.0.1 specs. -- -- -------------------------------------------------------------------------------- module Graphics.Rendering.OpenVG.VG.Parameters ( ParamType(..), marshalParamType, -- * Setting and querying context parameter values setf, seti, setfv, setiv, getf, geti, getVectorSize, getfv, getiv, -- * Setting and querying object parameters setParameterf, setParameteri, setParameterfv, setParameteriv, getParameterf, getParameteri, getParameterVectorSize, getParameterfv, getParameteriv ) where import Graphics.Rendering.OpenVG.Raw.VG.Core101 ( VGint, VGfloat, VGenum, VGHandle ) import Graphics.Rendering.OpenVG.Raw.VG.Parameters import Foreign.Marshal.Array ( newArray, peekArray ) -- | The parameter type of variables accessible with @vgSet@ -- or @vgGet@. -- data ParamType = MatrixMode | FillRule | ImageQuality | RenderingQuality | BlendMode | ImageMode | ScissorRects | StrokeLineWidth | StrokeCapStyle | StrokeJoinStyle | StrokeMiterLimit | StrokeDashPattern | StrokeDashPhase | StrokeDashPhaseReset | TileFillColor | ClearColor | Masking | Scissoring | PixelLayout | ScreenLayout | FilterFormatLinear | FilterFormatPremultiplied | FilterChannelMask | MaxScissorRects | MaxDashCount | MaxKernelSize | MaxSaparableKernelSize | MaxColorRampStops | MaxImageWidth | MaxImageHeight | MaxImagePixels | MaxImageBytes | MaxFloat | MaxGaussianStdDeviation deriving ( Eq, Ord, Show ) -- | Set a value of type 'VGfloat' within the current context. -- -- 'setf' corresponds to the OpenVG function @vgSetf@. -- -- > void vgSetf (VGParamType paramType, VGfloat value); -- setf :: ParamType -> VGfloat -> IO () setf typ = vgSetf $ marshalParamType typ -- | Set a value of type 'VGint' within the current context. -- -- 'seti' corresponds to the OpenVG function @vgSeti@. -- -- > void vgSeti (VGParamType paramType, VGint value); -- seti :: ParamType -> VGint -> IO () seti typ = vgSeti $ marshalParamType typ -- | Set a list of 'VGfloat' values within the current context. -- -- 'setfv' corresponds to the OpenVG function @vgSetfv@. -- -- > void vgSetfv(VGParamType paramType, VGint count, const VGfloat * values); -- setfv :: ParamType -> [VGfloat] -> IO () setfv typ vals = newArray vals >>= vgSetfv (marshalParamType typ) (fromIntegral $ length vals) -- | Set a list of 'VGint' values within the current context. -- -- 'setiv' corresponds to the OpenVG function @vgSetiv@. -- -- > void vgSetiv(VGParamType paramType, VGint count, const VGint * values); -- setiv :: ParamType -> [VGint] -> IO () setiv typ vals = newArray vals >>= vgSetiv (marshalParamType typ) (fromIntegral $ length vals) -- | Get a value of type 'VGfloat' from the current context. -- -- 'getf' corresponds to the OpenVG function @vgGetf@. -- -- > VGfloat vgGetf (VGParamType paramType); -- getf :: ParamType -> IO VGfloat getf = vgGetf . marshalParamType -- | Get a value of type 'VGint' from the current context. -- -- 'geti' corresponds to the OpenVG function @vgGeti@. -- -- > VGint vgGeti (VGParamType paramType); -- geti :: ParamType -> IO VGint geti = vgGeti . marshalParamType -- | Get the maximum number of values that the respective 'getfv' -- or 'getiv' call would return for the given 'ParamType'. -- -- 'getVectorSize' corresponds to the OpenVG function -- @vgGetVectorSize@. -- -- > VGint vgGetVectorSize(VGParamType paramType); -- getVectorSize :: ParamType -> IO VGint getVectorSize typ = vgGetVectorSize $ marshalParamType typ -- | Get a list of value of type 'VGfloat' from the current -- context. -- -- 'getfv' corresponds to the OpenVG function @vgGetfv@. -- -- > void vgGetfv(VGParamType paramType, VGint count, VGfloat * values); -- getfv :: ParamType -> VGint -> IO [VGfloat] getfv typ i = vgGetfv (marshalParamType typ) i >>= peekArray (fromIntegral i) -- | Get a list of value of type 'VGint' from the current -- context. -- -- 'getiv' corresponds to the OpenVG function @vgGetiv@. -- -- > void vgGetiv(VGParamType paramType, VGint count, VGint * values); -- getiv :: ParamType -> VGint -> IO [VGint] getiv typ i = vgGetiv (marshalParamType typ) i >>= peekArray (fromIntegral i) -- | Set the supplied parameter of the handle to a value of type -- 'VGfloat'. -- -- 'setParameterf' corresponds to the OpenVG function -- @vgSetParameterf@. -- -- > void vgSetParameterf (VGHandle object, VGint paramType, VGfloat value); -- setParameterf :: VGHandle -> VGenum -> VGfloat -> IO () setParameterf = vgSetParameterf -- | Set the supplied parameter of the handle to a value of type -- 'VGint'. -- -- 'setParameteri' corresponds to the OpenVG function -- @vgSetParameteri@. -- -- > void vgSetParameteri (VGHandle object, VGint paramType, VGint value); -- setParameteri :: VGHandle -> VGenum -> VGint -> IO () setParameteri = vgSetParameteri -- | Set the supplied parameter of the handle to the list of -- supplied 'VGfloat' values. -- -- 'setParameterfv' corresponds to the OpenVG function -- @vgSetParameterfv@. -- -- > void vgSetParameterfv(VGHandle object, VGint paramType, -- > VGint count, const VGfloat * values); -- setParameterfv :: VGHandle -> VGenum -> [VGfloat] -> IO () setParameterfv h typ vals = newArray vals >>= vgSetParameterfv h typ (fromIntegral $ length vals) -- | Set the supplied parameter of the handle to the list of -- supplied 'VGint' values. -- -- 'setParameteriv' corresponds to the OpenVG function -- @vgSetParameteriv@. -- -- > void vgSetParameteriv(VGHandle object, VGint paramType, -- > VGint count, const VGint * values); -- setParameteriv :: VGHandle -> VGenum -> [VGint] -> IO () setParameteriv h typ vals = newArray vals >>= vgSetParameteriv h typ (fromIntegral $ length vals) -- | Get the 'VGfloat' value of the parameter on the supplied -- handle. -- -- 'getParameterf' corresponds to the OpenVG function -- @vgGetParameterf@. -- -- > VGfloat vgGetParameterf (VGHandle object, VGint paramType); -- getParameterf :: VGHandle -> VGenum -> IO VGfloat getParameterf = vgGetParameterf -- | Get the 'VGint' value of the parameter on the supplied -- handle. -- -- 'getParameteri' corresponds to the OpenVG function -- @vgGetParameteri@. -- -- > VGint vgGetParameteri (VGHandle object, VGint paramType); -- getParameteri :: VGHandle -> VGenum -> IO VGint getParameteri = vgGetParameteri -- | Get the maximum number of values that the respective -- 'getParameterfv' or 'getParameteriv' call on the supplied -- handle would return for the given 'ParamType'. -- -- 'getParameterVectorSize' corresponds to the OpenVG function -- @vgGetParameterVectorSize@. -- -- > VGint vgGetParameterVectorSize (VGHandle object, VGint paramType); -- getParameterVectorSize :: VGHandle -> VGenum -> IO VGint getParameterVectorSize = vgGetParameterVectorSize -- | Get the list of 'VGfloat' values for the parameter on the -- supplied handle. -- -- 'getParameterfv' corresponds to the OpenVG function -- @vgGetParameterfv@. -- -- > void vgGetParameterfv(VGHandle object, -- > VGint paramType, -- > VGint count, VGfloat * values) -- getParameterfv :: VGHandle -> VGenum -> VGint -> IO [VGfloat] getParameterfv h typ i = vgGetParameterfv h typ i >>= peekArray (fromIntegral i) -- | Get the list of 'VGint' values for the parameter on the -- supplied handle. -- -- 'getParameteriv' corresponds to the OpenVG function -- @vgGetParameteriv@. -- -- > void vgGetParameteriv(VGHandle object, -- > VGint paramType, -- > VGint count, VGint * values) -- getParameteriv :: VGHandle -> VGenum -> VGint -> IO [VGint] getParameteriv h typ i = vgGetParameteriv h typ i >>= peekArray (fromIntegral i) -------------------------------------------------------------------------------- marshalParamType :: ParamType -> VGenum marshalParamType x = case x of MatrixMode -> vg_MATRIX_MODE FillRule -> vg_FILL_RULE ImageQuality -> vg_IMAGE_QUALITY RenderingQuality -> vg_RENDERING_QUALITY BlendMode -> vg_BLEND_MODE ImageMode -> vg_IMAGE_MODE ScissorRects -> vg_SCISSOR_RECTS StrokeLineWidth -> vg_STROKE_LINE_WIDTH StrokeCapStyle -> vg_STROKE_CAP_STYLE StrokeJoinStyle -> vg_STROKE_JOIN_STYLE StrokeMiterLimit -> vg_STROKE_MITER_LIMIT StrokeDashPattern -> vg_STROKE_DASH_PATTERN StrokeDashPhase -> vg_STROKE_DASH_PHASE StrokeDashPhaseReset -> vg_STROKE_DASH_PHASE_RESET TileFillColor -> vg_TILE_FILL_COLOR ClearColor -> vg_CLEAR_COLOR -- ParamGlyphOrigin -> vg_GLYPH_ORIGIN {- Not in shiva-vg -} Masking -> vg_MASKING Scissoring -> vg_SCISSORING PixelLayout -> vg_PIXEL_LAYOUT ScreenLayout -> vg_SCREEN_LAYOUT FilterFormatLinear -> vg_FILTER_FORMAT_LINEAR FilterFormatPremultiplied -> vg_FILTER_FORMAT_PREMULTIPLIED FilterChannelMask -> vg_FILTER_CHANNEL_MASK MaxScissorRects -> vg_MAX_SCISSOR_RECTS MaxDashCount -> vg_MAX_DASH_COUNT MaxKernelSize -> vg_MAX_KERNEL_SIZE MaxSaparableKernelSize -> vg_MAX_SEPARABLE_KERNEL_SIZE MaxColorRampStops -> vg_MAX_COLOR_RAMP_STOPS MaxImageWidth -> vg_MAX_IMAGE_WIDTH MaxImageHeight -> vg_MAX_IMAGE_HEIGHT MaxImagePixels -> vg_MAX_IMAGE_PIXELS MaxImageBytes -> vg_MAX_IMAGE_BYTES MaxFloat -> vg_MAX_FLOAT MaxGaussianStdDeviation -> vg_MAX_GAUSSIAN_STD_DEVIATION --------------------------------------------------------------------------------