Suivez-nous sur X

|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : Assembleur - Les structures d'écran et de fenêtre
(Article écrit par Max et extrait d'Amiga News Tech - avril 1989)
|
|
Nous allons voir de plus près comment sont construites les structures d'écran et de fenêtre, nécessaires à
toute ouverture d'un quelconque de ces éléments.
Structures ?
Avant tout, deux petites précisions : premièrement, une structure n'est rien d'autre qu'un bloc de
paramètres en mémoire (le nom vient du langage C, où les structures sont couramment employées).
Et deuxièmement, ne confondez pas "structure Screen" et "structure NewScreen".
La seconde est la structure dont vous allez effectivement passer l'adresse à Intuition pour
l'ouverture d'un nouvel écran, la première étant la structure qu'Intuition s'est bâtie
elle-même pour gérer votre écran. La remarque est également valable pour les structures Window et NewWindow.
Une structure d'écran (NewScreen) se compose de 32 octets, arrangés comme suit :
Voyons maintenant tout cela de plus près. Les deux premiers mots indiquent la position en X et en Y
du nouvel écran, relativement au coin supérieur gauche de l'affichage (bref, le moniteur).
Seule la position en Y a ici une importance, un écran ne pouvant être que "monté" ou "descendu"
(à l'aide de la souris ou par programme). La position en X n'a été implémentée par les concepteurs de l'Amiga,
que dans un souci de compatibilité avec d'éventuelles futures versions du système.
Les deux mots suivants indiquent respectivement la largeur et la hauteur de l'écran.
Il faut ensuite définir le nombre de couleurs que notre écran sera capable d'afficher, ce qui revient
à définir un certain nombre de plans de bits. Plus ce nombre est élevé, plus le nombre de couleurs
représentables simultanément l'est aussi. La relation est la suivante : nombre de couleurs = 2 puissance
nombre de plans de bits. Le nombre maximum prévu par Intuition est de 5, ce qui permet d'afficher 32
couleurs.
Les octets "Detail Pen" et "Block Pen" indiquent respectivement le numéro du registre de couleur à
employer pour dessiner la ligne de titre et les gadgets, ainsi que la couleur d'écriture et le numéro
du registre de couleur, à employer pour les gadgets sélectionnés et le fond du texte. Le mot appelé
"View Modes" sert à définir le mode de représentation de l'écran. Voici la signification et le nom
des différents bits utiles de ce mot lorsqu'ils sont positionnés :
Les autres bits devraient, pour bien faire, être mis à 0 dans la structure, Intuition se chargeant tout
seul comme un grand de les positionner à sa guise.
Le mot "Screen Type" qui vient par la suite, définit le type de l'écran. Apparemment, personne ne sait
exactement à quoi il sert, mais une valeur standard de 15 fonctionne toujours.
Et on arrive aux quatre derniers mots longs qui compose cette structure NewScreen. Avec en tête du peloton,
"Font", qui détermine l'adresse de la police à utiliser dans le nouvel écran. Il suffit pour cela
de définir une structure "TxtAttr" décrivant la nouvelle police et de placer ici son adresse.
Comment ? Vous préférez la police Topaz par défaut ? Pas de problème, il suffit de mettre ce mot long
à 0. Facile, non ?
"Default Title" est l'adresse du titre de l'écran (par exemple, le titre de l'écran du Workbench est
"Workbench Screen"). Si vous ne voulez pas de titre particulier, indiquez 0.
"Gadgets" doit pour l'instant, dans l'état actuel d'Intuition, être fixé sur 0. Il sera peut-être
utilisé plus tard...
Et finalement "Bitmap" désigne l'adresse d'une Bitmap personnelle, si le drapeau "CUSTOMBITMAP"
du mot "Type" est fixé. Comme ce n'est apparemment jamais le cas, autant le mettre à 0 (c'est même
impératif).
Voilà, notre structure NewScreen est complète. On transmet son adresse à Intuition via la
fonction OpenScreen et le tour est joué, notre écran est ouvert. En retour, Intuition renvoie un
"handle" d'écran, c'est-à-dire un gestionnaire, qui sera utilisé lors de chaque accès à notre
écran. Ce "handle" est en fait un pointeur sur une structure Screen. Elle est composée de quelque
342 octets, aussi vous ne m'en voudrez pas de la passer sous silence. D'autant plus qu'elle est
entièrement détaillée dans pas mal de bouquins et notamment dans "Le livre du Graphisme"
chez Micro-Application.
Ouvre un peu la fenêtre
L'opération est quasi-identique pour ouvrir une fenêtre : passage de l'adresse de la structure
NewWindow à Intuition, appel de la fonction OpenWindow et sauvegarde du handle retourné.
Voyons de plus près la structure de la structure (excusez-moi pour les répétitions,
mais bon, on fait ce qu'on peut...) NewWindow. Elle est composée de 48 octets :
Et c'est reparti pour l'étude de détail. Les quatre premiers mots parlent d'eux-mêmes, il s'agit
de la position et de la taille de la fenêtre lors de son ouverture. On trouve ensuite les deux octets,
Detail Pen et Block Pen qui se comportent de la même manière que dans la structure NewScreen.
Les drapeaux IDCMP (Intuition Direct Communication Message Ports) méritent plus d'attention.
Il s'agit d'un mot long, destiné à demander à Intuition, de prévenir le programme "père" de la fenêtre,
des divers évènements qui peuvent survenir. Seuls les vingt premiers bits ont une signification.
Voici les valeurs possibles :
Ces valeurs sont, bien entendu, cumulables (vos esprits acerbes auront remarqué que certaines valeurs
ne sont pas décrites... C'est tout simplement parce que - je l'avoue - j'en ignore la signification
intrinsèque... Mon méat coule pas, comme dirait un copain à moi).
Le mot suivant définit encore des drapeaux (flags), mais qui caractérisent la fenêtre :
Là encore, les valeurs peuvent être cumulées, et là encore, je ne connais pas la signification de certaines
valeurs. Veuillez pardonner mes excuses. Le mot long "FirstGadget" permet de placer ses gadgets personnels
dans la fenêtre ; il s'agit donc d'un pointeur sur la structure de ces gadgets. Si aucun gadget particulier
n'est utilisé, il faut le mettre à 0.
Le mot long "CheckMark" est un pointeur sur une structure graphique, permettant de représenter les
points de menus sélectionnés. Si l'on met 0, c'est le crochet stantard qui est utilisé. WindowTitle
pointe sur le titre la fenêtre en mémoire, Screen est le pointeur sur la structure Screen de
l'écran auquel la fenêtre appartient (vous savez, le "handle" renvoyé par OpenScreen) et Bitmap
sert de pointeur sur une bitmap personnelle le cas échéant (Cf. la structure NewScreen). Les
quatre mots suivants indiquent les tailles minimales et maximales de la fenêtre en pixels et le
dernier mot indique le type d'écran auquel appartient notre nouvelle fenêtre (encore une fois, Cf. NewScreen).
Stooooop !
Voilà, ça n'a pas été sans mal, mais le plus dur est fait. Le mois prochain, nous verrons comment
réagir aux différents messages qu'Intuition peut envoyer à un programme, ce qui sera l'occasion
de devinez quoi ? Un listing, oui.
|