giovedì 12 marzo 2009

Cribbio...

Stavo giusto guardandomi in giro per fare una bella patch a Nautilus, integrando il menù così come l'ho pensato e descritto nel post "Mockup, Gtk e Clutter".

Ho installato jhbuild e mi sono scaricato/compilato l'ultimo Nautilus da svn; sgrufolo nel codice e trovo quello che fa per me (esattamente i file che si occupano di popolare/gestire il contenuto del GtkTreeView contenente i bookmark di Nautilus).

Cosa scopro mio malgrado???

Che i vari GtkCellRenderer presenti nelle Gtk permetto di renderizzare testo, pixmap, scrollbar ed addirittura i togglebutton.

Purtroppo non ho trovato nulla che permetta di renderizzare un Widget generico o, perlomeno, un GtkButton (visto che alla fine quelli che la mia funzione sputa fuori non sono altro che pulsantoni customizzati).

Ho trovato alcune mail che ne parlano (tra cui alcune a cui ha risposto un certo Emmanuele... ho come un senso di deja-vu), ma nessuno ha poi tradotto la questione in codice.

Che debba prendere in mano io la patata bollente (eventuali riferimenti sessuali non provengono dalla mia testa..... oddio, se ho scritto questa frase vuol dire che ho eventuali riferimenti sessuali nella testa.... ) e scrivere un bel GtkCellRendererButton.

Sarò in grado? Ci riuscirò?

Non credo, però tentar non nuoce!

martedì 10 marzo 2009

Mockup, Gtk e Clutter

Che dire.... è un pò che non scrivo, ma prima per il lavoro, poi per l'organizzazione del mio matrimonio, non ho mai molto tempo!

Comunque, sgrufolando come al solito in giro per internet, mi sono imbattuto in questo interessante mockup:


Molto carino, non c'è che dire. L'unica cosa che mi pare veramente strana è stata l'idea di utilizzare Clutter per creare un menù di questo tipo.
Ora, io adoro Clutter, semplicemente mi sembra assurdo utilizzarlo per un banale menu laterale di Nautilus.

Così, ho deciso di dedicarmi allo sviluppo Gtk per vedere se era replicabile utilizzando solo le librerie; beh, questo è il risultato:

Ora l'effetto mi sembra abbastanza buono. Ho utilizzato le pure e semplici Gtk e, per inciso, questo è la funzione che utilizzo per creare questi "pulsanti" (beh, in effetti le virgoline sarebbero da evitarsi, considerando che si trattano di GtkButton contenenti altri widget):

GtkWidget *
create_menu_button (const gchar *stock_id, gchar *text)
{
GtkWidget *button_table = gtk_table_new (1, 2, FALSE);

GtkWidget *button_image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU);
gtk_table_attach_defaults (GTK_TABLE (button_table), button_image, 0, 1, 0, 1);

GtkWidget *button_label = gtk_label_new (text);
gtk_widget_set_size_request (button_label, 130, -1);
gtk_misc_set_alignment (GTK_MISC (button_label), 0, 0.5);
gtk_table_attach_defaults (GTK_TABLE (button_table), button_label, 1, 2, 0, 1);

GtkWidget *button = gtk_button_new ();
gtk_widget_set_size_request (button, 100, -1);
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
gtk_container_add (GTK_CONTAINER (button), button_table);

return button;
}



Moolto semplice!