Blame platform-demos/el/message-board.c.page

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="el">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <title type="text">Πίνακας μηνύματος (C)</title>
Packit 1470ea
    <link type="guide" xref="c#examples"/>
Packit 1470ea
Packit 1470ea
    <desc>Ένα απλό πρόγραμμα που χρησιμοποιεί WebKitGTK+ και 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>Ελληνική μεταφραστική ομάδα GNOME</mal:name>
Packit 1470ea
      <mal:email>team@gnome.gr</mal:email>
Packit 1470ea
      <mal:years>2012-2015</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>Δημήτρης Σπίγγος</mal:name>
Packit 1470ea
      <mal:email>dmtrs32@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2012, 2013</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>Μαρία Θουκιδίδου</mal:name>
Packit 1470ea
      <mal:email>marablack3@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014</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>Θάνος Τρυφωνίδης</mal:name>
Packit 1470ea
      <mal:email>tomtryf@gmail.com</mal:email>
Packit 1470ea
      <mal:years>2014, 2015</mal:years>
Packit 1470ea
    </mal:credit>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
<title>Πίνακας μηνύματος</title>
Packit 1470ea
Packit 1470ea
<synopsis>
Packit 1470ea
  

Σε αυτό το μάθημα, θα μάθετε:

Packit 1470ea
  <list style="compact">
Packit 1470ea
    <item>

Πώς να εμφανίσετε μια ιστοσελίδα με WebKit.

</item>
Packit 1470ea
    <item>

Πώς να χειριστείτε τα περιεχόμενα μιας ιστοσελίδας χρησιμοποιώντας τις συναρτήσεις DOM του WebKit.

</item>
Packit 1470ea
  </list>
Packit 1470ea
  

Αυτό το μάθημα υποθέτει εξοικείωση με τη γλώσσα προγραμματισμού C και βασική κατανόηση της GTK+, συμπεριλαμβανόμενης της δημιουργίας και τοποθέτησης γραφικών στοιχείων και της σύνδεσης συναρτήσεων επανάκλησης σε σήματα. Δείτε <link xref="image-viewer.c"/> για να μάθετε τα βασικά του 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>Δημιουργία έργου με το Anjuta</title>
Packit 1470ea
Packit 1470ea
  

Το GNOME περιέχει το WebKitGTK+, κατασκευασμένο πάνω στον ισχυρό σκελετό του WebKit HTML. Το WebKit χρησιμοποιείται μέσα από το GNOME, όχι μόνο για προβολή ιστοσελίδων στο διαδίκτυο, αλλά επίσης για δημιουργία πλούσιων διεπαφών χρήστη που μπορούν εύκολα να μορφοποιηθούν με CSS.

Packit 1470ea
Packit 1470ea
  

Σε αυτό το μάθημα, θα δημιουργήσετε ένα απλό πίνακα μηνύματος χρησιμοποιώντας WebKit. Ο πίνακας μηνύματος θα επιτρέψει την εισαγωγή κάποιου κειμένου και την προσθήκη του σε μια λίστα μηνυμάτων σε HTML. Πριν την εκκίνηση, χρειαζόσαστε να ρυθμίσετε ένα έργο στο Anjuta.

Packit 1470ea
Packit 1470ea
  <steps>
Packit 1470ea
    <item>

Στο Anjuta, κάντε κλικ στο <guiseq><gui>Αρχείο</gui><gui>Νέο</gui> <gui>Έργο</gui></guiseq> για να ανοίξετε τον νέο βοηθό έργου.

</item>
Packit 1470ea
    <item>

Επιλέξτε <gui>GTK+ (απλό)</gui> στην καρτέλα <gui>C</gui> και κλικ <gui>συνέχεια</gui>.

</item>
Packit 1470ea
    <item>

Συμπληρώστε τις λεπτομέρειές σας στη σελίδα <gui>βασικές πληροφορίες</gui>. Χρησιμοποιήστε <input>πίνακα μηνύματος</input> για το όνομα του έργου. Κλικ <gui>συνέχεια</gui>.

</item>
Packit 1470ea
    <item>

Απενεργοποιήστε την επιλογή <gui>χρήση GtkBuilder για διεπαφή χρήστη</gui> καθώς αυτό το μάθημα κατασκευάζει τη διεπαφή χρήστη χειροκίνητα.

