Protocols
The following protocols are available globally.
-
The
AppLaunchContextProtocolprotocol exposes the methods and properties of an underlyingGdkAppLaunchContextinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeAppLaunchContext. Alternatively, useAppLaunchContextRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkAppLaunchContexthandles launching an application in a graphical context.It is an implementation of
GAppLaunchContextthat provides startup notification and allows to launch applications on a specific screen or workspace.Launching an application
See moreGdkAppLaunchContext *context; context = gdk_display_get_app_launch_context (display); gdk_app_launch_context_set_display (display); gdk_app_launch_context_set_timestamp (gdk_event_get_time (event)); if (!g_app_info_launch_default_for_uri ("http://www.gtk.org", context, &error)) g_warning ("Launching failed: `s`\n", error->message); g_object_unref (context);Declaration
Swift
public protocol AppLaunchContextProtocol : AppLaunchContextProtocol
-
The
ButtonEventProtocolprotocol exposes the methods and properties of an underlyingGdkButtonEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeButtonEvent. Alternatively, useButtonEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to a button on a pointer device.
See moreDeclaration
Swift
public protocol ButtonEventProtocol : EventProtocol
-
The
CairoContextProtocolprotocol exposes the methods and properties of an underlyingGdkCairoContextinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeCairoContext. Alternatively, useCairoContextRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkCairoContextis an object representing the platform-specific draw context.
See moreGdkCairoContexts are created for a surface using [methodGdk.Surface.create_cairo_context], and the context can then be used to draw on that surface.Declaration
Swift
public protocol CairoContextProtocol : DrawContextProtocol
-
The
ClipboardProtocolprotocol exposes the methods and properties of an underlyingGdkClipboardinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeClipboard. Alternatively, useClipboardRefas a lighweight,unownedreference if you already have an instance you just want to use.The
GdkClipboardobject represents data shared between applications or inside an application.To get a
GdkClipboardobject, use [methodGdk.Display.get_clipboard] or [methodGdk.Display.get_primary_clipboard]. You can find out about the data that is currently available in a clipboard using [methodGdk.Clipboard.get_formats].To make text or image data available in a clipboard, use [method
Gdk.Clipboard.set_text] or [methodGdk.Clipboard.set_texture]. For other data, you can use [methodGdk.Clipboard.set_content], which takes a [classGdk.ContentProvider] object.To read textual or image data from a clipboard, use [method
See moreGdk.Clipboard.read_text_async] or [methodGdk.Clipboard.read_texture_async]. For other data, use [methodGdk.Clipboard.read_async], which provides aGInputStreamobject.Declaration
Swift
public protocol ClipboardProtocol : ObjectProtocol
-
The
ContentDeserializerProtocolprotocol exposes the methods and properties of an underlyingGdkContentDeserializerinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeContentDeserializer. Alternatively, useContentDeserializerRefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkContentDeserializeris used to deserialize content received via inter-application data transfers.The
GdkContentDeserializertransforms serialized content that is identified by a mime type into an object identified by a GType.GTK provides serializers and deserializers for common data types such as text, colors, images or file lists. To register your own deserialization functions, use [func
content_register_deserializer].Also see [class
See moreGdk.ContentSerializer].Declaration
Swift
public protocol ContentDeserializerProtocol : AsyncResultProtocol, ObjectProtocol
-
The
ContentProviderProtocolprotocol exposes the methods and properties of an underlyingGdkContentProviderinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeContentProvider. Alternatively, useContentProviderRefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkContentProvideris used to provide content for the clipboard or for drag-and-drop operations in a number of formats.To create a
GdkContentProvider, use [ctorGdk.ContentProvider.new_for_value] or [ctorGdk.ContentProvider.new_for_bytes].GDK knows how to handle common text and image formats out-of-the-box. See [class
See moreGdk.ContentSerializer] and [classGdk.ContentDeserializer] if you want to add support for application-specific data formats.Declaration
Swift
public protocol ContentProviderProtocol : ObjectProtocol
-
The
ContentSerializerProtocolprotocol exposes the methods and properties of an underlyingGdkContentSerializerinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeContentSerializer. Alternatively, useContentSerializerRefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkContentSerializeris used to serialize content for inter-application data transfers.The
GdkContentSerializertransforms an object that is identified by a GType into a serialized form (i.e. a byte stream) that is identified by a mime type.GTK provides serializers and deserializers for common data types such as text, colors, images or file lists. To register your own serialization functions, use [func
content_register_serializer].Also see [class
See moreGdk.ContentDeserializer].Declaration
Swift
public protocol ContentSerializerProtocol : AsyncResultProtocol, ObjectProtocol
-
The
CrossingEventProtocolprotocol exposes the methods and properties of an underlyingGdkCrossingEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeCrossingEvent. Alternatively, useCrossingEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event caused by a pointing device moving between surfaces.
See moreDeclaration
Swift
public protocol CrossingEventProtocol : EventProtocol
-
The
CursorProtocolprotocol exposes the methods and properties of an underlyingGdkCursorinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeCursor. Alternatively, useCursorRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkCursoris used to create and destroy cursors.Cursors are immutable objects, so once you created them, there is no way to modify them later. You should create a new cursor when you want to change something about it.
Cursors by themselves are not very interesting: they must be bound to a window for users to see them. This is done with [method
Gdk.Surface.set_cursor] or [methodGdk.Surface.set_device_cursor]. Applications will typically use higher-level GTK functions such as [methodGtk.Widget.set_cursor]` instead.Cursors are not bound to a given [class
Gdk.Display], so they can be shared. However, the appearance of cursors may vary when used on different platforms.Named and texture cursors
There are multiple ways to create cursors. The platform’s own cursors can be created with [ctor
Gdk.Cursor.new_from_name]. That function lists the commonly available names that are shared with the CSS specification. Other names may be available, depending on the platform in use. On some platforms, what images are used for named cursors may be influenced by the cursor theme.Another option to create a cursor is to use [ctor
Gdk.Cursor.new_from_texture] and provide an image to use for the cursor.To ease work with unsupported cursors, a fallback cursor can be provided. If a [class
See moreGdk.Surface] cannot use a cursor because of the reasons mentioned above, it will try the fallback cursor. Fallback cursors can themselves have fallback cursors again, so it is possible to provide a chain of progressively easier to support cursors. If none of the provided cursors can be supported, the default cursor will be the ultimate fallback.Declaration
Swift
public protocol CursorProtocol : ObjectProtocol
-
The
DNDEventProtocolprotocol exposes the methods and properties of an underlyingGdkDNDEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDNDEvent. Alternatively, useDNDEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to drag and drop operations.
See moreDeclaration
Swift
public protocol DNDEventProtocol : EventProtocol
-
The
ContentFormatsProtocolprotocol exposes the methods and properties of an underlyingGdkContentFormatsinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeContentFormats. Alternatively, useContentFormatsRefas a lighweight,unownedreference if you already have an instance you just want to use.The
GdkContentFormatsstructure is used to advertise and negotiate the format of content.You will encounter
GdkContentFormatswhen interacting with objects controlling operations that pass data between different widgets, window or application, like [classGdk.Drag], [classGdk.Drop], [classGdk.Clipboard] or [classGdk.ContentProvider].GDK supports content in 2 forms:
GTypeand mime type. UsingGTypesis meant only for in-process content transfers. Mime types are meant to be used for data passing both in-process and out-of-process. The details of how data is passed is described in the documentation of the actual implementations. To transform between the two forms, [classGdk.ContentSerializer] and [classGdk.ContentDeserializer] are used.A
GdkContentFormatsdescribes a set of possible formats content can be exchanged in. It is assumed that this set is ordered.GTypesare more important than mime types. Order between differentGTypesor mime types is the order they were added in, most important first. Functions that care about order, such as [methodGdk.ContentFormats.union], will describe in their documentation how they interpret that order, though in general the order of the first argument is considered the primary order of the result, followed by the order of further arguments.For debugging purposes, the function [method
Gdk.ContentFormats.to_string] exists. It will print a comma-separated list of formats from most important to least important.
See moreGdkContentFormatsis an immutable struct. After creation, you cannot change the types it represents. Instead, newGdkContentFormatshave to be created. The [structGdk.ContentFormatsBuilder]` structure is meant to help in this endeavor.Declaration
Swift
public protocol ContentFormatsProtocol
-
The
ContentFormatsBuilderProtocolprotocol exposes the methods and properties of an underlyingGdkContentFormatsBuilderinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeContentFormatsBuilder. Alternatively, useContentFormatsBuilderRefas a lighweight,unownedreference if you already have an instance you just want to use.A
See moreGdkContentFormatsBuilderis an auxiliary struct used to create newGdkContentFormats, and should not be kept around.Declaration
Swift
public protocol ContentFormatsBuilderProtocol
-
The
ContentProviderClassProtocolprotocol exposes the methods and properties of an underlyingGdkContentProviderClassinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeContentProviderClass. Alternatively, useContentProviderClassRefas a lighweight,unownedreference if you already have an instance you just want to use.Class structure for
See moreGdkContentProvider.Declaration
Swift
public protocol ContentProviderClassProtocol
-
The
See moreDevicePadInterfaceProtocolprotocol exposes the methods and properties of an underlyingGdkDevicePadInterfaceinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDevicePadInterface. Alternatively, useDevicePadInterfaceRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol DevicePadInterfaceProtocol
-
The
DeleteEventProtocolprotocol exposes the methods and properties of an underlyingGdkDeleteEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDeleteEvent. Alternatively, useDeleteEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to closing a top-level surface.
See moreDeclaration
Swift
public protocol DeleteEventProtocol : EventProtocol
-
The
DeviceProtocolprotocol exposes the methods and properties of an underlyingGdkDeviceinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDevice. Alternatively, useDeviceRefas a lighweight,unownedreference if you already have an instance you just want to use.The
GdkDeviceobject represents an input device, such as a keyboard, a mouse, or a touchpad.See the [class
See moreGdk.Seat] documentation for more information about the various kinds of devices, and their relationships.Declaration
Swift
public protocol DeviceProtocol : ObjectProtocol
-
The
DeviceToolProtocolprotocol exposes the methods and properties of an underlyingGdkDeviceToolinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDeviceTool. Alternatively, useDeviceToolRefas a lighweight,unownedreference if you already have an instance you just want to use.A physical tool associated to a
See moreGdkDevice.Declaration
Swift
public protocol DeviceToolProtocol : ObjectProtocol
-
The
DisplayProtocolprotocol exposes the methods and properties of an underlyingGdkDisplayinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDisplay. Alternatively, useDisplayRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkDisplayobjects are the GDK representation of a workstation.Their purpose are two-fold:
- To manage and provide information about input devices (pointers, keyboards, etc)
- To manage and provide information about output devices (monitors, projectors, etc)
Most of the input device handling has been factored out into separate [class
Gdk.Seat] objects. Every display has a one or more seats, which can be accessed with [methodGdk.Display.get_default_seat] and [methodGdk.Display.list_seats].Output devices are represented by [class
See moreGdk.Monitor] objects, which can be accessed with [methodGdk.Display.get_monitor_at_surface] and similar APIs.Declaration
Swift
public protocol DisplayProtocol : ObjectProtocol
-
The
DisplayManagerProtocolprotocol exposes the methods and properties of an underlyingGdkDisplayManagerinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDisplayManager. Alternatively, useDisplayManagerRefas a lighweight,unownedreference if you already have an instance you just want to use.A singleton object that offers notification when displays appear or disappear.
You can use [func
Gdk.DisplayManager.get] to obtain theGdkDisplayManagersingleton, but that should be rarely necessary. Typically, initializing GTK opens a display that you can work with without ever accessing theGdkDisplayManager.The GDK library can be built with support for multiple backends. The
GdkDisplayManagerobject determines which backend is used at runtime.In the rare case that you need to influence which of the backends is being used, you can use [func
Gdk.set_allowed_backends]. Note that you need to call this function before initializing GTK.Backend-specific code
When writing backend-specific code that is supposed to work with multiple GDK backends, you have to consider both compile time and runtime. At compile time, use the
GDK_WINDOWING_X11,GDK_WINDOWING_WIN32macros, etc. to find out which backends are present in the GDK library you are building your application against. At runtime, use type-check macros likeGDK_IS_X11_DISPLAY()to find out which backend is in use:
See more`ifdef` GDK_WINDOWING_X11 if (GDK_IS_X11_DISPLAY (display)) { // make X11-specific calls here } else `endif` `ifdef` GDK_WINDOWING_MACOS if (GDK_IS_MACOS_DISPLAY (display)) { // make Quartz-specific calls here } else `endif` g_error ("Unsupported GDK backend");Declaration
Swift
public protocol DisplayManagerProtocol : ObjectProtocol
-
The
DragProtocolprotocol exposes the methods and properties of an underlyingGdkDraginstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDrag. Alternatively, useDragRefas a lighweight,unownedreference if you already have an instance you just want to use.The
GdkDragobject represents the source of an ongoing DND operation.A
GdkDragis created when a drag is started, and stays alive for duration of the DND operation. After a drag has been started with [funcGdk.Drag.begin], the caller gets informed about the status of the ongoing drag operation with signals on theGdkDragobject.GTK provides a higher level abstraction based on top of these functions, and so they are not normally needed in GTK applications. See the “Drag and Drop” section of the GTK documentation for more information.
See moreDeclaration
Swift
public protocol DragProtocol : ObjectProtocol
-
The
DrawContextProtocolprotocol exposes the methods and properties of an underlyingGdkDrawContextinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDrawContext. Alternatively, useDrawContextRefas a lighweight,unownedreference if you already have an instance you just want to use.Base class for objects implementing different rendering methods.
GdkDrawContextis the base object used by contexts implementing different rendering methods, such as [classGdk.CairoContext] or [classGdk.GLContext]. It provides shared functionality between those contexts.You will always interact with one of those subclasses.
A
See moreGdkDrawContextis always associated with a single toplevel surface.Declaration
Swift
public protocol DrawContextProtocol : ObjectProtocol
-
The
DropProtocolprotocol exposes the methods and properties of an underlyingGdkDropinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDrop. Alternatively, useDropRefas a lighweight,unownedreference if you already have an instance you just want to use.The
GdkDropobject represents the target of an ongoing DND operation.Possible drop sites get informed about the status of the ongoing drag operation with events of type
GDK_DRAG_ENTER,GDK_DRAG_LEAVE,GDK_DRAG_MOTIONandGDK_DROP_START. TheGdkDropobject can be obtained from these [classGdk.Event] types using [methodGdk.DNDEvent.get_drop].The actual data transfer is initiated from the target side via an async read, using one of the
GdkDropmethods for this purpose: [methodGdk.Drop.read_async] or [methodGdk.Drop.read_value_async].GTK provides a higher level abstraction based on top of these functions, and so they are not normally needed in GTK applications. See the “Drag and Drop” section of the GTK documentation for more information.
See moreDeclaration
Swift
public protocol DropProtocol : ObjectProtocol
-
The
EventProtocolprotocol exposes the methods and properties of an underlyingGdkEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeEvent. Alternatively, useEventRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkEvents are immutable data structures, created by GDK to represent windowing system events.In GTK applications the events are handled automatically by toplevel widgets and passed on to the event controllers of appropriate widgets, so using
See moreGdkEventand its related API is rarely needed.Declaration
Swift
public protocol EventProtocol
-
The
DevicePadProtocolprotocol exposes the methods and properties of an underlyingGdkDevicePadinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDevicePad. Alternatively, useDevicePadRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkDevicePadis an interface implemented by devices of typeGDK_SOURCE_TABLET_PADIt allows querying the features provided by the pad device.
Tablet pads may contain one or more groups, each containing a subset of the buttons/rings/strips available. [method
Gdk.DevicePad.get_n_groups] can be used to obtain the number of groups, [methodGdk.DevicePad.get_n_features] and [methodGdk.DevicePad.get_feature_group] can be combined to find out the number of buttons/rings/strips the device has, and how are they grouped.Each of those groups have different modes, which may be used to map each individual pad feature to multiple actions. Only one mode is effective (current) for each given group, different groups may have different current modes. The number of available modes in a group can be found out through [method
See moreGdk.DevicePad.get_group_n_modes], and the current mode for a given group will be notified through events of typeGDK_PAD_GROUP_MODE.Declaration
Swift
public protocol DevicePadProtocol : DeviceProtocol
-
The
DragSurfaceProtocolprotocol exposes the methods and properties of an underlyingGdkDragSurfaceinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDragSurface. Alternatively, useDragSurfaceRefas a lighweight,unownedreference if you already have an instance you just want to use.A
See moreGdkDragSurfaceis an interface for surfaces used during DND.Declaration
Swift
public protocol DragSurfaceProtocol : SurfaceProtocol
-
The
PaintableProtocolprotocol exposes the methods and properties of an underlyingGdkPaintableinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seePaintable. Alternatively, usePaintableRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkPaintableis a simple interface used by GTK to represent content that can be painted.The content of a
GdkPaintablecan be painted anywhere at any size without requiring any sort of layout. The interface is inspired by similar concepts elsewhere, such as ClutterContent, HTML/CSS Paint Sources, or SVG Paint Servers.A
GdkPaintablecan be snapshot at any time and size using [methodGdk.Paintable.snapshot]. How the paintable interprets that size and if it scales or centers itself into the given rectangle is implementation defined, though if you are implementing aGdkPaintableand don’t know what to do, it is suggested that you scale your paintable ignoring any potential aspect ratio.The contents that a
GdkPaintableproduces may depend on the [classGdkSnapshot] passed to it. For example, paintables may decide to use more detailed images on higher resolution screens or when OpenGL is available. AGdkPaintablewill however always produce the same output for the same snapshot.A
GdkPaintablemay change its contents, meaning that it will now produce a different output with the same snapshot. Once that happens, it will call [methodGdk.Paintable.invalidate_contents] which will emit the [signalGdkPaintable::invalidate-contents] signal. If a paintable is known to never change its contents, it will set theGDK_PAINTABLE_STATIC_CONTENTSflag. If a consumer cannot deal with changing contents, it may call [methodGdk.Paintable.get_current_image] which will return a static paintable and use that.A paintable can report an intrinsic (or preferred) size or aspect ratio it wishes to be rendered at, though it doesn’t have to. Consumers of the interface can use this information to layout thepaintable appropriately. Just like the contents, the size of a paintable can change. A paintable will indicate this by calling [method
Gdk.Paintable.invalidate_size] which will emit the [signalGdkPaintable::invalidate-size] signal. And just like for contents, if a paintable is known to never change its size, it will set theGDK_PAINTABLE_STATIC_SIZEflag.Besides API for applications, there are some functions that are only useful for implementing subclasses and should not be used by applications: [method
See moreGdk.Paintable.invalidate_contents], [methodGdk.Paintable.invalidate_size], [funcGdk.Paintable.new_empty].Declaration
Swift
public protocol PaintableProtocol
-
The
DragSurfaceInterfaceProtocolprotocol exposes the methods and properties of an underlyingGdkDragSurfaceInterfaceinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeDragSurfaceInterface. Alternatively, useDragSurfaceInterfaceRefas a lighweight,unownedreference if you already have an instance you just want to use.The
See moreGdkDragSurfaceInterfaceimplementation is private to GDK.Declaration
Swift
public protocol DragSurfaceInterfaceProtocol
-
The
EventSequenceProtocolprotocol exposes the methods and properties of an underlyingGdkEventSequenceinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeEventSequence. Alternatively, useEventSequenceRefas a lighweight,unownedreference if you already have an instance you just want to use.
See moreGdkEventSequenceis an opaque type representing a sequence of related touch events.Declaration
Swift
public protocol EventSequenceProtocol
-
The
FocusEventProtocolprotocol exposes the methods and properties of an underlyingGdkFocusEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeFocusEvent. Alternatively, useFocusEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to a keyboard focus change.
See moreDeclaration
Swift
public protocol FocusEventProtocol : EventProtocol
-
The
FrameClockProtocolprotocol exposes the methods and properties of an underlyingGdkFrameClockinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeFrameClock. Alternatively, useFrameClockRefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkFrameClocktells the application when to update and repaint a surface.This may be synced to the vertical refresh rate of the monitor, for example. Even when the frame clock uses a simple timer rather than a hardware-based vertical sync, the frame clock helps because it ensures everything paints at the same time (reducing the total number of frames).
The frame clock can also automatically stop painting when it knows the frames will not be visible, or scale back animation framerates.
GdkFrameClockis designed to be compatible with an OpenGL-based implementation or with mozRequestAnimationFrame in Firefox, for example.A frame clock is idle until someone requests a frame with [method
Gdk.FrameClock.request_phase]. At some later point that makes sense for the synchronization being implemented, the clock will process a frame and emit signals for each phase that has been requested. (See the signals of theGdkFrameClockclass for documentation of the phases.GDK_FRAME_CLOCK_PHASE_UPDATEand the [signalGdkFrameClock::update] signal are most interesting for application writers, and are used to update the animations, using the frame time given by [metohdGdk.FrameClock.get_frame_time].The frame time is reported in microseconds and generally in the same timescale as
See moreg_get_monotonic_time(), however, it is not the same asg_get_monotonic_time(). The frame time does not advance during the time a frame is being painted, and outside of a frame, an attempt is made so that all calls to [methodGdk.FrameClock.get_frame_time] that are called at a “similar” time get the same value. This means that if different animations are timed by looking at the difference in time between an initial value from [methodGdk.FrameClock.get_frame_time] and the value inside the [signalGdkFrameClock::update] signal of the clock, they will stay exactly synchronized.Declaration
Swift
public protocol FrameClockProtocol : ObjectProtocol
-
The
GLContextProtocolprotocol exposes the methods and properties of an underlyingGdkGLContextinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeGLContext. Alternatively, useGLContextRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkGLContextis an object representing a platform-specific OpenGL draw context.GdkGLContexts are created for a surface using [methodGdk.Surface.create_gl_context], and the context will match the the characteristics of the surface.A
GdkGLContextis not tied to any particular normal framebuffer. For instance, it cannot draw to the surface back buffer. The GDK repaint system is in full control of the painting to that. Instead, you can create render buffers or textures and use [funccairo_draw_from_gl] in the draw function of your widget to draw them. Then GDK will handle the integration of your rendering with that of other widgets.Support for
GdkGLContextis platform-specific and context creation can fail, returningnilcontext.A
GdkGLContexthas to be made “current” in order to start using it, otherwise any OpenGL call will be ignored.Creating a new OpenGL context
In order to create a new
GdkGLContextinstance you need aGdkSurface, which you typically get during the realize call of a widget.A
GdkGLContextis not realized until either [methodGdk.GLContext.make_current] or [methodGdk.GLContext.realize] is called. It is possible to specify details of the GL context like the OpenGL version to be used, or whether the GL context should have extra state validation enabled after calling [methodGdk.Surface.create_gl_context] by calling [methodGdk.GLContext.realize]. If the realization fails you have the option to change the settings of theGdkGLContextand try again.Using a GdkGLContext
You will need to make the
GdkGLContextthe current context before issuing OpenGL calls; the system sends OpenGL commands to whichever context is current. It is possible to have multiple contexts, so you always need to ensure that the one which you want to draw with is the current one before issuing commands:gdk_gl_context_make_current (context);You can now perform your drawing using OpenGL commands.
You can check which
See moreGdkGLContextis the current one by using [funcGdk.GLContext.get_current]; you can also unset anyGdkGLContextthat is currently set by calling [funcGdk.GLContext.clear_current].Declaration
Swift
public protocol GLContextProtocol : DrawContextProtocol
-
The
See moreFrameClockClassProtocolprotocol exposes the methods and properties of an underlyingGdkFrameClockClassinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeFrameClockClass. Alternatively, useFrameClockClassRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol FrameClockClassProtocol
-
The
FrameTimingsProtocolprotocol exposes the methods and properties of an underlyingGdkFrameTimingsinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeFrameTimings. Alternatively, useFrameTimingsRefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkFrameTimingsobject holds timing information for a single frame of the application’s displays.To retrieve
See moreGdkFrameTimingsobjects, use [methodGdk.FrameClock.get_timings] or [methodGdk.FrameClock.get_current_timings]. The information inGdkFrameTimingsis useful for precise synchronization of video with the event or audio streams, and for measuring quality metrics for the application’s display, such as latency and jitter.Declaration
Swift
public protocol FrameTimingsProtocol
-
The
See moreGLTextureClassProtocolprotocol exposes the methods and properties of an underlyingGdkGLTextureClassinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeGLTextureClass. Alternatively, useGLTextureClassRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol GLTextureClassProtocol
-
The
GLTextureProtocolprotocol exposes the methods and properties of an underlyingGdkGLTextureinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeGLTexture. Alternatively, useGLTextureRefas a lighweight,unownedreference if you already have an instance you just want to use.A GdkTexture representing a GL texture object.
See moreDeclaration
Swift
public protocol GLTextureProtocol : TextureProtocol
-
The
GrabBrokenEventProtocolprotocol exposes the methods and properties of an underlyingGdkGrabBrokenEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeGrabBrokenEvent. Alternatively, useGrabBrokenEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to a broken windowing system grab.
See moreDeclaration
Swift
public protocol GrabBrokenEventProtocol : EventProtocol
-
The
KeyEventProtocolprotocol exposes the methods and properties of an underlyingGdkKeyEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeKeyEvent. Alternatively, useKeyEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to a key-based device.
See moreDeclaration
Swift
public protocol KeyEventProtocol : EventProtocol
-
The
KeymapKeyProtocolprotocol exposes the methods and properties of an underlyingGdkKeymapKeyinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeKeymapKey. Alternatively, useKeymapKeyRefas a lighweight,unownedreference if you already have an instance you just want to use.A
See moreGdkKeymapKeyis a hardware key that can be mapped to a keyval.Declaration
Swift
public protocol KeymapKeyProtocol
-
The
See moreMemoryTextureClassProtocolprotocol exposes the methods and properties of an underlyingGdkMemoryTextureClassinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeMemoryTextureClass. Alternatively, useMemoryTextureClassRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol MemoryTextureClassProtocol
-
The
MemoryTextureProtocolprotocol exposes the methods and properties of an underlyingGdkMemoryTextureinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeMemoryTexture. Alternatively, useMemoryTextureRefas a lighweight,unownedreference if you already have an instance you just want to use.A
See moreGdkTexturerepresenting image data in memory.Declaration
Swift
public protocol MemoryTextureProtocol : TextureProtocol
-
The
MonitorProtocolprotocol exposes the methods and properties of an underlyingGdkMonitorinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeMonitor. Alternatively, useMonitorRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkMonitorobjects represent the individual outputs that are associated with aGdkDisplay.
See moreGdkDisplaykeeps aGListModelto enumerate and monitor monitors with [methodGdk.Display.get_monitors]. You can use [methodGdk.Display.get_monitor_at_surface] to find a particular monitor.Declaration
Swift
public protocol MonitorProtocol : ObjectProtocol
-
The
MotionEventProtocolprotocol exposes the methods and properties of an underlyingGdkMotionEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeMotionEvent. Alternatively, useMotionEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to a pointer or touch device motion.
See moreDeclaration
Swift
public protocol MotionEventProtocol : EventProtocol
-
The
PadEventProtocolprotocol exposes the methods and properties of an underlyingGdkPadEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seePadEvent. Alternatively, usePadEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to a pad-based device.
See moreDeclaration
Swift
public protocol PadEventProtocol : EventProtocol
-
The
See moreMonitorClassProtocolprotocol exposes the methods and properties of an underlyingGdkMonitorClassinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeMonitorClass. Alternatively, useMonitorClassRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol MonitorClassProtocol
-
The
PaintableInterfaceProtocolprotocol exposes the methods and properties of an underlyingGdkPaintableInterfaceinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seePaintableInterface. Alternatively, usePaintableInterfaceRefas a lighweight,unownedreference if you already have an instance you just want to use.The list of functions that can be implemented for the
GdkPaintableinterface.Note that apart from the
See moreGdkPaintableInterface.snapshot()function, no virtual function of this interface is mandatory to implement, though it is a good idea to implementGdkPaintableInterface.get_current_image()for non-static paintables andGdkPaintableInterface.get_flags()if the image is not dynamic as the default implementation returns no flags and that will make the implementation likely quite slow.Declaration
Swift
public protocol PaintableInterfaceProtocol
-
The
PopupProtocolprotocol exposes the methods and properties of an underlyingGdkPopupinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seePopup. Alternatively, usePopupRefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkPopupis a surface that is attached to another surface.The
GdkPopupis positioned relative to its parent surface.
See moreGdkPopups are typically used to implement menus and similar popups. They can be modal, which is indicated by the [propertyGdkPopup:autohide] property.Declaration
Swift
public protocol PopupProtocol : SurfaceProtocol
-
The
ToplevelProtocolprotocol exposes the methods and properties of an underlyingGdkToplevelinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeToplevel. Alternatively, useToplevelRefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkToplevelis a freestanding toplevel surface.The
See moreGdkToplevelinterface provides useful APIs for interacting with the windowing system, such as controlling maximization and size of the surface, setting icons and transient parents for dialogs.Declaration
Swift
public protocol ToplevelProtocol : SurfaceProtocol
-
The
See morePopupInterfaceProtocolprotocol exposes the methods and properties of an underlyingGdkPopupInterfaceinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seePopupInterface. Alternatively, usePopupInterfaceRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol PopupInterfaceProtocol
-
The
PopupLayoutProtocolprotocol exposes the methods and properties of an underlyingGdkPopupLayoutinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seePopupLayout. Alternatively, usePopupLayoutRefas a lighweight,unownedreference if you already have an instance you just want to use.The
GdkPopupLayoutstruct contains information that is necessary position a [interfaceGdk.Popup] relative to its parent.The positioning requires a negotiation with the windowing system, since it depends on external constraints, such as the position of the parent surface, and the screen dimensions.
The basic ingredients are a rectangle on the parent surface, and the anchor on both that rectangle and the popup. The anchors specify a side or corner to place next to each other.

For cases where placing the anchors next to each other would make the popup extend offscreen, the layout includes some hints for how to resolve this problem. The hints may suggest to flip the anchor position to the other side, or to ‘slide’ the popup along a side, or to resize it.


These hints may be combined.
Ultimatively, it is up to the windowing system to determine the position and size of the popup. You can learn about the result by calling [method
See moreGdk.Popup.get_position_x], [methodGdk.Popup.get_position_y], [methodGdk.Popup.get_rect_anchor] and [methodGdk.Popup.get_surface_anchor] after the popup has been presented. This can be used to adjust the rendering. For example, [classGtk.Popover] changes its arrow position accordingly. But you have to be careful avoid changing the size of the popover, or it has to be presented again.Declaration
Swift
public protocol PopupLayoutProtocol
-
The
RGBAProtocolprotocol exposes the methods and properties of an underlyingGdkRGBAinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeRGBA. Alternatively, useRGBARefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkRGBAis used to represent a color, in a way that is compatible with cairo’s notion of color.
See moreGdkRGBAis a convenient way to pass colors around. It’s based on cairo’s way to deal with colors and mirrors its behavior. All values are in the range from 0.0 to 1.0 inclusive. So the color (0.0, 0.0, 0.0, 0.0) represents transparent black and (1.0, 1.0, 1.0, 1.0) is opaque white. Other values will be clamped to this range when drawing.Declaration
Swift
public protocol RGBAProtocol
-
The
ProximityEventProtocolprotocol exposes the methods and properties of an underlyingGdkProximityEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeProximityEvent. Alternatively, useProximityEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to the proximity of a tool to a device.
See moreDeclaration
Swift
public protocol ProximityEventProtocol : EventProtocol
-
The
ScrollEventProtocolprotocol exposes the methods and properties of an underlyingGdkScrollEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeScrollEvent. Alternatively, useScrollEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to a scrolling motion.
See moreDeclaration
Swift
public protocol ScrollEventProtocol : EventProtocol
-
The
RectangleProtocolprotocol exposes the methods and properties of an underlyingGdkRectangleinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeRectangle. Alternatively, useRectangleRefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkRectangledata type for representing rectangles.GdkRectangleis identical tocairo_rectangle_t. Together with Cairo’scairo_region_tdata type, these are the central types for representing sets of pixels.The intersection of two rectangles can be computed with [method
Gdk.Rectangle.intersect]; to find the union of two rectangles use [methodGdk.Rectangle.union].The
cairo_region_ttype provided by Cairo is usually used for managing non-rectangular clipping of graphical operations.The Graphene library has a number of other data types for regions and volumes in 2D and 3D.
See moreDeclaration
Swift
public protocol RectangleProtocol
-
The
See moreSnapshotClassProtocolprotocol exposes the methods and properties of an underlyingGdkSnapshotClassinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeSnapshotClass. Alternatively, useSnapshotClassRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol SnapshotClassProtocol
-
The
SeatProtocolprotocol exposes the methods and properties of an underlyingGdkSeatinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeSeat. Alternatively, useSeatRefas a lighweight,unownedreference if you already have an instance you just want to use.The
See moreGdkSeatobject represents a collection of input devices that belong to a user.Declaration
Swift
public protocol SeatProtocol : ObjectProtocol
-
The
SnapshotProtocolprotocol exposes the methods and properties of an underlyingGdkSnapshotinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeSnapshot. Alternatively, useSnapshotRefas a lighweight,unownedreference if you already have an instance you just want to use.Base type for snapshot operations.
The subclass of
See moreGdkSnapshotused by GTK is [classGtk.Snapshot].Declaration
Swift
public protocol SnapshotProtocol : ObjectProtocol
-
The
SurfaceProtocolprotocol exposes the methods and properties of an underlyingGdkSurfaceinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeSurface. Alternatively, useSurfaceRefas a lighweight,unownedreference if you already have an instance you just want to use.A
GdkSurfaceis a rectangular region on the screen.It’s a low-level object, used to implement high-level objects such as [class
Gtk.Window] or [classGtk.Dialog] in GTK.The surfaces you see in practice are either [class
See moreGdk.Toplevel] or [classGdk.Popup], and those interfaces provide much of the required API to interact with these surfaces. Other, more specialized surface types exist, but you will rarely interact with them directly.Declaration
Swift
public protocol SurfaceProtocol : ObjectProtocol
-
The
TextureProtocolprotocol exposes the methods and properties of an underlyingGdkTextureinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeTexture. Alternatively, useTextureRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkTextureis the basic element used to refer to pixel data.It is primarily meant for pixel data that will not change over multiple frames, and will be used for a long time.
There are various ways to create
GdkTextureobjects from aGdkPixbuf, or a Cairo surface, or other pixel data.The ownership of the pixel data is transferred to the
GdkTextureinstance; you can only make a copy of it, via [methodGdk.Texture.download].
See moreGdkTextureis an immutable object: That means you cannot change anything about it other than increasing the reference count viag_object_ref().Declaration
Swift
public protocol TextureProtocol : ObjectProtocol, PaintableProtocol
-
The
See moreSurfaceClassProtocolprotocol exposes the methods and properties of an underlyingGdkSurfaceClassinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeSurfaceClass. Alternatively, useSurfaceClassRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol SurfaceClassProtocol
-
The
See moreTextureClassProtocolprotocol exposes the methods and properties of an underlyingGdkTextureClassinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeTextureClass. Alternatively, useTextureClassRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol TextureClassProtocol
-
The
TimeCoordProtocolprotocol exposes the methods and properties of an underlyingGdkTimeCoordinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeTimeCoord. Alternatively, useTimeCoordRefas a lighweight,unownedreference if you already have an instance you just want to use.A
See moreGdkTimeCoordstores a single event in a motion history.Declaration
Swift
public protocol TimeCoordProtocol
-
The
See moreToplevelInterfaceProtocolprotocol exposes the methods and properties of an underlyingGdkToplevelInterfaceinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeToplevelInterface. Alternatively, useToplevelInterfaceRefas a lighweight,unownedreference if you already have an instance you just want to use.Declaration
Swift
public protocol ToplevelInterfaceProtocol
-
The
ToplevelLayoutProtocolprotocol exposes the methods and properties of an underlyingGdkToplevelLayoutinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeToplevelLayout. Alternatively, useToplevelLayoutRefas a lighweight,unownedreference if you already have an instance you just want to use.The
GdkToplevelLayoutstruct contains information that is necessary to present a sovereign window on screen.The
GdkToplevelLayoutstruct is necessary for using [methodGdk.Toplevel.present].Toplevel surfaces are sovereign windows that can be presented to the user in various states (maximized, on all workspaces, etc).
See moreDeclaration
Swift
public protocol ToplevelLayoutProtocol
-
The
ToplevelSizeProtocolprotocol exposes the methods and properties of an underlyingGdkToplevelSizeinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeToplevelSize. Alternatively, useToplevelSizeRefas a lighweight,unownedreference if you already have an instance you just want to use.The
See moreGdkToplevelSizestruct contains information that is useful to compute the size of a toplevel.Declaration
Swift
public protocol ToplevelSizeProtocol
-
The
TouchEventProtocolprotocol exposes the methods and properties of an underlyingGdkTouchEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeTouchEvent. Alternatively, useTouchEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to a touch-based device.
See moreDeclaration
Swift
public protocol TouchEventProtocol : EventProtocol
-
The
TouchpadEventProtocolprotocol exposes the methods and properties of an underlyingGdkTouchpadEventinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeTouchpadEvent. Alternatively, useTouchpadEventRefas a lighweight,unownedreference if you already have an instance you just want to use.An event related to a gesture on a touchpad device.
Unlike touchscreens, where the windowing system sends basic sequences of begin, update, end events, and leaves gesture recognition to the clients, touchpad gestures are typically processed by the system, resulting in these events.
See moreDeclaration
Swift
public protocol TouchpadEventProtocol : EventProtocol
-
The
VulkanContextProtocolprotocol exposes the methods and properties of an underlyingGdkVulkanContextinstance. The default implementation of these can be found in the protocol extension below. For a concrete class that implements these methods and properties, seeVulkanContext. Alternatively, useVulkanContextRefas a lighweight,unownedreference if you already have an instance you just want to use.GdkVulkanContextis an object representing the platform-specific Vulkan draw context.GdkVulkanContexts are created for a surface using [methodGdk.Surface.create_vulkan_context], and the context will match the the characteristics of the surface.Support for
See moreGdkVulkanContextis platform-specific and context creation can fail, returningnilcontext.Declaration
Swift
public protocol VulkanContextProtocol : InitableProtocol, DrawContextProtocol
View on GitHub
Install in Dash
Protocols Reference