GTK (anteriormente GTK+ e GIMP Toolkit) é um toolkitmultiplataforma 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.[4]
GTK e Qt suplantaram outros toolkits; e hoje são os dois conjuntos de widgets mais usados para as plataformas X11[5] e Wayland[6]. O GTK é muito popular, sendo usado em um grande número de aplicações e no ambiente de desktopGNOME (que por sua vez também é muito popular).
É 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 desktopGNOME, desenvolvido em conjunto com o próprio GTK.
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.[9] Outros portes incluem o DirectFB (usado pelo instalador do Debian, por exemplo) e ncurses.[10]
#include<gtk/gtk.h>staticvoidon_activate(GtkApplication*app){// Cria uma nova janelaGtkWidget*window=gtk_application_window_new(app);// Cria um novo botão que fecha a janela ao ser clicadoGtkWidget*button=gtk_button_new_with_label("Olá, Mundo!");g_signal_connect_swapped(button,"clicked",G_CALLBACK(gtk_window_close),window);// Adiciona o botão e apresenta a janelagtk_window_set_child(GTK_WINDOW(window),button);gtk_window_present(GTK_WINDOW(window));}intmain(intargc,char*argv[]){// Cria um novo aplicativoGtkApplication*app=gtk_application_new("com.example.Hello",G_APPLICATION_FLAGS_NONE);// Quando o aplicativo for ativadog_signal_connect(app,"activate",G_CALLBACK(on_activate),NULL);returng_application_run(G_APPLICATION(app),argc,argv);}
usegtk::glib::{self,clone};usegtk::prelude::*;fnmain()-> glib::ExitCode{// Cria um novo aplicativoletapp=gtk::Application::builder().application_id("com.example.Hello").build();// Quando o aplicativo for ativadoapp.connect_activate(|app|{// Cria uma nova janelaletwindow=gtk::ApplicationWindow::new(app);// Cria um novo botão que fecha a janela ao ser clicadoletbutton=gtk::Button::with_label("Olá, Mundo!");button.connect_clicked(clone!(#[weak]window,move|_|window.close()));// Adiciona o botão e apresenta a janelawindow.set_child(Some(&button));window.present();});app.run()}
E as dependências no arquivo Cargo.toml:
[dependencies.gtk]version="0.9.1"package="gtk4"
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.[11] Finalmente, o GTK foi reescrito para ser orientado a objetos e foi renomeado como GTK+.[12] 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.[13]
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 backendHTML5 Broadway, migração do GNU Autotools para Meson.[14]