Packit 1470ea
    </item>
Packit 1470ea
    <item>

Πρέπει να πείτε στο Anjuta ότι χρησιμοποιείτε WebKitGTK+ για αυτό το έργο. Στη σελίδα <gui>επιλογές έργου</gui>, επιλέξτε <gui>ρύθμιση εξωτερικών πακέτων</gui>. Κλικ <gui>συνέχεια</gui>. Στη σελίδα <gui>ρύθμιση εξωτερικών πακέτων</gui>, σημειώστε <gui>webkitgtk-3.0</gui>.

</item>
Packit 1470ea
  </steps>
Packit 1470ea
Packit 1470ea
  

Αφού τελειώσετε με τον βοηθό του νέου έργου, ανοίξτε το αρχείο <file>src/main.c</file> είτε από το <gui>έργο</gui> ή από την καρτέλα <gui>αρχείο</gui>. Το Anjuta θα το γεμίσει με κάποιο βασικό κώδικα GTK+ από τα πρότυπά του. Αφού δημιουργείτε ένα έργο WebKit, χρειάζεστε πρώτα να συμπεριλάβετε τις κεφαλίδες WebKit. Μετά τη γραμμή που περιέχει gtk/gtk.h, προσθέστε την παρακάτω γραμμή:

Packit 1470ea
Packit 1470ea
  #include <webkit/webkit.h>
Packit 1470ea
Packit 1470ea
  

Επιβεβαιώστε ότι όλα δουλεύουν με την κατασκευή που έχετε κάνει μέχρι τώρα. Κλικ <guiseq><gui>κατασκευή</gui><gui>έργο κατασκευής</gui></guiseq> ή απλά πατήστε <keyseq><key>Shift</key><key>F7</key></keyseq>. Την πρώτη φορά που κατασκευάζετε, θα σας ζητηθεί για κάποιες επιλογές ρύθμισης. Απλά αποδεχτείτε τις προεπιλογές και κλικ <gui>εκτέλεση</gui>.

Packit 1470ea
Packit 1470ea
  

Τώρα θα μπορείτε να τρέξετε το πρόγραμμα. Κάντε κλικ στο <guiseq> <gui>Τρέξιμο</gui><gui>Εκτέλεση</gui></guiseq> ή απλά πατήστε <key>F3</key>. Θα πρέπει να δείτε ένα άδειο παράθυρο.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="webview">
Packit 1470ea
  <title>Διευθέτηση του παραθύρου σας και προβολή ιστού</title>
Packit 1470ea
Packit 1470ea
  

Τώρα που μπορείτε να δείτε ένα παράθυρο, είναι καιρός να ξεκινήσετε δουλειά με το WebKit. Για αυτό το μάθημα, θα δημιουργηθεί μια καταχώριση κειμένου και μια προβολή ιστού και πακετάρισμα τους σε ένα παράθυρο. Βρείτε τη συνάρτηση create_window και αντικαταστήστε την με την παρακάτω:

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
  

Δημιουργήστε πρώτα ένα αντικείμενο GtkWindow και ορίστε τον τίτλο το προεπιλεγμένο μέγεθος του. Συνδέστε επίσης τη συνάρτηση gtk_main_quit με το σήμα delete-event. Το σήμα delete-event εκπέμπεται όταν το παράθυρο κλείνει. Η συνάρτηση gtk_main_quit είναι τμήμα του GTK και εγκαταλείπει την εφαρμογή.

Packit 1470ea
Packit 1470ea
  

Έπειτα δημιουργήστε ένα κάθετο πλαίσιο και προσθέστε το στο παράθυρο. Ένα παράθυρο μπορεί να κρατά μόνο ένα μοναδικό θυγατρικό γραφικό στοιχείο, έτσι χρειαζόσαστε τη χρήση ενός πλαισίου για προσθήκη πολλαπλών γραφικών στοιχείων. Το δεύτερο όρισμα στο gtk_box_new ορίζει την ποσότητα συμπλήρωσης (σε εικονοστοιχεία) μεταξύ κάθε θυγατρικού και η επόμενη γραμμή βάζει ένα περίγραμμα έξη εικονοστοιχείων γύρω από όλο το αντικείμενο.

