Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
GDK
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Software architecture== [[File:GDK software architecture.svg|thumb|GDK contains back-ends to [[X11]], [[Wayland (display server protocol)|Wayland]], Broadway ([[Hypertext Transfer Protocol|HTTP]]), [[Quartz Compositor|Quartz]] and [[Graphics Device Interface|GDI]] and relies on [[Cairo (graphics)|Cairo]] for the rendering. Its new [[Canvas (GUI)|scene graph (canvas)]] is work-in-progress, its arrival should herald GTK 4.0.]] GTK is implemented on top of an abstraction layer called GDK, freeing GTK from low-level concerns like input gathering, [[drag and drop]], and pixel format conversion. GDK is an intermediate layer which separates GTK from the details of the windowing system. GDK is an important part of GTK's portability. Since low-level cross-platform functionality is already provided by [[GLib]], all that is needed to make GTK run on other platforms is to port GDK to the underlying [[operating system]]'s graphics layer. Hence, the GDK ports to the [[Windows API]] and [[Quartz (graphics layer)|Quartz]] are what enable GTK applications to run on [[Microsoft Windows|Windows]] and [[macOS]], respectively. Starting with GTK+ 2.8, GDK supports [[Cairo (graphics)|Cairo]], which is recommended for use with GTK+ 3 instead of GDK's drawing functions.<ref>[https://docs.gtk.org/gtk3/migrating-2to3.html#use-cairo-for-drawing Migrating from GTK+ 2.x to GTK+ 3 - Use cairo for drawing]</ref> GDK is an intermediate layer which isolates [[GTK]] from the details of the [[windowing system]]. GDK is a thin wrapper around [[Xlib]]. The X Window System comes with a low-level library called [[Xlib]]. Almost every function in GDK is a very thin wrapper around a corresponding Xlib function; but some of the complexity (and functionality) of Xlib is hidden, to simplify programming and to make GDK easier to port to other windowing systems, such as [[Wayland (display server protocol)|Wayland]] or Microsoft Windows. The Xlib functionality provided is mostly that targeted toward applications; for example, many features used solely by [[window manager]]s are not exposed in GDK. GDK supports [[OpenGL]] (or [[OpenGL ES]]) for better control of the [[graphics pipeline]]. ===GdkFrameClock=== GdkFrameClock was added in GTK 3.8<ref>{{cite web |url=https://developer.gnome.org/gdk3/stable/GdkFrameClock.html |title=GdkFrameClock}}</ref> While GTK applications remain mainloop driven (cf. [[Event_loop#Glib_event_loop|Glib event loop]]), meaning the application is idle inside this main loop most of the time waiting for an event and then calls the appropriate subroutine when one occurs, GdkFrameClock adds an additional mechanism, which tells the application when to update and repaint a window.<ref>{{cite web |url=https://blogs.gnome.org/alexl/2013/11/04/the-modern-gtk-drawing-model/ |title=The modern Gtk drawing model |date=2013-11-04 |last=Larsson |first=Alexander}}</ref> The update rate can be synchronized with the monitor refresh rate. ===GTK Scene Graph Kit=== {{Main|GTK Scene Graph Kit}} In its history GDK contained and linked with a couple of different [[Canvas (GUI)|Canvases]]. * https://wiki.gnome.org/Attic/ProjectRidley/CanvasOverview ** https://wiki.gnome.org/Attic/ProjectRidley/CanvasOverview/Canvases * https://wiki.gnome.org/Projects/GooCanvas Developers were also considering new directions for the library, including removing deprecated [[Application programming interface|API]] components and adding an integrated [[Canvas (GUI)|scene graph (canvas)]] system, similar to the Clutter graphics library, effectively integrating GTK with [[OpenGL]] and [[Vulkan (API)|Vulkan]].<ref>[https://aruiz.typepad.com/siliconisland/2008/03/gtk-hackfest-20.html Alberto Ruiz's Blog]</ref><ref>[https://mail.gnome.org/archives/gtk-devel-list/2008-March/msg00017.html Havoc Pennington's scene graph proposal]</ref> * [[GTK Scene Graph Kit]] (GSK)<ref>{{cite web |url=https://www.bassi.io/articles/2014/07/29/guadec-2014-gsk/ |title=The GTK+ Scene Graph Kit |date=2014-07-29}}</ref><ref>{{cite web |url=https://blogs.gnome.org/ebassi/2014/05/02/graphene/ |title=Graphene |date=2014-05-02}}</ref> GTK+ Scene Graph Kit (GSK) was released as part of GTK+ 3.90 in March 2017. It is the scene graph and rendering API for GTK. GSK has not been further integrated with GDK (which is also part of GTK) but is kept in its own directory. ===Windowing systems=== GDK contains back-ends to a couple of [[windowing system]]s, namely to the [[X11]] and [[Wayland (display server protocol)|Wayland]] protocols, to [[Quartz Compositor|Quartz]] and [[Graphics Device Interface|GDI]], and even to the [[Hypertext Transfer Protocol]] (HTTP) engine Broadway.{{cn|date=April 2023}} With the release of GNOME 3.16 in March 2015, GDK obtained an experimental back-end for the [[Mir_(software)|Mir]] display server protocol.<ref>{{cite web |url=https://git.gnome.org/browse/gtk+/commit/?id=0f26b26f1d93f002ccd5fe6b6fd636172bfbb24b |title=add an experimental backend for mir}}</ref> The Mir display server protocol is a product by [[Canonical (company)|Canonical]] for their [[Ubuntu (operating system)|Ubuntu]] distribution of Linux, which they intend to compete with the Wayland display server protocol; so far, it is implemented only in Ubuntu. At present, no back-end exists for [[Direct Rendering Manager#Kernel Mode Setting|KMS]].{{cn|date=April 2023}} The environment variable ''GDK_BACKEND'' can be used to start an application and force this instance of it to use a certain windowing system:<br /> <code>GDK_BACKEND=wayland gnome-calculator</code><br /> <code>GDK_BACKEND=wayland CLUTTER_BACKEND=wayland cheese</code>
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)