Não analisei o código de implementação desse biblioteca, nem é essa minha intenção saber da sua eficiência em termos computacionais,porém para aqueles que gostam de uma boa e velha programação em Czão é muito fácil sentir-se em casa.
Um exemplo bem babaca de um trabalho que estou codificando para a Universidade:
cpp code
#include <gtk/gtk.h>
const char *rotulos[5][5]={
[0]={"rand","raiz" ,"exp" ,"mod","sen"},
[1]={"7" ,"8" ,"9" ,"+" ,"cos"},
[2]={"4" ,"5" ,"6" ,"-" ,"tan"},
[3]={"1" ,"2" ,"3" ,"/" ,"Enter"},
[4]={"0" ,"," ,"abs" ,"*" ,"ESC"},
};
void criaTeclado(GtkWidget *fixed){
unsigned char x,y;
for(x=0;x<5;x++)
for(y=0;y<5;y++){
GtkWidget *botao;
botao = gtk_button_new_with_label(rotulos[y][x]);
gtk_widget_set_size_request(botao,50,50);
gtk_fixed_put(GTK_FIXED(fixed), botao, 10 + (60*x), 50 + (60*y));
}
}
int main(int argc,char *argv[]){
GtkWindow *janela;
GtkWidget *fixed;
GtkWidget *vbox;
GtkWidget *display;
gtk_init(&argc,&argv); // Inicialização da biblioteca
janela = G_OBJECT(gtk_window_new(GTK_WINDOW_TOPLEVEL)); // cria uma nova janela
gtk_window_set_position(GTK_WINDOW(janela),GTK_WIN_POS_CENTER);
gtk_window_set_title(GTK_WINDOW(janela),"Trabalho M1"); // altera o titulo da janela
gtk_container_set_border_width(GTK_CONTAINER(janela),10);
gtk_window_set_default_size(GTK_WINDOW(janela),350, 400);
vbox = gtk_vbox_new(FALSE, 2);
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(janela), vbox);
gtk_box_pack_start(GTK_BOX(vbox), fixed, TRUE, TRUE, 1);
criaTeclado(fixed);
display = gtk_entry_new();
gtk_widget_set_usize(display,300,20);
gtk_fixed_put(GTK_FIXED(fixed),display,10,10);
g_signal_connect_swapped(G_OBJECT(janela), "destroy",G_CALLBACK(gtk_main_quit), NULL); // conecta o sinal "destroy" ao gtk_main_quit
gtk_widget_show_all(G_OBJECT(janela));
gtk_main(); // Entra no loop de mensagens da biblioteca
return 0;
}
Que por enquanto, gera isso:
