J'ai travaill� sur un programme qui faisait �a � mes d�buts en java en 1996.
L'astuce �tait d'avoir les objets graphiques dans une liste cha�n�e tri�e par Z-order
d�croissant (du premier plan � l'arri�re plan).
Lors d'un clic, pour s�lectionner le bon objet il fallait parcourir la liste du d�but
� la fin et d�terminer pour chaque �l�ment s'il �tait sous la souris.
Patrice
-----Original Message-----
From: Aurelien Mazurie <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Date: Thu, 24 Oct 2002 11:17:04 +0200
Subject: Une vieille �nigme (pour moi en tout cas)
Bonjour � tous,
Je programme depuis maintenant pr�s de 10 ans mais il y une chose,
utilis�e dans tous les OS ayant une GUI depuis la nuit des temps, que
je ne sais toujours pas faire (enfin, disons que j'ai trouv� un moyen
d�tourn� de le faire): c'est le fait de savoir quel objet affich� �
l'�cran (objets qui peuvent se recouvrir, partiellement ou totalement)
est sous le curseur de la souris (pour que, lorsque l'utilisateur
clique, l'on sache � quel objet envoyer le message).
A l'�poque o� j'avais programm� un jeu utilisant ce genre de fonction
j'avais r�solu le probl�me en cr�ant un �cran virtuel o�, d�s lors
qu'un objet �tait affich� dans l'�cran r�el, il laissait une emprunte
de pixel d'une couleur donn�e (ie. si une bo�te de dialogue �tait �
afficher, je dessinai dans l'�cran virtuel un rectangle au m�me
endroit, avec une couleur unique: par exemple la couleur 1 si c'�tait
l'objet n�1). Ensuite, � chaque clic de souris il me suffisait de lire
la couleur du pixel aux coordonn�es correspondantes dans l'�cran
virtuel, et je connaissait l'ID de l'objet � modifier en cons�quence.
Ca marchait tr�s bien pour un �cran de petite taille (320x200, le bon
vieux mode 13h...) et pour le nombre d'objets � g�rer (256 couleurs,
donc 255 objets + noir), mais d�j� � l'�poque je me demandait comment
faisait les OS comme Windows 3.1 pour faire la m�me chose.
Or j'ai aujourd'hui � faire quelque chose de similaire en Java: j'ai
plusieurs objets � l'�cran (dessin�s dans un BufferedImage), qui
peuvent se recouvrire mais que je veux pouvoir s�lectionner � la souris
sans passer par une d�tection de "l'objet le plus proche par sa
position par rapport � celle du curseur". En r�sum�, il faut que je
r�solve cette tr�s vieille �nigme pour moi et apprenne comment font les
OS de la plan�te pour r�gler ce probl�me...
J'ai trouv� une librairie �crite en Java qui fait ca, et qui sert �
afficher des donn�es g�ographiques (dans les exemples on a ainsi une
carte d'un pays, et la souris allume les diff�rentes r�gions
lorsqu'elle passe dessus); mais les sources sont tellement grosses que
je ne suis pas parvenu � trouver la m�thode utilis�e...
Quelqu'un sait-il comment on r�alise cet exploit quotidien ?
Aur�lien Mazurie
-- S'il n'y a pas de solution, il n'y a pas de probl�me --