Γραφικά

Το SWT παρέχει ένα μηχανισμό γραφικών για το σχεδιασμό γραφικών και την εμφάνιση εικόνων σε όργανα. Μπορείτε να προχωρήσετε αρκετά χωρίς να χρειαστεί ποτέ να προγραμματίσετε τη διεπαφή γραφικών, καθώς τα όργανα χειρίζονται για σας την εφαρμογή χρώματος στα εικονίδια, το κείμενο και άλλα δεδομένα. Ωστόσο, αν η εφαρμογή εμφανίζει προσαρμοσμένα γραφικά, ή αν υλοποιείτε ένα όργανο προσαρμοσμένης σχεδίασης, τότε χρειάζεται να κατανοήσετε κάποια βασικά αντικείμενα σχεδίασης στο SWT.

Περιβάλλον γραφικών

Το περιβάλλον γραφικών, GC, είναι το κεντρικό σημείο για την υποστήριξη γραφικών του SWT. Το API αυτού του σημείου περιγράφει όλες τις ικανότητες σχεδίασης στο SWT.

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

Εφόσον έχετε GC, μπορείτε να ορίσετε τα γνωρίσματά του, όπως το χρώμα, το πλάτος της γραμμής και τη γραμματοσειρά, που ελέγχουν την εμφάνιση των γραφικών που έχουν σχεδιαστεί στο GC.

Η Παραπομπή API για GC περιγράφει το πλήρες σύνολο των συναρτήσεων γραφικών.

Γραμματοσειρές

Οι κλάσεις Font και FontData χρησιμοποιούνται κατά το χειρισμό γραμματοσειρών στο SWT.

Η κλάση FontData περιγράφει τα χαρακτηριστικά μιας γραμματοσειράς. Μπορείτε να δημιουργήσετε μια κλάση FontData προσδιορίζοντας ένα όνομα γραμματοσειράς, στυλ και μέγεθος. Η FontData περιέχει API για την υποβολή ερωτημάτων για αυτά τα γνωρίσματα. Εφόσον η FontData δεν κατανέμει πόρους λειτουργικού συστήματος, δε χρειάζεται να την αποδεσμεύσετε.

Η "Γραμματοσειρά" είναι το πραγματικό αντικείμενο γραφικών που αντιπροσωπεύει μια γραμματοσειρά η οποία χρησιμοποιείται στο API σχεδίασης. Μπορείτε να δημιουργήσετε μια "Γραμματοσειρά" για μια Εμφάνιση προσδιορίζοντας την "Εμφάνιση" και την κλάση FontData της γραμματοσειράς που θέλετε. Μπορείτε επίσης να υποβάλετε ερωτήσεις σε μια "Γραμματοσειρά" για την κλάση FontData που διαθέτει.

Πρέπει να αποδεσμεύσετε μια κατανεμημένη "Γραμματοσειρά" όταν ολοκληρωθεί η χρήση της.

Χρώματα

Τα χρώματα μοιάζουν με τις γραμματοσειρές. Για να δημιουργήσετε ένα Χρώμα για μια "Εμφάνιση" πρέπει να προσδιορίσετε τις τιμές RGB του επιθυμητού χρώματος. Πρέπει να αποδεσμεύσετε το κατανεμημένο χρώμα όταν ολοκληρωθεί η χρήση του.

Η μέθοδος εμφάνισης getSystemColor(int) επιτρέπει την υποβολή ερωτημάτων για τα προκαθορισμένα χρώματα συστήματος της πλατφόρμας λειτουργικού συστήματος. Δεν θα πρέπει να αποδεσμεύετε χρώματα που προέκυψαν χρησιμοποιώντας αυτή τη μέθοδο.

Λεπτομερείς πληροφορίες για το μοντέλο χρώματος θα βρείτε στο άρθρο SWT color model.

Εικόνες

Κατά το χειρισμό εικόνων στο SWT χρησιμοποιούνται οι κλάσεις Image, ImageData, και ImageLoader.

Η κλάση ImageData περιγράφει τον ακριβή αριθμό εικονοστοιχείων στη εικόνα και χρησιμοποιεί την κλάση PaletteData για να περιγράψει τις χρησιμοποιούμενες τιμές χρώματος. Η κλάση ImageData είναι μια περιγραφή εικόνας που δεν εξαρτάται από τη συσκευή ή την πλατφόρμα.

Η κλάση ImageLoader φορτώνει και αποθηκεύει ImageData σε διαφορετικές μορφές αρχείων. Το SWT υποστηρίζει τώρα την φόρτωση και αποθήκευση μορφών εικόνων συμπεριλαμβανομένων των BMP (Windows Bitmap), ICO (Εικονίδιο Windows), JPEG, GIF, και PNG.

Η "Εικόνα" είναι το αντικείμενο γραφικών που αντιπροσωπεύει την εικόνα που χρησιμοποιείται στο API σχεδίασης. Μπορείτε να δημιουργήσετε μια εικόνα για μια ορισμένη "Εμφάνιση". Οι Εικόνες μπορούν να δημιουργηθούν με διάφορους τρόπους:

Ανεξάρτητα από τον τρόπο δημιουργίας της "Εικόνας", η αποδέσμευσή της αποτελεί ευθύνη σας.

Κύκλος ζωής αντικειμένου γραφικών

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

Δημιουργία

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

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

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

Ζωγραφική

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

Όταν λαμβάνετε ένα συμβάν ζωγραφικής, σας δίνεται ένα προρυθμισμένο GC για την σχεδίαση στο όργανο. Μην ελευθερώσετε αυτό το σημείο GC! Δεν το δημιουργήσατε εσείς.

Οποιοδήποτε άλλο αντικείμενο γραφικών πρέπει να κατανεμηθεί κατά τον χειρισμό του συμβάντος (ή νωρίτερα). Ακολουθεί ένα τμήμα κώδικα που βασίζεται στο δείγμα org.eclipse.swt.examples.HelloWorld5. Το κόκκινο χρώμα είχε κατανεμηθεί νωρίτερα κατά την δημιουργία του οργάνου, άρα μπορεί να χρησιμοποιηθεί εδώ.

   shell.addPaintListener (new PaintListener () {
      public void paintControl (PaintEvent event) {
         GC gc = event.gc;
         gc.setForeground (red);
         Rectangle rect = event.widget.getClientArea ();
         gc.drawRectangle (rect.x + 10, rect.y + 10, rect.width - 20, rect.height - 20);
         gc.drawString (resHello.getString("Hello_world"), rect.x + 20, rect.y + 20);
      }
   });

Αποδέσμευση

Κάθε αντικείμενο γραφικών που κατανέμεται πρέπει να ελευθερώνεται όταν ολοκληρωθεί η χρήση του.

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

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

   shell.addPaintListener (new PaintListener () {
      public void paintControl (PaintEvent event) {
         GC gc = event.gc;
         Color red = new Color (event.widget.getDisplay (), 0xFF, 0, 0);
         gc.setForeground (red);
         Rectangle rect = event.widget.getClientArea ();
         gc.drawRectangle (rect.x + 10, rect.y + 10, rect.width - 20, rect.height - 20);
         gc.drawString (resHello.getString ("Hello_world"), rect.x + 20, rect.y + 20);
         red.dispose ();
      }
   });