GTK (conocido hasta febrero de 2019 como GTK+) o The GIMP Toolkit es una biblioteca de componentes gráficos multiplataforma para desarrollar interfaces gráficas de usuario (GUI). Está licenciado bajo los términos de la GNU LGPL, por lo que permite la creación de tanto software libre como software privativo. GTK es parte del proyecto GNU, siendo usado por proyectos tan importantes como GIMP, Inkscape, GNOME, Xfce, entre otros.

Junto a Qt, es uno de los kit de herramientas de widgets más popular para el sistema operativo GNU/Linux, teniendo un amplio soporte para Wayland y XOrg. Además, se puede emplear para desarrollar aplicaciones gráficas que funcionen sobre otros sistemas Unix-like o sistemas operativos como Microsoft Windows, Mac OS, entre otros.

Historia y Desarrollo Fue desarrollada inicialmente por Peter Mattis, Spencer Kimball y Josh MacDonald para implementar la interfaz gráfica del programa de Manipulación de Imágenes de GNU (GIMP) como reemplazo del kit de herramientas Motif; en algún momento Peter Mattis se desencantó con Motif y comenzó a escribir su propio kit de herramientas GUI llamado GIMP toolkit, reemplazando con éxito Motif para la versión 0.60 de GIMP. Finalmente, GTK fue reescrito para ser orientado a objetos y pasó a llamarse GTK+, haciéndose uso de esto por primera vez en la versión 0.99 de GIMP. Siendo la primera versión estable de GTK lanzada el 14 de abril de 1998.

GTK está escrito en lenguaje C, y es principalmente desarrollado por el Proyecto GNOME, ya que en 1997 este proyecto escoge GTK como base sobre la cual desarrollar el entorno de escritorio GNOME. Otras aplicaciones gráficas no directamente relacionadas con GNOME también han empleado GTK. Además de otros entornos gráficos para Linux como XFCE y ROX han elegido también GTK como su biblioteca de componentes gráficos.

El desarrollo de GTK se maneja libremente. La discusión ocurre principalmente en varias listas de correo públicas. Los desarrolladores y usuarios de GNOME se reúnen en una reunión anual GNOME Users And Developers European Conference GUADEC para discutir el estado actual y la dirección futura de GNOME. GNOME incorpora estándares y programas de freedesktop.org para interactuar mejor con otros escritorios.

GTK+ 1 miniaturadeimagen|Logo antiguo

Esta biblioteca contenía algunas rutinas de ayuda para resolver tareas básicas de programación, como el almacenamiento de diversos datos. Estos requieren mucho tiempo para el programador, especialmente cuando se trata del desarrollo repetido de programas. Las primeras versiones de GTK incluían estructuras de datos para listas vinculadas, árboles binarios o cadenas "en crecimiento". Además, ya que fue reescrito para ser orientado a objetos, GTK permite usar este paradigma de programación dentro del lenguaje C. Estas herramientas también resultaron útiles para programas sin una interfaz gráfica de usuario y por lo tanto más tarde se trasladaron a una biblioteca separada, llamada biblioteca GLib de funciones C. El sistema orientado a objetos en la siguiente versión se relevo a la biblioteca GObject, los métodos de dibujo orientados al sistema a la biblioteca GDK (GTK + Kit de dibujo). Este último permite que GTK se ejecute de forma idéntica en plataformas en Windows, X Window System, macOS, entre otros.

GTK+ 2 La versión GTK 2 recibió nuevas funciones mejoradas para renderizar texto usando la biblioteca Pango, la creación de GObject, un nuevo motor de temas, una API más flexible y una biblioteca novedosa (ATK) para mejorar la accesibilidad del kit de herramientas para personas discapacitadas, por ejemplo, se puede abordar el software de lectura, las herramientas de aumento y los dispositivos de entrada alternativos. GTK 2 no es compatible con GTK 1, por lo que las aplicaciones existentes tuvieron que ser portadas.

A partir de la versión 2.8, GTK + usa la biblioteca Cairo basada en vectores, que usa aceleración de hardware para renderizar si es posible. GTK 2.24 es la última versión de la serie 2.x.

