1// +build !gtk_3_6,!gtk_3_8,!gtk_3_10,!gtk_3_12,!gtk_3_14 2// Supports building with gtk 3.16+ 3 4/* 5 * Copyright (c) 2013-2014 Conformal Systems <info@conformal.com> 6 * 7 * This file originated from: http://opensource.conformal.com/ 8 * 9 * Permission to use, copy, modify, and distribute this software for any 10 * purpose with or without fee is hereby granted, provided that the above 11 * copyright notice and this permission notice appear in all copies. 12 * 13 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 */ 21 22package gdk 23 24// #include <gdk/gdk.h> 25// #include "gdk_since_3_16.go.h" 26import "C" 27import ( 28 "errors" 29 "unsafe" 30 31 "github.com/gotk3/gotk3/glib" 32) 33 34func init() { 35 36 tm := []glib.TypeMarshaler{ 37 {glib.Type(C.gdk_gl_context_get_type()), marshalGLContext}, 38 } 39 40 glib.RegisterGValueMarshalers(tm) 41} 42 43/* 44 * Constants 45 */ 46 47const ( 48 GRAB_FAILED GrabStatus = C.GDK_GRAB_FAILED 49) 50 51/* 52 * GdkDevice 53 */ 54 55// TODO: 56// gdk_device_get_vendor_id(). 57// gdk_device_get_product_id(). 58 59/* 60 * GdkGLContext 61 */ 62 63// GLContext is a representation of GDK's GdkGLContext. 64type GLContext struct { 65 *glib.Object 66} 67 68// native returns a pointer to the underlying GdkGLContext. 69func (v *GLContext) native() *C.GdkGLContext { 70 if v == nil || v.GObject == nil { 71 return nil 72 } 73 p := unsafe.Pointer(v.GObject) 74 return C.toGdkGLContext(p) 75} 76 77// Native returns a pointer to the underlying GdkGLContext. 78func (v *GLContext) Native() uintptr { 79 return uintptr(unsafe.Pointer(v.native())) 80} 81 82func marshalGLContext(p uintptr) (interface{}, error) { 83 c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p))) 84 obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))} 85 return &GLContext{obj}, nil 86} 87 88// GetDisplay is a wrapper around gdk_gl_context_get_display(). 89func (v *GLContext) GetDisplay() (*Display, error) { 90 c := C.gdk_gl_context_get_display(v.native()) 91 if c == nil { 92 return nil, nilPtrErr 93 } 94 95 return &Display{glib.Take(unsafe.Pointer(c))}, nil 96} 97 98// GetWindow is a wrapper around gdk_gl_context_get_window(). 99func (v *GLContext) GetSurface() (*Window, error) { 100 c := C.gdk_gl_context_get_window(v.native()) 101 if c == nil { 102 return nil, nilPtrErr 103 } 104 105 return &Window{glib.Take(unsafe.Pointer(c))}, nil 106} 107 108// GetSharedContext is a wrapper around gdk_gl_context_get_shared_context(). 109func (v *GLContext) GetSharedContext() (*GLContext, error) { 110 c := C.gdk_gl_context_get_shared_context(v.native()) 111 if c == nil { 112 return nil, nilPtrErr 113 } 114 115 return &GLContext{glib.Take(unsafe.Pointer(c))}, nil 116} 117 118// MajorVersion is a representation of OpenGL major version. 119type MajorVersion int 120 121// MinorVersion is a representation of OpenGL minor version. 122type MinorVersion int 123 124// GetVersion is a wrapper around gdk_gl_context_get_version(). 125func (v *GLContext) GetVersion() (MajorVersion, MinorVersion) { 126 var major, minor int 127 C.gdk_gl_context_get_version(v.native(), 128 (*C.int)(unsafe.Pointer(&major)), (*C.int)(unsafe.Pointer(&minor))) 129 130 return MajorVersion(major), MinorVersion(minor) 131} 132 133// GetRequiredVersion is a wrapper around gdk_gl_context_get_required_version(). 134func (v *GLContext) GetRequiredVersion() (MajorVersion, MinorVersion) { 135 var major, minor int 136 C.gdk_gl_context_get_required_version(v.native(), 137 (*C.int)(unsafe.Pointer(&major)), (*C.int)(unsafe.Pointer(&minor))) 138 139 return MajorVersion(major), MinorVersion(minor) 140} 141 142// SetRequiredVersion is a wrapper around gdk_gl_context_set_required_version(). 143func (v *GLContext) SetRequiredVersion(major, minor int) { 144 C.gdk_gl_context_set_required_version(v.native(), (C.int)(major), (C.int)(minor)) 145} 146 147// GetDebugEnabled is a wrapper around gdk_gl_context_get_debug_enabled(). 148func (v *GLContext) GetDebugEnabled() bool { 149 return gobool(C.gdk_gl_context_get_debug_enabled(v.native())) 150} 151 152// SetDebugEnabled is a wrapper around gdk_gl_context_set_debug_enabled(). 153func (v *GLContext) SetDebugEnabled(enabled bool) { 154 C.gdk_gl_context_set_debug_enabled(v.native(), gbool(enabled)) 155} 156 157// GetForwardCompatible is a wrapper around gdk_gl_context_get_forward_compatible(). 158func (v *GLContext) GetForwardCompatible() bool { 159 return gobool(C.gdk_gl_context_get_forward_compatible(v.native())) 160} 161 162// SetForwardCompatible is a wrapper around gdk_gl_context_set_forward_compatible(). 163func (v *GLContext) SetForwardCompatible(compatible bool) { 164 C.gdk_gl_context_set_forward_compatible(v.native(), gbool(compatible)) 165} 166 167// Realize is a wrapper around gdk_gl_context_realize(). 168func (v *GLContext) Realize() (bool, error) { 169 var err *C.GError 170 r := gobool(C.gdk_gl_context_realize(v.native(), &err)) 171 if !r { 172 defer C.g_error_free(err) 173 return r, errors.New(C.GoString((*C.char)(err.message))) 174 } 175 176 return r, nil 177} 178 179// MakeCurrent is a wrapper around gdk_gl_context_make_current(). 180func (v *GLContext) MakeCurrent() { 181 C.gdk_gl_context_make_current(v.native()) 182} 183 184// GetCurrent is a wrapper around gdk_gl_context_get_current(). 185func GetCurrent() (*GLContext, error) { 186 c := C.gdk_gl_context_get_current() 187 if c == nil { 188 return nil, nilPtrErr 189 } 190 191 return &GLContext{glib.Take(unsafe.Pointer(c))}, nil 192} 193 194// ClearCurrent is a wrapper around gdk_gl_context_clear_current(). 195func ClearCurrent() { 196 C.gdk_gl_context_clear_current() 197} 198