packages feed

OpenVG-0.3.0: src/Graphics/Rendering/OpenVG/VG/Extending.hs

{-# OPTIONS -Wall #-}

--------------------------------------------------------------------------------
-- |
-- Module      :  Graphics.Rendering.OpenVG.VG.Extending
-- Copyright   :  (c) Stephen Tetley 2008, 2009
-- License     :  BSD3
--
-- Maintainer  :  Stephen Tetley <stephen.tetley@gmail.com>
-- Stability   :  highly unstable
-- Portability :  GHC
--
-- This module corresponds to section 14 (Extending the API) 
-- of the OpenVG 1.0.1 specs.
--
--
--------------------------------------------------------------------------------

module Graphics.Rendering.OpenVG.VG.Extending (
  -- * Accessing extensions dynamically
  StringID(..), 
  stringId,
) where

import Graphics.Rendering.OpenVG.VG.BasicTypes ( VGenum )
import Graphics.Rendering.OpenVG.VG.CFunDecls ( vgGetString ) 
import Graphics.Rendering.OpenVG.VG.Constants (
    vg_VENDOR, vg_RENDERER, vg_VERSION, vg_EXTENSIONS ) 

import Data.StateVar (
   GettableStateVar, makeGettableStateVar )
   
import Foreign.C.String ( peekCString )

--------------------------------------------------------------------------------
-- Accessing extensions dynamically
    
data StringID =
     Vendor
   | Renderer
   | Version
   | Extensions
   deriving ( Eq, Ord, Show )



-- | Query the OpenVG implementation.   
stringId :: StringID -> GettableStateVar String
stringId sid = makeGettableStateVar $ do 
    cstr <- vgGetString (marshalStringID sid)
    ans  <- peekCString cstr
    return ans

--------------------------------------------------------------------------------
   
marshalStringID :: StringID -> VGenum
marshalStringID x = case x of 
    Vendor -> vg_VENDOR
    Renderer -> vg_RENDERER
    Version -> vg_VERSION
    Extensions -> vg_EXTENSIONS