s Graphiques

Graphiques

SWT fournit un moteur graphique puissant pour réaliser des graphiques et afficher des images dans des widgets. Vous pouvez aller relativement loin sans programmation de l'interface graphique, du fait que les widgets traitent la mise en couleur des icônes, du texte et d'autres données à votre place. Toutefois, si votre application affiche des graphiques personnalisés ou si vous implémentez un widget dessiné et personnalisé, vous devez connaître certains objets de dessin de base dans SWT.

Contexte graphique

Le contexte graphique, CG, est le point focal du support graphique de SWT. Son API décrit toutes les capacités de dessin dans SWT.

Un CG peut être utilisé pour dessiner sur un contrôle (cas le plus fréquent), sur une image, sur un affichage ou sur une imprimante. Lorsque vous dessinez sur un contrôle, vous utilisez le CG fourni dans l'événement de représentation du contrôle. Si vous dessinez sur une image, un affichage ou une imprimante, vous devez créer un CG configuré expressément et le supprimer une fois son utilisation terminée.

Lorsque vous disposez d'un CG, vous pouvez définir ses attributs, par exemple une couleur, l'épaisseur des lignes et la police qui contrôlent l'aspect des graphiques dessinés dans le CG.

La référence d'API pour le CG décrit le jeu complet de fonctions graphiques.

Polices

Les classes Font et FontData sont utilisées lors de la manipulation des polices dans SWT.

FontData décrit les caractéristiques d'une police. Vous pouvez créer une classe FontData en spécifiant un nom, un style et une taille de police. FontData inclut une API permettant de demander ces attributs. Du fait que FontData n'attribue pas de ressources du système d'exploitation, il n'est pas nécessaire de supprimer cette classe.

La classe Font est l'objet graphique réel représentant une police utilisée dans l'API de dessin. Afin de créer une police pour un affichage, indiquez ce dernier, ainsi que la classe FontData de la police souhaitée. Vous pouvez également demander une police pour sa classe FontData.

Il vous faut supprimer une police allouée une fois son utilisation terminée.

Couleurs

Les couleurs sont similaires aux polices. Vous créez une couleur pour un affichage en spécifiant les valeurs RVB de la couleur souhaitée. Il vous faut supprimer une couleur allouée une fois son utilisation terminée.

La méthode d'affichage getSystemColor(int) vous permet de demander les couleurs système prédéfinies pour la plateforme du système d'exploitation. Vous ne devez pas libérer de couleurs obtenues via cette technique.

Le modèle de couleur est expliqué en détail dans l'article SWT color model.

Images

Les classes Image, ImageData et ImageLoader sont utilisées lors de la manipulation d'images dans SWT.

ImageData décrit les pixels réels de l'image à l'aide de la classe PaletteData pour exposer les valeurs des couleurs utilisées. ImageData offre une description indépendant du dispositif et de la plateforme.

ImageLoader charge et sauvegarde ImageData sous différents formats de fichier. SWT supporte le chargement et la sauvegarde des formats d'image BMP (Bitmap Windows), ICO (Icône Windows), JPEG, GIF et PNG.

L'image est l'objet graphique réel représentant l'image utilisée dans l'API de dessin. Une image est créée pour un affichage spécifique. Des images peuvent être créées de plusieurs façons :

Quel que soit le mode de création de l'image, il vous revient de la supprimer.

Cycle de vie des objets graphiques

La plupart des objets graphiques utilisés pour le dessin dans SWT allouent des ressources du système d'exploitation sous-jacent et doivent être explicitement libérées. La même règle que celle des représentations miniatures abordée précédemment s'applique ici. Si vous le créez à l'aide d'un constructeur, vous devez-le libérer. Si sous y accédez à partir d'un autre endroit, ne le libérez pas.

Création

Des objets graphiques tels que des contextes graphiques, des polices, des couleurs et des images sont alloués dans le système d'exploitation dès que l'objet est créé. Le mode selon lequel vous envisagez d'utiliser vos objets graphiques détermine le moment où vous devez les créer.

En ce qui concerne les objets graphiques utilisés de manière récurrente dans l'application, leur création peut être simultanée à celle des widgets. Cette procédure est couramment utilisée pour les couleurs et les polices. Dans d'autres cas, il est plus approprié de créer vos objets graphiques à la volée. Par exemple, vous pouvez créer un contexte graphique dans l'un de vos gestionnaires d'événements de widget pour effectuer des calculs.

Si vous implémentez un widget personnalisé, vous allouez généralement des objets graphiques dans le constructeur, si vous les utilisez toujours. Vous pouvez les allouer à la volée si vous ne les utilisez pas toujours ou s'ils dépendent de l'état de certains attributs.

Traçage

Une fois les objets graphiques alloués, vous êtes prêts à tracer. Il est conseillé de toujours effectuer le traçage dans un écouteur de dessin. Dans quelques rares cas, notamment lors de l'implémentation de widgets personnalisés, vous tracez tout en répondant à d'autres événements. Cette approche est généralement déconseillée. Si vous pensez devoir tracer tout en traitant d'autres événements, vous devez d'abord essayer d'utiliser la méthode redraw() qui génère un autre événement de traçage dans le système d'exploitation. Dessiner en dehors de la méthode de traçage réduit les performances optimales de la plateforme et peut entraîner des bogues en fonction du nombre de dessins en attente dans la file d'événements.

Lorsque vous recevez un événement de traçage, un CG préconfiguré est fourni pour dessiner dans le widget. Ne libérez pas ce CG. Vous ne l'avez pas créé.

D'autres objets graphiques doivent être alloués pendant le traitement de l'événement (ou avant). Le fragment ci-dessous est basé sur l'exemple org.eclipse.swt.examples.HelloWorld5. La couleur rouge a été préalablement allouée lors de la création du widget, aussi peut-elle être utilisée ici.

   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);
      }
   });

Suppression

Chaque objet graphique que vous allouez doit être libéré lorsque vous avez fini de l'utiliser.

Le délai de suppression dépend de la date de création de l'objet. Si vous créez un objet graphique tout en créant votre widget, vous devez en général ajouter un écouteur de suppression sur le widget et supprimer les graphiques lorsque le widget est supprimé. Si vous créez un objet à la volée en dessinant, vous devez le supprimer une fois le dessin terminé.

Le fragment de code ci-dessous montre une version légèrement modifiée de notre écouteur de dessin. Dans cet exemple, il alloue et libère la couleur rouge pendant le dessin.

   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();
      }
   });

Copyright IBM Corporation and others 2000, 2003.