VideoTools/third_party/gotk3/gtk/glarea.go
Stu d4efa91ce1 Add vendored gotk3 GTK3 bindings for Go
Vendor gotk3 library to ensure consistent GTK3 bindings across
environments and simplify dependency management.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-15 05:40:43 -05:00

193 lines
5.5 KiB
Go

// +build !gtk_3_6,!gtk_3_8,!gtk_3_10,!gtk_3_12,!gtk_3_14
// Supports building with gtk 3.16+
/*
* Copyright (c) 2013-2014 Conformal Systems <info@conformal.com>
*
* This file originated from: http://opensource.conformal.com/
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
package gtk
// #include <gtk/gtk.h>
// #include "gtk_since_3_16.go.h"
import "C"
import (
"errors"
"unsafe"
"github.com/gotk3/gotk3/gdk"
"github.com/gotk3/gotk3/glib"
)
func init() {
tm := []glib.TypeMarshaler{
{glib.Type(C.gtk_gl_area_get_type()), marshalGLArea},
}
glib.RegisterGValueMarshalers(tm)
WrapMap["GtkGLArea"] = wrapGLArea
}
/*
* GtkGLArea
*/
// GLArea is a representation of GTK's GtkGLArea.
type GLArea struct {
Widget
}
// native returns a pointer to the underlying GtkGLArea.
func (v *GLArea) native() *C.GtkGLArea {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGtkGLArea(p)
}
func marshalGLArea(p uintptr) (interface{}, error) {
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
obj := glib.Take(unsafe.Pointer(c))
return wrapGLArea(obj), nil
}
func wrapGLArea(obj *glib.Object) *GLArea {
if obj == nil {
return nil
}
return &GLArea{Widget{glib.InitiallyUnowned{obj}}}
}
func WidgetToGLArea(widget *Widget) (*GLArea, error) {
obj := glib.Take(unsafe.Pointer(widget.GObject))
return wrapGLArea(obj), nil
}
// GLAreaNew is a wrapper around gtk_gl_area_new().
func GLAreaNew() (*GLArea, error) {
c := C.gtk_gl_area_new()
if c == nil {
return nil, nilPtrErr
}
obj := glib.Take(unsafe.Pointer(c))
return wrapGLArea(obj), nil
}
// MajorVersion is a representation of OpenGL major version.
type MajorVersion int
// MinorVersion is a representation of OpenGL minor version.
type MinorVersion int
// GetRequiredVersion is a wrapper around gtk_gl_area_get_required_version().
func (v *GLArea) GetRequiredVersion() (MajorVersion, MinorVersion) {
var major, minor int
C.gtk_gl_area_get_required_version(v.native(),
(*C.gint)(unsafe.Pointer(&major)), (*C.gint)(unsafe.Pointer(&minor)))
return MajorVersion(major), MinorVersion(minor)
}
// SetRequiredVersion is a wrapper around gtk_gl_area_set_required_version().
func (v *GLArea) SetRequiredVersion(major, minor int) {
C.gtk_gl_area_set_required_version(v.native(), (C.gint)(major), (C.gint)(minor))
}
// TODO:
// gtk_gl_area_set_has_alpha().
// gtk_gl_area_get_has_alpha().
// HasDepthBuffer is a wrapper around gtk_gl_area_get_has_depth_buffer().
func (v *GLArea) HasDepthBuffer() bool {
return gobool(C.gtk_gl_area_get_has_depth_buffer(v.native()))
}
// SetHasDepthBuffer is a wrapper around gtk_gl_area_set_has_depth_buffer().
func (v *GLArea) SetHasDepthBuffer(hasDepthBuffer bool) {
C.gtk_gl_area_set_has_depth_buffer(v.native(), gbool(hasDepthBuffer))
}
// HasStencilBuffer is a wrapper around gtk_gl_area_get_has_stencil_buffer().
func (v *GLArea) HasStencilBuffer() bool {
return gobool(C.gtk_gl_area_get_has_stencil_buffer(v.native()))
}
// SetHasStencilBuffer is a wrapper around gtk_gl_area_set_has_stencil_buffer().
func (v *GLArea) SetHasStencilBuffer(hasStencilBuffer bool) {
C.gtk_gl_area_set_has_stencil_buffer(v.native(), gbool(hasStencilBuffer))
}
// GetAutoRender is a wrapper around gtk_gl_area_get_auto_render().
func (v *GLArea) GetAutoRender() bool {
return gobool(C.gtk_gl_area_get_auto_render(v.native()))
}
// SetAutoRender is a wrapper around gtk_gl_area_set_auto_render().
func (v *GLArea) SetAutoRender(autoRender bool) {
C.gtk_gl_area_set_auto_render(v.native(), gbool(autoRender))
}
// QueueRender is a wrapper around gtk_gl_area_queue_render().
func (v *GLArea) QueueRender() {
C.gtk_gl_area_queue_render(v.native())
}
// GetContext is a wrapper around gtk_gl_area_get_context().
func (v *GLArea) GetContext() (*gdk.GLContext, error) {
c := C.gtk_gl_area_get_context(v.native())
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
return &(gdk.GLContext{obj}), nil
}
// MakeCurrent is a wrapper around gtk_gl_area_make_current().
func (v *GLArea) MakeCurrent() {
C.gtk_gl_area_make_current(v.native())
}
// AttachBuffers is a wrapper around gtk_gl_area_attach_buffers().
func (v *GLArea) AttachBuffers() {
C.gtk_gl_area_attach_buffers(v.native())
}
// GetError is a wrapper around gtk_gl_area_get_error().
func (v *GLArea) GetError() error {
var err *C.GError = nil
err = C.gtk_gl_area_get_error(v.native())
if err != nil {
defer C.g_error_free(err)
return errors.New(goString(err.message))
}
return nil
}
// SetError is a wrapper around gtk_gl_area_set_error().
func (v *GLArea) SetError(domain glib.Quark, code int, err error) {
cstr := (*C.gchar)(C.CString(err.Error()))
defer C.free(unsafe.Pointer(cstr))
gerr := C.g_error_new_literal(C.GQuark(domain), C.gint(code), cstr)
defer C.g_error_free(gerr)
C.gtk_gl_area_set_error(v.native(), gerr)
}