Attention,
Il ne se passe rien si on déplace la fenêtre Windows... C'était juste une image pour expliquer le principe.
Ce sont les valeurs rx et ry de la toile qui permettent de changer la vue. Les copies d'écran montre une application avec 4 boutons qui permettent de changer la partie de la toile visible.
Voici le source :
[php]
/*
Spécification : 2.0
Auteur : Cpc
Cet exemple donne un exemple d'utilisation de bureaux virtuels
*/
prototype
// Bureau
x & y :: nombre
nom :: texte
type bureau contient x, y, nom
globale
bureau1 :: bureau, x vaut 0, y vaut 0, nom vaut "Bureau 1"
bureau2 :: bureau, x vaut -500, y vaut 0, nom vaut "Bureau 2"
bureau3 :: bureau, x vaut 0, y vaut -500, nom vaut "Bureau 3"
bureau4 :: bureau, x vaut -500, y vaut -500, nom vaut "Bureau 4"
form :: formulaire, titre vaut "Utilisation de bureaux virtuels", largeur vaut 500, hauteur vaut 600
m1 :: menu, texte vaut "Menu"
sm1 :: sousmenu, texte vaut "Quitter"
xtoile :: xtoile, x vaut 0, y vaut 0
toile :: toile, hauteur vaut 500, largeur vaut 500
decallage <
- -50
case :: caseàcocher, x vaut 100 - decallage, y vaut 570, texte vaut "Changement de bureau en douceur"
b1 :: bouton, texte vaut nom@bureau1, x vaut 100 - decallage, y vaut 510
b2 :: bouton, texte vaut nom@bureau2, x vaut 200 - decallage, y vaut 510
b3 :: bouton, texte vaut nom@bureau3, x vaut 100 - decallage, y vaut 540
b4 :: bouton, texte vaut nom@bureau4, x vaut 200 - decallage, y vaut 540
image1 :: graphique, image vaut "../c_multimedia/images/tux_graduate.png", x vaut 200, y vaut 600, transparence vaut 90, taille vaut 20
écran :: praxinoscope, x vaut 650, y vaut 150, image0 vaut "../c_multimedia/images/praxinoscope-0.png", ...
image1 vaut "../c_multimedia/images/praxinoscope-1.png", ...
image2 vaut "../c_multimedia/images/praxinoscope-2.png", ...
image3 vaut "../c_multimedia/images/praxinoscope-3.png", ...
image4 vaut "../c_multimedia/images/praxinoscope-4.png", ...
image5 vaut "../c_multimedia/images/praxinoscope-5.png", ...
image6 vaut "../c_multimedia/images/praxinoscope-6.png", ...
image7 vaut "../c_multimedia/images/praxinoscope-7.png", ...
image8 vaut "../c_multimedia/images/praxinoscope-8.png", ...
image9 vaut "../c_multimedia/images/praxinoscope-9.png", ...
image10 vaut "../c_multimedia/images/praxinoscope-10.png", ...
image11 vaut "../c_multimedia/images/praxinoscope-11.png"
working :: drapeau <
- faux
principale :
début
// Formulaire :
ajoute xtoile & m1 & b1 & b2 & b3 & b4 & case dans form
ajoute sm1 dans m1
fais réagir b1 à "clic souris" pour bureau1
fais réagir b2 à "clic souris" pour bureau2
fais réagir b3 à "clic souris" pour bureau3
fais réagir b4 à "clic souris" pour bureau4
fais réagir form à "clic souris" pour fermer la fenêtre
fais réagir sm1 à "clic souris" pour fermer la fenêtre
// Elements sur la toile
projette image1 & écran
appelle nunux
appelle pluie
pour chaque couleurs, parcours création
appelle minuteur
tant que vrai, lis
temporise
ferme
bureau1 :
*b :: bouton
début
parcours change bureau avec bureau1, b
reviens
bureau2 :
*b :: bouton
début
parcours change bureau avec bureau2, b
reviens
bureau3 :
*b :: bouton
début
parcours change bureau avec bureau3, b
reviens
bureau4 :
*b :: bouton
début
parcours change bureau avec bureau4, b
reviens
change bureau :
*bureau :: bureau
*bouton :: bouton
début
si non(working), lis
working vaut vrai
// Modification de l'apparence des boutons :
texte@b1 vaut "${nom@bureau1}"
texte@b2 vaut "${nom@bureau2}"
texte@b3 vaut "${nom@bureau3}"
texte@b4 vaut "${nom@bureau4}"
texte@bouton vaut "[${nom@bureau}]"
si (valeur@case) == "vrai" , lis
pour chaque 100, lis
// X
si (rx@toile) != (x@bureau), lis
si (rx@toile) >
(x@bureau), rx@toile vaut rx@toile - 5
sinon si (rx@toile) <
(x@bureau), rx@toile vaut rx@toile + 5
ferme
// Y
si (ry@toile) != (y@bureau), lis
si (ry@toile) >
(y@bureau), ry@toile vaut ry@toile - 5
sinon si (ry@toile) <
(y@bureau), ry@toile vaut ry@toile + 5
ferme
attends 10 millisecondes
ferme
ferme
sinon lis
rx@toile vaut x@bureau
ry@toile vaut y@bureau
ferme
working vaut faux
ferme
reviens
fermer la fenêtre :
*f :: formulaire
début
termine
nunux :
tant que vrai, lis
tourne à droite image1 de 1
attends 0.01 seconde
ferme
pluie :
x :: nombre
y :: nombre
début
tant que vrai , lis
attends 0.01 secondes
x vaut hasard(500)
y vaut hasard(500)
appelle vague avec x, y
attends 0.15 secondes
appelle vague avec x, y
ferme
vague :
*x :: nombre
*y :: nombre
vague :: cercle, x vaut x, y vaut y, plein vaut "non", rayon vaut 1, taille vaut 2, couleur vaut "vert d'eau"
début
projette vague
pour chaque 50, lis
rayon@vague vaut joker
taille@vague vaut 1 + joker / 2
transparence@vague vaut 100 - joker * 2
attends 10 millisecondes
ferme
efface vague
annihile vague
reviens
création :
fleur :: point
yy :: nombre <
- 500
xx :: nombre <
- 500
début
mélange xx
mélange yy
déplace fleur vers 500 + xx et 500 + yy
couleur @ fleur vaut joker
taille @ fleur vaut 10
projette fleur
appelle bouge avec fleur
reviens
minuteur :
début
tant que vrai, lis
pour chaque 12, lis
trame@écran vaut joker
attends 0.1 secondes
ferme
ferme
bouge :
*fleur :: point
début
tant que vrai, lis
angle@fleur vaut hasard(360)
avance fleur de .5
attends 100 millisecondes
ferme
[/php]
ça fonctionnera avec la prochaine beta 1.99.4.