Packit 1470ea
Packit 1470ea
  

Έπειτα δημιουργείστε ένα αντικείμενο GtkEntry και πακετάρετε το στο πλαίσιο. Το τρίτο και τέταρτο όρισμα στο gtk_box_pack_start καθορίζει ότι η καταχώριση δεν θα πρέπει να πάρει επιπλέον χώρο που το πλαίσιο έχει διαθέσιμο. Το τέταρτο όρισμα είναι η ποσότητα συμπλήρωσης που θέλετε γύρω από την καταχώριση. Σε αυτή την περίπτωση, ορίζετε τη συμπλήρωση σε μηδέν, επειδή επιτρέπετε στο πλαίσιο να χειριστεί όλη τη συμπλήρωση.

Packit 1470ea
Packit 1470ea
  

Πριν την προσθήκη μιας προβολής ιστού, πρέπει να δημιουργήσετε ένα κυλιόμενο παράθυρο για να μπει μέσα του. Το κυλιόμενο παράθυρο θα τοποθετήσει γραμμές κύλισης στα δεξιά και κάτω όταν χρειάζεται και θα αποτρέψει την προβολή σας ιστού από το γέμισμα όλης της οθόνης. Αυτή τη φορά, περνάτε TRUE και TRUE στο gtk_box_pack_start για να επιτρέψετε στο κυλιόμενο παράθυρο (και συνεπώς στην προβολή ιστού) να χρησιμοποιήσει οποιοδήποτε διαθέσιμο χώρο στο πλαίσιο.

Packit 1470ea
Packit 1470ea
  

Τελικά, δημιουργείτε ένα WebKitWebView και το προσθέτετε στο κυλιόμενο παράθυρο. Έπειτα φορτώνετε μια πολύ βασική σελίδα HTML στην προβολή ιστού καλώντας webkit_web_view_load_string με τα παρακάτω ορίσματα:

Packit 1470ea
Packit 1470ea
  <terms>
Packit 1470ea
    <item>
Packit 1470ea
      <title>WEBKIT_WEB_VIEW (view)</title>
Packit 1470ea
      

Η ίδια η προβολή. Επειδή η view πληκτρολογείτε ως GtkWidget, πρέπει να χρησιμοποιήσετε WEBKIT_WEB_VIEW για ασφαλή αλλαγή του αντικειμένου.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
      <title>"<html><body></body></html>"</title>
Packit 1470ea
      

Το απλούστερο αρχείο HTML που θα μπορούσατε να γράψετε.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
      <title>"text/html"</title>
Packit 1470ea
      

Ο τύπος MIME του περιεχομένου που δίνετε. Σε αυτήν την περίπτωση, χρησιμοποιείτε απλό HTML.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
      <title>"UTF-8"</title>
Packit 1470ea
      

Η κωδικοποίηση χαρακτήρα του παρεχόμενου περιεχομένου. Αν και χρησιμοποιείτε μόνο ASCII χαρακτήρες, είναι καλή ο καθορισμός UTF-8. Το UTF-8 χρησιμοποιείται ως η προεπιλεγμένη κωδικοποίηση ολοκληρωτικά στο GNOME.

Packit 1470ea
    </item>
Packit 1470ea
    <item>
Packit 1470ea
      <title>NULL</title>
Packit 1470ea
      

Η βάση URI. Δεν την χρειαζόσαστε σε αυτό το απλό παράδειγμα, αλλά ίσως θελήσετε να δώσετε ένα <sys>file:</sys> URI εάν προσθέσετε εικόνες ή άλλα χαρακτηριστικά που θέλετε να χρησιμοποιήσετε σχετικές αναφορές URI.

Packit 1470ea
    </item>
Packit 1470ea
  </terms>
Packit 1470ea
Packit 1470ea
  <note style="sidebar">
Packit 1470ea
    

Κάθε φορά που προσθέτετε ένα γραφικό στοιχείο, πρέπει να καλέσετε gtk_widget_show για να γίνει ορατό. Εάν καλέσετε gtk_widget_show_all σε ένα περιέκτη γραφικού στοιχείου όπως GtkBox, το GTK+ θα εμφανίσει αυτόματα όλα τα γραφικά στοιχεία μέσα στον περιέκτη, σε οποιοδήποτε βάθος. Μερικές φορές δεν θέλετε να καλέσετε gtk_widget_show_all, όπως όταν θέλετε να κρύψετε δυναμικά και να εμφανίσετε μερικά γραφικά στοιχεία σε απάντηση συμβάντων.

