Round Window et les windowType (D5 & D6) 

 

 

La création d'animations dans une fenêtre (MIAW, pour Movie In A Window) est un moyen simple d'ajouter une dimension supplémentaire à une animation trop linéaire. L'apparition à tout instant d'un index, d'un dialogue ou encore d'un écran de petite taille diffusant une animation autonome font partie des utilisations courante des MIAWs.

Mais comment peut-on échapper aux types de fenêtres proposés par le manuel ? C'est à l'exploration de ces possibilités trop peu connues que vous convie le Crapo.

On commence bien sûr par créer une animation de petite taille (en changeant ses dimensions par le menu Modifier/Animation/Propriétés) que l'on enregistre sur le bureau. On voit ici une animation simplette présentant une trajectoire, mais rien n'interdit d'utiliser un projet complexe et interactif.

Pour appeler une fenêtre s'ouvrant sur notre mini-animation, nous créons un autre document de taille normale celui-là et affichons la fenêtre Message. C'est de là que nous allons pratiquer nos expériences.

Nous saisissons les première commandes permettant de créer la fenêtre et de lui affecter le fichier Director enregistré sur le bureau. Nous donnons le chemin complet :

set the fileName of window "maFenetre" to "Macintosh HD:desktop folder:minimiaw.dir"

Notre fenêtre a désormais un nom et nous pouvons dès lors demander son ouverture :

open window "maFenetre"

L'aspect que Director confère à notre MIAW n'est pas des plus heureux. Nous savons que nous pouvons changer cela en agissant sur la propriété the windowType of window... Les valeurs possibles sont -1, 1, 2, 3, 4, 8, 12, 16 pour obtenir respectivement :

Ainsi on peut saisir :

set the windowType of window "maFenetre" to 1

Ce type de fenêtre correspond visiblement à une fenêtre d'alerte type. C'est que Director fait ici appel au ressources système. Le type 16 par exemple correspond sur le Mac à la fenêtre dédiée à la calculette du menu pomme.

Director fournit quand à lui un autre type sous la forme d'une ressource WDEF nommée "infinity windoid" integrée aux ressources de l'application comme des projections. On peut l'utiliser par :

set the windowType of window "maFenetre" to 48

 

 

On notera en outre et pour mémoire les types 5 et 6 que l'on peut voir plus bas :

Le type 13 constituant un mixte des deux (un monstre ?). On trouvera plus d'intérêt enfin au type 19, qui reprend le thème de la calculette mais avec des coins carrés.

Et c'est tout ? En fait, et sur Mac, l'instruction Set the windowType to... ordonne au Ressource Manager de MacOS de chercher une ressource WDEF (Window Definition) correspondante. Le ressource Manager cherche d'abord dans le fichier de l'animation (le document), dans le fichier de préférences de l'application ensuite , dans celui de l'application elle même (Director ou la projection), enfin dans le fichier de ressources du système. La compréhension de ce mécanisme est importante car il rend possible l'appel de tout autre type pourvu qu'il soit mis à la portée du Ressource Manager. Mettons tout de suite cela en pratique :

 

D'autres types de fenêtres (sur Mac)

Pour son usage personnel, le Système possède quelques ressources WDEF intéressantes. La ressource WDEF d'Id 124 et ses variantes par exemple sont utilisées par AppleGuide pour dessiner ses fenêtres. Pour lui emprunter cette WDEF, il nous faut multiplier son identifiant par 16 et ajouter au produit le numéro d'une éventuelle variation ou style. Par défaut le style principal porte le numéro 0. Donc 124*16 + 0 = 1984. Essayons.

Set the windowType of window "maFenetre" to 1984

De nombreuses variantes peuvent être appelées, de 1984 à 1999. Les windowType 1992 et suivants donnent des fenêtres avec barre de titre à gauche.

Set the windowType of window "maFenetre" to 1996

 

À tester aussi les windowType 2017 et 2025, 2018 et 2026, 2019 et 2027, 2020 et 2028, 2021 et 2029, 2022 et 2030, 2023 et 2031 (WDEF ID 126 et variantes) qui correspondent aux fenêtre des bulles d'aide du Mac. Chaque style ou variante permettant de placer la pointe de la bulle dans un angle différent. Ces fenêtres ne supportent pas les clics mais sont tout à fait utilisables. (Bien sûr avec ces fenêtre, on devra utilise la propriété the rect of window pour obtenir un placement pertinent.)

Set the windowType of window "maFenetre" to 2022

 

