1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| #include <stdlib.h>
#include <gtk/gtk.h>
typedef struct {
GtkBuilder *builder;
GtkWidget *label;
char name [101];
char mail [101];
char password [101];
char confirmPassword [101];
}RegistInfo;
static gboolean
affect_css_to_widget (GtkWidget *widget, const gchar *css)
{
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
g_return_val_if_fail (css!=NULL, FALSE);
/* Ajout du css au widget */
GtkCssProvider *CssProvider = gtk_css_provider_new ();
GError *error = NULL;
gtk_css_provider_load_from_data (CssProvider, css, -1, &error);
if (error)
{
g_printerr ("%s\n", error->message);
g_error_free (error);
return FALSE;
}
GtkStyleContext *context = gtk_widget_get_style_context (widget);
gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (CssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);
g_object_unref (CssProvider);
return TRUE;
}
static void
cb_entry_activate (GtkEntry *entry, gpointer user_data)
{
RegistInfo *info = (RegistInfo*) user_data;
/* Insertion du texte du GtkEntry dans le GtkLabel */
gtk_label_set_text (GTK_LABEL (info->label), gtk_entry_get_text (entry));
}
gint
main (gint argc, gchar *argv[])
{
GtkWidget *window = NULL;
GtkWidget *box = NULL;
GtkWidget *entry = NULL;
RegistInfo info;
/* init gtk */
gtk_init(&argc, &argv);
/* Initialisation d'une feuille de style CSS pour le fond de la fenêtre principale */
gchar css [] = "window {\n\
background-image : url(\"linux.jpg\");\n\
}";
/* Initialisation du GtkBuilder pour l'exemple. Je ne charge pas de fichier
* mais je crée tout de même un GtkBuilder. Il est donc alloué dans le tas
* par la fonction de création.
*/
info.builder = gtk_builder_new ();
/* Création de la fenêtre principale */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW(window), 500, 300);
/* Ajout de la feuille de style à la fenêtre principale */
if (!affect_css_to_widget (window, css))
g_printerr ("problème d'insertion de la feuille de style à la fenêtre principale !\n");
/* Création d'un GtkBox horizontal. Il contiendra un GtkEntry ainsi qu'un
* GtkLabel dans lequel s'affichera le contenu du GtkEntry lors de la
* validation du GtkEntry par la touche "Entrer".
*/
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
gtk_box_set_homogeneous (GTK_BOX (box), TRUE);
gtk_container_add (GTK_CONTAINER (window), box);
/* Création d'une entrée texte et insertion dans la box */
entry = gtk_entry_new ();
gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
gtk_box_pack_start (GTK_BOX (box), entry, TRUE, FALSE, 5);
/* Création du GtkLabel et insertion dans la box */
info.label = gtk_label_new ("");
gtk_widget_set_halign (info.label, GTK_ALIGN_CENTER);
gtk_widget_set_valign (info.label, GTK_ALIGN_CENTER);
gtk_box_pack_start (GTK_BOX (box), info.label, FALSE, FALSE, 5);
/* Signaux */
g_signal_connect (G_OBJECT(window) , "destroy", G_CALLBACK (gtk_main_quit) , NULL);
g_signal_connect (G_OBJECT(entry), "activate", G_CALLBACK (cb_entry_activate), &info);
/* Affichage de la fenêtre */
gtk_widget_show_all (window);
gtk_main ();
/* Libération mémoire du GtkBuilder */
g_object_unref (info.builder);
return EXIT_SUCCESS;
} |