Drawing

Procédures de WindowTools permettant de dessiner.

Version: 1.0
Date: Le 13 août 1997
Rédaction: Jocelyn Houle
Direction: Jean Vaucher


Introduction

WindowTools permet de dessiner plusieurs formes: rectangles, cercles, arcs, polygones quelconques. On peut également afficher du texte comme dessin. Sur les stations Indigos, on peut même afficher en couleur!

Pour ce faire, WindowTools dispose de plusieurs procédures.

Pour bien montrer ces appels, nous avons créés un tutoriel compilable... Compte tenu de la longueur, il n'est pas décrit exhaustivement ici, mais vous pouvez toujours l'essayer... (Drawing.sim)


Informations sur les instructions de dessin

Les instructions de base sont:
procedure DrawPoint(X, Y); integer X, Y;
Trace un point à la coordonnée (x, y).
procedure DrawLine( X1, Y1, X2, Y2 ); integer X1, Y1, X2, Y2;
Trace une ligne du point (x1, y1) au point (x2, y2).
procedure DrawRectangle( X, Y, Width, Height ); integer X1, Y1, Width, Height;
Trace un rectangle dont le coin supéieur gauche est au point (x, y) et dont la taille est de WidthXHeight pixels de long.
procedure DrawCircle( X, Y, R); integer X, Y, R;
Trace un cercle du centré au point (x1, y1) et ayant un rayon de R.
procedure DrawEllipse( X, Y, Width, Height); integer X, Y, Width, Height;
Trace une ellipse inscrite dans le rectangle définit par les 4 paramètres.
procedure DrawArc( X, Y, Width, Height, Angle1, Angle2 ); integer X, Y, Width, Height, Angle1, Angle2;
Trace un arc inscrit dans le rectangle définit par les 4 premiers paramètres et dont l'angle de départ est Angle1 et ayant Angle2 degrés d'amplitude.
Note: L'angle 0 est situé à droite de l'écran et l'amplitude croît en sens anti-horaire (donc l'angle 90 est en haut de l'écran). Référez-vous au tutoriel.
procedure DrawPolygon( X_Coords, Y_Coords, n ); integer array X_Coords, Y_Coords; integer n;
Trace un polygone à n somments dont les coordonnées sont définies par les tableaux d'entiers X_Coords et Y_Coords.

Mais ces appels ne traceront que le trait contour des formes. Il existe également des procédures Fill qui rempliront les formes.
procedure FillRectangle( X, Y, Width, Height ); integer X1, Y1, Width, Height;
procedure FillCircle( X, Y, R); integer X, Y, R;
procedure FillEllipse( X, Y, Width, Height); integer X, Y, Width, Height;
procedure FillArc( X, Y, Width, Height, Angle1, Angle2 ); integer X, Y, Width, Height, Angle1, Angle2;
procedure FillPolygon( X_Coords, Y_Coords, n ); integer array X_Coords, Y_Coords; integer n;

Il existe aussi des procédures d'inversion, servant à inverser les pixels (i.e. un pixel noir devient blanc, etc.).
procedure InvertPoint(X, Y); integer X, Y;
procedure InvertLine( X1, Y1, X2, Y2 ); integer X1, Y1, X2, Y2;
procedure InvertRectangle( X, Y, Width, Height ); integer X1, Y1, Width, Height;
procedure Invert; (inverse toute la fenêtre)
procedure Flash; (fait clignoter une fois la fenêtre)

Il existe aussi des procédures destinées à effacer:
procedure Clear;
Vide complètement le contenu de la fenêtre.
procedure ClearRectangle(X, Y, Width, Height); integer X, Y, Width, Height;
Vide complètement le contenu du rectangle défini.

On peut aussi copier des zônes rectanglaires dans une fenêtre:
procedure CopyRectangle(srcx, srcy, width, height, destx, desty); integer srcx, srcy, width, height, destx, desty;
Copie le rectangle défini par les 4 premiers paramètres au point (destx, desty).

Il existe aussi plusieurs appels servant à définir l'environnement de dessin:
procedure SetForeground(ColorName); text ColorName;
Change le foreground pour la couleur définie par ColorName.
Note: Si la couleur n'existe pas, une couleur aléatoire sera utilisée.
Les codes RGB sont aussi possibles pourvu que le dièse (#) le précède (ex: #FF0000 pour rouge).
procedure SetBackground(ColorName); text ColorName;
Change le background pour la couleur définie par ColorName.
procedure SetFill(ColorName); text ColorName;
Change la couleur de remplissage pour la couleur définie par ColorName.
procedure SetLineWidth(Width); integer Width;
Change la taille du trait pour qu'il ait Width pixels de large.

On peut finalement dessiner du texte:
procedure DrawText( x, y, t ); integer x, y; text t;
Dessine le texte t aux coordonnées (x, y).
procedure EraseText( x, y, t ); integer x, y; text t;
Efface une zône correspondant au texte t aux coordonnées (x, y).
procedure DrawTextCenterIn( x, y, t ); integer x, y; text t;
Dessine le texte t centré aux coordonnées (x, y).
procedure DrawCenterText( t ); text t;
Dessine le texte t centré dans la fenêtre.
procedure DrawTextPos( x, y, t, hpos, vpos ); text t; integer x, y, hpos, vpos
Dessine le texte t aux coordonnées (x, y) selon les paramètres d'alignement hpos et vpos.
Notes: hpos peut prendre les valeurs CenterPos, LeftPos et RightPos. vpos peut prendre les valeurs CenterPos, TopPos et BottomPos.
procedure EraseTextPos( x, y, t, hpos, vpos ); text t; integer x, y, hpos, vpos
Efface la zône correspondant au texte t aux coordonnées (x, y) selon les paramètres d'alignement hpos et vpos.
integer procedure WidthOfText( t ); text t;
Retourne la longueur en pixels du texte t.
integer procedure Font_Height;
Retourne la hauteur en pixels du jeu de caractères.
integer procedure SetTypeFace(typeface, size, bold, slanted); text typeface; integer size; boolean bold, slanted;
Définit la fonte courante selon les paramètres. Typeface est le nom (ex: courrier, times, helvetica). Size est la grandeur (ex: 8, 10, 12). Bold et slanted sont respectivement les attributs de gras et italic...


Notes concernant la couleur

WindowTools utilise le fichier rgb.txt comme dictionnaire des couleurs. Sur JSP, on peut le trouver dans /usr/lib/X11. Ce fichier répertorie tout simplement en codes RGB une série assez impressionnante de couleurs (en anglais). La casse n'importe pas. Si la couleur n'est pas répertoriée, une couleur aléatoire sera utilisée.

On peut aussi définir la couleur que l'on veut à l'aide de codes RGB. Le format de ces couleurs est simple: le premier caractère doit être le caractère '#', puis on code chaque couleur avec 1 ou 2 caractères hexadécimaux (de 0 à F). Ainsi, bleu serait #00F ou #0000FF.


Exemples de programmes

[Retour à l'index de WindowTools...]