# GTK

GTK (anteriormente GTK+ e GIMP Toolkit) é um toolkit multiplataforma para a criação de interfaces gráficas. É liberado sob a licença GNU LGPL, permitindo que softwares proprietários e livres o utilizem em sua construção. É um software livre e integra o projeto GNU. Foi desenvolvido inicialmente ao GIMP, por isso foi batizado de GIMP toolkit, com abreviação GTK+. Foi desenvolvido originalmente por Peter Mattis, Spencer Kimball e Josh MacDonald.
GTK e Qt suplantaram outros toolkits; e hoje são os dois conjuntos de widgets mais usados para as plataformas X11 e Wayland. O GTK é muito popular, sendo usado em um grande número de aplicações e no ambiente de desktop GNOME (que por sua vez também é muito popular).

## Design

GTK é escrito em C e seu design é orientado a objetos com base no sistema de objetos da biblioteca GLib. Existem interfaces para construção de programas GTK para Python, JavaScript, C++, Rust, Vala, entre outras linguagens.
É possível customizar a aparência do toolkit por completo através de temas compostos de imagens e CSS. Também é possível alterar a forma com que widgets são desenhados através do uso de engines. Existem engines emulando a aparência de outros populares toolkits ou plataformas como Windows 95, Qt, ou NEXTSTEP.

## Usos
### Aplicativos

Alguns aplicativos notáveis que usam ou uma vez usaram o GTK como toolkit de widget incluem:
* GNOME Core Applications – como parte do ambiente de desktop GNOME, desenvolvido em conjunto com o próprio GTK.
* AbiWord – processador de texto
* Anjuta – ambiente de desenvolvimento integrado (IDE)
* Ardour – digital audio workstation
* Chromium – navegador web (até a versão 34, substituída por Aura na versão 35+) $^[$
* Ekiga (anteriormente GnomeMeeting) - aplicativo de VoIP e videoconferência
* GNU Emacs – um editor de texto; pode usar o GTK quando executado no X11
* Evolution – gerenciador de informações pessoais
* gconfig – utilitário de configuração do código-fonte do núcleo do Linux
* Geany – um editor de texto e IDE multiplataforma baseado no Scintilla
* GIMP – um editor gráfico raster
* Gnumeric – aplicativo de planilha eletrônica
* Gramps – software de genealogia
* Inkscape – editor de gráficos vetoriais para SVG
* LiVES – editor de vídeo
* Midori – navegador web minimalista que usa o WebKitGTK
* Pidgin – aplicativo de mensagens instantâneas

### Ambientes de desktop

Vários ambientes de desktop utilizam o GTK como o kit de ferramentas de widgets.

#### Ativos

* GNOME, baseado no GTK, o que significa que os programas nativos do GNOME usam o GTK
* Budgie, construído a partir do zero para o sucessor do SolusOS, Solus Operating System
* Cinnamon, um fork do GNOME 3 e usa o GTK+ versão 3
* MATE, um fork do GNOME 2, que foi atualizado para suportar o GTK+ 3
* Xfce, atualmente baseado no GTK+ 2 com suporte e eventuais planos de migração para o GTK+ 3
* Pantheon usa exclusivamente o GTK+ 3, sendo desenvolvido pelo elementary OS
* Sugar, um ambiente de desktop voltado para a educação infantil, que usa o GTK, especialmente PyGTK
* KDE, embora baseado em Qt, tem integração com programas e temas escritos em GTK desde a versão 4.2

#### Descontinuados

* Unity, o antigo ambiente de desktop padrão do Ubuntu
* LXDE (Lightweight X11 Desktop Environment) é baseado no GTK+ 2
* Access Linux Platform (sucessor da plataforma para PDA Palm OS)
* Consort, the GNOME 3.4 Fallback Mode – fork do SolusOS
* GPE, the GPE Palmtop Environment
* ROX Desktop, uma área de trabalho leve, com recursos da GUI do RISC OS

#### Diversos

Os programas GTK podem ser executados em ambientes de desktop baseados em X11 ou gerenciadores de janelas, mesmo aqueles que não são feitos com o GTK, desde que as bibliotecas necessárias estejam instaladas; isso inclui o macOS se o X11.app estiver instalado. O GTK também pode ser executado no Microsoft Windows, onde é usado por alguns aplicativos populares multiplataforma, como o Pidgin e o GIMP. O wxWidgets, um kit de ferramentas de interface multiplataforma, usa o GTK no Linux. Outros portes incluem o DirectFB (usado pelo instalador do Debian, por exemplo) e ncurses.

## Exemplo

Exemplo de aplicativo na linguagem C:
E o equivalente em Rust:
E as dependências no arquivo Cargo.toml:

## Versões
### GTK+ 1

O GTK+ foi originalmente projetado e usado no GNU Image Manipulation Program (GIMP) como um substituto do kit de ferramentas Motif; em algum momento, Peter Mattis ficou desencantado com o Motif e começou a escrever seu próprio kit de ferramentas GUI, chamado GIMP toolkit, e substituiu o Motif pelo GTK no GIMP na versão 0.60. Finalmente, o GTK foi reescrito para ser orientado a objetos e foi renomeado como GTK+. Ele foi usado pela primeira vez na versão 0.99 do GIMP. O GTK+ foi posteriormente adotado para manutenção pela GNOME Foundation, que o utiliza no ambiente de desktop GNOME.

### GTK+ 2

GTK+ 2 é o sucessor do GTK+. Suas novas características incluem o Pango, um novo engine para temas, acessibilidade usando ATK, completa transição para Unicode usando UTF-8 para strings e um API flexível. Entretanto, o GTK+ 2 não é compatível com o GTK+ 1 e suas aplicações precisam ser portadas a ele. O GTK+ 1 é menos complexo que o GTK+ 2.

### GTK+ 3

GTK+ 3 é o sucessor do GTK+ 2. Suas novas características incluem o Cairo (para desenhar elementos gráficos), XI2 (XInput2, para o processamento de eventos de dispositivo de entrada) e etc.

### GTK 4

GTK 4 é o sucessor do GTK+ 3. Suas novas características incluem novas APIs de transferências de dados, controladores de eventos, gerenciadores de layout, nós de renderização, reprodução de mídia, listas escalonáveis, sombreadores e de acessibilidade; suporte a API Vulkan, suporte melhorado ao Windows e ao macOS, melhorias no OpenGL, melhorias no backend HTML5 Broadway, migração do GNU Autotools para Meson.