Packit 1470ea
  </note>
Packit 1470ea
Packit 1470ea
  

Τελικά, πρέπει να καλέσετε gtk_widget_show_all στο πλαίσιο. Αλλιώς, κανένα από τα γραφικά στοιχεία που δημιουργήσατε δεν θα είναι ορατό. (Το παράθυρο εμφανίζεται στη συνάρτηση main με gtk_widget_show.)

Packit 1470ea
Packit 1470ea
  

Αναπτύξτε και εκτελέστε ξανά τον πίνακα μηνύματος. Πρέπει να δείτε ένα παράθυρο με μια καταχώριση κειμένου και μια προβολή ιστού. Δεν κάνει τίποτα ακόμα, επειδή η καταχώριση κειμένου και η προβολή ιστού δεν ξέρουν τίποτα μεταξύ τους.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="signals">
Packit 1470ea
  <title>Σύνδεση σημάτων</title>
Packit 1470ea
Packit 1470ea
  

Τώρα, θέλετε να κάνετε τον πίνακα μηνύματος στην πραγματικότητα να κάνει κάτι όταν εισάγετε κείμενο στην καταχώριση κειμένου. Για να το κάνετε αυτό, συνδέστε μια συνάρτηση επανάκλησης στο σήμα activate του entry. Το GTK+ εκπέμπει το σήμα activate όταν ο χρήστης πατά <key>Enter</key> στην καταχώριση. Προσθέστε το παρακάτω στο create_window, οπουδήποτε αφού και entry και view οριστούν:

Packit 1470ea
Packit 1470ea
Packit 1470ea
g_signal_connect (entry, "activate", G_CALLBACK (entry_activate_cb), view);
Packit 1470ea
Packit 1470ea
Packit 1470ea
  

Τότε πρέπει στην πραγματικότητα να ορίσετε το entry_activate_cb. Ορίστε το όπως ακολουθεί, οπουδήποτε πάνω από το 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
  

Το πρώτο πράγμα είναι να πάρετε ένα αντικείμενο WebKitDOMDocument που αντιπροσωπεύει το εμφανιζόμενο έγγραφο στο view. Οι κλάσεις DOM και οι μέθοδοι στο WebKit επιτρέπουν την επιθεώρηση και χειρισμό του εγγράφου HTML και δουλεύουν πολύ παρόμοια με τα APIs DOM που ήδη μπορεί να ξέρετε από το JavaScript.

Packit 1470ea
Packit 1470ea
  

Μόλις έχετε το έγγραφο, παίρνετε το στοιχείο body, έτσι ώστε να μπορείτε να προσθέσετε τα στοιχεία div σε αυτό. Η συνάρτηση webkit_dom_document_query_selector επιτρέπει την εύρεση ενός στοιχείου στο έγγραφο χρησιμοποιώντας επιλογείς CSS. Αυτό σας γλυτώνει από το γράψιμο κουραστικών βρόχων για πέρασμα του εγγράφου.

Packit 1470ea
Packit 1470ea
  

Μετά, δημιουργείτε ένα νέο στοιχείο div για κράτημα του μηνύματος. Κάθε στοιχείο που δημιουργείτε πρέπει να προσαρτηθεί σε ένα έγγραφo, έτσι η συνάρτηση στη δημιουργία ενός στοιχείου παίρνει το WebKitDOMDocument ως τα πρώτα της ορίσματα. Έπειτα ορίζετε το περιεχόμενο κειμένου του στοιχείου στα περιεχόμενα της καταχώρισης κειμένου. Επειδή το gtk_entry_get_text επιστρέφει το const gchar*, δεν πρέπει να απελευθερώσετε το αποτέλεσμα.

Packit 1470ea
Packit 1470ea
  

Τελικά, προσαρτάτε το νέο στοιχείο div στο σώμα και καθαρίστε την καταχώριση κειμένου, έτσι ώστε να μπορείτε να τυπώσετε κάτι νέο. Κατασκευή και εκτέλεση του προγράμματος ξανά και έλεγχος του για σας.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
Packit 1470ea
<section id="css">
Packit 1470ea
  <title>Κάντε το να φαίνεται καλύτερα με CSS</title>
