gtkglext-0.11.0: Graphics/UI/Gtk/OpenGL/General.chs
{-# LANGUAGE CPP #-}
-- -*-haskell-*-
-- GIMP Toolkit (GTK) OpenGL Extension: General
--
-- Author : Duncan Coutts
--
-- Created: 9 June 2005
--
-- Copyright (C) 2005 Duncan Coutts
--
-- This library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- This library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- |
-- Maintainer : gtk2hs-users@lists.sourceforge.net
-- Stability : provisional
-- Portability : portable (depends on GHC)
--
--
--
module Graphics.UI.Gtk.OpenGL.General (
-- * Methods
initGL,
-- ** Query
glQueryExtension,
glQueryExtensionForDisplay,
glQueryGLExtension,
glQueryVersion,
glQueryVersionForDisplay,
-- ** Fonts
glFontUsePangoFont,
glFontUsePangoFontForDisplay,
) where
import Control.Monad (liftM)
import System.Environment (getProgName, getArgs)
import System.Glib.FFI
import System.Glib.UTFString
import System.Glib.GObject (makeNewGObject)
{#import Graphics.Rendering.Pango.Types#}
{#import Graphics.Rendering.Pango.BasicTypes#}
{#import Graphics.UI.Gtk.OpenGL.Types#}
{# context lib="gtkglext" prefix="gtk" #}
--------------------
-- Methods
initGL :: IO [String]
initGL = do
prog <- getProgName
args <- getArgs
let allArgs = (prog:args)
withMany withUTFString allArgs $ \addrs ->
withArrayLen addrs $ \argc argv ->
with argv $ \argvp ->
with argc $ \argcp -> do
res <- {#call gtk_gl_init_check#} (castPtr argcp) (castPtr argvp)
if (toBool res) then do
argc' <- peek argcp
argv' <- peek argvp
_:addrs' <- peekArray argc' argv' -- drop the program name
mapM peekUTFString addrs'
else error "Cannot initialize OpenGL."
-- |
--
glQueryExtension :: IO Bool
glQueryExtension =
liftM toBool $
{# call gdk_gl_query_extension #}
-- |
--
glQueryExtensionForDisplay :: Display -> IO Bool
glQueryExtensionForDisplay display =
liftM toBool $
{# call gdk_gl_query_extension_for_display #}
display
-- |
--
glQueryGLExtension :: String -> IO Bool
glQueryGLExtension extension =
liftM toBool $
withUTFString extension $ \extensionPtr ->
{# call gdk_gl_query_gl_extension #}
extensionPtr
-- |
--
glQueryVersion :: IO (Maybe (Int, Int))
glQueryVersion =
alloca $ \majorPtr ->
alloca $ \minorPtr ->
{# call gdk_gl_query_version #}
majorPtr
minorPtr
>>= \ok ->
if toBool ok
then peek majorPtr >>= \major ->
peek minorPtr >>= \minor ->
return (Just (fromIntegral major, fromIntegral minor))
else return Nothing
-- |
--
glQueryVersionForDisplay :: Display -> IO (Maybe (Int, Int))
glQueryVersionForDisplay display =
alloca $ \majorPtr ->
alloca $ \minorPtr ->
{# call gdk_gl_query_version_for_display #}
display
majorPtr
minorPtr
>>= \ok ->
if toBool ok
then peek majorPtr >>= \major ->
peek minorPtr >>= \minor ->
return (Just (fromIntegral major, fromIntegral minor))
else return Nothing
-- |
--
glFontUsePangoFont :: FontDescription -> Int -> Int -> Int -> IO Font
glFontUsePangoFont fontDesc first count listBase =
makeNewGObject mkFont $
{# call gdk_gl_font_use_pango_font #}
fontDesc
(fromIntegral first)
(fromIntegral count)
(fromIntegral listBase)
-- |
--
glFontUsePangoFontForDisplay :: Display -> FontDescription -> Int -> Int -> Int -> IO Font
glFontUsePangoFontForDisplay display fontDesc first count listBase =
makeNewGObject mkFont $
{# call gdk_gl_font_use_pango_font_for_display #}
display
fontDesc
(fromIntegral first)
(fromIntegral count)
(fromIntegral listBase)