====== 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