Utilisant le même mécanisme d'appel à une ressource WDEF, il est possible aux développeur de créer leur propres ressources WDEF et de les coller (via ResEdit) sur le chemin de recherche du Ressource Manager. Round Window de Mattias Ellert est une WDEF (libre de droit) définissant une fenêtre ronde. Le CrapoWeb se propose de l'utiliser.

 

Round Window par Mattias Ellert

On commence bien sûr par ce procurer la ressource WDEF en la téléchargeant sur le site de l'auteur :
Mattias Ellert's Macintosh Software Archive : http://www.tsl.uu.se/~ellert/software.html

Round Window se présente comme une application de démonstration qui ne fait rien d'autre qu'afficher les styles disponibles (une WDEF peut contenir 16 style ou variantes). Nous utilisons ResEdit afin d'ouvrir le fichier de ressources de Round Window pour y copier la WDEF d'ID 32.

On ouvre maintenant de la même façon le fichier de l'animation que l'on souhaite doter (La scène, qui appellera la fenêtre ronde). ResEdit risque fort de nous avertir que ce document n'a pas de fichier de ressources et qu'il va devoir en créer un. On accepte. On colle aussitôt le contenu du presse-papiers. ResEdit crée alors dans le nouveau fichier de ressources de l'animation un sélecteur de type (WDEF) et dedans, place la ressource ID 32 "Round Window". Une ressources ne devrait pas avoir un numéro d'identifiant inférieur à 128 selon Apple. Le numéro d'identifiant de Round Window sera peut être modifié par les bidouilleurs scrupuleux mais alors il faudra s'en souvenir quand on appellera The windowType. Pour l'instant on quitte ResEdit en enregistrant les modifications de notre fichier d'animation.

Tout est prêt. Notre script d'appel de la fenêtre doit être ainsi rédigé :

set the fileName of window "maFenetre" to "Macintosh HD:desktop folder:minimiaw.dir"
set the windowType of window "maFenetre" to (WDEF ID *16 + numéro de style, par défaut 0)
set the title of window "maFenetre" to "CrapoFenetre"
open window "maFenetre"

Voilà ce que donne le windowType 512. Essayez 514 et vous y trouverez de nombreuses applications.

 

 

L'Xtra Border et ButtonWindow Xobj : Le problème des bordures

Toutes ces fenêtres même les plus dépouillées ont une bordure bien visibles. Cette bordure il semble impossible de s'en débarrasser puisque même la scène la laisse apparaître quand elle n'est pas noire. C'est pour supprimer ces bords noirs autour de la scène qu'a été développé l'Xtra border. Parce que dans sa version Macintosh, Border se contente d'ajouter une ressource WDEF à l'animation, nous savons que nous pouvons l'utiliser aussi pour créer une MIAW sans bordure.

On peut télécharger l'Xtra Border sur le site de l'éditeur MediaConnect.

Media Connect Attn.: Stefan Schmidt-Bilkenroth Gratzmüllerstr. 1 D-86150 Augsburg Germany Phone: +49 (0)821 / 34 75 20 Fax: +49 (0)821 / 34 75 2-49 Internet: www.mcmm.com E-Mail: ssb@mcmm.com

