module Graphics.UI.Gtk.OpenGL.DrawingArea (
GLDrawingArea,
glDrawingAreaNew,
withGLDrawingArea,
glDrawingAreaGetGLConfig,
glDrawingAreaGetGLContext,
glDrawingAreaGetGLWindow,
) where
import Control.Monad (liftM)
import System.Glib.FFI
import System.Glib.GObject (makeNewGObject)
import Graphics.UI.Gtk.OpenGL.Types
import Graphics.UI.Gtk.Misc.DrawingArea (drawingAreaNew)
import Graphics.UI.Gtk.OpenGL.Drawable (glDrawableGLBegin, glDrawableWaitGL, glDrawableGLEnd)
import Graphics.UI.Gtk.OpenGL.Window ()
import Graphics.UI.Gtk.OpenGL.Context (GLRenderType(..))
newtype GLDrawingArea = GLDrawingArea DrawingArea
instance DrawingAreaClass GLDrawingArea
instance WidgetClass GLDrawingArea
instance ObjectClass GLDrawingArea
instance GObjectClass GLDrawingArea where
toGObject (GLDrawingArea gd) = toGObject gd
unsafeCastGObject = GLDrawingArea . unsafeCastGObject
glDrawingAreaNew :: GLConfig -> IO GLDrawingArea
glDrawingAreaNew glconfig = do
drawingArea <- drawingAreaNew
widgetSetGLCapability drawingArea glconfig Nothing True RGBAType
return (GLDrawingArea drawingArea)
withGLDrawingArea :: GLDrawingArea -> (GLWindow -> IO a) -> IO a
withGLDrawingArea glDrawingArea glAction = do
glcontext <- glDrawingAreaGetGLContext glDrawingArea
glwindow <- glDrawingAreaGetGLWindow glDrawingArea
glDrawableGLBegin glwindow glcontext
result <- glAction glwindow
glDrawableWaitGL glwindow
glDrawableGLEnd glwindow
return result
glDrawingAreaGetGLConfig :: GLDrawingArea -> IO GLConfig
glDrawingAreaGetGLConfig (GLDrawingArea widget) =
makeNewGObject mkGLConfig $
(\(Widget arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_widget_get_gl_config argPtr1)
(toWidget widget)
glDrawingAreaGetGLContext :: GLDrawingArea -> IO GLContext
glDrawingAreaGetGLContext (GLDrawingArea widget) =
makeNewGObject mkGLContext $
(\(Widget arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_widget_get_gl_context argPtr1)
(toWidget widget)
glDrawingAreaGetGLWindow :: GLDrawingArea -> IO GLWindow
glDrawingAreaGetGLWindow (GLDrawingArea widget) =
makeNewGObject mkGLWindow $
(\(Widget arg1) -> withForeignPtr arg1 $ \argPtr1 ->gtk_widget_get_gl_window argPtr1)
(toWidget widget)
widgetSetGLCapability
:: WidgetClass widget
=> widget
-> GLConfig
-> Maybe GLContext
-> Bool
-> GLRenderType
-> IO Bool
widgetSetGLCapability widget glconfig shareList direct renderType =
liftM toBool $
(\(Widget arg1) (GLConfig arg2) (GLContext arg3) arg4 arg5 -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->withForeignPtr arg3 $ \argPtr3 ->gtk_widget_set_gl_capability argPtr1 argPtr2 argPtr3 arg4 arg5)
(toWidget widget)
(toGLConfig glconfig)
(maybe (GLContext nullForeignPtr) toGLContext shareList)
(fromBool direct)
((fromIntegral . fromEnum) renderType)
foreign import ccall safe "gtk_widget_get_gl_config"
gtk_widget_get_gl_config :: ((Ptr Widget) -> (IO (Ptr GLConfig)))
foreign import ccall safe "gtk_widget_get_gl_context"
gtk_widget_get_gl_context :: ((Ptr Widget) -> (IO (Ptr GLContext)))
foreign import ccall safe "gtk_widget_get_gl_window"
gtk_widget_get_gl_window :: ((Ptr Widget) -> (IO (Ptr GLWindow)))
foreign import ccall safe "gtk_widget_set_gl_capability"
gtk_widget_set_gl_capability :: ((Ptr Widget) -> ((Ptr GLConfig) -> ((Ptr GLContext) -> (CInt -> (CInt -> (IO CInt))))))