3.3.1 ΟΡΙΣΜΟΙ ΕΝΝΟΙΩΝ - DRAWABLES ΚΑΙ GRAPHICS CONTEXT


Η Xlib προσφέρει όλες τις αναγκαίες συναρτήσεις για τη σχεδίαση γεωμετρικών σχημάτων, κείμενο και εικόνων. Οι συναρτήσεις αυτές χρειάζονται μια περιοχή για να σχεδιάσουν, η περιοχή αυτή πρέπει να είναι τύπου Drawable. Στην κατηγορία αυτή ανήκουν τα παράθυρα (δομές Window) και τα pixmaps (δομές Pixmap). Τα pixmap, όπως περιγράφονται και στην αντίστοιχη παράγραφο παρακάτω, είναι περιοχές στη μνήμη με κάποιες συγκεκριμένες διαστάσεις (x*y pixels) στις οποίες μπορούμε να σχεδιάσουμε ότι και στα παράθυρα, να αντιγράψουμε τμήματά τους ή να τις μεταφέρουμε αυτούσιες σε ένα παράθυρο.

Ένα επιπλέον στοιχείο που είναι απαραίτητο για τις συναρτήσεις σχεδίασης είναι η δημιουργία και σύνδεση στο Drawable μιας δομής graphics context (GC). Η δομή αυτή περιέχει τις αναγκαίες πληροφορίες για την μορφή των γραμμών, των τόξων, τον τρόπο γεμίσματος (filling) μιας περιοχής και άλλα. Η Xlib διαθέτει τη συνάρτηση XCreateGC:

    (GC) XCreateGC(
        Display*        /* display */,
        Drawable        /* window or pixmap */,
        unsigned long   /* valuemask */,
        XGCValues*      /* values */
        );
Η XCreateGC παίρνει ορίσματα το display, το drawable (παράθυρο ή pixmap) που θα προσδιορίσει και τέλος μια μάσκα μαζί με το δείκτη σε μια δομή XGCValues, η οποία περιέχει τις πληροφορίες που επιθυμούμε. Η επιλογή των πεδίων της δομής XGCValues που θέλουμε να ορίσμουμε γίνεται με χρήση της μάσκας σύμφωνα με τον γνωστό τρόπο. Τα πεδία που δεν ορίζουμε παίρνουν τις τυπικές τιμές του display. Μάλιστα τις περισσότερες φορές δίνουμε μηδενική τιμή στην μάσκα ώστε η δομή XGCValues να πάρει εξ'ολοκλήρου τις τυπικές τιμές, ενώ στη συνέχεια αλλάζουμε επιτόπου σε κάθε περίπτωση τα χαρακτηριστικά εκείνα που επιθυμούμε πρίν την εκτέλεση μιας εντολής σχεδίασης.

Ακολουθεί ένα απόσπασμα κώδικα για την δημιουργία του graphics context του παραθύρου window:

    XGCValues      gcvalues;
    GC             gc;
    unsigned long  valuemask;
    .
    .
    .
    valuemask = 0l;
    gc = XCreateGC( display,
            window,
            valuemask,
            &gc );
    .
    .
    .

[prev] [up] [next] [contents] [index]