GTK 3

La versión 3.0 fue lanzada el 10 de febrero de 2011. Muchas funciones que se clasificaron como obsoletas se han eliminado y se han mejorado las interfaces existentes. GTK 3 no es compatible con versiones anteriores de GTK 2.x. Sin embargo, las bibliotecas de ambas versiones se pueden instalar en paralelo.

La serie GTK 3 incluye una nueva interfaz para dibujar widgets, que ahora está completamente basada en Cairo, un motor de temas basado en CSS que también permite transiciones de estado animadas, opciones de diseño mejoradas, un nuevo widget de interruptor deslizante, una clase de aplicación, soporte para múltiples dispositivos señaladores (punteros múltiples) e iconos simbólicos eso puede cambiar de color según la condición. Las estructuras internas se han separado y ocultado de la interfaz pública, por lo que será más fácil realizar cambios en el futuro sin tener que romper la interfaz. Además, se admiten múltiples backends GDK simultáneamente dentro de la misma biblioteca. Hasta ahora, varias bibliotecas eran necesarias.

Se introdujeron dos nuevos backends: uno para el servidor de visualización Wayland y un back-end HTML5 llamado Broadway, con el que las aplicaciones GTK pueden operarse de forma remota en el navegador a través de la red. Se admite el desplazamiento múltiple y suave, que también está disponible para Windows, además, se admite animaciones CSS y difuminación de sombras. La versión 3.6.4 es la última versión oficial para Windows de 32 bits y 64 bits.

Existen más cambios como la mejora de la visualización de los monitores de alta resolución. La presentación de Popover (burbujas de discurso cómicas que se pueden usar como ayuda), se admite gestos multitáctiles. Además, se admite la representación de ventanas a través de OpenGL. El nuevo elemento de control GtkGLArea también permitió integrar objetos 3D directamente en las interfaces del programa. Desde GTK 3.18 (base de Gnome 3.18), la biblioteca es oficialmente compatible con Wayland, el sucesor del sistema X Windows. GTK 3.20 integra el corrector ortográfico con gspell y mejora la temática CSS. Mientras que GTK 3.22 se presenta como una versión LTS y añade soporte a portales Flatpak para instalaciones de software simples.

El 1 de septiembre de 2016, una publicación en el blog de desarrollo de GTK denotó, entre otras cosas, el futuro esquema de numeración de GTK. La versión 3.22 de GTK del otoño de 2016 será la última versión 3.x (o al menos eso era lo planeado). Después de eso, todos los recursos se trasladarán a la serie de desarrollo GTK 4 con los nombres de versión 3.90, 3.92, etc. Incluso cuando la serie 4.x entre en desarrollo, las aplicaciones notables aún usan GTK 2.x y no se han portado a 3.22. Con respecto al futuro del software heredado que usa GTK, no existe un proyecto colectivo para portar el software GTK 2.x a 3.22.

GTK 4.0 se está preparando con la serie inestable 3.9x. En marzo de 2017, se agregó el Scene Graph Kit (GSK) con la versión 3.90. Implementa un gráfico de escena y se encarga de la síntesis de imágenes. En febrero de 2019 se anunció que GTK 4.0 eliminará el signo más ("+") de la parte del nombre.

GTK 4 miniaturadeimagen|Ejemplo de interfaz en GTK 4 Una de las principales novedades implementadas durante el ciclo de desarrollo de GTK 4 (es decir, GTK 3.92, etc.) ha sido la delegación de funcionalidad a objetos auxiliares en lugar de codificarla en las clases base proporcionadas por GTK.

El manejo de eventos desde los controladores de señales descritos por GtkWidget se delega a los controladores de eventos La representación se delega a los objetos GtkSnapshot El mecanismo de diseño de GtkWidget se delega a GtkLayoutManager

El 26 de enero de 2018 en DevConf.cz, Matthias Clasen ofreció una visión general del estado actual del desarrollo de GTK 4, incluida una explicación de alto nivel sobre cómo funcionaba el renderizado y la entrada en GTK 3, qué cambios se estaban realizando en GTK 4, y las razones de esos cambios. También se dieron ejemplos de cosas que se han hecho posibles con GTK 4.

