|
Packit |
1470ea |
|
|
Packit |
1470ea |
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="message-board.c" xml:lang="fr">
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">Message board (C)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="c#examples"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<desc>Un programme simple utilisant WebKitGTK+ et DOM.</desc>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<revision pkgversion="0.1" version="0.1" date="2010-12-06" status="draft"/>
|
|
Packit |
1470ea |
<credit type="author copyright">
|
|
Packit |
1470ea |
<name>Shaun McCance</name>
|
|
Packit |
1470ea |
<email its:translate="no">shaunm@gnome.org</email>
|
|
Packit |
1470ea |
<years>2010</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
<credit type="editor">
|
|
Packit |
1470ea |
<name>Marta Maria Casetti</name>
|
|
Packit |
1470ea |
<email its:translate="no">mmcasetti@gmail.com</email>
|
|
Packit |
1470ea |
<years>2013</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Luc Rebert,</mal:name>
|
|
Packit |
1470ea |
<mal:email>traduc@rebert.name</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Alain Lojewski,</mal:name>
|
|
Packit |
1470ea |
<mal:email>allomervan@gmail.com</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011-2012</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Luc Pionchon</mal:name>
|
|
Packit |
1470ea |
<mal:email>pionchon.luc@gmail.com</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Bruno Brouard</mal:name>
|
|
Packit |
1470ea |
<mal:email>annoa.b@gmail.com</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011-12</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Luis Menina</mal:name>
|
|
Packit |
1470ea |
<mal:email>liberforce@freeside.fr</mal:email>
|
|
Packit |
1470ea |
<mal:years>2014</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>Message board</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<synopsis>
|
|
Packit |
1470ea |
Dans ce tutoriel, vous allez apprendre :
|
|
Packit |
1470ea |
<list style="compact">
|
|
Packit |
1470ea |
<item>comment afficher une page Web avec Webkit, </item>
|
|
Packit |
1470ea |
<item>comment manipuler le contenu d'une page Web en utilisant les fonctions DOM de WebKit. </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
Ce tutoriel suppose que vous soyez familier avec le langage de programmation C et que vous possédiez les bases nécessaires à la compréhension de GTK+, y compris comment générer et placer des éléments graphiques et comment associer des fonctions de rappel à des signaux. Consultez <link xref="image-viewer.c"/> pour apprendre les bases de GTK+.
|
|
Packit |
1470ea |
</synopsis>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<media type="video" mime="video/ogg" src="media/message-board.ogv"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<links type="section"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="create">
|
|
Packit |
1470ea |
<title>Création d'un projet dans Anjuta</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
La plateforme GNOME inclut WebKitGTK+, bâti sur le puissant environnement HTML WebKit. WebKit est utilisé partout dans GNOME, pas seulement pour afficher des pages Web sur internet, mais aussi pour créer de riches interfaces utilisateur qui peuvent être facilement stylisées par CSS.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Dans ce tutoriel vous allez créer un simple visionneur de messages en utilisant Webkit. Ce visionneur de messages vous permettra de saisir du texte et de l'ajouter à une liste de messages en HTML. Avant de débuter, vous devez créer un projet dans Anjuta.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<steps>
|
|
Packit |
1470ea |
<item>In Anjuta, click <guiseq><gui>File</gui><gui>New</gui>
|
|
Packit |
1470ea |
<gui>Project</gui></guiseq> to open the new project assistant.</item>
|
|
Packit |
1470ea |
<item>Sélectionnez <gui>GTK+ (simple)</gui> dans l'onglet <gui>C</gui> et cliquez sur <gui>Continuer</gui>. </item>
|
|
Packit |
1470ea |
<item>Renseignez les champs de la page <gui>Informations générales</gui>. Mettez <input>message-board</input> comme nom de projet et cliquez sur <gui>Continuer</gui>. </item>
|
|
Packit |
1470ea |
<item>Désactivez l'option <gui>Utiliser GtkBuilder pour l'interface utilisateur</gui> car ce tutoriel construit l'interface manuellement.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>Vous devez indiquer à Anjuta que vous utilisez WebKitGTK+ dans ce projet. Sur la page <gui>Options du projet</gui>, sélectionnez l'option <gui>Configuration des paquets externes</gui>. Cliquez sur <gui>Continuer</gui>. Sur la page <gui>Configuration des paquets externes</gui>, cochez <gui>webkitgtk-3.0</gui>. </item>
|
|
Packit |
1470ea |
</steps>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Une fois terminé avec l'assistant de nouveau projet, ouvrez le fichier <file>src/main.c</file> depuis l'onglet <gui>Projet</gui> ou l'onglet <gui>Fichiers</gui>. Anjuta l'a rempli avec du code GTK+ basique à partir d'un modèle. Comme vous êtes en train de créer un projet WebKit, il vous faut avant tout y inclure les entêtes WebKit. Après la ligne contenant gtk/gtk.h , ajoutez cette ligne :
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
#include <webkit/webkit.h>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Vérifiez que tout fonctionne en construisant ce que vous avez déjà. Cliquez sur <guiseq><gui>Construire</gui><gui>Construire le projet</gui></guiseq>, ou appuyez sur <keyseq><key>Maj</key><key>F7</key></keyseq>. À la première construction, il vous est demandé quelques options de configuration. Acceptez celles qui vous sont proposées par défaut, et cliquez sur <gui>Exécuter</gui>.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
You should now be able to run the program. Click <guiseq>
|
|
Packit |
1470ea |
<gui>Run</gui><gui>Execute</gui></guiseq> or just press <key>F3</key>.
|
|
Packit |
1470ea |
You should see an empty window appear.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="webview">
|
|
Packit |
1470ea |
<title>Mise en forme de votre fenêtre et de votre affichage Web</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Maintenant que vous savez afficher une fenêtre, vous pouvez commencer à travailler avec WebKit. Pour les besoins de ce tutoriel, vous allez créer un champ texte ainsi qu'une vue Web et les placer dans une fenêtre. Trouvez la fonction create_window et remplacez-la par ce qui suit :
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
static GtkWidget*
|
|
Packit |
1470ea |
create_window (void)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GtkWidget *window, *box, *scroll, *view, *entry;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
Packit |
1470ea |
gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
|
|
Packit |
1470ea |
gtk_window_set_title (GTK_WINDOW (window), "Message Board");
|
|
Packit |
1470ea |
g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
|
|
Packit |
1470ea |
gtk_container_set_border_width (GTK_CONTAINER (box), 6);
|
|
Packit |
1470ea |
gtk_container_add (GTK_CONTAINER (window), box);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
entry = gtk_entry_new ();
|
|
Packit |
1470ea |
gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 0);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
scroll = gtk_scrolled_window_new (NULL, NULL);
|
|
Packit |
1470ea |
g_object_set (scroll, "shadow-type", GTK_SHADOW_IN, NULL);
|
|
Packit |
1470ea |
gtk_box_pack_start (GTK_BOX (box), scroll, TRUE, TRUE, 0);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
view = webkit_web_view_new ();
|
|
Packit |
1470ea |
gtk_container_add (GTK_CONTAINER (scroll), view);
|
|
Packit |
1470ea |
webkit_web_view_load_string (WEBKIT_WEB_VIEW (view),
|
|
Packit |
1470ea |
"<html><body></body></html>",
|
|
Packit |
1470ea |
"text/html",
|
|
Packit |
1470ea |
"UTF-8",
|
|
Packit |
1470ea |
NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gtk_widget_show_all (GTK_WIDGET (box));
|
|
Packit |
1470ea |
return window;
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
]]>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Commencez par générer un objet GtkWindow et donnez-lui un titre et des dimensions par défaut. Il vous faut aussi connecter la fonction gtk_main_quit au signal delete-event . Le signal delete-event est émis lors de la fermeture de la fenêtre. La fonction gtk_main_quit fait partie de GTK et elle ferme l'application.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Ensuite créez une boîte verticale et ajoutez-la à la fenêtre. Une fenêtre ne peut contenir qu'un seul élément graphique enfant, il faut donc utiliser une boîte pour en ajouter plusieurs. Le second argument de gtk_box_new définit la largeur des marges (en pixels) entre chaque enfant et la ligne suivante ajoute une bordure de six pixels autour du tout.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Il vous faut ensuite générer un objet GtkEntry et le placer dans la boîte. Les troisième et quatrième arguments de gtk_box_pack_start précisent que l'entrée ne doit pas occuper plus d'espace que la boîte n'en dispose. Le quatrième argument représente la largeur des marges souhaitée autour de l'entrée. Dans ce cas, définissez la largeur des marges à zéro, car vous autorisez la boîte à remplir tout l'espace libre.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Avant d'ajouter une vue Web, vous devez créer une fenêtre avec barres de défilement pour la contenir. Cette fenêtre fera apparaître des barres de défilement à droite et en bas si nécessaire, évitant ainsi à votre vue Web de remplir tout votre écran. Cette fois, transmettez TRUE et TRUE à gtk_box_pack_start pour autoriser la fenêtre de défilement (et donc la vue Web) à occuper tout l'espace supplémentaire disponible dans la boîte.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Enfin, vous créez un WebKitWebView et l'ajoutez à la fenêtre de défilement. Chargez ensuite une page HTML basique dans la vue Web en appelant webkit_web_view_load_string avec les arguments suivants :
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<terms>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
<title>WEBKIT_WEB_VIEW (view) </title>
|
|
Packit |
1470ea |
La vue en elle-même. Comme view est saisi sous forme de GtkWidget* , il vous faut utiliser WEBKIT_WEB_VIEW pour intégrer l'objet.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
<title>"<html><body></body></html>" </title>
|
|
Packit |
1470ea |
Le plus simple fichier HTML que vous pourriez écrire.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
<title>"text/html" </title>
|
|
Packit |
1470ea |
Le type MIME du contenu que vous avez fourni. Dans ce cas vous utilisez du HTML simple.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
<title>"UTF-8" </title>
|
|
Packit |
1470ea |
Le type de codage de caractères du contenu que vous avez fourni. Bien que vous n'ayez probablement utilisé que des caractères ASCII, c'est une bonne pratique de spécifier UTF-8, car c'est le codage par défaut utilisé dans toute la plateforme GNOME.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
<item>
|
|
Packit |
1470ea |
<title>NULL </title>
|
|
Packit |
1470ea |
L'URI de base. Vous n'en avez pas besoin dans cet exemple, mais vous pourriez fournir un URI <sys>file:</sys> pour ajouter des images ou d'autres choses pour lesquelles vous devrez utiliser les références d'URI correspondantes.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
</terms>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<note style="sidebar">
|
|
Packit |
1470ea |
Chaque fois que vous ajoutez un élément graphique, vous devez appeler gtk_widget_show pour le rendre visible. Si vous appelez gtk_widget_show_all sur un conteneur comme une GtkBox , GTK+ montre automatiquement tous les éléments graphiques qui sont à l'intérieur quelque soit leur altitude (depth). Parfois, vous ne voulez pas appeler gtk_widget_show_all , comme quand vous souhaitez faire apparaître ou disparaître dynamiquement des éléments graphiques en réponse à des événements.
|
|
Packit |
1470ea |
</note>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Enfin, vous devez appeler gtk_widget_show_all sur la boîte. Sinon, aucun des éléments graphiques créés n'est visible (la fenêtre est affichée dans la fonction main avec gtk_widget_show ).
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Construisez et exécutez le visionneur de messages une nouvelle fois. Vous devez voir apparaître une fenêtre contenant du texte et une vue Web. Pour l'instant, il ne se passe encore rien, car le champ texte et la vue Web ne savent rien l'un sur l'autre.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="signals">
|
|
Packit |
1470ea |
<title>Signaux de connexion</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Maintenant, vous allez faire en sorte que le visionneur de messages fasse quelque chose quand vous saisissez du texte dans le champ de texte. Pour ce faire, connectez une fonction de rappel au signal activate de l'élément entry . GTK+ émet le signal activate à chaque fois que l'utilisateur appuie sur la touche <key>Entrée</key> dans le champ. Ajoutez ceci dans create_window , n'importe où après la définition de entry et view :
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
g_signal_connect (entry, "activate", G_CALLBACK (entry_activate_cb), view);
|
|
Packit |
1470ea |
]]>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Vous devez ensuite définir entry_activate_cb de la façon suivante, n'importe où au-dessus de create_window :
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
entry_activate_cb (GtkEntry *entry, WebKitWebView *view)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
WebKitDOMDocument *document;
|
|
Packit |
1470ea |
WebKitDOMElement *body, *div;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
document = webkit_web_view_get_dom_document (view);
|
|
Packit |
1470ea |
body = webkit_dom_document_query_selector (document, "body", NULL);
|
|
Packit |
1470ea |
div = webkit_dom_document_create_element (document, "div", NULL);
|
|
Packit |
1470ea |
webkit_dom_node_set_text_content (WEBKIT_DOM_NODE (div),
|
|
Packit |
1470ea |
gtk_entry_get_text (entry),
|
|
Packit |
1470ea |
NULL);
|
|
Packit |
1470ea |
webkit_dom_node_append_child (WEBKIT_DOM_NODE (body),
|
|
Packit |
1470ea |
WEBKIT_DOM_NODE (div),
|
|
Packit |
1470ea |
NULL);
|
|
Packit |
1470ea |
gtk_entry_set_text (entry, "");
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
]]>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
La première chose à faire est d'obtenir un objet WebKitDOMDocument qui représente le document HTML affiché dans view . Les classes et les méthodes DOM de WebKit vous permettent d'examiner et de manipuler le document HTML et fonctionnent d'une façon très similaire aux API DOM de JavaScript que vous connaissez peut-être déjà.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Une fois que vous avez le document, il vous faut obtenir l'élément body pour pouvoir y ajouter des éléments div . La fonction webkit_dom_document_query_selector vous permet de trouver un élément dans le document en utilisant des sélecteurs CSS. Ceci vous évite de fastidieux aller-retour à travers le document.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Puis, vous créez un nouveau bloc div pour contenir le message. Chaque élément que vous créez doit être attaché à un document ; ainsi la fonction pour créer un élément prend le WebKitDOMDocument comme premier argument. Vous définissez ensuite le contenu texte de l'élément au contenu du champ texte. Étant donné que gtk_entry_get_text retourne un const gchar* , vous n'êtes pas obligé de libérer le résultat.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Enfin, vous devez ajouter le nouveau bloc div après le bloc body et effacer le champ texte pour pouvoir y saisir quelque chose d'autre. Construisez et exécutez le programme à nouveau et testez-le.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="css">
|
|
Packit |
1470ea |
<title>Le rendre plus joli avec du CSS</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
À ce stade, votre programme est tout à fait fonctionnel, mais le résultat pas très joli. Vous pouvez styliser votre affichage avec CSS, comme vous le feriez avec n'importe quelle autre page HTML. Il y a plusieurs façons d'attacher du CSS à votre page : vous pouvez l'ajouter au document HTML initial, vous pouvez l'incorporer dans l'attribut style des blocs div , ou encore le construire en le programmant à partir des API DOM.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Dans ce tutoriel, vous allez ajouter du CSS en utilisant la propriété user-stylesheet-uri de l'objet WebKitWebSetting attachée à votre vue Web. Pour une application plus élaborée, il serait préférable d'enregistrer et de charger votre fichier HTML. Séparer les informations de style du vrai HTML conduit à pouvoir complètement changer de style dans votre application sans toucher aux fichiers des utilisateurs. Normalement, il faudrait juste installer un fichier avec votre application, mais pour cet exemple, et pour que tout soit dans un seul fichier, nous allons utiliser une astuce nommée un URI de données. Commencez par définir le CSS dans une chaîne de type « static » et placez-la près du début du fichier.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
static const guchar CSS[] =
|
|
Packit |
1470ea |
"body { margin: 0; padding: 0; }\n"
|
|
Packit |
1470ea |
"div { "
|
|
Packit |
1470ea |
" -webkit-border-radius: 2px;"
|
|
Packit |
1470ea |
" background: -webkit-gradient(linear, 0% 100%, 0% 0%,"
|
|
Packit |
1470ea |
" from(#f1f1f1), to(white));"
|
|
Packit |
1470ea |
" border: solid 1px #c6c6c6;"
|
|
Packit |
1470ea |
" -webkit-box-shadow: 0px 0px 2px #c6c6c6;"
|
|
Packit |
1470ea |
" margin: 12px; padding: 6px;"
|
|
Packit |
1470ea |
"}";
|
|
Packit |
1470ea |
]]>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Dans cet exemple, vous n'avez que des blocs div dans un élément body . Si vous créez un document HTML plus complexe, vous pouvez utiliser le code CSS dont vous avez besoin. En fait, si vous vous sentez à l'aise avec le CSS, vous pouvez essayer de modifier cette partie pour en faire ce qu'il vous plaît.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Pour appliquer le CSS, placez user-stylesheet-uri n'importe où dans la fonction create_window après la définition de view .
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
tmp = g_base64_encode (CSS, strlen((gchar *) CSS));
|
|
Packit |
1470ea |
css = g_strconcat ("data:text/css;charset=utf-8;base64,",
|
|
Packit |
1470ea |
tmp, NULL);
|
|
Packit |
1470ea |
g_object_set (webkit_web_view_get_settings (WEBKIT_WEB_VIEW (view)),
|
|
Packit |
1470ea |
"user-stylesheet-uri", css, NULL);
|
|
Packit |
1470ea |
g_free (css);
|
|
Packit |
1470ea |
g_free (tmp);
|
|
Packit |
1470ea |
]]>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Assurez-vous aussi d'ajouter les déclarations pour les variables tmp et css en haut de create_window .
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gchar *tmp, *css;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Un URI de données commence par <sys>data:</sys>, quelques informations sur le type de contenu et par la façon dont les données sont codées. Les vraies données suivent après une virgule et dans notre cas sont codées en Base64. Contrairement à d'autres protocoles d'URI, comme <sys>http:</sys>, <sys>ftp:</sys> et <sys>file:</sys>, l'URI <sys>data:</sys> ne spécifie pas où trouver le fichier à charger. Il fournit par contre le contenu complet du fichier.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Le programme ci-dessus code d'abord vos définitions CSS en Base64, puis les combine dans une chaîne constante pour générer un URI de données. La fonction g_strconcat peut prendre un nombre infini d'arguments de type chaîne de caractères et les assemble. Par conséquent il vous faut mettre NULL comme dernier argument pour lui indiquer où s'arrêter. N'oubliez pas de libérer ces chaînes temporaires après avoir défini la propriété de la feuille de style.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Construisez et exécutez à nouveau le programme. Il doit maintenant fonctionner exactement de la même façon qu'à la fin du chapitre précédent, sauf que cette fois, les messages sont joliment stylisés avec une bordure et un gradient discret en arrière-plan.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="more">
|
|
Packit |
1470ea |
<title>En savoir plus</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Le but de ce tutoriel était de vous montrer comment créer une application basique avec GTK+ et WebKit, et également d'afficher un document et de manipuler son contenu. Pour créer une application réelle, vous voudrez probablement en faire un peu plus. Essayez d'ajouter vous-même d'autres fonctionnalités. Voici quelques idées :
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Si vous êtes à l'aise avec CSS, essayez de modifier le style d'affichage du message. Débuter avec le CSS est facile, mais en allant plus loin ça devient un objet plus puissant. Vous allez trouver plein de tutoriels CSS sur internet, et tous sont adaptables à cette application. </item>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<item>Pour l'instant, vous perdez tous vos messages chaque fois que vous fermez le visionneur de messages. Essayez d'enregistrer le contenu HTML après chaque message et d'ouvrir le fichier enregistré (s'il existe) au démarrage. </item>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<item>Si vous conservez vos messages pendant longtemps, un jour vous allez vous demander quand ils ont été postés. Ajoutez un horodatage à chaque message posté. Créez quelques blocs div enfants supplémentaires avec des classes différentes que vous pouvez styliser dans la feuille CSS.
|
|
Packit |
1470ea |
</item>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<item>Ce programme conserve les messages pour toujours. Réfléchissez à une façon pour autoriser l'utilisateur à supprimer des messages. Peut-être en les faisant disparaître automatiquement lorsqu'ils sont trop vieux ou quand il y a un nombre défini de messages devant eux. Ou alors en ajoutant un lien à chaque message pour pouvoir le supprimer. Ou encore en redéfinissant le menu contextuel quand vous faites un clic-droit sur un message. Ces fonctions impliquent que vous exploriez davantage encore les API DOM de WebKit. </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
</page>
|