Dans sa version Mac, Border se présente comme une application patchant (c'est-à-dire modifiant) un projecteur. Son utilisation en mode auteur exige donc que l'on ouvre le fichier de ressource depuis Director par OpenResFile ou encore que l'on "démonte" la ressource WDEF en ouvrant le patch via ResEdit pour copier la WDEF d'ID 100. Collée dans le fichier de ressources de notre animation, la ressource pourra être appelée par :

set the windowType of window "maFenetre" to 1600

Difficile de vous montrer ici une fenêtre sans bordure !!! Essayer, et vous verrez une jolie fenêtre rectangulaire se fondant parfaitement avec tout objet sur l'écran.

Et si je veux une fenêtre RONDE et SANS BORDURE direz-vous ? Eh bien, si le sujet vous passionne tant, sachez que le Crapo possède dans ses archives un exemplaire de l'Xobjet ButtonWindow (xobjet de Director 4) qui contenant une ressource WDEF (ID 129) permettait d'en disposer dans une animation et ce, sans recourir à aucune MIAW.

Pour mettre ne œuvre l'Xobjet, on commence par changer la couleur de la scène (si elle est blanche, on ne verrra pas notre fenêtre) puis on ouvre le fichier par openXlib (nous utilisons la fenêtre message).

openxlib "buttonwindow"

On appelle ensuite la liste des Xchoses disponibles par ShowXlib afin de savoir si notre xobjet a été ouvert :

showxlib
-- XLibraries:
-- Xtra: FileXtra
-- Xtra: UiHelper
-- Xtra: JavaConvert
-- Xtra: CompileJava
-- Xtra: QuicktimeSupport
-- Xtra: NetLingo
-- Xtra: Mui
-- Xtra: fileio
-- "*Standard.xlib"
-- XObject: SerialPort Id:200
-- XObject: XCMDGlue Id:2020
-- "buttonwindow"
-- XObject: buttonWindow Id:4001

Pour connaître les méthodes de buttonWindow, on lui passe la méthode mDescribe :

buttonwindow(mdescribe)
-- Factory: buttonWindow ID:4001
-- roundWindow, a test, v0.0
IIII mNew, topL, botR, IDnumber -- create and show a round window
-- note: topL = top*65536 + left, botR = bottom * 65536 + right
XI mMove, newTopL -- move the window to the specified position
XI mOffset, downRight -- move window by specified amount
X mBringToFront -- make window frontmost
XP mDraw, picture -- draw picture into the window
-- note: topL & botR specify picture's placement within the window
-- and must be in local coordinates
I mScreenSize -- returns the width & height of the main screen area
-- as an integer in height*65536+width form
I mGetTopLeft -- returns the top left corner of the window rect
-- again as an integer - top*65536+left
I mGetHighWide -- returns height & width of the window rect
-- as usual - height*65536+width
X mDispose -- close window and dispose of object

On notera la deuxième ligne de ces instructions de fabrique : "RoundWindow, a test, v0.0". Avant même de se poser la question des droits d'utilisation commerciale d'une telle xchose, il est bon de méditer ce numéro de version. Nous ne présentons cet xchose ici que pour mémoire. Les lignes suivantes maintenant présentent une à une et de façon conventionnelle, les méthodes utilisables. Chacune de ces lignes est rédigée de la même manière :

Le groupe de lettres initiales (capitales souvent) fournit de indications sur le type que la fonction retourne (premier caractère) et le type d'arguments qu'elle requiert (tous les autres).

X indique que la fonction ne retourne aucune valeur
I désigne un entier
S une chaîne de caractères entre guillemets

plus rarement on rencontre dans ces listes :
L pour une liste d'entiers
P pour une image
O pour une instance d'Xobjet
V pour une variable

Nous créons notre objet en lui passant la méthode mNew et les arguments requis. Nous stockons l'instance dans une variable CRAPO.

set CRAPO to buttonwindow(mNew, 144*65536+176, 244*65536+ 276, 1)

NB : Il faut indiquer à l'objet les coordonnées de la fenêtre à l'aide d'un système de coordonnées bien spécial. Au sommet du rectangle de la fenêtre multiplié par 65536 on ajoute la position gauche. Nous avons utilisé les valeurs retournées par the stageTop et the stageLeft ici afin de placer notre fenêtre dans l'angle supérieur gauche de la scène. Nous avons ajouté 100 pixels à chacune de ces valeurs pour donner à notre fenêtre un diamètre de 100 pixels.

La fenêtre apparaît, ronde et sans aucune bordure... que si la scène n'est pas blanche ! Nous souhaitons y voir apparaître un acteur bitmap (acteur numéro 3 par exemple). Nous stockons l'image dans une variable MONDESSIN.

set MONDESSIN to the picture of member 3

Et nous passons à l'objet CRAPO la méthode mDraw suivi de la variable :

CRAPO(mDraw, MONDESSIN)

Déplacer la fenêtre, c'est faire usage une nouvelle fois de ce système inhabituel de coordonnées :

CRAPO(mMove, 276*65536+144)

Les meilleurs choses ont une fin, nous libérons la mémoire par la méthode mDispose.

CRAPO(mDispose)

closeXlib

 

 

Round Window de Mattias Ellert est téléchargeable sur le site de l'auteur :
http://www.tsl.uu.se/~ellert/software.html
Round Window est Freeware.

L'Xtra Border (shareware) se trouve sur le site de MediaConnect :
http://www.mcmm.com/english/pages/homee.html
L'Xtra a été mise à jour pour D7 et son nouveau Type de scène. Le patch pour projecteur Mac est gratuit.

ButtonWindow était inclus dans le MediaBook CD for Director.

Director 7.0.2 permet d'assigner un acteur bitmap au windowType. les possesseurs de cette version consulteront avec profit cet article sur cette nouvelle possibilité.