summaryrefslogtreecommitdiff
path: root/docs/reference/gtk/overview.md
blob: 6016861e80db8df15c9469a39f3954a96ac0ec10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Title: Overview

GTK is a library for creating graphical user interfaces. It works on many
UNIX-like platforms, Windows, and macOS. GTK is released under the terms of
the [GNU Library General Public License][gnu-lgpl], which allows for flexible
licensing of client applications. GTK has a C-based, object-oriented
architecture that allows for maximum flexibility and portability; there are
bindings for many other languages, including C++, Objective-C, Guile/Scheme, Perl,
Python, JavaScript, Rust, Go, TOM, Ada95, Free Pascal, and Eiffel.

The GTK toolkit contains "widgets": GUI components such as buttons, text
input, or windows.

GTK depends on the following libraries:

 - **GLib**: a general-purpose utility library, not specific to graphical
   user interfaces. GLib provides many useful data types, macros, type
   conversions, string utilities, file utilities, a main loop abstraction,
   and so on. More information available on the [GLib website][glib].
 - **GObject**: A library that provides a type system, a collection of
   fundamental types including an object type, and a signal system. More
   information available on the [GObject website][gobject].
 - **GIO**: A modern, easy-to-use VFS API including abstractions for files,
   drives, volumes, stream IO, as well as network programming and IPC though
   DBus. More information available on the [GIO website][gio].
 - **Cairo**: Cairo is a 2D graphics library with support for multiple
   output devices. More information available on the [Cairo website][cairo].
 - **OpenGL**: OpenGL is the premier environment for developing portable,
   interactive 2D and 3D graphics applications. More information available
   on the [Khronos website][opengl].
 - **Pango**: Pango is a library for internationalized text handling. It
   centers around the `PangoLayout` object, representing a paragraph of
   text.  Pango provides the engine for `GtkTextView`, `GtkLabel`,
   `GtkEntry`, and all GTK widgets that display text. More information
   available on the [Pango website][pango].
 - **gdk-pixbuf**: A small, portable library which allows you to create
   `GdkPixbuf` ("pixel buffer") objects from image data or image files. You
   can use `GdkPixbuf` in combination with widgets like `GtkImage` to
   display images. More information available on the
   [gdk-pixbuf website][gdkpixbuf].
 - **graphene**: A small library which provides vector and matrix
   datatypes and operations. Graphene provides optimized implementations
   using various SIMD instruction sets such as SSE and ARM NEON. More
   information available on the [Graphene website][graphene]

GTK is divided into three parts:

 - **GDK**: GDK is the abstraction layer that allows GTK to support multiple
   windowing systems. GDK provides window system facilities on Wayland, X11,
   Microsoft Windows, and Apple macOS.
 - **GSK**: GSK is an API for creating a scene graph from drawing operation,
   called "nodes", and rendering it using different backends. GSK provides
   renderers for OpenGL, Vulkan and Cairo.
 - **GTK**: The GUI toolkit, containing UI elements, layout managers, data
   storage types for efficient use in GUI applications, and much more.

[gnu-lgpl]: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
[glib]: https://developer.gnome.org/glib/stable/
[gobject]: https://developer.gnome.org/gobject/stable/
[gio]: https://developer.gnome.org/gio/stable/
[cairo]: https://www.cairographics.org/manual/
[opengl]: https://www.opengl.org/about/
[pango]: https://pango.gnome.org/
[gdkpixbuf]: https://developer.gnome.org/gdk-pixbuf/stable/
[graphene]: https://ebassi.github.io/graphene/