Soporte

Windows

De acuerdo con GTK 2.24.10 y 3.6.4, se detuvo el desarrollo de Windows con el instalador en Gnome. Se recomienda instalar el sistema de paquetes MSYS2 de Gnome en Windows. GTK 2.24.10 y 3.6.4 todavía están disponibles en la red, sin embargo, en comparación con las versiones actuales en Linux, están mucho más afectados por los errores. Para Windows de 64 bits (a partir de junio de 2018), el trabajo de Tom Schoonjans 2.24.32 (actual como Linux) y 3.22.30 (actual como Linux) ya está disponible. Con Windows 10 Fall Creators Update, GTK 3 ahora también está disponible en WSL. Las instrucciones para instalar programas con Windows están disponibles en la comunidad GTK. Con distribuciones de Linux como Ubuntu o Debian disponibles en la Tienda Windows y un servidor X como Xming o VcXsvr, miles de programas como GTK 2 o 3 pueden ejecutarse con X o soporte de terminal.

macOS

Sobre el backend Quartz, un puerto del sistema X Window, GTK puede usarse en macOS.

Automatización de compilación Anteriormente, GTK (y GNOME, GLib, etc.) utilizaban el sistema de compilación GNU (denominado Autotools) como el sistema de automatización de compilación elegido.

Desde el 14 de agosto de 2017, la rama maestra de GTK compila con Meson, y los archivos del sistema de compilación de Autotools se han eliminado.

Bibliotecas de GTK thumb|The GTK toolkit GTK se basa en varias bibliotecas desarrolladas por el equipo de GTK y de GNOME:

GLib

miniaturadeimagen|Arquitectura de software simplificada de GTK. Pango, GDK, ATK, GIO, Cairo y GLib Es un conjunto de bibliotecas de bajo nivel, que comprende, GLib Core, GObject y GIO. Estas bibliotecas se desarrollan todas bajo un mismo repositorio de Git, denominado glib. Por lo que "GLib" puede referirse a "GLib core" o todo el conjunto de bibliotecas.

GLib core GLib core proporciona el manejo de estructura de datos para C (Listas enlazadas, árboles, tablas hash, entre otras), envoltorios de portabilidad, bucle de eventos, subprocesos, carga dinámica de módulos y muchas más funciones.

GObject

GObject por su parte, simplifica los paradigmas de Programación orientada a objetos y la Arquitectura dirigida por eventos para C. La Arquitectura dirigida por eventos no solo es útil para interfaces gráficas de usuario sino también para demonios que respondan a cambios de hardware (insertar un USB, un monitor, etc), software de red u otros procesos, puede llegar a ser de bastante utilidad.

GIO GIO depende de las anteriores bibliotecas del conjunto, este proporciona un API de alto nivel para entrada y salida, ya sea la lectura de un archivo local, una secuencia de red, procesos de comunicación con D-Bus y muchos usos más.

Este conjunto de bibliotecas permite escribir servicios del sistema operativo, bibliotecas, utilidades de línea de comando y mucho más. Por lo que puede llegar a ser más cómodo y recomendable escribir un programa en C haciendo uso de GLib, además, ofrece una API de alto nivel como el estándar POSIX.

GTK miniaturadeimagen|GDK contiene back-end para X11, Wayland, Broadway (HTTP), Quartz y GDI y se basa en Cairo para la representación. Su nuevo SceneGraph es un trabajo en progreso.

Biblioteca que contiene un kit de herramientas de widgets basados en GLib, este kit realmente contiene los objetos y funciones para crear la Interfaz gráfica de usuario (GUI). Maneja widgets como ventanas, botones, menús, etiquetas, deslizadores, pestañas, etc.

GDK

Biblioteca que actúa como intermediario entre gráficos de bajo nivel y gráficos de alto nivel. De manera que libera a GTK de preocupaciones de bajo nivel como la recopilación de entrada, arrastrar y soltar y la conversión de formato de píxeles. GDK es una capa intermedia que separa GTK de los detalles del sistema de ventanas.