Packit 1470ea
Packit 1470ea
  

Σε αυτό το σημείο, το πρόγραμμά σας είναι ολότελα λειτουργικό, αλλά όχι πολύ όμορφο. Μπορείτε να μορφοποιήσετε την εμφάνιση μηνύματος με CSS, απλά όπως μπορείτε με κάθε άλλη σελίδα HTML. Υπάρχουν πολλοί τρόποι που θα μπορούσατε να προσαρτήσετε μερικά CSS στη σελίδα: Μπορείτε να τα προσθέσετε στο αρχικό έγγραφο HTML. Θα μπορούσατε να το ενσωματώσετε στο γνώρισμα style των στοιχείων div. Θα μπορούσατε ακόμα να το κατασκευάσετε προγραμματιστικά χρησιμοποιώντας τα APIs DOM.

Packit 1470ea
Packit 1470ea
  

Σε αυτό το μάθημα, θα επισυνάψετε το CSS χρησιμοποιώντας την ιδιότητα user-stylesheet-uri του προσαρτημένου αντικειμένου WebKitWebSetting στην προβολή σας ιστού. Σε μια πιο πλήρη εφαρμογή, θα θέλατε να αποθηκεύσετε και να φορτώσετε το αρχείο HTML. Διατηρώντας τις πληροφορίες μορφοποίησης έξω από το ενεργό HTML σημαίνει ότι μπορείτε να αλλάξετε ολότελα τη μορφοποίηση μες την εφαρμογή σας, χωρίς να χρειαστεί να αλλάξετε τα αρχεία χρήστη. Κανονικά θα εγκαταστήσετε απλά ένα αρχείο μαζί με την εφαρμογή σας, αλλά για να διατηρήσετε απλά κάθε τι σε ένα αρχείο για αυτή την παρουσίαση, θα χρησιμοποιήσουμε ένα κόλπο που λέγεται δεδομένα URI. Πρώτα, ορίστε το CSS ως στατική συμβολοσειρά κοντά στην κορυφή του αρχείου σας.

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
  

Ό,τι έχετε σε αυτό το παράδειγμα είναι στοιχεία div μέσα σε ένα στοιχείο body. Εάν δημιουργήσατε πιο περίπλοκα HTML, θα μπορούσατε να χρησιμοποιήσετε οποιοδήποτε CSS είναι απαραίτητο. Στην πραγματικότητα, εάν είσαστε άνετα με CSS, θα πρέπει να προσπαθήσετε να το αλλάξετε με κάτι που σας αρέσει καλύτερα.

Packit 1470ea
Packit 1470ea
  

Για εφαρμογή του CSS, ορίζετε τον user-stylesheet-uri στην συνάρτηση create_window, οπουδήποτε μετά τον ορισμό του 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
  

Επίσης, βεβαιωθείτε να προσθέσετε δηλώσεις μεταβλητής για tmp και css στην κορυφή του create_window.

Packit 1470ea
Packit 1470ea
Packit 1470ea
gchar *tmp, *css·
Packit 1470ea
Packit 1470ea
Packit 1470ea
 

Δεδομένα URI ξεκινούν με <sys>data:</sys> και μερικές πληροφορίες για τον τύπο περιεχομένου και την κωδικοποίηση δεδομένων. Τα ενεργά δεδομένα ακολουθούν μετά το κόμμα, σε αυτήν την περίπτωση κωδικοποιημένα σε Base64. Αντίθετα με άλλα σχήματα URI όπως <sys>http:</sys>, <sys>ftp:</sys> και <sys>file:</sys>, το σχήμα <sys>data:</sys> URI δεν καθορίζει πού να βρείτε ένα αρχείο για φόρτωση. Μάλλον, δίνει τα συνολικά περιεχόμενα του αρχείου.

Packit 1470ea
Packit 1470ea
 

