====== Gresource ======
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//19/03/2015 - 16:39//** \\ \\
[[https://developer.gnome.org/gio/stable/gio-GResource.html|Gresource]] permette di includere risorse(immagini, video, testo, xml e ogni altro tipo di file) all'interno del nostro progetto gtk. Ovvero includere tutte le risorse dentro il nostro binario. \\
Per prima cosa dobbiamo creare un file xml con l'elenco e le opzioni per i file che vogliamo includere nel nostro file di risorse. Successivamente il file di risorse verra' inglobato (in fase di linking) al nostro binario.
===== File xml =====
Questo file contiene l'elenco e le opzioni per i file che vogliamo includere nel nostro file di risorse. \\
**risorse.xml**
foto.jpg
faccia.png
documento.html
mygui.xml
===== Generiamo il file delle risorse =====
Il comando seguente genera un file sorgente C con dentro le nostre risorse. In seguito verra' indicato nel makefile per essere incluso nell'eseguibile.
glib-compile-resources --generate-source risorse.xml
===== Sorgente che usera' le risorse =====
Il seguente sorgente non fara' altro che estrarre alcuni file dal file delle risorse sul desktop.
**main.c**
#include
int
main (int argc, char **argv)
{
//Inizializzo i tipi di glib
//g_type_init(); //(deprecato, solo per le vecchie versioni di glib)
//Una varibile per gli eventuali errori
GError *error=NULL;
//Uri del Gfile sorgente(mySRC) e uri del Gfile di destinazione (myDEST)
GFile* mySRC = g_file_new_for_uri("resource:///org/myapp/risorse/faccia.png");
GFile* myDEST = g_file_new_for_uri("file:///home/fabio/Desktop/faccia.png");
//Copio il file con questa semplice funzione
g_file_copy (mySRC, myDEST, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &error);
//Verifico se ci sono stati errori e stampo dei messaggi
if (error!=NULL)
{
g_error("Attenzione errore nella copia: %s\n",error->message);
}else{
g_print("Copia eseguita correttamente.\n") ;
}
return 0;
}
===== Il makefile =====
Si presti attenzione alla riga 5. Abbiamo incluso il file ''risorse.c'' con le risorse trasformate in sorgente C.
CPP = gcc
OPTS = `pkg-config --cflags --libs gio-2.0`
all:
$(CPP) risorse.c main.c -o gio-resource $(OPTS)
clean:
rm gio-resource
===== Mostrare un'immagine contenuta nelle risorse =====
Di seguito il codice gtk+3 per mostrare un'immagine contenuta dentro le nostre risorse.
#include
#include
int
main (int argc, char **argv)
{
//Inizializzo i tipi di glib (deprecato con gtk3)
//g_type_init();
GtkWidget *window;
GtkWidget *myimage;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "delete_event", gtk_main_quit, NULL);
myimage=gtk_image_new_from_resource ("/org/myapp/risorse/faccia.png");
gtk_container_add (GTK_CONTAINER (window), myimage);
gtk_widget_show (myimage);
gtk_widget_show (window);
gtk_main ();
return 0;
}
===== Il makefile =====
Come si puo' vedere stiamo usando gio-2 e gtk+-3. Per il resto รจ uguale al primo makefile.
CPP = gcc
OPTS = `pkg-config --cflags --libs gio-2.0 gtk+-3.0`
all:
$(CPP) risorse.c main.c -o gtk-resource $(OPTS)
clean:
rm gtk-resource