You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fw-daemon/vendor/github.com/gotk3/gotk3.old/gdk/gdk.go

1642 lines
45 KiB

// 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.
// Go bindings for GDK 3. Supports version 3.6 and later.
package gdk
// #cgo pkg-config: gdk-3.0
// #include <gdk/gdk.h>
// #include "gdk.go.h"
import "C"
import (
"errors"
"reflect"
"runtime"
"strconv"
"unsafe"
"github.com/gotk3/gotk3/glib"
)
func init() {
tm := []glib.TypeMarshaler{
// Enums
{glib.Type(C.gdk_drag_action_get_type()), marshalDragAction},
{glib.Type(C.gdk_colorspace_get_type()), marshalColorspace},
{glib.Type(C.gdk_event_type_get_type()), marshalEventType},
{glib.Type(C.gdk_interp_type_get_type()), marshalInterpType},
{glib.Type(C.gdk_modifier_type_get_type()), marshalModifierType},
{glib.Type(C.gdk_pixbuf_alpha_mode_get_type()), marshalPixbufAlphaMode},
{glib.Type(C.gdk_event_mask_get_type()), marshalEventMask},
// Objects/Interfaces
{glib.Type(C.gdk_device_get_type()), marshalDevice},
{glib.Type(C.gdk_cursor_get_type()), marshalCursor},
{glib.Type(C.gdk_device_manager_get_type()), marshalDeviceManager},
{glib.Type(C.gdk_display_get_type()), marshalDisplay},
{glib.Type(C.gdk_drag_context_get_type()), marshalDragContext},
{glib.Type(C.gdk_pixbuf_get_type()), marshalPixbuf},
{glib.Type(C.gdk_rgba_get_type()), marshalRGBA},
{glib.Type(C.gdk_screen_get_type()), marshalScreen},
{glib.Type(C.gdk_visual_get_type()), marshalVisual},
{glib.Type(C.gdk_window_get_type()), marshalWindow},
// Boxed
{glib.Type(C.gdk_event_get_type()), marshalEvent},
}
glib.RegisterGValueMarshalers(tm)
}
/*
* Type conversions
*/
func gbool(b bool) C.gboolean {
if b {
return C.gboolean(1)
}
return C.gboolean(0)
}
func gobool(b C.gboolean) bool {
if b != 0 {
return true
}
return false
}
/*
* Unexported vars
*/
var nilPtrErr = errors.New("cgo returned unexpected nil pointer")
/*
* Constants
*/
// DragAction is a representation of GDK's GdkDragAction.
type DragAction int
const (
ACTION_DEFAULT DragAction = C.GDK_ACTION_DEFAULT
ACTION_COPY DragAction = C.GDK_ACTION_COPY
ACTION_MOVE DragAction = C.GDK_ACTION_MOVE
ACTION_LINK DragAction = C.GDK_ACTION_LINK
ACTION_PRIVATE DragAction = C.GDK_ACTION_PRIVATE
ACTION_ASK DragAction = C.GDK_ACTION_ASK
)
func marshalDragAction(p uintptr) (interface{}, error) {
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
return DragAction(c), nil
}
// Colorspace is a representation of GDK's GdkColorspace.
type Colorspace int
const (
COLORSPACE_RGB Colorspace = C.GDK_COLORSPACE_RGB
)
func marshalColorspace(p uintptr) (interface{}, error) {
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
return Colorspace(c), nil
}
// InterpType is a representation of GDK's GdkInterpType.
type InterpType int
const (
INTERP_NEAREST InterpType = C.GDK_INTERP_NEAREST
INTERP_TILES InterpType = C.GDK_INTERP_TILES
INTERP_BILINEAR InterpType = C.GDK_INTERP_BILINEAR
INTERP_HYPER InterpType = C.GDK_INTERP_HYPER
)
// PixbufRotation is a representation of GDK's GdkPixbufRotation.
type PixbufRotation int
const (
PIXBUF_ROTATE_NONE PixbufRotation = C.GDK_PIXBUF_ROTATE_NONE
PIXBUF_ROTATE_COUNTERCLOCKWISE PixbufRotation = C.GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE
PIXBUF_ROTATE_UPSIDEDOWN PixbufRotation = C.GDK_PIXBUF_ROTATE_UPSIDEDOWN
PIXBUF_ROTATE_CLOCKWISE PixbufRotation = C.GDK_PIXBUF_ROTATE_CLOCKWISE
)
func marshalInterpType(p uintptr) (interface{}, error) {
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
return InterpType(c), nil
}
// ModifierType is a representation of GDK's GdkModifierType.
type ModifierType uint
const (
GDK_SHIFT_MASK ModifierType = C.GDK_SHIFT_MASK
GDK_LOCK_MASK = C.GDK_LOCK_MASK
GDK_CONTROL_MASK = C.GDK_CONTROL_MASK
GDK_MOD1_MASK = C.GDK_MOD1_MASK
GDK_MOD2_MASK = C.GDK_MOD2_MASK
GDK_MOD3_MASK = C.GDK_MOD3_MASK
GDK_MOD4_MASK = C.GDK_MOD4_MASK
GDK_MOD5_MASK = C.GDK_MOD5_MASK
GDK_BUTTON1_MASK = C.GDK_BUTTON1_MASK
GDK_BUTTON2_MASK = C.GDK_BUTTON2_MASK
GDK_BUTTON3_MASK = C.GDK_BUTTON3_MASK
GDK_BUTTON4_MASK = C.GDK_BUTTON4_MASK
GDK_BUTTON5_MASK = C.GDK_BUTTON5_MASK
GDK_SUPER_MASK = C.GDK_SUPER_MASK
GDK_HYPER_MASK = C.GDK_HYPER_MASK
GDK_META_MASK = C.GDK_META_MASK
GDK_RELEASE_MASK = C.GDK_RELEASE_MASK
GDK_MODIFIER_MASK = C.GDK_MODIFIER_MASK
)
func marshalModifierType(p uintptr) (interface{}, error) {
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
return ModifierType(c), nil
}
// PixbufAlphaMode is a representation of GDK's GdkPixbufAlphaMode.
type PixbufAlphaMode int
const (
GDK_PIXBUF_ALPHA_BILEVEL PixbufAlphaMode = C.GDK_PIXBUF_ALPHA_BILEVEL
GDK_PIXBUF_ALPHA_FULL PixbufAlphaMode = C.GDK_PIXBUF_ALPHA_FULL
)
func marshalPixbufAlphaMode(p uintptr) (interface{}, error) {
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
return PixbufAlphaMode(c), nil
}
// Selections
const (
SELECTION_PRIMARY Atom = 1
SELECTION_SECONDARY Atom = 2
SELECTION_CLIPBOARD Atom = 69
TARGET_BITMAP Atom = 5
TARGET_COLORMAP Atom = 7
TARGET_DRAWABLE Atom = 17
TARGET_PIXMAP Atom = 20
TARGET_STRING Atom = 31
SELECTION_TYPE_ATOM Atom = 4
SELECTION_TYPE_BITMAP Atom = 5
SELECTION_TYPE_COLORMAP Atom = 7
SELECTION_TYPE_DRAWABLE Atom = 17
SELECTION_TYPE_INTEGER Atom = 19
SELECTION_TYPE_PIXMAP Atom = 20
SELECTION_TYPE_WINDOW Atom = 33
SELECTION_TYPE_STRING Atom = 31
)
// added by terrak
// EventMask is a representation of GDK's GdkEventMask.
type EventMask int
const (
EXPOSURE_MASK EventMask = C.GDK_EXPOSURE_MASK
POINTER_MOTION_MASK EventMask = C.GDK_POINTER_MOTION_MASK
POINTER_MOTION_HINT_MASK EventMask = C.GDK_POINTER_MOTION_HINT_MASK
BUTTON_MOTION_MASK EventMask = C.GDK_BUTTON_MOTION_MASK
BUTTON1_MOTION_MASK EventMask = C.GDK_BUTTON1_MOTION_MASK
BUTTON2_MOTION_MASK EventMask = C.GDK_BUTTON2_MOTION_MASK
BUTTON3_MOTION_MASK EventMask = C.GDK_BUTTON3_MOTION_MASK
BUTTON_PRESS_MASK EventMask = C.GDK_BUTTON_PRESS_MASK
BUTTON_RELEASE_MASK EventMask = C.GDK_BUTTON_RELEASE_MASK
KEY_PRESS_MASK EventMask = C.GDK_KEY_PRESS_MASK
KEY_RELEASE_MASK EventMask = C.GDK_KEY_RELEASE_MASK
ENTER_NOTIFY_MASK EventMask = C.GDK_ENTER_NOTIFY_MASK
LEAVE_NOTIFY_MASK EventMask = C.GDK_LEAVE_NOTIFY_MASK
FOCUS_CHANGE_MASK EventMask = C.GDK_FOCUS_CHANGE_MASK
STRUCTURE_MASK EventMask = C.GDK_STRUCTURE_MASK
PROPERTY_CHANGE_MASK EventMask = C.GDK_PROPERTY_CHANGE_MASK
VISIBILITY_NOTIFY_MASK EventMask = C.GDK_VISIBILITY_NOTIFY_MASK
PROXIMITY_IN_MASK EventMask = C.GDK_PROXIMITY_IN_MASK
PROXIMITY_OUT_MASK EventMask = C.GDK_PROXIMITY_OUT_MASK
SUBSTRUCTURE_MASK EventMask = C.GDK_SUBSTRUCTURE_MASK
SCROLL_MASK EventMask = C.GDK_SCROLL_MASK
TOUCH_MASK EventMask = C.GDK_TOUCH_MASK
SMOOTH_SCROLL_MASK EventMask = C.GDK_SMOOTH_SCROLL_MASK
ALL_EVENTS_MASK EventMask = C.GDK_ALL_EVENTS_MASK
)
func marshalEventMask(p uintptr) (interface{}, error) {
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
return EventMask(c), nil
}
// added by lazyshot
// ScrollDirection is a representation of GDK's GdkScrollDirection
type ScrollDirection int
const (
SCROLL_UP ScrollDirection = C.GDK_SCROLL_UP
SCROLL_DOWN ScrollDirection = C.GDK_SCROLL_DOWN
SCROLL_LEFT ScrollDirection = C.GDK_SCROLL_LEFT
SCROLL_RIGHT ScrollDirection = C.GDK_SCROLL_RIGHT
SCROLL_SMOOTH ScrollDirection = C.GDK_SCROLL_SMOOTH
)
// CURRENT_TIME is a representation of GDK_CURRENT_TIME
const CURRENT_TIME = C.GDK_CURRENT_TIME
// GrabStatus is a representation of GdkGrabStatus
type GrabStatus int
const (
GRAB_SUCCESS GrabStatus = C.GDK_GRAB_SUCCESS
GRAB_ALREADY_GRABBED GrabStatus = C.GDK_GRAB_ALREADY_GRABBED
GRAB_INVALID_TIME GrabStatus = C.GDK_GRAB_INVALID_TIME
GRAB_FROZEN GrabStatus = C.GDK_GRAB_FROZEN
// Only exists since 3.16
// GRAB_FAILED GrabStatus = C.GDK_GRAB_FAILED
GRAB_FAILED GrabStatus = 5
)
// GrabOwnership is a representation of GdkGrabOwnership
type GrabOwnership int
const (
OWNERSHIP_NONE GrabOwnership = C.GDK_OWNERSHIP_NONE
OWNERSHIP_WINDOW GrabOwnership = C.GDK_OWNERSHIP_WINDOW
OWNERSHIP_APPLICATION GrabOwnership = C.GDK_OWNERSHIP_APPLICATION
)
// DeviceType is a representation of GdkDeviceType
type DeviceType int
const (
DEVICE_TYPE_MASTER DeviceType = C.GDK_DEVICE_TYPE_MASTER
DEVICE_TYPE_SLAVE DeviceType = C.GDK_DEVICE_TYPE_SLAVE
DEVICE_TYPE_FLOATING DeviceType = C.GDK_DEVICE_TYPE_FLOATING
)
/*
* GdkAtom
*/
// Atom is a representation of GDK's GdkAtom.
type Atom uintptr
// native returns the underlying GdkAtom.
func (v Atom) native() C.GdkAtom {
return C.toGdkAtom(unsafe.Pointer(uintptr(v)))
}
func (v Atom) Name() string {
c := C.gdk_atom_name(v.native())
defer C.g_free(C.gpointer(c))
return C.GoString((*C.char)(c))
}
// GdkAtomIntern is a wrapper around gdk_atom_intern
func GdkAtomIntern(atomName string, onlyIfExists bool) Atom {
cstr := C.CString(atomName)
defer C.free(unsafe.Pointer(cstr))
c := C.gdk_atom_intern((*C.gchar)(cstr), gbool(onlyIfExists))
return Atom(uintptr(unsafe.Pointer(c)))
}
/*
* GdkDevice
*/
// Device is a representation of GDK's GdkDevice.
type Device struct {
*glib.Object
}
// native returns a pointer to the underlying GdkDevice.
func (v *Device) native() *C.GdkDevice {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGdkDevice(p)
}
// Native returns a pointer to the underlying GdkDevice.
func (v *Device) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func marshalDevice(p uintptr) (interface{}, error) {
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
return &Device{obj}, nil
}
// Grab() is a wrapper around gdk_device_grab().
func (v *Device) Grab(w *Window, ownership GrabOwnership, owner_events bool, event_mask EventMask, cursor *Cursor, time uint32) GrabStatus {
ret := C.gdk_device_grab(
v.native(),
w.native(),
C.GdkGrabOwnership(ownership),
gbool(owner_events),
C.GdkEventMask(event_mask),
cursor.native(),
C.guint32(time),
)
return GrabStatus(ret)
}
// Ungrab() is a wrapper around gdk_device_ungrab().
func (v *Device) Ungrab(time uint32) {
C.gdk_device_ungrab(v.native(), C.guint32(time))
}
/*
* GdkCursor
*/
// Cursor is a representation of GdkCursor.
type Cursor struct {
*glib.Object
}
// native returns a pointer to the underlying GdkCursor.
func (v *Cursor) native() *C.GdkCursor {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGdkCursor(p)
}
// Native returns a pointer to the underlying GdkCursor.
func (v *Cursor) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func marshalCursor(p uintptr) (interface{}, error) {
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
return &Cursor{obj}, nil
}
/*
* GdkDeviceManager
*/
// DeviceManager is a representation of GDK's GdkDeviceManager.
type DeviceManager struct {
*glib.Object
}
// native returns a pointer to the underlying GdkDeviceManager.
func (v *DeviceManager) native() *C.GdkDeviceManager {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGdkDeviceManager(p)
}
// Native returns a pointer to the underlying GdkDeviceManager.
func (v *DeviceManager) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func marshalDeviceManager(p uintptr) (interface{}, error) {
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
return &DeviceManager{obj}, nil
}
// GetClientPointer() is a wrapper around gdk_device_manager_get_client_pointer().
func (v *DeviceManager) GetClientPointer() (*Device, error) {
c := C.gdk_device_manager_get_client_pointer(v.native())
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
obj.Ref()
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return &Device{obj}, nil
}
// GetDisplay() is a wrapper around gdk_device_manager_get_display().
func (v *DeviceManager) GetDisplay() (*Display, error) {
c := C.gdk_device_manager_get_display(v.native())
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
obj.Ref()
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return &Display{obj}, nil
}
// ListDevices() is a wrapper around gdk_device_manager_list_devices().
func (v *DeviceManager) ListDevices(tp DeviceType) *glib.List {
clist := C.gdk_device_manager_list_devices(v.native(), C.GdkDeviceType(tp))
if clist == nil {
return nil
}
glist := glib.WrapList(uintptr(unsafe.Pointer(clist)))
glist.DataWrapper(func(ptr unsafe.Pointer) interface{} {
return &Device{&glib.Object{glib.ToGObject(ptr)}}
})
runtime.SetFinalizer(glist, func(glist *glib.List) {
glist.Free()
})
return glist
}
/*
* GdkDisplay
*/
// Display is a representation of GDK's GdkDisplay.
type Display struct {
*glib.Object
}
// native returns a pointer to the underlying GdkDisplay.
func (v *Display) native() *C.GdkDisplay {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGdkDisplay(p)
}
// Native returns a pointer to the underlying GdkDisplay.
func (v *Display) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func marshalDisplay(p uintptr) (interface{}, error) {
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
return &Display{obj}, nil
}
func toDisplay(s *C.GdkDisplay) (*Display, error) {
if s == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(s))}
return &Display{obj}, nil
}
// DisplayOpen() is a wrapper around gdk_display_open().
func DisplayOpen(displayName string) (*Display, error) {
cstr := C.CString(displayName)
defer C.free(unsafe.Pointer(cstr))
c := C.gdk_display_open((*C.gchar)(cstr))
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
d := &Display{obj}
obj.Ref()
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return d, nil
}
// DisplayGetDefault() is a wrapper around gdk_display_get_default().
func DisplayGetDefault() (*Display, error) {
c := C.gdk_display_get_default()
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
d := &Display{obj}
obj.Ref()
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return d, nil
}
// GetName() is a wrapper around gdk_display_get_name().
func (v *Display) GetName() (string, error) {
c := C.gdk_display_get_name(v.native())
if c == nil {
return "", nilPtrErr
}
return C.GoString((*C.char)(c)), nil
}
// GetScreen() is a wrapper around gdk_display_get_screen().
func (v *Display) GetScreen(screenNum int) (*Screen, error) {
c := C.gdk_display_get_screen(v.native(), C.gint(screenNum))
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
s := &Screen{obj}
obj.Ref()
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return s, nil
}
// GetDefaultScreen() is a wrapper around gdk_display_get_default_screen().
func (v *Display) GetDefaultScreen() (*Screen, error) {
c := C.gdk_display_get_default_screen(v.native())
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
s := &Screen{obj}
obj.Ref()
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return s, nil
}
// GetDeviceManager() is a wrapper around gdk_display_get_device_manager().
func (v *Display) GetDeviceManager() (*DeviceManager, error) {
c := C.gdk_display_get_device_manager(v.native())
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
d := &DeviceManager{obj}
obj.Ref()
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return d, nil
}
// DeviceIsGrabbed() is a wrapper around gdk_display_device_is_grabbed().
func (v *Display) DeviceIsGrabbed(device *Device) bool {
c := C.gdk_display_device_is_grabbed(v.native(), device.native())
return gobool(c)
}
// Beep() is a wrapper around gdk_display_beep().
func (v *Display) Beep() {
C.gdk_display_beep(v.native())
}
// Sync() is a wrapper around gdk_display_sync().
func (v *Display) Sync() {
C.gdk_display_sync(v.native())
}
// Flush() is a wrapper around gdk_display_flush().
func (v *Display) Flush() {
C.gdk_display_flush(v.native())
}
// Close() is a wrapper around gdk_display_close().
func (v *Display) Close() {
C.gdk_display_close(v.native())
}
// IsClosed() is a wrapper around gdk_display_is_closed().
func (v *Display) IsClosed() bool {
c := C.gdk_display_is_closed(v.native())
return gobool(c)
}
// GetEvent() is a wrapper around gdk_display_get_event().
func (v *Display) GetEvent() (*Event, error) {
c := C.gdk_display_get_event(v.native())
if c == nil {
return nil, nilPtrErr
}
e := &Event{c}
runtime.SetFinalizer(e, (*Event).free)
return e, nil
}
// PeekEvent() is a wrapper around gdk_display_peek_event().
func (v *Display) PeekEvent() (*Event, error) {
c := C.gdk_display_peek_event(v.native())
if c == nil {
return nil, nilPtrErr
}
e := &Event{c}
runtime.SetFinalizer(e, (*Event).free)
return e, nil
}
// PutEvent() is a wrapper around gdk_display_put_event().
func (v *Display) PutEvent(event *Event) {
C.gdk_display_put_event(v.native(), event.native())
}
// HasPending() is a wrapper around gdk_display_has_pending().
func (v *Display) HasPending() bool {
c := C.gdk_display_has_pending(v.native())
return gobool(c)
}
// SetDoubleClickTime() is a wrapper around gdk_display_set_double_click_time().
func (v *Display) SetDoubleClickTime(msec uint) {
C.gdk_display_set_double_click_time(v.native(), C.guint(msec))
}
// SetDoubleClickDistance() is a wrapper around gdk_display_set_double_click_distance().
func (v *Display) SetDoubleClickDistance(distance uint) {
C.gdk_display_set_double_click_distance(v.native(), C.guint(distance))
}
// SupportsColorCursor() is a wrapper around gdk_display_supports_cursor_color().
func (v *Display) SupportsColorCursor() bool {
c := C.gdk_display_supports_cursor_color(v.native())
return gobool(c)
}
// SupportsCursorAlpha() is a wrapper around gdk_display_supports_cursor_alpha().
func (v *Display) SupportsCursorAlpha() bool {
c := C.gdk_display_supports_cursor_alpha(v.native())
return gobool(c)
}
// GetDefaultCursorSize() is a wrapper around gdk_display_get_default_cursor_size().
func (v *Display) GetDefaultCursorSize() uint {
c := C.gdk_display_get_default_cursor_size(v.native())
return uint(c)
}
// GetMaximalCursorSize() is a wrapper around gdk_display_get_maximal_cursor_size().
func (v *Display) GetMaximalCursorSize() (width, height uint) {
var w, h C.guint
C.gdk_display_get_maximal_cursor_size(v.native(), &w, &h)
return uint(w), uint(h)
}
// GetDefaultGroup() is a wrapper around gdk_display_get_default_group().
func (v *Display) GetDefaultGroup() (*Window, error) {
c := C.gdk_display_get_default_group(v.native())
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
w := &Window{obj}
obj.Ref()
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return w, nil
}
// SupportsSelectionNotification() is a wrapper around
// gdk_display_supports_selection_notification().
func (v *Display) SupportsSelectionNotification() bool {
c := C.gdk_display_supports_selection_notification(v.native())
return gobool(c)
}
// RequestSelectionNotification() is a wrapper around
// gdk_display_request_selection_notification().
func (v *Display) RequestSelectionNotification(selection Atom) bool {
c := C.gdk_display_request_selection_notification(v.native(),
selection.native())
return gobool(c)
}
// SupportsClipboardPersistence() is a wrapper around
// gdk_display_supports_clipboard_persistence().
func (v *Display) SupportsClipboardPersistence() bool {
c := C.gdk_display_supports_clipboard_persistence(v.native())
return gobool(c)
}
// TODO(jrick)
func (v *Display) StoreClipboard(clipboardWindow *Window, time uint32, targets ...Atom) {
}
// SupportsShapes() is a wrapper around gdk_display_supports_shapes().
func (v *Display) SupportsShapes() bool {
c := C.gdk_display_supports_shapes(v.native())
return gobool(c)
}
// SupportsInputShapes() is a wrapper around gdk_display_supports_input_shapes().
func (v *Display) SupportsInputShapes() bool {
c := C.gdk_display_supports_input_shapes(v.native())
return gobool(c)
}
// TODO(jrick) glib.AppLaunchContext GdkAppLaunchContext
func (v *Display) GetAppLaunchContext() {
}
// NotifyStartupComplete() is a wrapper around gdk_display_notify_startup_complete().
func (v *Display) NotifyStartupComplete(startupID string) {
cstr := C.CString(startupID)
defer C.free(unsafe.Pointer(cstr))
C.gdk_display_notify_startup_complete(v.native(), (*C.gchar)(cstr))
}
// EventType is a representation of GDK's GdkEventType.
// Do not confuse these event types with the signals that GTK+ widgets emit
type EventType int
func marshalEventType(p uintptr) (interface{}, error) {
c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p)))
return EventType(c), nil
}
const (
EVENT_NOTHING EventType = C.GDK_NOTHING
EVENT_DELETE EventType = C.GDK_DELETE
EVENT_DESTROY EventType = C.GDK_DESTROY
EVENT_EXPOSE EventType = C.GDK_EXPOSE
EVENT_MOTION_NOTIFY EventType = C.GDK_MOTION_NOTIFY
EVENT_BUTTON_PRESS EventType = C.GDK_BUTTON_PRESS
EVENT_2BUTTON_PRESS EventType = C.GDK_2BUTTON_PRESS
EVENT_DOUBLE_BUTTON_PRESS EventType = C.GDK_DOUBLE_BUTTON_PRESS
EVENT_3BUTTON_PRESS EventType = C.GDK_3BUTTON_PRESS
EVENT_TRIPLE_BUTTON_PRESS EventType = C.GDK_TRIPLE_BUTTON_PRESS
EVENT_BUTTON_RELEASE EventType = C.GDK_BUTTON_RELEASE
EVENT_KEY_PRESS EventType = C.GDK_KEY_PRESS
EVENT_KEY_RELEASE EventType = C.GDK_KEY_RELEASE
EVENT_LEAVE_NOTIFY EventType = C.GDK_ENTER_NOTIFY
EVENT_FOCUS_CHANGE EventType = C.GDK_FOCUS_CHANGE
EVENT_CONFIGURE EventType = C.GDK_CONFIGURE
EVENT_MAP EventType = C.GDK_MAP
EVENT_UNMAP EventType = C.GDK_UNMAP
EVENT_PROPERTY_NOTIFY EventType = C.GDK_PROPERTY_NOTIFY
EVENT_SELECTION_CLEAR EventType = C.GDK_SELECTION_CLEAR
EVENT_SELECTION_REQUEST EventType = C.GDK_SELECTION_REQUEST
EVENT_SELECTION_NOTIFY EventType = C.GDK_SELECTION_NOTIFY
EVENT_PROXIMITY_IN EventType = C.GDK_PROXIMITY_IN
EVENT_PROXIMITY_OUT EventType = C.GDK_PROXIMITY_OUT
EVENT_DRAG_ENTER EventType = C.GDK_DRAG_ENTER
EVENT_DRAG_LEAVE EventType = C.GDK_DRAG_LEAVE
EVENT_DRAG_MOTION EventType = C.GDK_DRAG_MOTION
EVENT_DRAG_STATUS EventType = C.GDK_DRAG_STATUS
EVENT_DROP_START EventType = C.GDK_DROP_START
EVENT_DROP_FINISHED EventType = C.GDK_DROP_FINISHED
EVENT_CLIENT_EVENT EventType = C.GDK_CLIENT_EVENT
EVENT_VISIBILITY_NOTIFY EventType = C.GDK_VISIBILITY_NOTIFY
EVENT_SCROLL EventType = C.GDK_SCROLL
EVENT_WINDOW_STATE EventType = C.GDK_WINDOW_STATE
EVENT_SETTING EventType = C.GDK_SETTING
EVENT_OWNER_CHANGE EventType = C.GDK_OWNER_CHANGE
EVENT_GRAB_BROKEN EventType = C.GDK_GRAB_BROKEN
EVENT_DAMAGE EventType = C.GDK_DAMAGE
EVENT_TOUCH_BEGIN EventType = C.GDK_TOUCH_BEGIN
EVENT_TOUCH_UPDATE EventType = C.GDK_TOUCH_UPDATE
EVENT_TOUCH_END EventType = C.GDK_TOUCH_END
EVENT_TOUCH_CANCEL EventType = C.GDK_TOUCH_CANCEL
EVENT_LAST EventType = C.GDK_EVENT_LAST
)
/*
* GDK Keyval
*/
// KeyvalFromName() is a wrapper around gdk_keyval_from_name().
func KeyvalFromName(keyvalName string) uint {
str := (*C.gchar)(C.CString(keyvalName))
defer C.free(unsafe.Pointer(str))
return uint(C.gdk_keyval_from_name(str))
}
func KeyvalConvertCase(v uint) (lower, upper uint) {
var l, u C.guint
l = 0
u = 0
C.gdk_keyval_convert_case(C.guint(v), &l, &u)
return uint(l), uint(u)
}
func KeyvalIsLower(v uint) bool {
return gobool(C.gdk_keyval_is_lower(C.guint(v)))
}
func KeyvalIsUpper(v uint) bool {
return gobool(C.gdk_keyval_is_upper(C.guint(v)))
}
func KeyvalToLower(v uint) uint {
return uint(C.gdk_keyval_to_lower(C.guint(v)))
}
func KeyvalToUpper(v uint) uint {
return uint(C.gdk_keyval_to_upper(C.guint(v)))
}
/*
* GdkDragContext
*/
// DragContext is a representation of GDK's GdkDragContext.
type DragContext struct {
*glib.Object
}
// native returns a pointer to the underlying GdkDragContext.
func (v *DragContext) native() *C.GdkDragContext {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGdkDragContext(p)
}
// Native returns a pointer to the underlying GdkDragContext.
func (v *DragContext) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func marshalDragContext(p uintptr) (interface{}, error) {
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
return &DragContext{obj}, nil
}
func (v *DragContext) ListTargets() *glib.List {
c := C.gdk_drag_context_list_targets(v.native())
return glib.WrapList(uintptr(unsafe.Pointer(c)))
}
/*
* GdkEvent
*/
// Event is a representation of GDK's GdkEvent.
type Event struct {
GdkEvent *C.GdkEvent
}
// native returns a pointer to the underlying GdkEvent.
func (v *Event) native() *C.GdkEvent {
if v == nil {
return nil
}
return v.GdkEvent
}
// Native returns a pointer to the underlying GdkEvent.
func (v *Event) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func marshalEvent(p uintptr) (interface{}, error) {
c := C.g_value_get_boxed((*C.GValue)(unsafe.Pointer(p)))
return &Event{(*C.GdkEvent)(unsafe.Pointer(c))}, nil
}
func (v *Event) free() {
C.gdk_event_free(v.native())
}
/*
* GdkEventButton
*/
// EventButton is a representation of GDK's GdkEventButton.
type EventButton struct {
*Event
}
// Native returns a pointer to the underlying GdkEventButton.
func (v *EventButton) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func (v *EventButton) native() *C.GdkEventButton {
return (*C.GdkEventButton)(unsafe.Pointer(v.Event.native()))
}
func (v *EventButton) X() float64 {
c := v.native().x
return float64(c)
}
func (v *EventButton) Y() float64 {
c := v.native().y
return float64(c)
}
// XRoot returns the x coordinate of the pointer relative to the root of the screen.
func (v *EventButton) XRoot() float64 {
c := v.native().x_root
return float64(c)
}
// YRoot returns the y coordinate of the pointer relative to the root of the screen.
func (v *EventButton) YRoot() float64 {
c := v.native().y_root
return float64(c)
}
func (v *EventButton) Button() uint {
c := v.native().button
return uint(c)
}
func (v *EventButton) State() uint {
c := v.native().state
return uint(c)
}
// Time returns the time of the event in milliseconds.
func (v *EventButton) Time() uint32 {
c := v.native().time
return uint32(c)
}
func (v *EventButton) Type() EventType {
c := v.native()._type
return EventType(c)
}
func (v *EventButton) MotionVal() (float64, float64) {
x := v.native().x
y := v.native().y
return float64(x), float64(y)
}
func (v *EventButton) MotionValRoot() (float64, float64) {
x := v.native().x_root
y := v.native().y_root
return float64(x), float64(y)
}
func (v *EventButton) ButtonVal() uint {
c := v.native().button
return uint(c)
}
/*
* GdkEventKey
*/
// EventKey is a representation of GDK's GdkEventKey.
type EventKey struct {
*Event
}
func EventKeyNew() *EventKey {
ee := (*C.GdkEvent)(unsafe.Pointer(&C.GdkEventKey{}))
ev := Event{ee}
return &EventKey{&ev}
}
// Native returns a pointer to the underlying GdkEventKey.
func (v *EventKey) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func (v *EventKey) native() *C.GdkEventKey {
return (*C.GdkEventKey)(unsafe.Pointer(v.Event.native()))
}
func (v *EventKey) KeyVal() uint {
c := v.native().keyval
return uint(c)
}
func (v *EventKey) Type() EventType {
c := v.native()._type
return EventType(c)
}
func (v *EventKey) State() uint {
c := v.native().state
return uint(c)
}
/*
* GdkEventMotion
*/
type EventMotion struct {
*Event
}
// Native returns a pointer to the underlying GdkEventMotion.
func (v *EventMotion) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func (v *EventMotion) native() *C.GdkEventMotion {
return (*C.GdkEventMotion)(unsafe.Pointer(v.Event.native()))
}
func (v *EventMotion) MotionVal() (float64, float64) {
x := v.native().x
y := v.native().y
return float64(x), float64(y)
}
func (v *EventMotion) MotionValRoot() (float64, float64) {
x := v.native().x_root
y := v.native().y_root
return float64(x), float64(y)
}
/*
* GdkEventScroll
*/
// EventScroll is a representation of GDK's GdkEventScroll.
type EventScroll struct {
*Event
}
// Native returns a pointer to the underlying GdkEventScroll.
func (v *EventScroll) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func (v *EventScroll) native() *C.GdkEventScroll {
return (*C.GdkEventScroll)(unsafe.Pointer(v.Event.native()))
}
func (v *EventScroll) DeltaX() float64 {
return float64(v.native().delta_x)
}
func (v *EventScroll) DeltaY() float64 {
return float64(v.native().delta_y)
}
func (v *EventScroll) X() float64 {
return float64(v.native().x)
}
func (v *EventScroll) Y() float64 {
return float64(v.native().y)
}
func (v *EventScroll) Type() EventType {
c := v.native()._type
return EventType(c)
}
func (v *EventScroll) Direction() ScrollDirection {
c := v.native().direction
return ScrollDirection(c)
}
/*
* GdkGravity
*/
type GdkGravity int
const (
GDK_GRAVITY_NORTH_WEST = C.GDK_GRAVITY_NORTH_WEST
GDK_GRAVITY_NORTH = C.GDK_GRAVITY_NORTH
GDK_GRAVITY_NORTH_EAST = C.GDK_GRAVITY_NORTH_EAST
GDK_GRAVITY_WEST = C.GDK_GRAVITY_WEST
GDK_GRAVITY_CENTER = C.GDK_GRAVITY_CENTER
GDK_GRAVITY_EAST = C.GDK_GRAVITY_EAST
GDK_GRAVITY_SOUTH_WEST = C.GDK_GRAVITY_SOUTH_WEST
GDK_GRAVITY_SOUTH = C.GDK_GRAVITY_SOUTH
GDK_GRAVITY_SOUTH_EAST = C.GDK_GRAVITY_SOUTH_EAST
GDK_GRAVITY_STATIC = C.GDK_GRAVITY_STATIC
)
/*
* GdkPixbuf
*/
// Pixbuf is a representation of GDK's GdkPixbuf.
type Pixbuf struct {
*glib.Object
}
// native returns a pointer to the underlying GdkPixbuf.
func (v *Pixbuf) native() *C.GdkPixbuf {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGdkPixbuf(p)
}
// Native returns a pointer to the underlying GdkPixbuf.
func (v *Pixbuf) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func marshalPixbuf(p uintptr) (interface{}, error) {
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
return &Pixbuf{obj}, nil
}
// GetColorspace is a wrapper around gdk_pixbuf_get_colorspace().
func (v *Pixbuf) GetColorspace() Colorspace {
c := C.gdk_pixbuf_get_colorspace(v.native())
return Colorspace(c)
}
// GetNChannels is a wrapper around gdk_pixbuf_get_n_channels().
func (v *Pixbuf) GetNChannels() int {
c := C.gdk_pixbuf_get_n_channels(v.native())
return int(c)
}
// GetHasAlpha is a wrapper around gdk_pixbuf_get_has_alpha().
func (v *Pixbuf) GetHasAlpha() bool {
c := C.gdk_pixbuf_get_has_alpha(v.native())
return gobool(c)
}
// GetBitsPerSample is a wrapper around gdk_pixbuf_get_bits_per_sample().
func (v *Pixbuf) GetBitsPerSample() int {
c := C.gdk_pixbuf_get_bits_per_sample(v.native())
return int(c)
}
// GetPixels is a wrapper around gdk_pixbuf_get_pixels_with_length().
// A Go slice is used to represent the underlying Pixbuf data array, one
// byte per channel.
func (v *Pixbuf) GetPixels() (channels []byte) {
var length C.guint
c := C.gdk_pixbuf_get_pixels_with_length(v.native(), &length)
sliceHeader := (*reflect.SliceHeader)(unsafe.Pointer(&channels))
sliceHeader.Data = uintptr(unsafe.Pointer(c))
sliceHeader.Len = int(length)
sliceHeader.Cap = int(length)
// To make sure the slice doesn't outlive the Pixbuf, add a reference
v.Ref()
runtime.SetFinalizer(&channels, func(_ *[]byte) {
v.Unref()
})
return
}
// GetWidth is a wrapper around gdk_pixbuf_get_width().
func (v *Pixbuf) GetWidth() int {
c := C.gdk_pixbuf_get_width(v.native())
return int(c)
}
// GetHeight is a wrapper around gdk_pixbuf_get_height().
func (v *Pixbuf) GetHeight() int {
c := C.gdk_pixbuf_get_height(v.native())
return int(c)
}
// GetRowstride is a wrapper around gdk_pixbuf_get_rowstride().
func (v *Pixbuf) GetRowstride() int {
c := C.gdk_pixbuf_get_rowstride(v.native())
return int(c)
}
// GetByteLength is a wrapper around gdk_pixbuf_get_byte_length().
func (v *Pixbuf) GetByteLength() int {
c := C.gdk_pixbuf_get_byte_length(v.native())
return int(c)
}
// GetOption is a wrapper around gdk_pixbuf_get_option(). ok is true if
// the key has an associated value.
func (v *Pixbuf) GetOption(key string) (value string, ok bool) {
cstr := C.CString(key)
defer C.free(unsafe.Pointer(cstr))
c := C.gdk_pixbuf_get_option(v.native(), (*C.gchar)(cstr))
if c == nil {
return "", false
}
return C.GoString((*C.char)(c)), true
}
// PixbufNew is a wrapper around gdk_pixbuf_new().
func PixbufNew(colorspace Colorspace, hasAlpha bool, bitsPerSample, width, height int) (*Pixbuf, error) {
c := C.gdk_pixbuf_new(C.GdkColorspace(colorspace), gbool(hasAlpha),
C.int(bitsPerSample), C.int(width), C.int(height))
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
p := &Pixbuf{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// PixbufCopy is a wrapper around gdk_pixbuf_copy().
func PixbufCopy(v *Pixbuf) (*Pixbuf, error) {
c := C.gdk_pixbuf_copy(v.native())
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
p := &Pixbuf{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// PixbufNewFromFile is a wrapper around gdk_pixbuf_new_from_file().
func PixbufNewFromFile(filename string) (*Pixbuf, error) {
cstr := C.CString(filename)
defer C.free(unsafe.Pointer(cstr))
var err *C.GError
res := C.gdk_pixbuf_new_from_file((*C.char)(cstr), &err)
if res == nil {
defer C.g_error_free(err)
return nil, errors.New(C.GoString((*C.char)(err.message)))
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(res))}
p := &Pixbuf{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// PixbufNewFromFileAtSize is a wrapper around gdk_pixbuf_new_from_file_at_size().
func PixbufNewFromFileAtSize(filename string, width, height int) (*Pixbuf, error) {
cstr := C.CString(filename)
defer C.free(unsafe.Pointer(cstr))
var err *C.GError = nil
res := C.gdk_pixbuf_new_from_file_at_size(cstr, C.int(width), C.int(height), &err)
if err != nil {
defer C.g_error_free(err)
return nil, errors.New(C.GoString((*C.char)(err.message)))
}
if res == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(res))}
p := &Pixbuf{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// PixbufNewFromFileAtScale is a wrapper around gdk_pixbuf_new_from_file_at_scale().
func PixbufNewFromFileAtScale(filename string, width, height int, preserveAspectRatio bool) (*Pixbuf, error) {
cstr := C.CString(filename)
defer C.free(unsafe.Pointer(cstr))
var err *C.GError = nil
res := C.gdk_pixbuf_new_from_file_at_scale(cstr, C.int(width), C.int(height),
gbool(preserveAspectRatio), &err)
if err != nil {
defer C.g_error_free(err)
return nil, errors.New(C.GoString((*C.char)(err.message)))
}
if res == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(res))}
p := &Pixbuf{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// ScaleSimple is a wrapper around gdk_pixbuf_scale_simple().
func (v *Pixbuf) ScaleSimple(destWidth, destHeight int, interpType InterpType) (*Pixbuf, error) {
c := C.gdk_pixbuf_scale_simple(v.native(), C.int(destWidth),
C.int(destHeight), C.GdkInterpType(interpType))
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
p := &Pixbuf{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// RotateSimple is a wrapper around gdk_pixbuf_rotate_simple().
func (v *Pixbuf) RotateSimple(angle PixbufRotation) (*Pixbuf, error) {
c := C.gdk_pixbuf_rotate_simple(v.native(), C.GdkPixbufRotation(angle))
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
p := &Pixbuf{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// ApplyEmbeddedOrientation is a wrapper around gdk_pixbuf_apply_embedded_orientation().
func (v *Pixbuf) ApplyEmbeddedOrientation() (*Pixbuf, error) {
c := C.gdk_pixbuf_apply_embedded_orientation(v.native())
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
p := &Pixbuf{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// Flip is a wrapper around gdk_pixbuf_flip().
func (v *Pixbuf) Flip(horizontal bool) (*Pixbuf, error) {
c := C.gdk_pixbuf_flip(v.native(), gbool(horizontal))
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
p := &Pixbuf{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// SaveJPEG is a wrapper around gdk_pixbuf_save().
// Quality is a number between 0...100
func (v *Pixbuf) SaveJPEG(path string, quality int) error {
cpath := C.CString(path)
cquality := C.CString(strconv.Itoa(quality))
defer C.free(unsafe.Pointer(cpath))
defer C.free(unsafe.Pointer(cquality))
var err *C.GError
c := C._gdk_pixbuf_save_jpeg(v.native(), cpath, &err, cquality)
if !gobool(c) {
defer C.g_error_free(err)
return errors.New(C.GoString((*C.char)(err.message)))
}
return nil
}
// SavePNG is a wrapper around gdk_pixbuf_save().
// Compression is a number between 0...9
func (v *Pixbuf) SavePNG(path string, compression int) error {
cpath := C.CString(path)
ccompression := C.CString(strconv.Itoa(compression))
defer C.free(unsafe.Pointer(cpath))
defer C.free(unsafe.Pointer(ccompression))
var err *C.GError
c := C._gdk_pixbuf_save_png(v.native(), cpath, &err, ccompression)
if !gobool(c) {
defer C.g_error_free(err)
return errors.New(C.GoString((*C.char)(err.message)))
}
return nil
}
// PixbufGetFileInfo is a wrapper around gdk_pixbuf_get_file_info().
// TODO: need to wrap the returned format to GdkPixbufFormat.
func PixbufGetFileInfo(filename string) (format interface{}, width, height int) {
cstr := C.CString(filename)
defer C.free(unsafe.Pointer(cstr))
var cw, ch C.gint
format = C.gdk_pixbuf_get_file_info((*C.gchar)(cstr), &cw, &ch)
// TODO: need to wrap the returned format to GdkPixbufFormat.
return format, int(cw), int(ch)
}
/*
* GdkPixbufLoader
*/
// PixbufLoader is a representation of GDK's GdkPixbufLoader.
// Users of PixbufLoader are expected to call Close() when they are finished.
type PixbufLoader struct {
*glib.Object
}
// native() returns a pointer to the underlying GdkPixbufLoader.
func (v *PixbufLoader) native() *C.GdkPixbufLoader {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGdkPixbufLoader(p)
}
// PixbufLoaderNew() is a wrapper around gdk_pixbuf_loader_new().
func PixbufLoaderNew() (*PixbufLoader, error) {
c := C.gdk_pixbuf_loader_new()
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
p := &PixbufLoader{obj}
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
// Write() is a wrapper around gdk_pixbuf_loader_write(). The
// function signature differs from the C equivalent to satisify the
// io.Writer interface.
func (v *PixbufLoader) Write(data []byte) (int, error) {
// n is set to 0 on error, and set to len(data) otherwise.
// This is a tiny hacky to satisfy io.Writer and io.WriteCloser,
// which would allow access to all io and ioutil goodies,
// and play along nice with go environment.
if len(data) == 0 {
return 0, nil
}
var err *C.GError
c := C.gdk_pixbuf_loader_write(v.native(),
(*C.guchar)(unsafe.Pointer(&data[0])), C.gsize(len(data)),
&err)
if !gobool(c) {
defer C.g_error_free(err)
return 0, errors.New(C.GoString((*C.char)(err.message)))
}
return len(data), nil
}
// Close is a wrapper around gdk_pixbuf_loader_close(). An error is
// returned instead of a bool like the native C function to support the
// io.Closer interface.
func (v *PixbufLoader) Close() error {
var err *C.GError
if ok := gobool(C.gdk_pixbuf_loader_close(v.native(), &err)); !ok {
defer C.g_error_free(err)
return errors.New(C.GoString((*C.char)(err.message)))
}
return nil
}
// SetSize is a wrapper around gdk_pixbuf_loader_set_size().
func (v *PixbufLoader) SetSize(width, height int) {
C.gdk_pixbuf_loader_set_size(v.native(), C.int(width), C.int(height))
}
// GetPixbuf is a wrapper around gdk_pixbuf_loader_get_pixbuf().
func (v *PixbufLoader) GetPixbuf() (*Pixbuf, error) {
c := C.gdk_pixbuf_loader_get_pixbuf(v.native())
if c == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
p := &Pixbuf{obj}
obj.Ref()
runtime.SetFinalizer(obj, (*glib.Object).Unref)
return p, nil
}
type RGBA struct {
rgba *C.GdkRGBA
}
func marshalRGBA(p uintptr) (interface{}, error) {
c := C.g_value_get_boxed((*C.GValue)(unsafe.Pointer(p)))
c2 := (*C.GdkRGBA)(unsafe.Pointer(c))
return wrapRGBA(c2), nil
}
func wrapRGBA(obj *C.GdkRGBA) *RGBA {
return &RGBA{obj}
}
func NewRGBA(values ...float64) *RGBA {
cval := C.GdkRGBA{}
c := &RGBA{&cval}
if len(values) > 0 {
c.rgba.red = C.gdouble(values[0])
}
if len(values) > 1 {
c.rgba.green = C.gdouble(values[1])
}
if len(values) > 2 {
c.rgba.blue = C.gdouble(values[2])
}
if len(values) > 3 {
c.rgba.alpha = C.gdouble(values[3])
}
return c
}
func (c *RGBA) Floats() []float64 {
return []float64{float64(c.rgba.red), float64(c.rgba.green), float64(c.rgba.blue), float64(c.rgba.alpha)}
}
func (v *RGBA) Native() uintptr {
return uintptr(unsafe.Pointer(v.rgba))
}
// Parse is a representation of gdk_rgba_parse().
func (v *RGBA) Parse(spec string) bool {
cstr := (*C.gchar)(C.CString(spec))
defer C.free(unsafe.Pointer(cstr))
return gobool(C.gdk_rgba_parse(v.rgba, cstr))
}
// String is a representation of gdk_rgba_to_string().
func (v *RGBA) String() string {
return C.GoString((*C.char)(C.gdk_rgba_to_string(v.rgba)))
}
// GdkRGBA * gdk_rgba_copy ()
// void gdk_rgba_free ()
// gboolean gdk_rgba_equal ()
// guint gdk_rgba_hash ()
// PixbufGetType is a wrapper around gdk_pixbuf_get_type().
func PixbufGetType() glib.Type {
return glib.Type(C.gdk_pixbuf_get_type())
}
/*
* GdkRectangle
*/
// Rectangle is a representation of GDK's GdkRectangle type.
type Rectangle struct {
GdkRectangle C.GdkRectangle
}
func WrapRectangle(p uintptr) *Rectangle {
return wrapRectangle((*C.GdkRectangle)(unsafe.Pointer(p)))
}
func wrapRectangle(obj *C.GdkRectangle) *Rectangle {
if obj == nil {
return nil
}
return &Rectangle{*obj}
}
// Native() returns a pointer to the underlying GdkRectangle.
func (r *Rectangle) native() *C.GdkRectangle {
return &r.GdkRectangle
}
// GetX returns x field of the underlying GdkRectangle.
func (r *Rectangle) GetX() int {
return int(r.native().x)
}
// GetY returns y field of the underlying GdkRectangle.
func (r *Rectangle) GetY() int {
return int(r.native().y)
}
// GetWidth returns width field of the underlying GdkRectangle.
func (r *Rectangle) GetWidth() int {
return int(r.native().width)
}
// GetHeight returns height field of the underlying GdkRectangle.
func (r *Rectangle) GetHeight() int {
return int(r.native().height)
}
/*
* GdkVisual
*/
// Visual is a representation of GDK's GdkVisual.
type Visual struct {
*glib.Object
}
func (v *Visual) native() *C.GdkVisual {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGdkVisual(p)
}
func (v *Visual) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func marshalVisual(p uintptr) (interface{}, error) {
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
return &Visual{obj}, nil
}
/*
* GdkWindow
*/
// Window is a representation of GDK's GdkWindow.
type Window struct {
*glib.Object
}
// native returns a pointer to the underlying GdkWindow.
func (v *Window) native() *C.GdkWindow {
if v == nil || v.GObject == nil {
return nil
}
p := unsafe.Pointer(v.GObject)
return C.toGdkWindow(p)
}
// Native returns a pointer to the underlying GdkWindow.
func (v *Window) Native() uintptr {
return uintptr(unsafe.Pointer(v.native()))
}
func marshalWindow(p uintptr) (interface{}, error) {
c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p)))
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(c))}
return &Window{obj}, nil
}
func toWindow(s *C.GdkWindow) (*Window, error) {
if s == nil {
return nil, nilPtrErr
}
obj := &glib.Object{glib.ToGObject(unsafe.Pointer(s))}
return &Window{obj}, nil
}