Ο παραπάνω κώδικας πρώτα κωδικοποιεί τους ορισμούς σας CSS σε Base64, έπειτα συνδυάζει αυτό με σταθερή συμβολοσειρά για δημιουργία δεδομένων URI. Η συνάρτηση g_strconcat μπορεί να πάρει οποιοδήποτε αριθμό ορισμάτων συμβολοσειράς και να τα συνενώσει όλα μαζί, έτσι έχετε να περάσετε το NULL ως τελικό όρισμα για να γνωρίζει πότε να σταματήσει. Μην ξεχάσετε να ελευθερώσετε αυτές τις προσωρινές συμβολοσειρές αφού ορίσετε την ιδιότητα φύλλο μορφοποίησης.

Packit 1470ea
Packit 1470ea
 

Κατασκευή και εκτέλεση του προγράμματος πάλι. Θα πρέπει τώρα να δουλεύει ακριβώς το ίδιο όπως στο τέλος της τελευταίας ενότητας, εκτός από τα μηνύματα που θα μορφοποιούνται όμορφα με περίγραμμα και λεπτή διαβάθμιση παρασκηνίου.

Packit 1470ea
</section>
Packit 1470ea
Packit 1470ea
<section id="more">
Packit 1470ea
  <title>Μάθετε περισσότερα</title>
Packit 1470ea
Packit 1470ea
  

Αυτό το μάθημα δείχνει τη δημιουργία μιας βασικής εφαρμογής χρησιμοποιώντας GTK+ και WebKit, περιλαμβάνοντας την εμφάνιση ενός εγγράφου και επεξεργασία των δεδομένων του. Για τη δημιουργία μιας πραγματικής εφαρμογής, θα θέλετε προφανώς να κάνετε κάτι περισσότερο. Προσπαθήστε να προσθέσετε δικά σας χαρακτηριστικά. Να μερικές ιδέες:

Packit 1470ea
Packit 1470ea
  <list>
Packit 1470ea
    <item>

Εάν είσαστε άνετοι με το CSS, δοκιμάστε να αλλάξετε τη μορφοποίηση της εμφάνισης του μηνύματος. Το CSS είναι εύκολο για να ξεκινήσετε, αλλά διαρκώς περισσότερο ισχυρό. Υπάρχει πλήθος μαθημάτων CSS στο διαδίκτυο και σχεδόν κάθε τι που μπορείτε να κάνετε στον ιστό, μπορείτε να το κάνετε με αυτήν την εφαρμογή.

</item>
Packit 1470ea
Packit 1470ea
    <item>

Τώρα αμέσως, χάνετε όλα τα μηνύματά σας όταν κλείνετε τον πίνακα μηνυμάτων. Δοκιμάστε να αποθηκεύσετε τα περιεχόμενα HTML μετά από κάθε ταχυδρόμηση και φορτώστε το αποθηκευμένο αρχείο (εάν υπάρχει) στην εκκίνηση.

</item>
Packit 1470ea
Packit 1470ea
    <item>

Αν κρατάτε τα μηνύματά σας για πολύ χρόνο, θα αρχίσετε να διερωτάστε πότε τα ταχυδρομήσατε. Προσθέσετε ένα σημάδι χρόνου σε κάθε μήνυμα όταν ταχυδρομείται. Θα θέλετε προφανώς να δημιουργήσετε μερικά πρόσθετα θυγατρικά στοιχεία div με διαφορετικές κλάσεις που μπορείτε να μορφοποιήσετε σε CSS.

Packit 1470ea
    </item>
Packit 1470ea
Packit 1470ea
    <item>

Αυτό το πρόγραμμα κρατά τα μηνύματα για πάντα. Σκεφτείτε τρόπους που θα μπορούσαν να επιτρέψουν στο χρήστη να διαγράψει μηνύματα. Ίσως θέλετε τα μηνύματα να εξαφανίζονται αυτόματα όταν παλιώνουν, ή όταν υπάρχει ένας συγκεκριμένος αριθμός μηνυμάτων πριν από αυτά. Ή θα μπορούσατε να προσθέσετε έναν σύνδεσμο σε κάθε μήνυμα για διαγραφή του. Θα μπορούσατε ακόμα να αντικαταστήσετε το μενού περιεχομένου όταν κάνετε δεξιό κλικ σε μήνυμα. Αυτές τα χαρακτηριστικά περιέχουν περισσότερη περιήγηση του DOM API του WebKit.

</item>
Packit 1470ea
  </list>
Packit 1470ea
</section>
Packit 1470ea
</page>